diff --git a/BBjGridExWidget.bbj b/BBjGridExWidget.bbj index 33b51435..3e4d1fdc 100644 --- a/BBjGridExWidget.bbj +++ b/BBjGridExWidget.bbj @@ -208,14 +208,6 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf field protected BBjNumber newW! field protected BBjNumber newH! rem /** - rem * Constant value to define row click events - rem * - rem * @return BBjNumber - rem */ - method public static BBjNumber ON_GRID_ROW_CLICK() - methodret 5011 - methodend - rem /** rem * A Constant value to define row selection (selected/deselected) change events rem * rem * @return BBjNumber @@ -298,15 +290,6 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf methodret 5006 methodend rem /** - rem * Constant value to define A row has changed. - rem * This event corresponds to Full Row Editing only. - rem * - rem * @return BBjNumber - rem */ - method public static BBjNumber ON_GRID_ROW_VALUE_CHANGED() - methodret 5012 - methodend - rem /** rem * Constant value to define row editing stop event rem * rem * @return BBjNumber @@ -339,6 +322,31 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf methodret 5010 methodend rem /** + rem * Constant value to define row click events + rem * + rem * @return BBjNumber + rem */ + method public static BBjNumber ON_GRID_ROW_CLICK() + methodret 5011 + methodend + rem /** + rem * Constant value to define A row has changed. + rem * This event corresponds to Full Row Editing only. + rem * + rem * @return BBjNumber + rem */ + method public static BBjNumber ON_GRID_ROW_VALUE_CHANGED() + methodret 5012 + methodend + rem /** + rem * Constant value to define A filter changed event. + rem * + rem * @return BBjNumber + rem */ + method public static BBjNumber ON_GRID_FILTER_CHANGED() + methodret 5013 + methodend + rem /** rem * Alias for ON_GRID_STATE_CHANGE() rem * rem * @see ON_GRID_STATE_CHANGE() @@ -873,7 +881,6 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf if (f_init!) then rem @see https://bugzilla.basis.com/show_bug.cgi?id=33048 enableInternalSpecialKeysHandling! = stbl("!OPTIONS","HTMLVIEW_INTERNAL_TABS=TRUE") - html$ = #getTemplate() htmlview! = #getCanvas().addHtmlView(101,0,0,#getCanvas().getWidth(),#getCanvas().getHeight(),"",$0000$) htmlview!.setOpaque(0) @@ -1088,7 +1095,6 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf map! = ev!.getEventMap() type$ = str(map!.get("type")) detail$ = str(map!.get("detail")) - switch type$ case "gw.rowSelect" #onSelectRowChange(detail$, #ON_GRID_SELECT_ROW()) @@ -1138,6 +1144,9 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf case "gw.suggestion" #onSuggestionEvent(detail$) break + case "gw.filterChanged" + #onFilterChangedEvent() + break swend methodend rem /** @@ -2869,7 +2878,7 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf methodend rem /** rem * Sets the visibility of column(s) - rem * + rem * rem * @param BBjString columns! A comma separated list of column ids to hide / show rem * @param BBjNumber hidden! True to hide , false to show rem */ @@ -2878,22 +2887,24 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf it! = ids!.iterator() while it!.hasNext() next! = it!.next() + if(#hasColumn(next!)) #getColumn(next!).setHidden(hidden!) fi wend + script$="$wnd.gw_setColumnVisible('" + #getRootId() + "','" + columns! + "'," + str(hidden!.booleanValue()) +");" #getExecutor().execute(script$) - methodend + methodend rem /** rem * Sets the visibility of a column - rem * + rem * rem * @param GxColumn column! The column definition rem * @param BBjNumber hidden! True to hide , false to show rem */ method public void setColumnVisible(GxColumn column! , BBjNumber hidden!) #setColumnVisible(column!.getField(), hidden!) - methodend + methodend rem /** rem * Ensures the column is visible, scrolling the table if needed. rem * @@ -3799,7 +3810,7 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf rem * rem * @param BBjString detail$ The event detail as Json rem * @param BBjNumber type! The event type - rem * + rem * rem * @see GxSelectRowEvent rem */ method protected void onSelectRowChange(BBjString detail$, BBjNumber type!) @@ -3808,17 +3819,18 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf event! = new GxClientEventsRowSelection() event!.setSelectedRows(#getSelectedRows()) - rem report keypress for click events only if(type! = #ON_GRID_ROW_CLICK() OR type! = #ON_GRID_DOUBLE_CLICK()) parser! = new JsonParser() detailsAsJson! = parser!.parse(detail$).getAsJsonObject() keypress! = null() + if(detailsAsJson!.has("k") AND detailsAsJson!.get("k").isJsonNull() = BBjAPI.FALSE) then keypress! = #getClientJsonFactory().getKeypress(detailsAsJson!.get("k").getAsJsonObject()) fi + event!.setKey(keypress!) - fi + fi #fireEvent(type!,event!) methodend @@ -3853,7 +3865,6 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf parser! = new JsonParser() parsedCell! = parser!.parse(detail$).getAsJsonObject() cell! = #getClientJsonFactory().getCell(parsedCell!) - event! = new GxClientEventsCell() event!.setCell(cell!) event!.setOldValue(parsedCell!.get("o").getAsString(), err=*next) @@ -3923,5 +3934,13 @@ class public BBjGridExWidget extends BBjWidget implements GxColumnsManagerInterf #getExecutor().execute(script!) fi methodend + rem /** + rem * Fire a filter changed event + rem * + rem * @see ON_GRID_FILTER_CHANGED() + rem */ + method protected void onFilterChangedEvent() + #fireEvent(#ON_GRID_FILTER_CHANGED(),null()) + methodend classend diff --git a/client/dist/bbj-grid-widget.js b/client/dist/bbj-grid-widget.js index 67f465e3..89db82b9 100644 --- a/client/dist/bbj-grid-widget.js +++ b/client/dist/bbj-grid-widget.js @@ -372,9 +372,9 @@ exports.default = void 0; var _Symbol2 = _interopRequireDefault(__webpack_require__(9)); -var _getRawTag = _interopRequireDefault(__webpack_require__(67)); +var _getRawTag = _interopRequireDefault(__webpack_require__(68)); -var _objectToString = _interopRequireDefault(__webpack_require__(68)); +var _objectToString = _interopRequireDefault(__webpack_require__(69)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -486,56 +486,11 @@ module.exports = function (module) { "use strict"; -/** - * [Recursively parses a stringified JSON] - * @param {[type]} jsonString [stringified json to parse] - * @return {[type]} [normalized Javascript object] - */ - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function deepParseJson(jsonString) { - // if not stringified json rather a simple string value then JSON.parse will throw error - // otherwise continue recursion - if (typeof jsonString === 'string') { - try { - return deepParseJson(JSON.parse(jsonString)); - } catch (err) { - return jsonString; - } - } else if (Array.isArray(jsonString)) { - // if an array is received, map over the array and deepParse each value - return jsonString.map(function (val) { - return deepParseJson(val); - }); - } else if (_typeof(jsonString) === 'object' && jsonString !== null) { - // if an object is received then deepParse each element in the object - // typeof null returns 'object' too, so we have to eliminate that - return Object.keys(jsonString).reduce(function (obj, key) { - obj[key] = deepParseJson(jsonString[key]); - return obj; - }, {}); - } else { - // otherwise return whatever was received - return jsonString; - } -} - -module.exports = { - deepParseJson: deepParseJson -}; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); -exports.GW_EVENT_KEYPRESS = exports.GW_EVENT_RANGE_SELECTION_CHANGED = exports.GW_EVENT_GRID_STATE_CHANGE = exports.GW_EVENT_ROW_VALUE_CHANGED = exports.GW_EVENT_ROW_EDITING_STOPPED = exports.GW_EVENT_ROW_EDITING_STARTED = exports.GW_EVENT_CELL_VALUE_CHANGED = exports.GW_EVENT_CELL_EDITING_STOPPED = exports.GW_EVENT_CELL_EDITING_STARTED = exports.GW_EVENT_CELL_DOUBLE_CLICK = exports.GW_EVENT_CELL_CLICK = exports.GW_EVENT_ROW_DOUBLE_CLICK = exports.GW_EVENT_ROW_CLICK = exports.GW_EVENT_ROW_SELECT = void 0; +exports.GW_EVENT_FILTER_CHANGED = exports.GW_EVENT_KEYPRESS = exports.GW_EVENT_RANGE_SELECTION_CHANGED = exports.GW_EVENT_GRID_STATE_CHANGE = exports.GW_EVENT_ROW_VALUE_CHANGED = exports.GW_EVENT_ROW_EDITING_STOPPED = exports.GW_EVENT_ROW_EDITING_STARTED = exports.GW_EVENT_CELL_VALUE_CHANGED = exports.GW_EVENT_CELL_EDITING_STOPPED = exports.GW_EVENT_CELL_EDITING_STARTED = exports.GW_EVENT_CELL_DOUBLE_CLICK = exports.GW_EVENT_CELL_CLICK = exports.GW_EVENT_ROW_DOUBLE_CLICK = exports.GW_EVENT_ROW_CLICK = exports.GW_EVENT_ROW_SELECT = void 0; /* * This file is part of the BBjGridExWidget plugin. @@ -575,8 +530,56 @@ exports.GW_EVENT_GRID_STATE_CHANGE = GW_EVENT_GRID_STATE_CHANGE; var GW_EVENT_RANGE_SELECTION_CHANGED = 5009; // keyboard events exports.GW_EVENT_RANGE_SELECTION_CHANGED = GW_EVENT_RANGE_SELECTION_CHANGED; -var GW_EVENT_KEYPRESS = 5010; +var GW_EVENT_KEYPRESS = 5010; // filters + exports.GW_EVENT_KEYPRESS = GW_EVENT_KEYPRESS; +var GW_EVENT_FILTER_CHANGED = 5013; +exports.GW_EVENT_FILTER_CHANGED = GW_EVENT_FILTER_CHANGED; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * [Recursively parses a stringified JSON] + * @param {[type]} jsonString [stringified json to parse] + * @return {[type]} [normalized Javascript object] + */ + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function deepParseJson(jsonString) { + // if not stringified json rather a simple string value then JSON.parse will throw error + // otherwise continue recursion + if (typeof jsonString === 'string') { + try { + return deepParseJson(JSON.parse(jsonString)); + } catch (err) { + return jsonString; + } + } else if (Array.isArray(jsonString)) { + // if an array is received, map over the array and deepParse each value + return jsonString.map(function (val) { + return deepParseJson(val); + }); + } else if (_typeof(jsonString) === 'object' && jsonString !== null) { + // if an object is received then deepParse each element in the object + // typeof null returns 'object' too, so we have to eliminate that + return Object.keys(jsonString).reduce(function (obj, key) { + obj[key] = deepParseJson(jsonString[key]); + return obj; + }, {}); + } else { + // otherwise return whatever was received + return jsonString; + } +} + +module.exports = { + deepParseJson: deepParseJson +}; /***/ }), /* 8 */ @@ -841,7 +844,7 @@ var singleton = null; var singletonCounter = 0; var stylesInsertedAtTop = []; -var fixUrls = __webpack_require__(121); +var fixUrls = __webpack_require__(122); module.exports = function(list, options) { if (typeof DEBUG !== "undefined" && DEBUG) { @@ -1251,7 +1254,7 @@ var _expression = __webpack_require__(17); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -var _require = __webpack_require__(6), +var _require = __webpack_require__(7), deepParseJson = _require.deepParseJson; /** * Extend the column definitions @@ -2116,7 +2119,7 @@ var _cells = __webpack_require__(20); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -var _require = __webpack_require__(6), +var _require = __webpack_require__(7), deepParseJson = _require.deepParseJson; /** * The array contains references to created charts from BBj. @@ -2217,7 +2220,7 @@ var _utilities2 = __webpack_require__(1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -var _require = __webpack_require__(6), +var _require = __webpack_require__(7), deepParseJson = _require.deepParseJson; /** * Start cell editing @@ -2424,25 +2427,25 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _assignInWith = _interopRequireDefault(__webpack_require__(62)); +var _assignInWith = _interopRequireDefault(__webpack_require__(63)); -var _attempt = _interopRequireDefault(__webpack_require__(91)); +var _attempt = _interopRequireDefault(__webpack_require__(92)); -var _baseValues = _interopRequireDefault(__webpack_require__(94)); +var _baseValues = _interopRequireDefault(__webpack_require__(95)); -var _customDefaultsAssignIn = _interopRequireDefault(__webpack_require__(95)); +var _customDefaultsAssignIn = _interopRequireDefault(__webpack_require__(96)); -var _escapeStringChar = _interopRequireDefault(__webpack_require__(96)); +var _escapeStringChar = _interopRequireDefault(__webpack_require__(97)); var _isError = _interopRequireDefault(__webpack_require__(35)); var _isIterateeCall = _interopRequireDefault(__webpack_require__(29)); -var _keys = _interopRequireDefault(__webpack_require__(97)); +var _keys = _interopRequireDefault(__webpack_require__(98)); var _reInterpolate = _interopRequireDefault(__webpack_require__(38)); -var _templateSettings = _interopRequireDefault(__webpack_require__(100)); +var _templateSettings = _interopRequireDefault(__webpack_require__(101)); var _toString = _interopRequireDefault(__webpack_require__(39)); @@ -2711,7 +2714,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _getNative = _interopRequireDefault(__webpack_require__(65)); +var _getNative = _interopRequireDefault(__webpack_require__(66)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -2815,9 +2818,9 @@ exports.default = void 0; var _identity = _interopRequireDefault(__webpack_require__(27)); -var _overRest = _interopRequireDefault(__webpack_require__(74)); +var _overRest = _interopRequireDefault(__webpack_require__(75)); -var _setToString = _interopRequireDefault(__webpack_require__(75)); +var _setToString = _interopRequireDefault(__webpack_require__(76)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -3063,17 +3066,17 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _baseTimes = _interopRequireDefault(__webpack_require__(80)); +var _baseTimes = _interopRequireDefault(__webpack_require__(81)); -var _isArguments = _interopRequireDefault(__webpack_require__(81)); +var _isArguments = _interopRequireDefault(__webpack_require__(82)); var _isArray = _interopRequireDefault(__webpack_require__(33)); -var _isBuffer = _interopRequireDefault(__webpack_require__(83)); +var _isBuffer = _interopRequireDefault(__webpack_require__(84)); var _isIndex = _interopRequireDefault(__webpack_require__(31)); -var _isTypedArray = _interopRequireDefault(__webpack_require__(85)); +var _isTypedArray = _interopRequireDefault(__webpack_require__(86)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -3202,7 +3205,7 @@ var _baseGetTag = _interopRequireDefault(__webpack_require__(3)); var _isObjectLike = _interopRequireDefault(__webpack_require__(4)); -var _isPlainObject = _interopRequireDefault(__webpack_require__(92)); +var _isPlainObject = _interopRequireDefault(__webpack_require__(93)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -3334,7 +3337,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _baseToString = _interopRequireDefault(__webpack_require__(104)); +var _baseToString = _interopRequireDefault(__webpack_require__(105)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -3425,11 +3428,11 @@ Object.keys(_api).forEach(function (key) { * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -__webpack_require__(119); +__webpack_require__(120); -__webpack_require__(122); +__webpack_require__(123); -__webpack_require__(124); +__webpack_require__(125); /***/ }), /* 42 */ @@ -23806,7 +23809,7 @@ Object.keys(_cells).forEach(function (key) { }); }); -var _state = __webpack_require__(111); +var _state = __webpack_require__(112); Object.keys(_state).forEach(function (key) { if (key === "default" || key === "__esModule") return; @@ -23819,7 +23822,7 @@ Object.keys(_state).forEach(function (key) { }); }); -var _toolpanel = __webpack_require__(112); +var _toolpanel = __webpack_require__(113); Object.keys(_toolpanel).forEach(function (key) { if (key === "default" || key === "__esModule") return; @@ -23832,7 +23835,7 @@ Object.keys(_toolpanel).forEach(function (key) { }); }); -var _statusbar = __webpack_require__(113); +var _statusbar = __webpack_require__(114); Object.keys(_statusbar).forEach(function (key) { if (key === "default" || key === "__esModule") return; @@ -23845,7 +23848,7 @@ Object.keys(_statusbar).forEach(function (key) { }); }); -var _overlays = __webpack_require__(114); +var _overlays = __webpack_require__(115); Object.keys(_overlays).forEach(function (key) { if (key === "default" || key === "__esModule") return; @@ -23858,7 +23861,7 @@ Object.keys(_overlays).forEach(function (key) { }); }); -var _context = __webpack_require__(115); +var _context = __webpack_require__(116); Object.keys(_context).forEach(function (key) { if (key === "default" || key === "__esModule") return; @@ -23884,7 +23887,7 @@ Object.keys(_charts).forEach(function (key) { }); }); -var _jss = __webpack_require__(116); +var _jss = __webpack_require__(117); Object.keys(_jss).forEach(function (key) { if (key === "default" || key === "__esModule") return; @@ -23936,9 +23939,9 @@ var _events = __webpack_require__(56); var _template = _interopRequireDefault(__webpack_require__(21)); -var _HTMLTooltip = _interopRequireDefault(__webpack_require__(108)); +var _HTMLTooltip = _interopRequireDefault(__webpack_require__(109)); -var _SuggestionEditor = _interopRequireDefault(__webpack_require__(109)); +var _SuggestionEditor = _interopRequireDefault(__webpack_require__(110)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -23948,7 +23951,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -var _require = __webpack_require__(6), +var _require = __webpack_require__(7), deepParseJson = _require.deepParseJson; function gw_init(options, license, data) { @@ -24016,6 +24019,9 @@ function gw_parseOptions(options) { onGridReady: function onGridReady(e) { (0, _events.gw_onReadyEvent)(id, e); }, + onFilterChanged: function onFilterChanged(e) { + (0, _events.gw_onFilterChanged)(id, e); + }, getRowNodeId: function getRowNodeId(data) { return (0, _rows.gw_getRowNodeId)(id, data); }, @@ -24198,6 +24204,12 @@ Object.defineProperty(exports, "gw_debounce", { return _utilities.gw_debounce; } }); +Object.defineProperty(exports, "gw_onFilterChanged", { + enumerable: true, + get: function get() { + return _filters.gw_onFilterChanged; + } +}); var _selections = __webpack_require__(57); @@ -24207,6 +24219,8 @@ var _ready = __webpack_require__(59); var _utilities = __webpack_require__(1); +var _filters = __webpack_require__(62); + /***/ }), /* 57 */ /***/ (function(module, exports, __webpack_require__) { @@ -24227,7 +24241,7 @@ var _utilities = __webpack_require__(1); var _utilities2 = __webpack_require__(0); -var _constants = __webpack_require__(7); +var _constants = __webpack_require__(6); /* * This file is part of the BBjGridExWidget plugin. @@ -24368,7 +24382,7 @@ var _utilities = __webpack_require__(1); var _utilities2 = __webpack_require__(0); -var _constants = __webpack_require__(7); +var _constants = __webpack_require__(6); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } @@ -24549,7 +24563,7 @@ var _utilities = __webpack_require__(1); var _utilities2 = __webpack_require__(0); -var _constants = __webpack_require__(7); +var _constants = __webpack_require__(6); /* * This file is part of the BBjGridExWidget plugin. @@ -24592,7 +24606,7 @@ exports.gw_onKeydown = gw_onKeydown; var _utilities = __webpack_require__(1); -var _constants = __webpack_require__(7); +var _constants = __webpack_require__(6); var _utilities2 = __webpack_require__(0); @@ -24630,16 +24644,57 @@ function gw_onKeydown(id, keydownEvent) { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.gw_onFilterChanged = gw_onFilterChanged; + +var _utilities = __webpack_require__(1); + +var _constants = __webpack_require__(6); + +/* + * This file is part of the BBjGridExWidget plugin. + * (c) Basis Europe + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * An handler for the grid `filterChanged` event + * + * @param {String} the grid's id + * @param {Object} e The event's payload + * + * @listens agGrid.filterChanged + * @fires gw.filterChanged + */ +function gw_onFilterChanged(id, e) { + var context = e.api.gridOptionsWrapper.gridOptions.context; + (0, _utilities.gw_sendEvent)(context, { + type: 'gw.filterChanged', + detail: {} + }, _constants.GW_EVENT_FILTER_CHANGED); +} + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; -var _copyObject = _interopRequireDefault(__webpack_require__(63)); +var _copyObject = _interopRequireDefault(__webpack_require__(64)); -var _createAssigner = _interopRequireDefault(__webpack_require__(73)); +var _createAssigner = _interopRequireDefault(__webpack_require__(74)); -var _keysIn = _interopRequireDefault(__webpack_require__(79)); +var _keysIn = _interopRequireDefault(__webpack_require__(80)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24679,7 +24734,7 @@ var _default = assignInWith; exports.default = _default; /***/ }), -/* 63 */ +/* 64 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24690,7 +24745,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _assignValue = _interopRequireDefault(__webpack_require__(64)); +var _assignValue = _interopRequireDefault(__webpack_require__(65)); var _baseAssignValue = _interopRequireDefault(__webpack_require__(22)); @@ -24734,7 +24789,7 @@ var _default = copyObject; exports.default = _default; /***/ }), -/* 64 */ +/* 65 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24779,7 +24834,7 @@ var _default = assignValue; exports.default = _default; /***/ }), -/* 65 */ +/* 66 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24790,9 +24845,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _baseIsNative = _interopRequireDefault(__webpack_require__(66)); +var _baseIsNative = _interopRequireDefault(__webpack_require__(67)); -var _getValue = _interopRequireDefault(__webpack_require__(72)); +var _getValue = _interopRequireDefault(__webpack_require__(73)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24813,7 +24868,7 @@ var _default = getNative; exports.default = _default; /***/ }), -/* 66 */ +/* 67 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24826,11 +24881,11 @@ exports.default = void 0; var _isFunction = _interopRequireDefault(__webpack_require__(24)); -var _isMasked = _interopRequireDefault(__webpack_require__(69)); +var _isMasked = _interopRequireDefault(__webpack_require__(70)); var _isObject = _interopRequireDefault(__webpack_require__(8)); -var _toSource = _interopRequireDefault(__webpack_require__(71)); +var _toSource = _interopRequireDefault(__webpack_require__(72)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -24877,7 +24932,7 @@ var _default = baseIsNative; exports.default = _default; /***/ }), -/* 67 */ +/* 68 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24941,7 +24996,7 @@ var _default = getRawTag; exports.default = _default; /***/ }), -/* 68 */ +/* 69 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24977,7 +25032,7 @@ var _default = objectToString; exports.default = _default; /***/ }), -/* 69 */ +/* 70 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -24988,7 +25043,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _coreJsData = _interopRequireDefault(__webpack_require__(70)); +var _coreJsData = _interopRequireDefault(__webpack_require__(71)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -25014,7 +25069,7 @@ var _default = isMasked; exports.default = _default; /***/ }), -/* 70 */ +/* 71 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25035,7 +25090,7 @@ var _default = coreJsData; exports.default = _default; /***/ }), -/* 71 */ +/* 72 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25077,7 +25132,7 @@ var _default = toSource; exports.default = _default; /***/ }), -/* 72 */ +/* 73 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25104,7 +25159,7 @@ var _default = getValue; exports.default = _default; /***/ }), -/* 73 */ +/* 74 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25159,7 +25214,7 @@ var _default = createAssigner; exports.default = _default; /***/ }), -/* 74 */ +/* 75 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25214,7 +25269,7 @@ var _default = overRest; exports.default = _default; /***/ }), -/* 75 */ +/* 76 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25225,9 +25280,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _baseSetToString = _interopRequireDefault(__webpack_require__(76)); +var _baseSetToString = _interopRequireDefault(__webpack_require__(77)); -var _shortOut = _interopRequireDefault(__webpack_require__(78)); +var _shortOut = _interopRequireDefault(__webpack_require__(79)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -25244,7 +25299,7 @@ var _default = setToString; exports.default = _default; /***/ }), -/* 76 */ +/* 77 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25255,7 +25310,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _constant = _interopRequireDefault(__webpack_require__(77)); +var _constant = _interopRequireDefault(__webpack_require__(78)); var _defineProperty = _interopRequireDefault(__webpack_require__(23)); @@ -25283,7 +25338,7 @@ var _default = baseSetToString; exports.default = _default; /***/ }), -/* 77 */ +/* 78 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25323,7 +25378,7 @@ var _default = constant; exports.default = _default; /***/ }), -/* 78 */ +/* 79 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25374,7 +25429,7 @@ var _default = shortOut; exports.default = _default; /***/ }), -/* 79 */ +/* 80 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25387,7 +25442,7 @@ exports.default = void 0; var _arrayLikeKeys = _interopRequireDefault(__webpack_require__(32)); -var _baseKeysIn = _interopRequireDefault(__webpack_require__(89)); +var _baseKeysIn = _interopRequireDefault(__webpack_require__(90)); var _isArrayLike = _interopRequireDefault(__webpack_require__(12)); @@ -25424,7 +25479,7 @@ var _default = keysIn; exports.default = _default; /***/ }), -/* 80 */ +/* 81 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25459,7 +25514,7 @@ var _default = baseTimes; exports.default = _default; /***/ }), -/* 81 */ +/* 82 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25470,7 +25525,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _baseIsArguments = _interopRequireDefault(__webpack_require__(82)); +var _baseIsArguments = _interopRequireDefault(__webpack_require__(83)); var _isObjectLike = _interopRequireDefault(__webpack_require__(4)); @@ -25512,7 +25567,7 @@ var _default = isArguments; exports.default = _default; /***/ }), -/* 82 */ +/* 83 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25547,7 +25602,7 @@ var _default = baseIsArguments; exports.default = _default; /***/ }), -/* 83 */ +/* 84 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25560,7 +25615,7 @@ exports.default = void 0; var _root = _interopRequireDefault(__webpack_require__(10)); -var _stubFalse = _interopRequireDefault(__webpack_require__(84)); +var _stubFalse = _interopRequireDefault(__webpack_require__(85)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -25604,7 +25659,7 @@ exports.default = _default; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5)(module))) /***/ }), -/* 84 */ +/* 85 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25636,7 +25691,7 @@ var _default = stubFalse; exports.default = _default; /***/ }), -/* 85 */ +/* 86 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25647,11 +25702,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _baseIsTypedArray = _interopRequireDefault(__webpack_require__(86)); +var _baseIsTypedArray = _interopRequireDefault(__webpack_require__(87)); -var _baseUnary = _interopRequireDefault(__webpack_require__(87)); +var _baseUnary = _interopRequireDefault(__webpack_require__(88)); -var _nodeUtil = _interopRequireDefault(__webpack_require__(88)); +var _nodeUtil = _interopRequireDefault(__webpack_require__(89)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -25680,7 +25735,7 @@ var _default = isTypedArray; exports.default = _default; /***/ }), -/* 86 */ +/* 87 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25745,7 +25800,7 @@ var _default = baseIsTypedArray; exports.default = _default; /***/ }), -/* 87 */ +/* 88 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25773,7 +25828,7 @@ var _default = baseUnary; exports.default = _default; /***/ }), -/* 88 */ +/* 89 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25822,7 +25877,7 @@ exports.default = _default; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5)(module))) /***/ }), -/* 89 */ +/* 90 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25837,7 +25892,7 @@ var _isObject = _interopRequireDefault(__webpack_require__(8)); var _isPrototype = _interopRequireDefault(__webpack_require__(34)); -var _nativeKeysIn = _interopRequireDefault(__webpack_require__(90)); +var _nativeKeysIn = _interopRequireDefault(__webpack_require__(91)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -25875,7 +25930,7 @@ var _default = baseKeysIn; exports.default = _default; /***/ }), -/* 90 */ +/* 91 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25911,7 +25966,7 @@ var _default = nativeKeysIn; exports.default = _default; /***/ }), -/* 91 */ +/* 92 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25963,7 +26018,7 @@ var _default = attempt; exports.default = _default; /***/ }), -/* 92 */ +/* 93 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -25976,7 +26031,7 @@ exports.default = void 0; var _baseGetTag = _interopRequireDefault(__webpack_require__(3)); -var _getPrototype = _interopRequireDefault(__webpack_require__(93)); +var _getPrototype = _interopRequireDefault(__webpack_require__(94)); var _isObjectLike = _interopRequireDefault(__webpack_require__(4)); @@ -26045,7 +26100,7 @@ var _default = isPlainObject; exports.default = _default; /***/ }), -/* 93 */ +/* 94 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26066,7 +26121,7 @@ var _default = getPrototype; exports.default = _default; /***/ }), -/* 94 */ +/* 95 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26101,7 +26156,7 @@ var _default = baseValues; exports.default = _default; /***/ }), -/* 95 */ +/* 96 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26146,7 +26201,7 @@ var _default = customDefaultsAssignIn; exports.default = _default; /***/ }), -/* 96 */ +/* 97 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26182,7 +26237,7 @@ var _default = escapeStringChar; exports.default = _default; /***/ }), -/* 97 */ +/* 98 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26195,7 +26250,7 @@ exports.default = void 0; var _arrayLikeKeys = _interopRequireDefault(__webpack_require__(32)); -var _baseKeys = _interopRequireDefault(__webpack_require__(98)); +var _baseKeys = _interopRequireDefault(__webpack_require__(99)); var _isArrayLike = _interopRequireDefault(__webpack_require__(12)); @@ -26237,7 +26292,7 @@ var _default = keys; exports.default = _default; /***/ }), -/* 98 */ +/* 99 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26250,7 +26305,7 @@ exports.default = void 0; var _isPrototype = _interopRequireDefault(__webpack_require__(34)); -var _nativeKeys = _interopRequireDefault(__webpack_require__(99)); +var _nativeKeys = _interopRequireDefault(__webpack_require__(100)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -26287,7 +26342,7 @@ var _default = baseKeys; exports.default = _default; /***/ }), -/* 99 */ +/* 100 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26308,7 +26363,7 @@ var _default = nativeKeys; exports.default = _default; /***/ }), -/* 100 */ +/* 101 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26319,11 +26374,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _escape = _interopRequireDefault(__webpack_require__(101)); +var _escape = _interopRequireDefault(__webpack_require__(102)); -var _reEscape = _interopRequireDefault(__webpack_require__(106)); +var _reEscape = _interopRequireDefault(__webpack_require__(107)); -var _reEvaluate = _interopRequireDefault(__webpack_require__(107)); +var _reEvaluate = _interopRequireDefault(__webpack_require__(108)); var _reInterpolate = _interopRequireDefault(__webpack_require__(38)); @@ -26393,7 +26448,7 @@ var _default = templateSettings; exports.default = _default; /***/ }), -/* 101 */ +/* 102 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26404,7 +26459,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _escapeHtmlChar = _interopRequireDefault(__webpack_require__(102)); +var _escapeHtmlChar = _interopRequireDefault(__webpack_require__(103)); var _toString = _interopRequireDefault(__webpack_require__(39)); @@ -26451,7 +26506,7 @@ var _default = escape; exports.default = _default; /***/ }), -/* 102 */ +/* 103 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26462,7 +26517,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _basePropertyOf = _interopRequireDefault(__webpack_require__(103)); +var _basePropertyOf = _interopRequireDefault(__webpack_require__(104)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -26487,7 +26542,7 @@ var _default = escapeHtmlChar; exports.default = _default; /***/ }), -/* 103 */ +/* 104 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26515,7 +26570,7 @@ var _default = basePropertyOf; exports.default = _default; /***/ }), -/* 104 */ +/* 105 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26532,7 +26587,7 @@ var _arrayMap = _interopRequireDefault(__webpack_require__(37)); var _isArray = _interopRequireDefault(__webpack_require__(33)); -var _isSymbol = _interopRequireDefault(__webpack_require__(105)); +var _isSymbol = _interopRequireDefault(__webpack_require__(106)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -26574,7 +26629,7 @@ var _default = baseToString; exports.default = _default; /***/ }), -/* 105 */ +/* 106 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26621,7 +26676,7 @@ var _default = isSymbol; exports.default = _default; /***/ }), -/* 106 */ +/* 107 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26638,7 +26693,7 @@ var _default = reEscape; exports.default = _default; /***/ }), -/* 107 */ +/* 108 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26655,7 +26710,7 @@ var _default = reEvaluate; exports.default = _default; /***/ }), -/* 108 */ +/* 109 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26746,7 +26801,7 @@ var _default = HTMLTooltip; exports.default = _default; /***/ }), -/* 109 */ +/* 110 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -26757,7 +26812,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = void 0; -var _autocompleter = _interopRequireDefault(__webpack_require__(110)); +var _autocompleter = _interopRequireDefault(__webpack_require__(111)); var _template = _interopRequireDefault(__webpack_require__(21)); @@ -27131,7 +27186,7 @@ var _default = SuggestionEditor; exports.default = _default; /***/ }), -/* 110 */ +/* 111 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27653,7 +27708,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }); /***/ }), -/* 111 */ +/* 112 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27707,7 +27762,7 @@ function gw_getState(id) { } /***/ }), -/* 112 */ +/* 113 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27747,7 +27802,7 @@ function gw_setFunctionsReadOnly(id, readonly) { } /***/ }), -/* 113 */ +/* 114 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27772,7 +27827,7 @@ function gw_setStatusbarComponentVisibility(id, key, visibility) { } /***/ }), -/* 114 */ +/* 115 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27825,7 +27880,7 @@ function gw_hideOverlay(id) { } /***/ }), -/* 115 */ +/* 116 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27870,7 +27925,7 @@ function gw_updateContext(id, context) { } /***/ }), -/* 116 */ +/* 117 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -27882,7 +27937,7 @@ Object.defineProperty(exports, "__esModule", { exports.gw_setStyle = gw_setStyle; exports.gw_removeStyle = gw_removeStyle; -__webpack_require__(117); +__webpack_require__(118); var _utilities = __webpack_require__(0); @@ -27919,14 +27974,14 @@ function gw_removeStyle(selector) { } /***/ }), -/* 117 */ +/* 118 */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(global) {module.exports = global["jss"] = __webpack_require__(118); +/* WEBPACK VAR INJECTION */(function(global) {module.exports = global["jss"] = __webpack_require__(119); /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(2))) /***/ }), -/* 118 */ +/* 119 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -28256,11 +28311,11 @@ var jss = function () { true && module.exports && (module.exports = jss); // CommonJS support /***/ }), -/* 119 */ +/* 120 */ /***/ (function(module, exports, __webpack_require__) { -var content = __webpack_require__(120); +var content = __webpack_require__(121); if(typeof content === 'string') content = [[module.i, content, '']]; @@ -28283,13 +28338,13 @@ if(content.locals) module.exports = content.locals; if(false) {} /***/ }), -/* 120 */ +/* 121 */ /***/ (function(module, exports) { module.exports = ".flatpickr-calendar {\n background: transparent;\n opacity: 0;\n display: none;\n text-align: center;\n visibility: hidden;\n padding: 0;\n -webkit-animation: none;\n animation: none;\n direction: ltr;\n border: 0;\n font-size: 14px;\n line-height: 24px;\n border-radius: 5px;\n position: absolute;\n width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n background: #fff;\n -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n}\n.flatpickr-calendar.open,\n.flatpickr-calendar.inline {\n opacity: 1;\n max-height: 640px;\n visibility: visible;\n}\n.flatpickr-calendar.open {\n display: inline-block;\n z-index: 99999;\n}\n.flatpickr-calendar.animate.open {\n -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n}\n.flatpickr-calendar.inline {\n display: block;\n position: relative;\n top: 2px;\n}\n.flatpickr-calendar.static {\n position: absolute;\n top: calc(100% + 2px);\n}\n.flatpickr-calendar.static.open {\n z-index: 999;\n display: block;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\n -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-calendar .hasWeeks .dayContainer,\n.flatpickr-calendar .hasTime .dayContainer {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.flatpickr-calendar .hasWeeks .dayContainer {\n border-left: 0;\n}\n.flatpickr-calendar.hasTime .flatpickr-time {\n height: 40px;\n border-top: 1px solid #e6e6e6;\n}\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\n height: auto;\n}\n.flatpickr-calendar:before,\n.flatpickr-calendar:after {\n position: absolute;\n display: block;\n pointer-events: none;\n border: solid transparent;\n content: '';\n height: 0;\n width: 0;\n left: 22px;\n}\n.flatpickr-calendar.rightMost:before,\n.flatpickr-calendar.arrowRight:before,\n.flatpickr-calendar.rightMost:after,\n.flatpickr-calendar.arrowRight:after {\n left: auto;\n right: 22px;\n}\n.flatpickr-calendar.arrowCenter:before,\n.flatpickr-calendar.arrowCenter:after {\n left: 50%;\n right: 50%;\n}\n.flatpickr-calendar:before {\n border-width: 5px;\n margin: 0 -5px;\n}\n.flatpickr-calendar:after {\n border-width: 4px;\n margin: 0 -4px;\n}\n.flatpickr-calendar.arrowTop:before,\n.flatpickr-calendar.arrowTop:after {\n bottom: 100%;\n}\n.flatpickr-calendar.arrowTop:before {\n border-bottom-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowTop:after {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowBottom:before,\n.flatpickr-calendar.arrowBottom:after {\n top: 100%;\n}\n.flatpickr-calendar.arrowBottom:before {\n border-top-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowBottom:after {\n border-top-color: #fff;\n}\n.flatpickr-calendar:focus {\n outline: 0;\n}\n.flatpickr-wrapper {\n position: relative;\n display: inline-block;\n}\n.flatpickr-months {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-months .flatpickr-month {\n background: transparent;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n height: 34px;\n line-height: 1;\n text-align: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.flatpickr-months .flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month {\n text-decoration: none;\n cursor: pointer;\n position: absolute;\n top: 0;\n height: 34px;\n padding: 10px;\n z-index: 3;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\n display: none;\n}\n.flatpickr-months .flatpickr-prev-month i,\n.flatpickr-months .flatpickr-next-month i {\n position: relative;\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n left: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n right: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month:hover,\n.flatpickr-months .flatpickr-next-month:hover {\n color: #959ea9;\n}\n.flatpickr-months .flatpickr-prev-month:hover svg,\n.flatpickr-months .flatpickr-next-month:hover svg {\n fill: #f64747;\n}\n.flatpickr-months .flatpickr-prev-month svg,\n.flatpickr-months .flatpickr-next-month svg {\n width: 14px;\n height: 14px;\n}\n.flatpickr-months .flatpickr-prev-month svg path,\n.flatpickr-months .flatpickr-next-month svg path {\n -webkit-transition: fill 0.1s;\n transition: fill 0.1s;\n fill: inherit;\n}\n.numInputWrapper {\n position: relative;\n height: auto;\n}\n.numInputWrapper input,\n.numInputWrapper span {\n display: inline-block;\n}\n.numInputWrapper input {\n width: 100%;\n}\n.numInputWrapper input::-ms-clear {\n display: none;\n}\n.numInputWrapper input::-webkit-outer-spin-button,\n.numInputWrapper input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.numInputWrapper span {\n position: absolute;\n right: 0;\n width: 14px;\n padding: 0 4px 0 2px;\n height: 50%;\n line-height: 50%;\n opacity: 0;\n cursor: pointer;\n border: 1px solid rgba(57,57,57,0.15);\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.numInputWrapper span:hover {\n background: rgba(0,0,0,0.1);\n}\n.numInputWrapper span:active {\n background: rgba(0,0,0,0.2);\n}\n.numInputWrapper span:after {\n display: block;\n content: \"\";\n position: absolute;\n}\n.numInputWrapper span.arrowUp {\n top: 0;\n border-bottom: 0;\n}\n.numInputWrapper span.arrowUp:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 4px solid rgba(57,57,57,0.6);\n top: 26%;\n}\n.numInputWrapper span.arrowDown {\n top: 50%;\n}\n.numInputWrapper span.arrowDown:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid rgba(57,57,57,0.6);\n top: 40%;\n}\n.numInputWrapper span svg {\n width: inherit;\n height: auto;\n}\n.numInputWrapper span svg path {\n fill: rgba(0,0,0,0.5);\n}\n.numInputWrapper:hover {\n background: rgba(0,0,0,0.05);\n}\n.numInputWrapper:hover span {\n opacity: 1;\n}\n.flatpickr-current-month {\n font-size: 135%;\n line-height: inherit;\n font-weight: 300;\n color: inherit;\n position: absolute;\n width: 75%;\n left: 12.5%;\n padding: 7.48px 0 0 0;\n line-height: 1;\n height: 34px;\n display: inline-block;\n text-align: center;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n}\n.flatpickr-current-month span.cur-month {\n font-family: inherit;\n font-weight: 700;\n color: inherit;\n display: inline-block;\n margin-left: 0.5ch;\n padding: 0;\n}\n.flatpickr-current-month span.cur-month:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .numInputWrapper {\n width: 6ch;\n width: 7ch\\0;\n display: inline-block;\n}\n.flatpickr-current-month .numInputWrapper span.arrowUp:after {\n border-bottom-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month .numInputWrapper span.arrowDown:after {\n border-top-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month input.cur-year {\n background: transparent;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: inherit;\n cursor: text;\n padding: 0 0 0 0.5ch;\n margin: 0;\n display: inline-block;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n line-height: inherit;\n height: auto;\n border: 0;\n border-radius: 0;\n vertical-align: initial;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-current-month input.cur-year:focus {\n outline: 0;\n}\n.flatpickr-current-month input.cur-year[disabled],\n.flatpickr-current-month input.cur-year[disabled]:hover {\n font-size: 100%;\n color: rgba(0,0,0,0.5);\n background: transparent;\n pointer-events: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months {\n appearance: menulist;\n background: transparent;\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n color: inherit;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n height: auto;\n line-height: inherit;\n margin: -1px 0 0 0;\n outline: none;\n padding: 0 0 0 0.5ch;\n position: relative;\n vertical-align: initial;\n -webkit-box-sizing: border-box;\n -webkit-appearance: menulist;\n -moz-appearance: menulist;\n width: auto;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:focus,\n.flatpickr-current-month .flatpickr-monthDropdown-months:active {\n outline: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\n background-color: transparent;\n outline: none;\n padding: 0;\n}\n.flatpickr-weekdays {\n background: transparent;\n text-align: center;\n overflow: hidden;\n width: 100%;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n -ms-flex-align: center;\n align-items: center;\n height: 28px;\n}\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\nspan.flatpickr-weekday {\n cursor: default;\n font-size: 90%;\n background: transparent;\n color: rgba(0,0,0,0.54);\n line-height: 1;\n margin: 0;\n text-align: center;\n display: block;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n font-weight: bolder;\n}\n.dayContainer,\n.flatpickr-weeks {\n padding: 1px 0 0 0;\n}\n.flatpickr-days {\n position: relative;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: start;\n -webkit-align-items: flex-start;\n -ms-flex-align: start;\n align-items: flex-start;\n width: 307.875px;\n}\n.flatpickr-days:focus {\n outline: 0;\n}\n.dayContainer {\n padding: 0;\n outline: 0;\n text-align: left;\n width: 307.875px;\n min-width: 307.875px;\n max-width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n display: -ms-flexbox;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n -ms-flex-pack: justify;\n -webkit-justify-content: space-around;\n justify-content: space-around;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n opacity: 1;\n}\n.dayContainer + .dayContainer {\n -webkit-box-shadow: -1px 0 0 #e6e6e6;\n box-shadow: -1px 0 0 #e6e6e6;\n}\n.flatpickr-day {\n background: none;\n border: 1px solid transparent;\n border-radius: 150px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #393939;\n cursor: pointer;\n font-weight: 400;\n width: 14.2857143%;\n -webkit-flex-basis: 14.2857143%;\n -ms-flex-preferred-size: 14.2857143%;\n flex-basis: 14.2857143%;\n max-width: 39px;\n height: 39px;\n line-height: 39px;\n margin: 0;\n display: inline-block;\n position: relative;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n -ms-flex-pack: center;\n justify-content: center;\n text-align: center;\n}\n.flatpickr-day.inRange,\n.flatpickr-day.prevMonthDay.inRange,\n.flatpickr-day.nextMonthDay.inRange,\n.flatpickr-day.today.inRange,\n.flatpickr-day.prevMonthDay.today.inRange,\n.flatpickr-day.nextMonthDay.today.inRange,\n.flatpickr-day:hover,\n.flatpickr-day.prevMonthDay:hover,\n.flatpickr-day.nextMonthDay:hover,\n.flatpickr-day:focus,\n.flatpickr-day.prevMonthDay:focus,\n.flatpickr-day.nextMonthDay:focus {\n cursor: pointer;\n outline: 0;\n background: #e6e6e6;\n border-color: #e6e6e6;\n}\n.flatpickr-day.today {\n border-color: #959ea9;\n}\n.flatpickr-day.today:hover,\n.flatpickr-day.today:focus {\n border-color: #959ea9;\n background: #959ea9;\n color: #fff;\n}\n.flatpickr-day.selected,\n.flatpickr-day.startRange,\n.flatpickr-day.endRange,\n.flatpickr-day.selected.inRange,\n.flatpickr-day.startRange.inRange,\n.flatpickr-day.endRange.inRange,\n.flatpickr-day.selected:focus,\n.flatpickr-day.startRange:focus,\n.flatpickr-day.endRange:focus,\n.flatpickr-day.selected:hover,\n.flatpickr-day.startRange:hover,\n.flatpickr-day.endRange:hover,\n.flatpickr-day.selected.prevMonthDay,\n.flatpickr-day.startRange.prevMonthDay,\n.flatpickr-day.endRange.prevMonthDay,\n.flatpickr-day.selected.nextMonthDay,\n.flatpickr-day.startRange.nextMonthDay,\n.flatpickr-day.endRange.nextMonthDay {\n background: #569ff7;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: #fff;\n border-color: #569ff7;\n}\n.flatpickr-day.selected.startRange,\n.flatpickr-day.startRange.startRange,\n.flatpickr-day.endRange.startRange {\n border-radius: 50px 0 0 50px;\n}\n.flatpickr-day.selected.endRange,\n.flatpickr-day.startRange.endRange,\n.flatpickr-day.endRange.endRange {\n border-radius: 0 50px 50px 0;\n}\n.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {\n -webkit-box-shadow: -10px 0 0 #569ff7;\n box-shadow: -10px 0 0 #569ff7;\n}\n.flatpickr-day.selected.startRange.endRange,\n.flatpickr-day.startRange.startRange.endRange,\n.flatpickr-day.endRange.startRange.endRange {\n border-radius: 50px;\n}\n.flatpickr-day.inRange {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover,\n.flatpickr-day.prevMonthDay,\n.flatpickr-day.nextMonthDay,\n.flatpickr-day.notAllowed,\n.flatpickr-day.notAllowed.prevMonthDay,\n.flatpickr-day.notAllowed.nextMonthDay {\n color: rgba(57,57,57,0.3);\n background: transparent;\n border-color: transparent;\n cursor: default;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover {\n cursor: not-allowed;\n color: rgba(57,57,57,0.1);\n}\n.flatpickr-day.week.selected {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n}\n.flatpickr-day.hidden {\n visibility: hidden;\n}\n.rangeMode .flatpickr-day {\n margin-top: 1px;\n}\n.flatpickr-weekwrapper {\n float: left;\n}\n.flatpickr-weekwrapper .flatpickr-weeks {\n padding: 0 12px;\n -webkit-box-shadow: 1px 0 0 #e6e6e6;\n box-shadow: 1px 0 0 #e6e6e6;\n}\n.flatpickr-weekwrapper .flatpickr-weekday {\n float: none;\n width: 100%;\n line-height: 28px;\n}\n.flatpickr-weekwrapper span.flatpickr-day,\n.flatpickr-weekwrapper span.flatpickr-day:hover {\n display: block;\n width: 100%;\n max-width: none;\n color: rgba(57,57,57,0.3);\n background: transparent;\n cursor: default;\n border: none;\n}\n.flatpickr-innerContainer {\n display: block;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.flatpickr-rContainer {\n display: inline-block;\n padding: 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.flatpickr-time {\n text-align: center;\n outline: 0;\n display: block;\n height: 0;\n line-height: 40px;\n max-height: 40px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-time:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.flatpickr-time .numInputWrapper {\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 40%;\n height: 40px;\n float: left;\n}\n.flatpickr-time .numInputWrapper span.arrowUp:after {\n border-bottom-color: #393939;\n}\n.flatpickr-time .numInputWrapper span.arrowDown:after {\n border-top-color: #393939;\n}\n.flatpickr-time.hasSeconds .numInputWrapper {\n width: 26%;\n}\n.flatpickr-time.time24hr .numInputWrapper {\n width: 49%;\n}\n.flatpickr-time input {\n background: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n height: inherit;\n line-height: inherit;\n color: #393939;\n font-size: 14px;\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-time input.flatpickr-hour {\n font-weight: bold;\n}\n.flatpickr-time input.flatpickr-minute,\n.flatpickr-time input.flatpickr-second {\n font-weight: 400;\n}\n.flatpickr-time input:focus {\n outline: 0;\n border: 0;\n}\n.flatpickr-time .flatpickr-time-separator,\n.flatpickr-time .flatpickr-am-pm {\n height: inherit;\n float: left;\n line-height: inherit;\n color: #393939;\n font-weight: bold;\n width: 2%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-align-self: center;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.flatpickr-time .flatpickr-am-pm {\n outline: 0;\n width: 18%;\n cursor: pointer;\n text-align: center;\n font-weight: 400;\n}\n.flatpickr-time input:hover,\n.flatpickr-time .flatpickr-am-pm:hover,\n.flatpickr-time input:focus,\n.flatpickr-time .flatpickr-am-pm:focus {\n background: #eee;\n}\n.flatpickr-input[readonly] {\n cursor: pointer;\n}\n@-webkit-keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n" /***/ }), -/* 121 */ +/* 122 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -28381,11 +28436,11 @@ module.exports = function (css) { }; /***/ }), -/* 122 */ +/* 123 */ /***/ (function(module, exports, __webpack_require__) { -var content = __webpack_require__(123); +var content = __webpack_require__(124); if(typeof content === 'string') content = [[module.i, content, '']]; @@ -28408,17 +28463,17 @@ if(content.locals) module.exports = content.locals; if(false) {} /***/ }), -/* 123 */ +/* 124 */ /***/ (function(module, exports) { module.exports = "/*\n* This file is part of the BBjGridExWidget plugin.\n* (c) Basis Europe \n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value,\n.gw-alignment-cell-right .templateRenderer {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value,\n.gw-alignment-cell-center .templateRenderer {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.gw-alignment-header-center .ag-header-cell-text {\n margin-left: -16px !important;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n" /***/ }), -/* 124 */ +/* 125 */ /***/ (function(module, exports, __webpack_require__) { -var content = __webpack_require__(125); +var content = __webpack_require__(126); if(typeof content === 'string') content = [[module.i, content, '']]; @@ -28441,11 +28496,11 @@ if(content.locals) module.exports = content.locals; if(false) {} /***/ }), -/* 125 */ +/* 126 */ /***/ (function(module, exports) { module.exports = ".autocompleteInputWrapper__input {\n padding-left: 6px;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-radius: 3px;\n background-color: var(--ag-background-color);\n color: inherit;\n outline: none;\n}\n\n.ag-theme-alpine .autocompleteInputWrapper__input,\n.ag-theme-balham .autocompleteInputWrapper__input,\n.ag-theme-material .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #fff);\n}\n\n.ag-theme-alpine-dark .autocompleteInputWrapper__input,\n.ag-theme-balham-dark .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #2d3436);\n}\n\n.autocomplete {\n background-color: var(--ag-background-color, #fff);\n z-index: 1000;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-top: 0;\n border-radius: 3px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n overflow: auto;\n -webkit-box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n}\n\n.autocomplete.dark {\n background-color: var(--ag-background-color, #2d3436);\n color: var(--ag-data-color, var(--ag-foreground-color, #fff));\n}\n\n.autocomplete .suggestion-group {\n background: #eee;\n padding: 5px 6px;\n font-weight: bold;\n}\n\n.autocomplete.dark .suggestion-group {\n background: var(--ag-background-color, #181d1f);\n}\n\n.autocomplete .suggestion-item {\n padding: 10px;\n cursor: pointer;\n}\n\n.autocomplete .suggestion-item:hover {\n background-color: var(--ag-row-hover-color, rgba(33, 150, 244, 0.1));\n}\n\n.autocomplete .suggestion-item.selected {\n background-color: var(\n --ag-selected-row-background-color,\n rgba(33, 150, 243, 0.3)\n );\n}\n\n.autocomplete .empty {\n padding: 8px 6px;\n}\n\n.autocomplete-input-error {\n -webkit-box-shadow: 0 -2px 0 #e91e63 inset;\n box-shadow: 0 -2px 0 #e91e63 inset;\n}\n\n.autocomplete-input-success {\n -webkit-box-shadow: 0 -2px 0 #4caf50 inset;\n box-shadow: 0 -2px 0 #4caf50 inset;\n}\n" /***/ }) /******/ ]))); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZXAtcGFyc2UtanNvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvU3RyaW5nTWFzay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXhwcmVzc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Jvd3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jaGFydHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jZWxscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL2Rpc3QvYmJqLW1hc2tzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1pbnB1dC1tYXNraW5nL2Rpc3QvYmFzaXMtaW5wdXQtbWFza2luZy5qcy1leHBvc2VkIiwid2VicGFjazovLy8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCBmZDdmNjA0MjE5MmUxMjMyY2Y2NSIsIndlYnBhY2s6Ly8vd2VicGFjazovZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiU3RyaW5nTWFza1wiXX0iLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC9UZXh0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L3Rvb2xzLmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L051bWJlcklucHV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrOi9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJjb21tb25qczJcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiYW1kXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcInJvb3RcIjpbXCJCQmpcIixcIk1hc2tzXCIsXCJOdW1iZXJNYXNrXCJdfSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrL1N0cmluZ01hc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzay9OdW1iZXJNYXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L3dlYnBhY2svYm9vdHN0cmFwIDBiYWUwNTllMmI1ZmUyNmM1YjEwIiwid2VicGFjazovLy8vc3JjL0NvbXBvbmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL2F1dG9iaW5kLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvb3ZlcnJpZGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9wcml2YXRlL3V0aWxzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy8od2VicGFjaykvYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9yZWFkb25seS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdXRjVG9ab25lZFRpbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0V2ZW50c01peGluL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRWRpdG9yL0Jvb2xlYW5FZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQ29tcG9uZW50L0NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9sYXp5LWluaXRpYWxpemUuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzcz83NmEzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblJlbmRlcmVyL0Jvb2xlYW5SZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5GaWx0ZXIvQm9vbGVhbkZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzPzBkNWUiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3M/YWEwZSIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzPzA5MWIiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9UZW1wbGF0ZVJlbmRlcmVyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0ltYWdlUmVuZGVyZXIvSW1hZ2VSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9EYXRlVGltZUZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elRva2VuaXplRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdG9EYXRlL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRXZlbnRzTWl4aW4vRXZlbnRzTWl4aW4uanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3M/NGY2NyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3M/NzZmYiIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9EYXRlVGltZUVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcG9seWZpbGxzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9pbml0LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvbWVudXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL3NlbGVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9lZGl0aW5nLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19ub2RlVXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9IVE1MVG9vbHRpcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9TdWdnZXN0aW9uRWRpdG9yLmpzIiwid2VicGFjazovLy9hdXRvY29tcGxldGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Rvb2xwYW5lbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3N0YXR1c2Jhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL292ZXJsYXlzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2pzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanNzL2pzcy5qcy1leHBvc2VkIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qc3MvanNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzPzA5NDciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvY2xhc3Nlcy5jc3M/MDU1NSIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvY2xhc3Nlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlL3N1Z2dlc3Rpb24tZWRpdG9yLmNzcz8zZjI0Iiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3MiXSwibmFtZXMiOlsiZ3dfZ2V0RG9jdW1lbnQiLCIkZG9jIiwiZG9jdW1lbnQiLCJnd19nZXRXaW5kb3ciLCIkd25kIiwid2luZG93IiwiZ3dfZXNjYXBlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJnd191dWlkIiwicmVwbGFjZSIsImMiLCJyIiwiTWF0aCIsInJhbmRvbSIsInYiLCJ0b1N0cmluZyIsImd3X2dldEdyaWQiLCJpZCIsIkJCakdyaWRFeFdpZGdldCIsImdyaWQiLCJyZWdpc3RlcmVkR3JpZHMiLCJKU09OIiwic3RyaW5naWZ5IiwiT2JqZWN0Iiwia2V5cyIsIlR5cGVFcnJvciIsImd3X2FkZEdyaWQiLCJvcHRpb25zIiwiZ3dfZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsInRpbWVvdXQiLCJjb250ZXh0IiwiYXJncyIsImFyZ3VtZW50cyIsImxhdGVyIiwiYXBwbHkiLCJjYWxsTm93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImd3X3NlbmRFdmVudCIsInBheWxvYWQiLCJldmVudElkIiwicmVnaXN0ZXJlZEludGVyZXN0cyIsImludGVyZXN0cyIsImluY2x1ZGVzIiwiZGl2IiwiZ2V0RWxlbWVudEJ5SWQiLCJiYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQiLCJnd19wYXJzZU5vZGUiLCJub2RlIiwiZ3JvdXAiLCJnZXRSb3dOb2RlSWQiLCJyb3dQaW5uZWQiLCJpIiwiaGFzT3duUHJvcGVydHkiLCJkYXRhIiwieCIsInJvd0luZGV4IiwicCIsInBhcmVudCIsImtleSIsImNoaWxkSW5kZXgiLCJzIiwiQm9vbGVhbiIsInNlbGVjdGVkIiwiY3IiLCJwcCIsImd3X3BhcnNlTm9kZUZyb21FdmVudCIsImUiLCJnIiwiRnVuY3Rpb24iLCJtb2R1bGUiLCJleHBvcnRzIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImwiLCJkZWVwUGFyc2VKc29uIiwianNvblN0cmluZyIsInBhcnNlIiwiZXJyIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwidmFsIiwicmVkdWNlIiwib2JqIiwiR1dfRVZFTlRfUk9XX1NFTEVDVCIsIkdXX0VWRU5UX1JPV19DTElDSyIsIkdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0NMSUNLIiwiR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVEIiwiR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VEIiwiR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQiLCJHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCIsIkdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIiwiR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQiLCJHV19FVkVOVF9LRVlQUkVTUyIsImlzT2JqZWN0IiwidHlwZSIsInJvb3QiLCJmcmVlU2VsZiIsInNlbGYiLCJmcmVlR2xvYmFsIiwiZXEiLCJvdGhlciIsImlzQXJyYXlMaWtlIiwibGVuZ3RoIiwiU3RyaW5nTWFzayIsIk51bWJlck1hc2siLCJyZXF1aXJlIiwiZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsImRlZiIsImNoZWNrYm94U2VsZWN0aW9uIiwiZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3giLCJoZWFkZXJDaGVja2JveFNlbGVjdGlvbiIsImd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24iLCJ0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uIiwidG9vbHRpcFZhbHVlR2V0dGVyIiwicGFyYW1zIiwidG9vbHRpcENvbXBvbmVudCIsImVkaXRhYmxlIiwicm93U3BhbiIsImNvbFNwYW4iLCJnd19zZXRDb2x1bW5EZWZpbml0aW9ucyIsImRlZXBQYXJzZWREZWZpbml0aW9ucyIsImFwaSIsInNldENvbHVtbkRlZnMiLCJjb2x1bW5EZWZzIiwiZ3dfc2l6ZUNvbHVtbnNUb0ZpdCIsIndpZHRoIiwiY29sdW1uc0FQSSIsImNvbHVtbkFwaSIsInNpemVDb2x1bW5zVG9GaXQiLCJOdW1iZXIiLCJnd19hdXRvU2l6ZUNvbHVtbnMiLCJza2lwSGVhZGVyIiwiY29sdW1ucyIsImFsbENvbHVtbklkcyIsImdldEFsbENvbHVtbnMiLCJmb3JFYWNoIiwiY29sdW1uIiwicHVzaCIsImNvbElkIiwiYXV0b1NpemVDb2x1bW5zIiwiZ3dfZW5zdXJlQ29sdW1uVmlzaWJsZSIsImNvbHVtbklkIiwiZW5zdXJlQ29sdW1uVmlzaWJsZSIsImd3X3NldENvbHVtbldpZHRoIiwic2V0Q29sdW1uV2lkdGgiLCJnd19waW5Db2x1bW4iLCJwaW4iLCJzZXRDb2x1bW5QaW5uZWQiLCJnd19tb3ZlQ29sdW1uIiwidG9JbmRleCIsIm1vdmVDb2x1bW4iLCJwYXJhbSIsInNob3dTZWxlY3Rpb25DaGVja2JveCIsImdldEFsbEdyaWRDb2x1bW5zIiwiY29sRGVmIiwiZmllbGQiLCJncmlkT3B0aW9uc1dyYXBwZXIiLCJncmlkT3B0aW9ucyIsInNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCIsImd3X2FkZFJvd0dyb3VwQ29sdW1uIiwic2V0Iiwic3BsaXQiLCJ0cmltIiwiZ3dfcmVtb3ZlUm93R3JvdXBDb2x1bW4iLCJyZW1vdmVSb3dHcm91cENvbHVtbnMiLCJnd19nZXRQaXZvdE1vZGUiLCJpc1Bpdm90TW9kZSIsImd3X3NldFBpdm90TW9kZSIsIm1vZGUiLCJzZXRQaXZvdE1vZGUiLCJnd19hZGRQaXZvdENvbHVtbnMiLCJnd19yZW1vdmVQaXZvdENvbHVtbnMiLCJyZW1vdmVQaXZvdENvbHVtbnMiLCJnd19hZGRWYWx1ZUNvbHVtbnMiLCJhZGRWYWx1ZUNvbHVtbnMiLCJnd19yZW1vdmVWYWx1ZUNvbHVtbnMiLCJyZW1vdmVWYWx1ZUNvbHVtbnMiLCJnd19zZXRTb3J0TW9kZWwiLCJtb2RlbCIsImFzQXJyYXkiLCJwYXJzZWRNb2RlbCIsInNvcnQiLCJzZXRTb3J0TW9kZWwiLCJnd19yZWZyZXNoSGVhZGVyIiwicmVkcmF3Um93cyIsImd3X3NldENvbHVtblZpc2libGUiLCJ2aXNpYmxlIiwic2V0Q29sdW1uc1Zpc2libGUiLCJnd19jb21waWxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJleHByZXNzaW9uQ2FjaGUiLCJmdW5jdGlvbkJvZHkiLCJpbmRleE9mIiwidGhlRnVuY3Rpb24iLCJnd19leGVjdXRlRXhwcmVzc2lvbiIsImphdmFTY3JpcHRGdW5jdGlvbiIsInJlc3VsdCIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJnZXRWYWx1ZSIsImNvbHVtbkdyb3VwIiwiY29uc29sZSIsImxvZyIsImd3X3NldFF1aWNrRmlsdGVyIiwiZmlsdGVyIiwic2V0UXVpY2tGaWx0ZXIiLCJnd19leHBhbmRBbGwiLCJleHBhbmRBbGwiLCJnd19jb2xsYXBzZUFsbCIsImNvbGxhcHNlQWxsIiwiZ3dfZW5zdXJlSW5kZXhWaXNpYmxlIiwiaW5kZXgiLCJwb3NpdGlvbiIsImdldFJvd05vZGUiLCJlbnN1cmVOb2RlVmlzaWJsZSIsImVuc3VyZUluZGV4VmlzaWJsZSIsImd3X25hdmlnYXRlVG9OZXh0Um93IiwicHJldmlvdXNDZWxsIiwicHJldmlvdXNDZWxsUG9zaXRpb24iLCJzdWdnZXN0ZWROZXh0Q2VsbCIsIm5leHRDZWxsUG9zaXRpb24iLCJLRVlfVVAiLCJLRVlfRE9XTiIsIktFWV9MRUZUIiwiS0VZX1JJR0hUIiwicm93IiwiZ2V0RGlzcGxheWVkUm93QXRJbmRleCIsImdldEZpcnN0RGlzcGxheWVkUm93Iiwic2V0U2VsZWN0ZWQiLCJmb3JFYWNoTm9kZSIsImdldExhc3REaXNwbGF5ZWRSb3ciLCJFcnJvciIsImd3X2dldFJvd05vZGVJZCIsImd3X3NldFJvd0RhdGEiLCJqc29uIiwic2V0Um93RGF0YSIsInJvd0RhdGEiLCJnd191cGRhdGVSb3dEYXRhIiwidHJhbnNhY3Rpb24iLCJiYXRjaFVwZGF0ZSIsInJlbW92ZSIsIml0ZW1zIiwiYXBwbHlUcmFuc2FjdGlvbiIsImFwcGx5VHJhbnNhY3Rpb25Bc3luYyIsImd3X3NldFJvd3NIZWlnaHQiLCJoZWlnaHQiLCJzZXRSb3dIZWlnaHQiLCJvblJvd0hlaWdodENoYW5nZWQiLCJnd19zZXRSb3dIZWlnaHQiLCJ3YXJuIiwiZ3dfcmVzZXRSb3dIZWlnaHRzIiwicmVzZXRSb3dIZWlnaHRzIiwiZ3dfc2V0U2VsZWN0ZWRSb3dzIiwicm93cyIsImZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0IiwiU3RyaW5nIiwiZXhwYW5kZWQiLCJvbkdyb3VwRXhwYW5kZWRPckNvbGxhcHNlZCIsImd3X3NlbGVjdEFsbCIsImZpbHRlcmVkIiwic2VsZWN0QWxsRmlsdGVyZWQiLCJzZWxlY3RBbGwiLCJnd19kZXNlbGVjdEFsbCIsImRlc2VsZWN0QWxsRmlsdGVyZWQiLCJkZXNlbGVjdEFsbCIsImd3X2dldFNlbGVjdGVkUm93cyIsIm5vZGVzIiwiZ2V0U2VsZWN0ZWROb2RlcyIsInBhcnNlZCIsImd3X2dldFNlbGVjdGVkUm93IiwiZ3dfZ2V0Um93IiwiZ3dfZ2V0Um93cyIsInBoYXNlIiwiZmlsdGVyRXhwcmVzc2lvbiIsImNhblByb2Nlc3MiLCJncmlkQXBpIiwiZ3dfcmVkcmF3Um93cyIsImd3X3NldFBpbm5lZFRvcFJvd0RhdGEiLCJzZXRQaW5uZWRUb3BSb3dEYXRhIiwiZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YSIsInNldFBpbm5lZEJvdHRvbVJvd0RhdGEiLCJnd19nZXRDaGFydFRvb2xiYXJJdGVtcyIsImNoYXJ0VG9vbGJhckl0ZW1zIiwiZ3dfYWRkQ2hhcnRSYW5nZSIsInJhbmdlIiwicHIiLCJjZWxsUmFuZ2UiLCJyZWYiLCJjcmVhdGVSYW5nZUNoYXJ0IiwidXVpZCIsImNyZWF0ZWRfY2hhcnRzIiwiZ3dfZGVzdHJveUNoYXJ0IiwiZGVzdHJveUNoYXJ0IiwiY2hhcnQiLCJnd19zdGFydEVkaXRpbmdDZWxsIiwiY29sS2V5Iiwia2V5UHJlc3MiLCJjaGFyUHJlc3MiLCJzdGFydEVkaXRpbmdDZWxsIiwiZ3dfc3RvcEVkaXRpbmciLCJjYW5jZWwiLCJzdG9wRWRpdGluZyIsImd3X3RhYlRvTmV4dENlbGwiLCJ0YWJUb05leHRDZWxsIiwiZ3dfdGFiVG9QcmV2aW91c0NlbGwiLCJ0YWJUb1ByZXZpb3VzQ2VsbCIsImd3X3NldEZvY3VzZWRDZWxsIiwiZmxvYXRpbmciLCJnZXRFZGl0aW5nQ2VsbHMiLCJmIiwibGFzdEZvY3VzZWRDZWxsIiwiZ2V0Rm9jdXNlZENlbGwiLCJpc0ludGVnZXIiLCJzZXRGb2N1c2VkQ2VsbCIsImd3X2dldFJhbmdlU2VsZWN0aW9ucyIsInJhbmdlcyIsImdldENlbGxSYW5nZXMiLCJnZXRNb2RlbCIsImFjY3VtdWxhdG9yIiwiY3VycmVudCIsInN0YXJJbmRleCIsIm1pbiIsInN0YXJ0Um93IiwiZW5kUm93IiwiZW5kSW5kZXgiLCJtYXgiLCJnZXRSb3ciLCJwYXJzZWROb2RlIiwiZ3dfcGFyc2VBZGRDZWxsUmFuZ2UiLCJzdGFydCIsImVuZCIsInJvd1N0YXJ0SW5kZXgiLCJhYnMiLCJyb3dFbmRJbmRleCIsImd3X2FkZENlbGxSYW5nZSIsImFkZENlbGxSYW5nZSIsImd3X2NsZWFyUmFuZ2VTZWxlY3Rpb24iLCJjbGVhclJhbmdlU2VsZWN0aW9uIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc1RlbXBsYXRlIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJvYmplY3RQcm90byIsInByb3RvdHlwZSIsInRlbXBsYXRlIiwic3RyaW5nIiwiZ3VhcmQiLCJzZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3MiLCJpbXBvcnRzIiwiXyIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJpbXBvcnRzS2V5cyIsImltcG9ydHNWYWx1ZXMiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW50ZXJwb2xhdGUiLCJzb3VyY2UiLCJyZURlbGltaXRlcnMiLCJSZWdFeHAiLCJlc2NhcGUiLCJyZUludGVycG9sYXRlIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJjYWxsIiwibWF0Y2giLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwib2Zmc2V0Iiwic2xpY2UiLCJlc2NhcGVTdHJpbmdDaGFyIiwidmFyaWFibGUiLCJiYXNlQXNzaWduVmFsdWUiLCJvYmplY3QiLCJhc3luY1RhZyIsImZ1bmNUYWciLCJnZW5UYWciLCJwcm94eVRhZyIsImlzRnVuY3Rpb24iLCJ0YWciLCJnbG9iYWwiLCJiYXNlUmVzdCIsImlkZW50aXR5IiwidGhpc0FyZyIsImlzSXRlcmF0ZWVDYWxsIiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwicmVJc1VpbnQiLCJpc0luZGV4IiwidGVzdCIsImFycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJpc1Byb3RvdHlwZSIsIkN0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvIiwiZG9tRXhjVGFnIiwiZXJyb3JUYWciLCJpc0Vycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiYXJnIiwiYXJyYXlNYXAiLCJhcnJheSIsIml0ZXJhdGVlIiwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJmYWN0b3J5IiwiZGVmaW5lIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJtIiwiZCIsImdldHRlciIsIm8iLCJjb25maWd1cmFibGUiLCJuIiwiX19lc01vZHVsZSIsImdldERlZmF1bHQiLCJnZXRNb2R1bGVFeHBvcnRzIiwicHJvcGVydHkiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwidG9JbnRlZ2VyIiwiZGlydHlOdW1iZXIiLCJOYU4iLCJudW1iZXIiLCJpc05hTiIsImNlaWwiLCJmbG9vciIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fIiwidHpQYXJzZVRpbWV6b25lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fIiwiTUlMTElTRUNPTkRTX0lOX0hPVVIiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIiwicGF0dGVybnMiLCJ0aW1lem9uZSIsInRpbWV6b25lWiIsInRpbWV6b25lSEgiLCJ0aW1lem9uZUhITU0iLCJ0aW1lem9uZUlBTkEiLCJ0aW1lem9uZVN0cmluZyIsImRhdGUiLCJ0b2tlbiIsImFic29sdXRlT2Zmc2V0IiwiZXhlYyIsImhvdXJzIiwicGFyc2VJbnQiLCJ2YWxpZGF0ZVRpbWV6b25lIiwibWludXRlcyIsInRva2VucyIsImFzVVRDIiwiRGF0ZSIsIlVUQyIsInRpbWVzdGFtcFdpdGhNc1plcm9lZCIsImdldFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0cmluZ01hc2tfXyIsIlV0aWxzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18iLCJEYXRlcyIsImdldERheU9mWWVhciIsImdldFdlZWtOdW1iZXIiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSIsIklTX0RBVEVfUkVHRVgiLCJJU19USU1FX1JFR0VYIiwiZml4U2hvcnRJU08iLCJnZXRUaW1lem9uZU9yT2Zmc2V0IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwid3JpdGFibGUiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJtYXNrIiwiX21hc2siLCJncm91cGluZ1NlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmb3JjZVRyYWlsaW5nWmVyb3MiLCJsb29zZSIsIm1hc2tMZW4iLCJzdHIiLCJtYXNrQmVmb3JlRGVjaW1hbCIsIm1hc2tBZnRlckRlY2ltYWwiLCJmb3VuZERlY2ltYWwiLCJjaGFyQXQiLCJudW0iLCJfcm91bmQiLCJieXRlcyIsIl90b0NoYXJBcnJheSIsImluTGVuIiwibnVtQmVmb3JlRGVjaW1hbCIsIm51bUFmdGVyRGVjaW1hbCIsIl9pIiwiX2kyIiwiZmlsbEJ5dGUiLCJmbG9hdEJ5dGUiLCJpblBvcyIsIm91dFBvcyIsImZsb2F0UG9zIiwiZmlsbEluaXQiLCJpc05lZ2F0aXZlIiwiX2dldFNpZ24iLCJlbWl0RGVjaW1hbCIsImZvdW5kWmVybyIsImZvdW5kRGlnaXQiLCJjdXJyZW5jeSIsInJldCIsIm1hc2tQb3MiLCJfbSIsImpvaW4iLCJfc2hpZnQiLCJwcmVjaXNpb24iLCJyZXZlcnNlU2hpZnQiLCJudW1BcnJheSIsInJvdW5kIiwic2lnbnVtIiwiY2hhcnMiLCJjb25jYXQiLCJzdWJzdHJpbmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyIsImxvY2FsZSIsImdldEZ1bGxZZWFyIiwiZGlmZiIsImdldFRpbWV6b25lT2Zmc2V0Iiwib25lRGF5IiwiZGF5IiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJwYWQiLCJ3ZWVrU3RhcnQiLCJnZXRNb250aCIsImdldERhdGUiLCJkYXlOdW0iLCJnZXRVVENEYXkiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF0ZSIsInllYXJTdGFydCIsImdldFVUQ0Z1bGxZZWFyIiwiRGF0ZU1hc2siLCJkYXRlT2JqZWN0IiwidHJhbnNsYXRpb24iLCJfYnVpbGRUcmFuc2xhdGlvbiIsInllYXIiLCJtb250aCIsIm1vbnRoU2hvcnQiLCJmb3JtYXQiLCJtb250aExvbmciLCJkYXlTaG9ydCIsIndlZWtkYXkiLCJkYXlMb25nIiwiZ2V0TWludXRlcyIsInNlY29uZHMiLCJnZXRTZWNvbmRzIiwiaG91cnMyNCIsImdldEhvdXJzIiwiaG91cnMxMiIsImRheU9mWWVhciIsImRheU9mV2VlayIsImdldERheSIsIndlZWtOdW1iZXIiLCJrIiwiZGF0ZURldGFpbHMiLCJZeiIsInN1YnN0ciIsIllzIiwiWWwiLCJZcCIsImZyb21DaGFyQ29kZSIsIllkIiwiWSIsIk16IiwiTXMiLCJNbCIsIk1wIiwiTWQiLCJNIiwiRHoiLCJEcyIsIkRsIiwiRHAiLCJEZCIsIkQiLCJIeiIsIkhzIiwiSGwiLCJIcCIsIkhkIiwiSCIsImh6IiwiaHMiLCJobCIsImhwIiwiaGQiLCJoIiwibXoiLCJtcyIsIm1sIiwibXAiLCJtZCIsInN6Iiwic3MiLCJzbCIsInNwIiwic2QiLCJQUCIsIlAiLCJKeiIsIkpzIiwiSmwiLCJKZCIsIkoiLCJXeiIsIldzIiwiV2wiLCJXcCIsIldkIiwiVyIsInd6Iiwid3MiLCJ3bCIsIndwIiwid2QiLCJ3IiwidXRjVG9ab25lZFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fIiwiZGlydHlEYXRlIiwidXRjRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIm9mZnNldE1pbGxpc2Vjb25kcyIsInR6VG9rZW5pemVEYXRlIiwiZHRmIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwicGFydHNPZmZzZXQiLCJoYWNreU9mZnNldCIsInR5cGVUb1BvcyIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJmb3JtYXR0ZWQiLCJmaWxsZWQiLCJwb3MiLCJkdGZDYWNoZSIsInRlc3REYXRlRm9ybWF0dGVkIiwiaG91cjEyIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwiaG91ckN5Y2xlIiwic3ViTWlsbGlzZWNvbmRzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiZGlydHlBbW91bnQiLCJhbW91bnQiLCJhZGRNaWxsaXNlY29uZHMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fIiwidGltZXN0YW1wIiwidG9EYXRlIiwiYXJndW1lbnQiLCJhcmdTdHIiLCJzdGFjayIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18iLCJERUZBVUxUX0FERElUSU9OQUxfRElHSVRTIiwiZGF0ZVRpbWVEZWxpbWV0ZXIiLCJwbGFpblRpbWUiLCJ0aW1lWm9uZURlbGltZXRlciIsIllZIiwiWVlZIiwiWVlZWSIsIllZWVlZIiwiTU0iLCJEREQiLCJNTUREIiwiV3d3IiwiV3d3RCIsIkhIIiwiSEhNTSIsIkhITU1TUyIsImRpcnR5T3B0aW9ucyIsImFkZGl0aW9uYWxEaWdpdHMiLCJSYW5nZUVycm9yIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlRGF0ZSIsInRpbWUiLCJwYXJzZVRpbWUiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsInBhdHRlcm5ZWVkiLCJwYXR0ZXJuWVlZWVkiLCJ5ZWFyU3RyaW5nIiwiY2VudHVyeVN0cmluZyIsIndlZWsiLCJzZXRVVENGdWxsWWVhciIsInZhbGlkYXRlRGF0ZSIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInZhbGlkYXRlV2Vla0RhdGUiLCJkYXlPZklTT1dlZWtZZWFyIiwicGFyc2VGbG9hdCIsInZhbGlkYXRlVGltZSIsImlzb1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5RGF5IiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiaXNMZWFwWWVhckluZGV4IiwiaXNMZWFwWWVhciIsImdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMiLCJiYXNlVGltZXpvbmVPZmZzZXQiLCJzZXRTZWNvbmRzIiwibWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSQxIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcGlfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfXyIsImdldFdlZWtTdGFydEJ5UmVnaW9uJDEiLCJyZWdpb25Db2RlIiwiZ2V0V2Vla1N0YXJ0QnlSZWdpb24iLCJyZWdpb25EYXlNYXAiLCJjb2RlIiwidG9VcHBlckNhc2UiLCJsYW5nUmVnaW9uTWFwIiwidG9Mb3dlckNhc2UiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJlbiIsInpoIiwiemhfaGFucyIsImhhbnMiLCJ3dXUiLCJoc24iLCJoYWsiLCJuYW4iLCJnYW4iLCJoaSIsInRlIiwibXIiLCJ0YSIsImd1Iiwia24iLCJvciIsInBhX2d1cnUiLCJiaG8iLCJhd2EiLCJhcyIsIm13ciIsIm1haSIsIm1hZyIsImJnYyIsImhuZSIsImRjYyIsImR6IiwidG4iLCJhbSIsIm9tIiwicXVjIiwianYiLCJzdSIsIm1hZCIsIm1zX2FyYWIiLCJnYSIsImhlIiwiamFtIiwiamEiLCJrbSIsImtvIiwibG8iLCJtaCIsIm15IiwibXQiLCJuZSIsImZpbCIsImNlYiIsImlsbyIsInVyIiwicGEiLCJwYV9hcmFiIiwiYXJhYiIsImxhaCIsInBzIiwic2RfYXJhYiIsInNrciIsImduIiwidGgiLCJ0dHMiLCJhZWIiLCJ6aF9oYW50IiwiaGFudCIsInNtIiwienUiLCJzbiIsImFycSIsImFyIiwiYXJ6IiwiZmEiLCJhel9hcmFiIiwiYXJ5IiwiYm4iLCJya3QiLCJkdiIsIkFHIiwiQVRHIiwiQVIiLCJBUkciLCJBUyIsIkFTTSIsIkFVIiwiQVVTIiwiQlIiLCJCUkEiLCJCUyIsIkJIUyIsIkJUIiwiQlROIiwiQlciLCJCV0EiLCJCWiIsIkJMWiIsIkNBIiwiQ0FOIiwiQ04iLCJDSE4iLCJDTyIsIkNPTCIsIkRNIiwiRE1BIiwiRE8iLCJET00iLCJFVCIsIkVUSCIsIkdUIiwiR1RNIiwiR1UiLCJHVU0iLCJISyIsIkhLRyIsIkhOIiwiSE5EIiwiSUQiLCJJRE4iLCJJRSIsIklSTCIsIklMIiwiSVNSIiwiSU4iLCJJTkQiLCJKTSIsIkpBTSIsIkpQIiwiSlBOIiwiS0UiLCJLRU4iLCJLSCIsIktITSIsIktSIiwiS09SIiwiTEEiLCJMQTAiLCJNSCIsIk1ITCIsIk1NUiIsIk1PIiwiTUFDIiwiTVQiLCJNTFQiLCJNWCIsIk1FWCIsIk1aIiwiTU9aIiwiTkkiLCJOSUMiLCJOUCIsIk5QTCIsIk5aIiwiTlpMIiwiUEEiLCJQQU4iLCJQRSIsIlBFUiIsIlBIIiwiUEhMIiwiUEsiLCJQQUsiLCJQUiIsIlBSSSIsIlBZIiwiUFJZIiwiU0EiLCJTQVUiLCJTRyIsIlNHUCIsIlNWIiwiU0xWIiwiVEgiLCJUSEEiLCJUTiIsIlRVTiIsIlRUIiwiVFRPIiwiVFciLCJUV04iLCJVTSIsIlVNSSIsIlVTIiwiVVNBIiwiVkUiLCJWRU4iLCJWSSIsIlZJUiIsIldTIiwiV1NNIiwiWUUiLCJZRU0iLCJaQSIsIlpBRiIsIlpXIiwiWldFIiwiQUUiLCJBUkUiLCJBRiIsIkFGRyIsIkJIIiwiQkhSIiwiREoiLCJESkkiLCJEWiIsIkRaQSIsIkVHIiwiRUdZIiwiSVEiLCJJUlEiLCJJUiIsIklSTiIsIkpPIiwiSk9SIiwiS1ciLCJLV1QiLCJMWSIsIkxCWSIsIk1BIiwiTUFSIiwiT00iLCJPTU4iLCJRQSIsIlFBVCIsIlNEIiwiU0ROIiwiU1kiLCJTWVIiLCJCRCIsIkJHRCIsIk1WIiwiTURWIiwiaXNOdW1iZXJSZWdleCIsImlzV2hpdGVzcGFjZVJlZ2V4IiwicHVuY3R1YXRpb25MaXN0IiwiaXNMb3dlckNhc2UiLCJpc1VwcGVyQ2FzZSIsInBhc3NPclRocm93RXJyb3IiLCJfY2hhciIsInN0ckxlbiIsIm1hc2tCeXRlIiwiX2J5dGUiLCJfYnl0ZTIiLCJfYnl0ZTMiLCJfYnl0ZTQiLCJfYnl0ZTUiLCJfYnl0ZTYiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18iLCJUeXBlcyIsIl9udW1iZXIiLCJfZGF0ZSIsIlRleHRJbnB1dCIsImVsZW1lbnRzIiwiZG9jIiwiY3NzQ2xhc3NFcnJvciIsImNzc0NsYXNzU3VjY2VzcyIsIm9uVXBkYXRlIiwib25JbnZhbGlkIiwiaW5wdXQiLCJwYXJlbnRDbGFzcyIsImlzV3JhcHBlZCIsImlucHV0SWQiLCJpbnB1dE5hbWUiLCJvcmlnaW5hbFBhdHRlcm4iLCJkZWZhdWx0UGF0dGVybiIsImdlbmVyYXRlUGF0dGVybkZyb21NYXNrIiwicGF0dGVybiIsIndyYXAiLCJ1bm1hc2tJbnB1dCIsIm1hc2tJZk5vdE1hc2tlZCIsInVubWFzayIsInRleHRJbnB1dCIsImV2ZW50VHlwZSIsImtleUNvZGUiLCJrZXlDb250ZW50IiwiaW5zZXJ0UG9zaXRpb24iLCJmaW5kQ2FyZXRQb3NpdGlvbiIsIm1hc2tFcnJvciIsInNlbGVjdGlvblN0YXJ0IiwidW5tYXNrZWRWYWx1ZSIsImlzVmFsaWQiLCJ2YWx1ZU1hc2tlZCIsInZhbHVlVW5tYXNrZWQiLCJlcnJvciIsInN0YXRlIiwiU1VQUE9SVEVEX01BU0tTIiwiSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQiLCJldmFsIiwiaXNNYXNrZWRWYWx1ZSIsImNhY2hlS2V5IiwibWFza0FzQXJyeSIsInJlZ2V4IiwibWFza0FzQXJyYXkiLCJtYXNrZWRWYWx1ZUFzQXJyYXkiLCJtYXNrZWRWYWx1ZSIsInVubWFza2VkIiwiZWwiLCJlbEhhc01hc2siLCJOdW1iZXJJbnB1dCIsImNvdW50RGVjaW1hbHMiLCJhY3R1YWxJbnB1dCIsImFjdHVhbElucHV0SWQiLCJhY3R1YWxJbnB1dE5hbWUiLCJhY3R1YWxJbnB1dFN0ZXAiLCJhY3R1YWxJbnB1dE1heCIsImFjdHVhbElucHV0TWluIiwiYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvciIsImFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvciIsImFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zIiwiYWN0dWFsSW5wdXRNYXNrIiwiYWN0dWFsSW5wdXRDbGFzc2VzIiwiYWN0dWFsSW5wdXRSZXF1aXJlZCIsInVubWFza2VkSW5wdXQiLCJkZWNpbWFscyIsInN0ZXAiLCJ3cmFwcGVyIiwicmVzdG9yZSIsImNoYXIiLCJieXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwiX19zcHJlYWRBcnJheXMiLCJpbCIsImEiLCJqIiwiamwiLCJIT09LUyIsImRlZmF1bHRzIiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYWxsb3dJbnB1dCIsImFsbG93SW52YWxpZFByZWxvYWQiLCJhbHRGb3JtYXQiLCJhbHRJbnB1dCIsImFsdElucHV0Q2xhc3MiLCJhbmltYXRlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXJpYURhdGVGb3JtYXQiLCJhdXRvRmlsbERlZmF1bHRUaW1lIiwiY2xpY2tPcGVucyIsImNsb3NlT25TZWxlY3QiLCJjb25qdW5jdGlvbiIsImRhdGVGb3JtYXQiLCJkZWZhdWx0SG91ciIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsImRpc2FibGUiLCJkaXNhYmxlTW9iaWxlIiwiZW5hYmxlIiwiZW5hYmxlU2Vjb25kcyIsImVuYWJsZVRpbWUiLCJlcnJvckhhbmRsZXIiLCJnZXRXZWVrIiwiZ2l2ZW5EYXRlIiwic2V0SG91cnMiLCJzZXREYXRlIiwid2VlazEiLCJob3VySW5jcmVtZW50IiwiaWdub3JlZEZvY3VzRWxlbWVudHMiLCJpbmxpbmUiLCJtaW51dGVJbmNyZW1lbnQiLCJtb250aFNlbGVjdG9yVHlwZSIsIm5leHRBcnJvdyIsIm5vQ2FsZW5kYXIiLCJub3ciLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkRheUNyZWF0ZSIsIm9uRGVzdHJveSIsIm9uS2V5RG93biIsIm9uTW9udGhDaGFuZ2UiLCJvbk9wZW4iLCJvblBhcnNlQ29uZmlnIiwib25SZWFkeSIsIm9uVmFsdWVVcGRhdGUiLCJvblllYXJDaGFuZ2UiLCJvblByZUNhbGVuZGFyUG9zaXRpb24iLCJwbHVnaW5zIiwicG9zaXRpb25FbGVtZW50IiwicHJldkFycm93Iiwic2hvcnRoYW5kQ3VycmVudE1vbnRoIiwic2hvd01vbnRocyIsInN0YXRpYyIsInRpbWVfMjRociIsIndlZWtOdW1iZXJzIiwiZW5nbGlzaCIsIndlZWtkYXlzIiwic2hvcnRoYW5kIiwibG9uZ2hhbmQiLCJtb250aHMiLCJkYXlzSW5Nb250aCIsImZpcnN0RGF5T2ZXZWVrIiwib3JkaW5hbCIsIm50aCIsInJhbmdlU2VwYXJhdG9yIiwid2Vla0FiYnJldmlhdGlvbiIsInNjcm9sbFRpdGxlIiwidG9nZ2xlVGl0bGUiLCJhbVBNIiwieWVhckFyaWFMYWJlbCIsIm1vbnRoQXJpYUxhYmVsIiwiaG91ckFyaWFMYWJlbCIsIm1pbnV0ZUFyaWFMYWJlbCIsImludCIsImJvb2wiLCJkZWJvdW5jZSIsImFycmF5aWZ5IiwidG9nZ2xlQ2xhc3MiLCJlbGVtIiwiY2xhc3NOYW1lIiwiY2xhc3NMaXN0IiwiYWRkIiwiY3JlYXRlRWxlbWVudCIsImNvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImNsZWFyTm9kZSIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImZpbmRQYXJlbnQiLCJjb25kaXRpb24iLCJwYXJlbnROb2RlIiwiY3JlYXRlTnVtYmVySW5wdXQiLCJpbnB1dENsYXNzTmFtZSIsIm9wdHMiLCJudW1JbnB1dCIsImFycm93VXAiLCJhcnJvd0Rvd24iLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImdldEV2ZW50VGFyZ2V0IiwiZXZlbnQiLCJjb21wb3NlZFBhdGgiLCJwYXRoIiwiZG9Ob3RoaW5nIiwibW9udGhUb1N0ciIsIm1vbnRoTnVtYmVyIiwicmV2Rm9ybWF0IiwiRiIsImRhdGVPYmoiLCJtb250aE5hbWUiLCJzZXRNb250aCIsIkciLCJLIiwic2hvcnRNb250aCIsIlMiLCJVIiwidW5peFNlY29uZHMiLCJ3ZWVrTnVtIiwic2V0RnVsbFllYXIiLCJaIiwiSVNPRGF0ZSIsInNldE1pbnV0ZXMiLCJ1IiwidW5peE1pbGxTZWNvbmRzIiwieSIsInRva2VuUmVnZXgiLCJmb3JtYXRzIiwidG9JU09TdHJpbmciLCJjcmVhdGVEYXRlRm9ybWF0dGVyIiwiX2EiLCJfYiIsImNvbmZpZyIsIl9jIiwibDEwbiIsIl9kIiwiaXNNb2JpbGUiLCJmcm10Iiwib3ZlcnJpZGVMb2NhbGUiLCJmb3JtYXREYXRlIiwiYXJyIiwiY3JlYXRlRGF0ZVBhcnNlciIsImdpdmVuRm9ybWF0IiwidGltZWxlc3MiLCJjdXN0b21Mb2NhbGUiLCJwYXJzZWREYXRlIiwiZGF0ZU9yaWciLCJ0b0ZpeGVkIiwiZGF0ZXN0ciIsIm1hdGNoZWQiLCJvcHMiLCJtYXRjaEluZGV4IiwicmVnZXhTdHIiLCJ0b2tlbl8xIiwiaXNCYWNrU2xhc2giLCJlc2NhcGVkIiwiZm4iLCJjb21wYXJlRGF0ZXMiLCJkYXRlMSIsImRhdGUyIiwiaXNCZXR3ZWVuIiwidHMiLCJ0czEiLCJ0czIiLCJkdXJhdGlvbiIsIkRBWSIsIl9sb29wXzEiLCJhcmdzXzEiLCJERUJPVU5DRURfQ0hBTkdFX01TIiwiRmxhdHBpY2tySW5zdGFuY2UiLCJlbGVtZW50IiwiaW5zdGFuY2VDb25maWciLCJmbGF0cGlja3IiLCJkZWZhdWx0Q29uZmlnIiwiX2hhbmRsZXJzIiwicGx1Z2luRWxlbWVudHMiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJiaW5kIiwiX3NldEhvdXJzRnJvbURhdGUiLCJzZXRIb3Vyc0Zyb21EYXRlIiwiX3Bvc2l0aW9uQ2FsZW5kYXIiLCJwb3NpdGlvbkNhbGVuZGFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwiY2xlYXIiLCJjbG9zZSIsIl9jcmVhdGVFbGVtZW50IiwiZGVzdHJveSIsImlzRW5hYmxlZCIsImp1bXBUb0RhdGUiLCJvcGVuIiwicmVkcmF3IiwidG9nZ2xlIiwic2V0dXBIZWxwZXJGdW5jdGlvbnMiLCJ1dGlscyIsImdldERheXNJbk1vbnRoIiwieXIiLCJjdXJyZW50TW9udGgiLCJjdXJyZW50WWVhciIsImluaXQiLCJpc09wZW4iLCJwYXJzZUNvbmZpZyIsInNldHVwTG9jYWxlIiwic2V0dXBJbnB1dHMiLCJzZXR1cERhdGVzIiwiYnVpbGQiLCJiaW5kRXZlbnRzIiwic2VsZWN0ZWREYXRlcyIsImxhdGVzdFNlbGVjdGVkRGF0ZU9iaiIsIm1pbkRhdGUiLCJ1cGRhdGVWYWx1ZSIsInNldENhbGVuZGFyV2lkdGgiLCJpc1NhZmFyaSIsInRyaWdnZXJFdmVudCIsImJpbmRUb0luc3RhbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkaXNwbGF5IiwiZGF5c0NvbnRhaW5lciIsImRheXNXaWR0aCIsImRheXMiLCJvZmZzZXRXaWR0aCIsIndlZWtXcmFwcGVyIiwicmVtb3ZlUHJvcGVydHkiLCJ1cGRhdGVUaW1lIiwiZGVmYXVsdERhdGUiLCJnZXREZWZhdWx0SG91cnMiLCJ0aW1lV3JhcHBlciIsInByZXZWYWx1ZSIsIl9pbnB1dCIsInNldEhvdXJzRnJvbUlucHV0cyIsIl9kZWJvdW5jZWRDaGFuZ2UiLCJhbXBtMm1pbGl0YXJ5IiwibWlsaXRhcnkyYW1wbSIsImhvdXJFbGVtZW50IiwibWludXRlRWxlbWVudCIsInNlY29uZEVsZW1lbnQiLCJsaW1pdE1pbkhvdXJzIiwibWluVGltZSIsIm1pbkRhdGVIYXNUaW1lIiwibGltaXRNYXhIb3VycyIsIm1heFRpbWUiLCJtYXhEYXRlIiwibWF4RGF0ZUhhc1RpbWUiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJvblllYXJJbnB1dCIsImV2ZW50VGFyZ2V0IiwiZGVsdGEiLCJoYW5kbGVyIiwiZXYiLCJhZGRFdmVudExpc3RlbmVyIiwidHJpZ2dlckNoYW5nZSIsImV2dCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9uUmVzaXplIiwib25Nb3VzZU92ZXIiLCJib2R5Iiwib250b3VjaHN0YXJ0IiwiZG9jdW1lbnRDbGljayIsImNhcHR1cmUiLCJtb250aE5hdiIsIm9uTW9udGhOYXZDbGljayIsInNlbGVjdERhdGUiLCJ0aW1lQ29udGFpbmVyIiwic2VsVGV4dCIsInNlbGVjdCIsInRpbWVJbmNyZW1lbnQiLCJvbkJsdXIiLCJqdW1wRGF0ZSIsImp1bXBUbyIsIm9sZFllYXIiLCJvbGRNb250aCIsImJ1aWxkTW9udGhTd2l0Y2giLCJpbmNyZW1lbnROdW1JbnB1dCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwidGFiSW5kZXgiLCJidWlsZE1vbnRoTmF2IiwiaW5uZXJDb250YWluZXIiLCJidWlsZFdlZWtzIiwickNvbnRhaW5lciIsImJ1aWxkV2Vla2RheXMiLCJidWlsZERheXMiLCJidWlsZFRpbWUiLCJjdXN0b21BcHBlbmQiLCJhcHBlbmRUbyIsIm5vZGVUeXBlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJjcmVhdGVEYXkiLCJkYXlOdW1iZXIiLCJkYXRlSXNFbmFibGVkIiwiZGF5RWxlbWVudCIsIiRpIiwidG9kYXlEYXRlRWxlbSIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsImdldEZpcnN0QXZhaWxhYmxlRGF5Iiwic3RhcnRNb250aCIsImVuZE1vbnRoIiwic3RhcnRJbmRleCIsImdldE5leHRBdmFpbGFibGVEYXkiLCJnaXZlbk1vbnRoIiwibG9vcERlbHRhIiwibnVtTW9udGhEYXlzIiwiZm9jdXNPbkRheSIsImRheUZvY3VzZWQiLCJpc0luVmlldyIsImFjdGl2ZUVsZW1lbnQiLCJzdGFydEVsZW0iLCJidWlsZE1vbnRoRGF5cyIsImZpcnN0T2ZNb250aCIsInByZXZNb250aERheXMiLCJpc011bHRpTW9udGgiLCJwcmV2TW9udGhEYXlDbGFzcyIsIm5leHRNb250aERheUNsYXNzIiwiZGF5SW5kZXgiLCJkYXlDb250YWluZXIiLCJmcmFnIiwic2hvdWxkQnVpbGRNb250aCIsIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyIiwiaW5uZXJIVE1MIiwiYnVpbGRNb250aCIsImNvbnRhaW5lciIsIm1vbnRoTmF2RnJhZ21lbnQiLCJtb250aEVsZW1lbnQiLCJzZWxlY3RlZE1vbnRoIiwieWVhcklucHV0IiwidGFiaW5kZXgiLCJ5ZWFyRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZGlzYWJsZWQiLCJidWlsZE1vbnRocyIsInByZXZNb250aE5hdiIsInllYXJFbGVtZW50cyIsIm1vbnRoRWxlbWVudHMiLCJuZXh0TW9udGhOYXYiLCJfX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9faGlkZU5leHRNb250aEFycm93IiwiY3VycmVudFllYXJFbGVtZW50IiwidXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCIsInNlcGFyYXRvciIsImhvdXJJbnB1dCIsIm1pbnV0ZUlucHV0Iiwic2Vjb25kSW5wdXQiLCJnZXRBdHRyaWJ1dGUiLCJ0aXRsZSIsIndlZWtkYXlDb250YWluZXIiLCJ1cGRhdGVXZWVrZGF5cyIsInNwbGljZSIsImlzT2Zmc2V0IiwiX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9oaWRlTmV4dE1vbnRoQXJyb3ciLCJ0cmlnZ2VyQ2hhbmdlRXZlbnQiLCJ0b0luaXRpYWwiLCJtb2JpbGVJbnB1dCIsIl9pbml0aWFsRGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsYXN0Q2hpbGQiLCJfdHlwZSIsInJlbW92ZUF0dHJpYnV0ZSIsImlzQ2FsZW5kYXJFbGVtIiwiZXZlbnRUYXJnZXRfMSIsImlzQ2FsZW5kYXJFbGVtZW50IiwiaXNJbnB1dCIsImxvc3RGb2N1cyIsInJlbGF0ZWRUYXJnZXQiLCJpc0lnbm9yZWQiLCJzb21lIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImZyb20iLCJ0byIsImFsbG93S2V5ZG93biIsImFsbG93SW5saW5lS2V5ZG93biIsImJsdXIiLCJpc1RpbWVPYmoiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzQW5kQ2xvc2UiLCJkZWx0YV8xIiwiY3RybEtleSIsInN0b3BQcm9wYWdhdGlvbiIsImVsZW1zIiwic2hpZnRLZXkiLCJob3ZlckRhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImluaXRpYWxEYXRlIiwicmFuZ2VTdGFydERhdGUiLCJyYW5nZUVuZERhdGUiLCJjb250YWluc0Rpc2FibGVkIiwibWluUmFuZ2UiLCJtYXhSYW5nZSIsImRheUVsZW0iLCJvdXRPZlJhbmdlIiwiX3Bvc2l0aW9uRWxlbWVudCIsImNsaWNrIiwid2FzT3BlbiIsIm1pbk1heERhdGVTZXR0ZXIiLCJpbnZlcnNlRGF0ZU9iaiIsImJvb2xPcHRzIiwidXNlckNvbmZpZyIsImRhdGFzZXQiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsImdldElucHV0RWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJsMTBucyIsImRlZmF1bHQiLCJjdXN0b21Qb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsImFjYyIsImNoaWxkIiwib2Zmc2V0SGVpZ2h0IiwiY2FsZW5kYXJXaWR0aCIsImNvbmZpZ1BvcyIsImNvbmZpZ1Bvc1ZlcnRpY2FsIiwiY29uZmlnUG9zSG9yaXpvbnRhbCIsImlucHV0Qm91bmRzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzaG93T25Ub3AiLCJ0b3AiLCJwYWdlWU9mZnNldCIsImxlZnQiLCJwYWdlWE9mZnNldCIsImlzQ2VudGVyIiwiaXNSaWdodCIsInJpZ2h0IiwicmlnaHRNb3N0IiwiY2VudGVyTW9zdCIsImdldERvY3VtZW50U3R5bGVTaGVldCIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJCZWZvcmUiLCJjZW50ZXJBZnRlciIsImNlbnRlckluZGV4IiwiY3NzUnVsZXMiLCJjZW50ZXJTdHlsZSIsImluc2VydFJ1bGUiLCJlZGl0YWJsZVNoZWV0Iiwic3R5bGVTaGVldHMiLCJzaGVldCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJoZWFkIiwibXNNYXhUb3VjaFBvaW50cyIsImlzU2VsZWN0YWJsZSIsInNlbGVjdGVkRGF0ZSIsInNob3VsZENoYW5nZU1vbnRoIiwic2VsZWN0ZWRJbmRleCIsImIiLCJzaW5nbGUiLCJDQUxMQkFDS1MiLCJvcHRpb24iLCJzZXRTZWxlY3RlZERhdGUiLCJpbnB1dERhdGUiLCJydWxlIiwicHJlbG9hZGVkRGF0ZSIsIm5vZGVOYW1lIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsImlucHV0VHlwZSIsIm1vYmlsZUZvcm1hdFN0ciIsImRlZmF1bHRWYWx1ZSIsImhvb2tzIiwiaW5pdEV2ZW50IiwiZ2V0RGF0ZVN0ciIsImRPYmoiLCJpc1ByZXZNb250aCIsImlzTmV4dE1vbnRoIiwiaXNLZXlEb3duIiwiY3VyVmFsdWUiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJpc01pbnV0ZUVsZW0iLCJfZmxhdHBpY2tyIiwibm9kZUxpc3QiLCJIVE1MRWxlbWVudCIsImluc3RhbmNlcyIsIkhUTUxDb2xsZWN0aW9uIiwiTm9kZUxpc3QiLCJzZWxlY3RvciIsIk5vZGUiLCJsb2NhbGl6ZSIsInNldERlZmF1bHRzIiwialF1ZXJ5IiwiZnBfaW5jciIsIkNvbXBvbmVudCIsImdldFByb3RvdHlwZU9mIiwibWFwU3RvcmUiLCJzdXBlclN0b3JlIiwiZGVzY3MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwia2xhc3MiLCJnZXRPd25LZXlzIiwiZGVzYyIsImF1dG9iaW5kTWV0aG9kIiwiZ2V0Qm91bmRTdXBlciIsImJvdW5kRm4iLCJjcmVhdGVEZWZhdWx0U2V0dGVyIiwiYXV0b2JpbmRDbGFzcyIsImhhbmRsZSIsIkdFTkVSSUNfRlVOQ1RJT05fRVJST1IiLCJGVU5DVElPTl9SRUdFWFAiLCJTeW50YXhFcnJvclJlcG9ydGVyIiwidG9waWMiLCJwYXJlbnRLbGFzcyIsImNoaWxkS2xhc3MiLCJwYXJlbnREZXNjcmlwdG9yIiwiY2hpbGREZXNjcmlwdG9yIiwibXNnIiwicmVwb3J0ZXIiLCJwYXJlbnRWYWx1ZVR5cGUiLCJjaGlsZFZhbHVlVHlwZSIsImlzRnVuY3Rpb25PdmVyVW5kZWZpbmVkIiwiY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMiLCJwYXJlbnRIYXNHZXR0ZXIiLCJjaGlsZEhhc0dldHRlciIsInBhcmVudEhhc1NldHRlciIsImNoaWxkSGFzU2V0dGVyIiwicGFyZW50VHlwZSIsImdldERlc2NyaXB0b3JUeXBlIiwiY2hpbGRUeXBlIiwiY2hlY2tEYXRhRGVzY3JpcHRvcnMiLCJjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMiLCJzdWdnZXN0aW9uVHJhbnNmb3JtcyIsInN1Z2dlc3Rpb24iLCJzdXBlcktsYXNzIiwic3VwZXJEZXNjcmlwdG9yIiwic3VnZ2VzdGVkS2V5IiwiZmluZFBvc3NpYmxlQWx0ZXJuYXRpdmVzIiwiY2hlY2tEZXNjcmlwdG9ycyIsImRlY29yYXRlIiwibGlzdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJpdGVtIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJjc3NNYXBwaW5nIiwidXNlU291cmNlTWFwIiwic291cmNlTWFwcGluZyIsInRvQ29tbWVudCIsInNvdXJjZVVSTHMiLCJiYXNlNjQiLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpc0Rlc2NyaXB0b3IiLCJlbnRyeUFyZ3MiLCJoYW5kbGVEZXNjcmlwdG9yIiwiTWV0YSIsImxhenlJbml0aWFsaXplIiwiTUVUQV9LRVkiLCJzZWVuRGVwcmVjYXRpb25zIiwiQm9vbGVhblN3aXRjaCIsIlRlbXBsYXRlUmVuZGVyZXIiLCJnZXROYXRpdmUiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiaXNBcmd1bWVudHMiLCJpc0J1ZmZlciIsImlzVHlwZWRBcnJheSIsImJhc2VUaW1lcyIsIm9yaWdpbmFsTW9kdWxlIiwiaXNQbGFpbk9iamVjdCIsImJhc2VUb1N0cmluZyIsIkV2ZW50c01peGluIiwiRGF0ZVRpbWVJbnB1dCIsIkJvb2xlYW5FZGl0b3IiLCJrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlIiwic3dpdGNoZXIiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwidmFsdWVBc1N0cmluZyIsIl9ndWkiLCJmYWxsYmFjayIsIkFHcmlkQ29tcG9uZW50c01ldGFDb25maWciLCJ3aW4iLCJpbml0aWFsVmFsdWUiLCJsaXN0ZW5lciIsImJvb2xTd2l0Y2giLCJsYWJlbCIsIm92ZXJyaWRlIiwiYXV0b2JpbmQiLCJpbml0aWFsaXplciIsInVwZGF0ZSIsImxvY2F0aW9uIiwiYmFzZVVybCIsImN1cnJlbnREaXIiLCJmaXhlZENzcyIsInVucXVvdGVkT3JpZ1VybCIsIm5ld1VybCIsIkJvb2xlYW5SZW5kZXJlciIsImlzSW5pdCIsImJvb2xlYW5UcnVlUmVuZGVyVmFsdWUiLCJib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSIsImJvb2xlYW5UcnVlVmFsdWUiLCJib29sZWFuRmFsc2VWYWx1ZSIsIkJvb2xlYW5GaWx0ZXIiLCJ0b1RpdGxlQ2FzZSIsIndvcmQiLCJzdHJpcEhUTUwiLCJ0bXAiLCJfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uIiwidHJhbnNsYXRlIiwiaXNDbGVhckZpbHRlciIsImlzUmVzZXRCdXR0b24iLCJpc0FwcGx5QnV0dG9uIiwicmVzZXQiLCJhcHBseUZpbHRlclBhbmVsIiwiZmlsdGVyVHlwZSIsImZpbHRlclRleHRBc1N0cmluZyIsIk51bWJlckVkaXRvciIsInN0YXJ0VmFsdWUiLCJCYXNpcyIsIl9vbk51bWJlcklucHV0SW52YWxpZCIsImNhc3RlZCIsInJldFZhbHVlIiwiX21hc2tlZCIsImlzTmF2aWdhdGlvbktleSIsIlRleHRFZGl0b3IiLCJfb25UZXh0SW5wdXRJbnZhbGlkIiwiYXNzaWduSW5XaXRoIiwiYmFzZVZhbHVlcyIsImF0dGVtcHQiLCJjcmVhdGVBc3NpZ25lciIsImNvcHlPYmplY3QiLCJrZXlzSW4iLCJpc05ldyIsImN1c3RvbWl6ZXIiLCJhc3NpZ25WYWx1ZSIsIm9ialZhbHVlIiwiYmFzZUlzTmF0aXZlIiwicmVSZWdFeHBDaGFyIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwicmVJc05hdGl2ZSIsImlzTWFza2VkIiwidG9Tb3VyY2UiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwibWFza1NyY0tleSIsInVpZCIsImNvcmVKc0RhdGEiLCJzb3VyY2VzIiwiYXNzaWduZXIiLCJuYXRpdmVNYXgiLCJvdGhlckFyZ3MiLCJzaG9ydE91dCIsImJhc2VTZXRUb1N0cmluZyIsImNvbnN0YW50IiwiSE9UX0NPVU5UIiwiSE9UX1NQQU4iLCJuYXRpdmVOb3ciLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsImJhc2VLZXlzSW4iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImJhc2VJc0FyZ3VtZW50cyIsImFyZ3NUYWciLCJmcmVlRXhwb3J0cyIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiQnVmZmVyIiwibmF0aXZlSXNCdWZmZXIiLCJzdHViRmFsc2UiLCJub2RlSXNUeXBlZEFycmF5Iiwibm9kZVV0aWwiLCJiYXNlVW5hcnkiLCJiYXNlSXNUeXBlZEFycmF5IiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsIm9iamVjdFRhZyIsInJlZ2V4cFRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsIndlYWtNYXBUYWciLCJhcnJheUJ1ZmZlclRhZyIsImRhdGFWaWV3VGFnIiwiZmxvYXQzMlRhZyIsImZsb2F0NjRUYWciLCJpbnQ4VGFnIiwiaW50MTZUYWciLCJpbnQzMlRhZyIsInVpbnQ4VGFnIiwidWludDhDbGFtcGVkVGFnIiwidWludDE2VGFnIiwidWludDMyVGFnIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwibmF0aXZlS2V5c0luIiwiaXNQcm90byIsIm9iamVjdEN0b3JTdHJpbmciLCJnZXRQcm90b3R5cGUiLCJzdHJpbmdFc2NhcGVzIiwiYmFzZUtleXMiLCJuYXRpdmVLZXlzIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlSHRtbENoYXIiLCJodG1sRXNjYXBlcyIsImJhc2VQcm9wZXJ0eU9mIiwiSU5GSU5JVFkiLCJzeW1ib2xQcm90byIsInN5bWJvbFRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUYWciLCJJbWFnZVJlbmRlcmVyIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiaW1hZ2VMaXN0IiwiRGF0ZVRpbWVGaWx0ZXIiLCJUT0tFTlMiLCJUT0tFTl9FUVVBTCIsIlRPS0VOX05PVF9FUVVBTCIsIlRPS0VOX0xFU1MiLCJUT0tFTl9HUkVBVEVSIiwiVE9LRU5fUkFOR0UiLCJUT0tFTl9BTkQiLCJUT0tFTl9PUiIsIkNvbmRpdGlvblBhbmVsIiwid2l0aEV2ZW50c01peGluIiwiX2ZpbHRlclRpbWVJbnB1dCIsIl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQiLCJfZmlsdGVyT3B0aW9ucyIsIl9kZWZhdWx0T3B0aW9uIiwib3B0aW9uc1RyYW5zbGF0aW9ucyIsImd1aSIsImZpbHRlck9wdGlvbnMiLCJzZWxlY3RFbCIsImZpbHRlcklucHV0IiwiZmlsdGVyVG9JbnB1dCIsImZpbHRlckRhdGVUbyIsIk9OX0NPTkRJVElPTl9DSEFOR0VEIiwicmVhZG9ubHkiLCJmaWx0ZXJUbyIsIkpvaW5Db25kaXRpb25QYW5lbCIsIl9maXJzdENvbmRpdGlvblBhbmVsIiwiX3NlY29uZENvbmRpdGlvblBhbmVsIiwiX29wZXJhdG9yUGFuZWwiLCJfcGFyYW1zIiwiaWRPbmUiLCJpZFR3byIsInN1cHByZXNzQW5kT3JDb25kaXRpb24iLCJzZWNvbmRDb25kaXRpb25HdWkiLCJvcGVyYXRvclBhbmVsR3VpIiwiT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCIsImNvbmRpdGlvbjEiLCJjb25kaXRpb24yIiwib3BlcmF0b3IiLCJfSm9pbkNvbmRpdGlvblBhbmVsIiwiX3N0YXRlIiwiX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyIsImluUmFuZ2VJbmNsdXNpdmUiLCJ2YWx1ZUdldHRlciIsImRvZXNQYXNzRmlyc3RDb25kaXRpb24iLCJkb2VzUGFzc1NlY29uZENvbmRpdGlvbiIsImNsb25lIiwiZGF0ZVRpbWVNYXNrIiwiQkJqIiwiZmlyc3RDb25kaXRpb25Bc1N0cmluZyIsInNlY29uZENvbmRpdGlvbkFzU3RyaW5nIiwib3BlcmF0b3JBc1N0cmluZyIsInBhc3NlZCIsImlzQXBwbHlCdXR0b25BY3RpdmUiLCJyZXF1aXJlZEFyZ3MiLCJoYXNOZWdhdGl2ZVVUQ09mZnNldCIsImdldERhdGVNaWxsaXNlY29uZHNQYXJ0IiwiaGFuZGxlcnMiLCJpc0VkaXRvciIsInBpY2tlciIsImRhdGVUaW1lRm9ybWF0dGVyIiwid2Vla0RheXNTaG9ydCIsIndlZWtEYXlzTG9uZyIsIm1vbnRoc1Nob3J0IiwibW9udGhzTG9uZyIsIk9OX0RBVEVfQ0hBTkdFRCIsIkRhdGVUaW1lRWRpdG9yIiwiX3ZhbHVlIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRldGFpbCIsImluaXRDdXN0b21FdmVudCIsIkV2ZW50IiwiZ3dfaW5pdCIsImxpY2Vuc2UiLCJhZ0dyaWQiLCJMaWNlbnNlTWFuYWdlciIsInNldExpY2Vuc2VLZXkiLCJwYXJzZWRPcHRpb25zIiwiZ3dfcGFyc2VPcHRpb25zIiwiR3JpZCIsImRlZXBQYXJzZWRPcHRpb25zIiwiZ2V0RGF0YVBhdGhUZW1wbGF0ZSIsImdldERhdGFQYXRoIiwiZGVib3VuY2VEdXJhdGlvbiIsImZpbmFsT3B0aW9ucyIsImdldERvY3VtZW50Iiwib25DZWxsRWRpdGluZ1N0YXJ0ZWQiLCJvbkNlbGxFZGl0aW5nU3RvcHBlZCIsIm9uQ2VsbFZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0YXJ0ZWQiLCJvblJvd1ZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0b3BwZWQiLCJvbkdyaWRSZWFkeSIsImdldENvbnRleHRNZW51SXRlbXMiLCJnZXRDaGFydFRvb2xiYXJJdGVtcyIsInBvcHVwUGFyZW50Iiwib25Sb3dEb3VibGVDbGlja2VkIiwiZ3dfb25Sb3dEb3VibGVDbGlja2VkIiwib25Sb3dDbGlja2VkIiwiZ3dfb25Sb3dDbGlja2VkIiwib25DZWxsQ2xpY2tlZCIsImd3X29uQ2VsbENsaWNrRXZlbnQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwiZ3dfb25TZWxlY3Rpb25DaGFuZ2VkIiwib25SYW5nZVNlbGVjdGlvbkNoYW5nZWQiLCJnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCIsImNvbXBvbmVudHMiLCJBZ0dyaWRDb21wb25lbnRzIiwiSFRNTFRvb2x0aXAiLCJTdWdnZXN0aW9uRWRpdG9yIiwibmF2aWdhdGVUb05leHRDZWxsIiwidHJlZURhdGEiLCJnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQiLCJnd19nZXRDb250ZXh0TWVudSIsImdyaWRJZCIsImJ1aWxkQ29udGV4dE1lbnVBY3Rpb24iLCJwYXJzZU1lbnUiLCJtZW51IiwiY29udGV4dE1lbnUiLCJDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAiLCJjZWxsQ2xpY2tlZCIsImNlbGxEb3VibGVDbGlja2VkIiwiQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAiLCJjZWxsRWRpdGluZ1N0YXJ0ZWQiLCJjZWxsRWRpdGluZ1N0b3BwZWQiLCJjZWxsVmFsdWVDaGFuZ2VkIiwiUk9XX0VESVRJTkdfRVZFTlRTX01BUCIsInJvd0VkaXRpbmdTdGFydGVkIiwicm93RWRpdGluZ1N0b3BwZWQiLCJyb3dWYWx1ZUNoYW5nZWQiLCJnd19vbkNlbGxFZGl0aW5nRXZlbnQiLCJnd19vblJvd0VkaXRpbmdFdmVudCIsImd3X29uUmVhZHlFdmVudCIsIl9lIiwic3RhdGVEZWJvdW5jZSIsImNoYW5nZUV2ZW50Iiwia2V5ZG93bkV2ZW50Iiwia2MiLCJhayIsImFsdEtleSIsInNrIiwiY2siLCJnd19vblN0YXRlQ2hhbmdlZCIsImd3X29uS2V5ZG93biIsInNyY0luZGV4IiwiSUVfUFJPVE8iLCJwcm9jZXNzIiwiYmluZGluZyIsInNyY1ZhbHVlIiwiY2hyIiwiZUd1aSIsImlzSGVhZGVyIiwiaXNHcm91cGVkSGVhZGVyIiwidGhlbWUiLCJncmlkQ29yZSIsImVHcmlkRGl2IiwiZW5kc1dpdGgiLCJ0b29sdGlwRmllbGQiLCJwYXNzZWRQYXJhbXMiLCJ0ZXh0UGF0dGVybiIsInRleHRSZXF1aXJlZCIsInRleHRUaXRsZSIsImRlYm91bmNlV2FpdE1zIiwiX2ZvY3VzQWZ0ZXJBdHRhY2hlZCIsImNlbGxTdGFydGVkRWRpdCIsIl9oaWdobGlnaHRBbGxPbkZvY3VzIiwiX29uQ2hhbmdlIiwiX3JlbmRlckl0ZW1UZW1wbGF0ZSIsIml0ZW1UZW1wbGF0ZSIsIl9yZW5kZXJHcm91cFRlbXBsYXRlIiwiZ3JvdXBUZW1wbGF0ZSIsIl9hdXRvY29tcGxldGUiLCJwcmV2ZW50U3VibWl0IiwiZmV0Y2giLCJfb25BdXRvY29tcGxldGVGZXRjaCIsIm9uU2VsZWN0IiwiX29uQXV0b2NvbXBsZXRlU2VsZWN0IiwicmVuZGVyR3JvdXAiLCJfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cCIsInJlbmRlciIsIl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0iLCJjdXN0b21pemUiLCJfb25BdXRvY29tcGxldGVDdXN0b21pemUiLCJlbXB0eU1zZyIsImVtcHR5TWVzc2FnZSIsIm1pbkxlbmd0aCIsInNob3dPbkZvY3VzIiwiZm9jdXNJbiIsImFsbG93Q3VzdG9tVmFsdWVzIiwiX3ZhbGlkYXRlSW5wdXQiLCJfbGFzdEZldGNoZWREYXRhIiwiZmlsdGVyZWRJdGVtcyIsInRleHQiLCJzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCIsImVHcmlkQ2VsbCIsImN1cnJlbnRWYWx1ZSIsImdyb3VwTmFtZSIsImlucHV0UmVjdCIsIm1heEhlaWdodCIsImNoZWNrVmFsaWRpdHkiLCJnd19zZXRTdGF0ZSIsInNldENvbHVtblN0YXRlIiwic2V0Q29sdW1uR3JvdXBTdGF0ZSIsImdyb3VwcyIsInNldEZpbHRlck1vZGVsIiwiZmlsdGVycyIsImd3X2dldFN0YXRlIiwiZ2V0Q29sdW1uU3RhdGUiLCJnZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ2V0U29ydE1vZGVsIiwiZ2V0RmlsdGVyTW9kZWwiLCJnd19zZXRTaWRlQmFyVmlzaWJsZSIsInNldFNpZGVCYXJWaXNpYmxlIiwiZ3dfb3BlblRvb2xwYW5lbCIsInRvb2xwYW5lbElkIiwib3BlblRvb2xQYW5lbCIsImd3X2Nsb3NlVG9vbHBhbmVsIiwiY2xvc2VUb29sUGFuZWwiLCJnd19zZXRGdW5jdGlvbnNSZWFkT25seSIsInNldEZ1bmN0aW9uc1JlYWRPbmx5IiwiZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eSIsImdldFN0YXR1c1BhbmVsIiwic2V0VmlzaWJsZSIsImd3X3Nob3dMb2FkaW5nT3ZlcmxheSIsInNob3dMb2FkaW5nT3ZlcmxheSIsImd3X3Nob3dOb1Jvd3NPdmVybGF5Iiwic2hvd05vUm93c092ZXJsYXkiLCJnd19oaWRlT3ZlcmxheSIsImhpZGVPdmVybGF5IiwiZ3dfdXBkYXRlQ29udGV4dCIsImd3X3NldFN0eWxlIiwicnVsZXMiLCJqc3MiLCJmb3JEb2N1bWVudCIsImd3X3JlbW92ZVN0eWxlIiwiYWRqU2VsQXR0clJlZ2V4IiwiZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cyIsImdldFNlbGVjdG9yc0FuZFJ1bGVzIiwicmVzdWx0cyIsInNlbGVjdG9yVGV4dCIsInRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyIsImdldFJ1bGVzIiwic3dhcEFkalNlbEF0dHIiLCJzd2FwUHNldWRvRWxTeW50YXgiLCJhZGRSdWxlIiwicHNldWRvRWxlbWVudFJ1bGUiLCJhZGRQc2V1ZG9FbGVtZW50UnVsZSIsImFkZFJ1bGVUb1NoZWV0IiwiZG91YmxlQ29sb25TZWxlY3RvciIsInNpbmdsZUNvbG9uU2VsZWN0b3IiLCJ0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMiLCJzdWJtYXRjaDEiLCJzdWJtYXRjaDIiLCJzdWJtYXRjaDMiLCJyZW1vdmVSdWxlIiwiZGVsZXRlUnVsZSIsImV4dGVuZCIsImRlc3QiLCJzcmMiLCJhZ2dyZWdhdGVTdHlsZXMiLCJhZ2dyZWdhdGUiLCJkZWNsYXJlZFByb3BlcnRpZXMiLCJkZWNsYXJlZCIsInRvQ2FtZWxDYXNlIiwic3dhcCIsImxhc3RJbmRleCIsInNldFN0eWxlUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpbXBvcnRhbnRJbmRleCIsInNldFByb3BlcnR5Iiwic3VibWF0Y2giLCJ0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyIsIm9sZFByb3BzIiwibmV3UHJvcHMiLCJ1bkNhbWVsQ2FzZSIsIkpzcyIsInNoZWV0cyIsImRlZmF1bHRTaGVldCIsImdldEFsbCIsIl9jcmVhdGVTaGVldCIsIl9yZW1vdmVTaGVldCIsInN0eWxlTm9kZSIsInJlbCIsIm93bmVyTm9kZSIsImNzcyIsInByb3RvY29sIiwiaG9zdCIsInBhdGhuYW1lIiwiZnVsbE1hdGNoIiwib3JpZ1VybCIsIiQxIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFD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QUFDQTtBQUNBOztBQUVBLGFBQWEsbUJBQU8sQ0FBQyxFQUFtRDs7QUFFeEU7O0FBRUEsR0FBRyxLQUFVLEVBQUUsRTs7Ozs7O0FDckJmLG9EQUFvRCxzQkFBc0IsbUZBQW1GLHVCQUF1QixpREFBaUQsbUJBQW1CLGtCQUFrQixHQUFHLGlLQUFpSyx1REFBdUQsR0FBRyxxSEFBcUgsMERBQTBELEdBQUcsbUJBQW1CLHVEQUF1RCxrQkFBa0IsbUNBQW1DLG1DQUFtQyxtRkFBbUYsa0JBQWtCLHVCQUF1Qiw4QkFBOEIsK0JBQStCLG1CQUFtQix3REFBd0Qsd0RBQXdELEdBQUcsd0JBQXdCLDBEQUEwRCxrRUFBa0UsR0FBRyxxQ0FBcUMscUJBQXFCLHFCQUFxQixzQkFBc0IsR0FBRywwQ0FBMEMsb0RBQW9ELEdBQUcsb0NBQW9DLGtCQUFrQixvQkFBb0IsR0FBRywwQ0FBMEMseUVBQXlFLEdBQUcsNkNBQTZDLHNHQUFzRyxHQUFHLDBCQUEwQixxQkFBcUIsR0FBRywrQkFBK0IsK0NBQStDLCtDQUErQyxHQUFHLGlDQUFpQywrQ0FBK0MsK0NBQStDLEdBQUcsRyIsImZpbGUiOiJiYmotZ3JpZC13aWRnZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDApO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogR2V0IGRvY3VtZW50XG4gKlxuICogR2V0IHRoZSBkb2N1bWVudCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgQkJqIGVudlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRG9jdW1lbnQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldERvY3VtZW50KCkge1xuICByZXR1cm4gdHlwZW9mICRkb2MgIT09ICd1bmRlZmluZWQnID8gJGRvYyA6IGRvY3VtZW50XG59XG5cbi8qKlxuICogR2V0IHdpbmRvd1xuICpcbiAqIEdldCB0aGUgd2luZG93IGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBCQmogZW52XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBXaW5kb3cgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFdpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiAkd25kICE9PSAndW5kZWZpbmVkJyA/ICR3bmQgOiB3aW5kb3dcbn1cblxuLyoqXG4gKiBFc2NhcGUgVmFsdWVcbiAqXG4gKiBDaGFuZ2UgbnVsbCBhbmQgdW5kZWZpbmVkIHRvIGVtcHR5IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVzY2FwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2VzY2FwZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJydcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSB1dWlkXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9jcmVhdGUtZ3VpZC11dWlkLWluLWphdmFzY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3V1aWQoKSB7XG4gIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcbiAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDhcbiAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgR3JpZFxuICpcbiAqIFJldHJpZXZlIHRoZSBncmlkIGluc3RhbmNlIGZyb20gYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gVGhlIGdyaWQncyBpbnN0YW5jZSBvZnIgbnVsbFxuICogQHRocm93cyBUeXBlRXJyb3Igd2hlbiB0aGUgZ3JpZCBpbnN0YW5jZSBpcyBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldEdyaWQoaWQpIHtcbiAgd2luZG93LkJCakdyaWRFeFdpZGdldCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgfHwge31cbiAgY29uc3QgZ3JpZCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdIHx8IG51bGxcblxuICBpZiAoIWdyaWQpIHtcbiAgICBjb25zdCByZWdpc3RlcmVkR3JpZHMgPSBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0KSlcbiAgICAvL2dldEZ1bmNBcmdzKGZ1bmMpLmZvckVhY2goKGtleSwgaSkgPT4gYXJnc09ialtrZXldID0gYXJnc1tpXSk7XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFxcblxcbltHcmlkIE5vdCBGb3VuZF0gVGhlIG1ldGhvZCBhc2tlZCBmb3Igbm9uLWV4aXN0ZW50IGdyaWQgaW5zdGFuY2UuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5SZXF1aXJlZCBHcmlkIElkIDogJHtpZH0gICBcblJlZ2lzdGVyZWQgR3JpZHMgOiAke3JlZ2lzdGVyZWRHcmlkc31cbmBcbiAgICApXG4gIH1cblxuICByZXR1cm4gZ3JpZFxufVxuXG4vKipcbiAqIEFkZCBHcmlkXG4gKlxuICogU3RvcmUgYSBuZXcgZ3JpZCBpbnN0YW5jZSBieSBpbiB0aGUgYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBUaGUgZ3JpZCdzIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IFN0b3JlZCBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRHcmlkKGlkLCBvcHRpb25zKSB7XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgPSB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0IHx8IHt9XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdID0gb3B0aW9uc1xuXG4gIHJldHVybiBnd19nZXRHcmlkKGlkKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19kZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXRcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb250ZXh0ID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHNcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZW5kIGFuIGV2ZW50IHRvIEJCaiBzaWRlXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY29udGV4dCB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCB0aGUgZXZlbnQgcGF5bG9hZFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50SWQgdGhlIGV2ZW50J3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NlbmRFdmVudChjb250ZXh0LCBwYXlsb2FkID0ge30sIGV2ZW50SWQgPSBbXSkge1xuICBjb25zdCByZWdpc3RlcmVkSW50ZXJlc3RzID0gY29udGV4dC5pbnRlcmVzdHMgfHwgW11cblxuICBpZiAocmVnaXN0ZXJlZEludGVyZXN0cy5pbmNsdWRlcyhldmVudElkKSkge1xuICAgIGNvbnN0IGRpdiA9IGd3X2dldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoYCR7Y29udGV4dC5pZH1gKVxuICAgIHdpbmRvdy5iYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQoZGl2LCBwYXlsb2FkKVxuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5kZXhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXJlbnRLZXlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGlsZEluZGV4XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBhIG5vZGUgYXMgQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5vZGUgYWcgZ3JpZCBub2RlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAgYWcgZ3JpZCBjb250ZXh0XG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd3xCb29sZWFufSBvYmplY3QgZm9ybWF0dGVkIGFzIEJCakdyaWRFeFdpZGdldFJvdy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgaWYgdGhlIG5vZGUgaXMgZm9yIGdyb3VwIG5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZShub2RlLCBjb250ZXh0KSB7XG4gIGlmICh0cnVlID09PSBub2RlLmdyb3VwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy8gd2UgZG8gbm90IG1hbmFnZSBncm91cHNcblxuICBjb25zdCBnZXRSb3dOb2RlSWQgPSBub2RlLnJvd1Bpbm5lZCA/ICdfX1JPV19JTkRFWCcgOiBjb250ZXh0LmdldFJvd05vZGVJZFxuXG4gIHJldHVybiB7XG4gICAgaTpcbiAgICAgIGNvbnRleHQuaGFzT3duUHJvcGVydHkoJ2dldFJvd05vZGVJZCcpICYmIG5vZGUuZGF0YVtnZXRSb3dOb2RlSWRdXG4gICAgICAgID8gbm9kZS5kYXRhW2dldFJvd05vZGVJZF1cbiAgICAgICAgOiBub2RlLmlkLCAvLyBpZFxuICAgIHg6IG5vZGUucm93SW5kZXgsIC8vIGluZGV4XG4gICAgcDpcbiAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICA6ICcnLCAvLyBwYXJlbnQga2V5XG4gICAgYzogbm9kZS5yb3dQaW5uZWQgPyAtMSA6IG5vZGUuY2hpbGRJbmRleCwgLy9jaGlsZEluZGV4XG4gICAgczogQm9vbGVhbihub2RlLnNlbGVjdGVkKSwgLy8gc2VsZWN0ZWRcbiAgICAvLyBjbGllbnQgcm93XG4gICAgY3I6XG4gICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KCdpbmNsdWRlQ2xpZW50Um93RGF0YScpICYmXG4gICAgICBjb250ZXh0WydpbmNsdWRlQ2xpZW50Um93RGF0YSddID09PSB0cnVlXG4gICAgICAgID8gbm9kZS5kYXRhXG4gICAgICAgIDogbnVsbCxcbiAgICBwcDogbm9kZS5yb3dQaW5uZWQsIC8vIHBpbiBwb3NpdGlvblxuICB9XG59XG5cbi8qKlxuICogUGFyc2Ugbm9kZSBmcm9tIGV2ZW50XG4gKlxuICogUGFyc2Ugbm9kZSBpbiB0aGUgcGFTc2VkIGV2ZW50IGFzIEJCakdyaWRFeFdpZGdldFJvd1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZUZyb21FdmVudChlKSB7XG4gIHJldHVybiBnd19wYXJzZU5vZGUoZS5ub2RlLCBlLmNvbnRleHQpXG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIFtSZWN1cnNpdmVseSBwYXJzZXMgYSBzdHJpbmdpZmllZCBKU09OXVxuICogQHBhcmFtICB7W3R5cGVdfSBqc29uU3RyaW5nIFtzdHJpbmdpZmllZCBqc29uIHRvIHBhcnNlXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICAgIFtub3JtYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XVxuICovXG5mdW5jdGlvbiBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmcpIHtcbiAgLy8gaWYgbm90IHN0cmluZ2lmaWVkIGpzb24gcmF0aGVyIGEgc2ltcGxlIHN0cmluZyB2YWx1ZSB0aGVuIEpTT04ucGFyc2Ugd2lsbCB0aHJvdyBlcnJvclxuICAvLyBvdGhlcndpc2UgY29udGludWUgcmVjdXJzaW9uXG4gIGlmICh0eXBlb2YganNvblN0cmluZyA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZShqc29uU3RyaW5nKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ganNvblN0cmluZztcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqc29uU3RyaW5nKSkge1xuICAgIC8vIGlmIGFuIGFycmF5IGlzIHJlY2VpdmVkLCBtYXAgb3ZlciB0aGUgYXJyYXkgYW5kIGRlZXBQYXJzZSBlYWNoIHZhbHVlXG4gICAgcmV0dXJuIGpzb25TdHJpbmcubWFwKHZhbCA9PiBkZWVwUGFyc2VKc29uKHZhbCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09PSAnb2JqZWN0JyAmJiBqc29uU3RyaW5nICE9PSBudWxsKSB7XG4gICAgLy8gaWYgYW4gb2JqZWN0IGlzIHJlY2VpdmVkIHRoZW4gZGVlcFBhcnNlIGVhY2ggZWxlbWVudCBpbiB0aGUgb2JqZWN0XG4gICAgLy8gdHlwZW9mIG51bGwgcmV0dXJucyAnb2JqZWN0JyB0b28sIHNvIHdlIGhhdmUgdG8gZWxpbWluYXRlIHRoYXRcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvblN0cmluZykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmdba2V5XSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIHdhcyByZWNlaXZlZFxuICAgIHJldHVybiBqc29uU3RyaW5nO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZWVwUGFyc2VKc29uIH07XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8vIHNlbGVjdGlvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfU0VMRUNUID0gNjlcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfQ0xJQ0sgPSA1MDExXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDSyA9IDUyXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9DTElDSyA9IDUwMDFcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyA9IDUwMDJcblxuLy8gZWRpdGluZyBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCA9IDUwMDNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCA9IDUwMDRcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQgPSA1MDA1XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCA9IDUwMDZcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVEID0gNTAwN1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VEID0gNTAxMlxuXG4vLyBzdGF0ZSBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9HUklEX1NUQVRFX0NIQU5HRSA9IDUwMDhcblxuLy8gcmFuZ2Ugc2VsZWN0aW9uXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQgPSA1MDA5XG5cbi8vIGtleWJvYXJkIGV2ZW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0tFWVBSRVNTID0gNTAxMFxuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG4iLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBwYXNzaW5nIGZ1bmN0aW9uIGluIG9wdGlvbnMsIHRoZW4gdXNlIGl0IGZvciByZXNvbHZlIFwiaGVhZFwiIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVXNlZnVsIGZvciBTaGFkb3cgUm9vdCBzdHlsZSBpLmVcbiAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgLy8gICBpbnNlcnRJbnRvOiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Zvb1wiKS5zaGFkb3dSb290IH1cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHZhciBzdHlsZVRhcmdldCA9IGdldFRhcmdldC5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBTdHJpbmdNYXNrIGZyb20gJy4vU3RyaW5nTWFzaydcblxuZXhwb3J0IGRlZmF1bHQgU3RyaW5nTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJy4vTnVtYmVyTWFzaydcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2V4ZWN1dGVFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbidcbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBFeHRlbmQgdGhlIGNvbHVtbiBkZWZpbml0aW9uc1xuICpcbiAqIEV4dGVuZCB0aGUgY29sdW1uIGRlZmluaXRpb25zIHdpdGggb3B0aW9ucyB3aGljaCBjYW4gbm90IGJlIGhhbmRsZWQgaW4gQkJqXG4gKiAoZXg6IGF0dGFjaGluZyBjYWxsYmFja3MpXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGVmaW5pdGlvbnMgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICBmb3IgKGxldCBpIGluIGRlZmluaXRpb25zKSB7XG4gICAgY29uc3QgZGVmID0gZGVmaW5pdGlvbnNbaV1cblxuICAgIGRlZi5jaGVja2JveFNlbGVjdGlvbiA9IGRlZi5jaGVja2JveFNlbGVjdGlvbiB8fCBnd19pc1Nob3dTZWxlY3Rpb25DaGVja2JveFxuICAgIGRlZi5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9XG4gICAgICBkZWYuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gfHwgZ3dfaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvblxuXG4gICAgY29uc3QgdG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbiA9IGRlZi50b29sdGlwVmFsdWVHZXR0ZXJcbiAgICBpZiAodG9vbHRpcFZhbHVlR2V0dGVyRXhwcmVzc2lvbikge1xuICAgICAgZGVmLnRvb2x0aXBWYWx1ZUdldHRlciA9IHBhcmFtcyA9PlxuICAgICAgICBnd19leGVjdXRlRXhwcmVzc2lvbih0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgZGVmLnRvb2x0aXBDb21wb25lbnQgPSAnSFRNTFRvb2x0aXAnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSAmJiB0eXBlb2YgZGVmLmVkaXRhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZWRpdGFibGUgPSBkZWYuZWRpdGFibGVcbiAgICAgIGRlZi5lZGl0YWJsZSA9IHBhcmFtcyA9PiBnd19leGVjdXRlRXhwcmVzc2lvbihlZGl0YWJsZSwgcGFyYW1zKVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoZGVmLmhhc093blByb3BlcnR5KCdyb3dTcGFuJykgJiYgdHlwZW9mIGRlZi5yb3dTcGFuID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3Qgcm93U3BhbiA9IGRlZi5yb3dTcGFuXG4gICAgICBkZWYucm93U3BhbiA9IHBhcmFtcyA9PiBnd19leGVjdXRlRXhwcmVzc2lvbihyb3dTcGFuLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChkZWYuaGFzT3duUHJvcGVydHkoJ2NvbFNwYW4nKSAmJiB0eXBlb2YgZGVmLmNvbFNwYW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjb2xTcGFuID0gZGVmLmNvbFNwYW5cbiAgICAgIGRlZi5jb2xTcGFuID0gcGFyYW1zID0+IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGNvbFNwYW4sIHBhcmFtcylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnY2hpbGRyZW4nKSkge1xuICAgICAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVmLmNoaWxkcmVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgY29sdW1uIGRlZmluaXRpb25zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge0FycmF5fSBkZWZpbml0aW9ucyBhcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldENvbHVtbkRlZmluaXRpb25zKGlkLCBkZWZpbml0aW9ucykge1xuICBjb25zdCBncmlkID0gZ3dfZ2V0R3JpZChpZClcbiAgY29uc3QgZGVlcFBhcnNlZERlZmluaXRpb25zID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShkZWZpbml0aW9ucykpXG5cbiAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZGVlcFBhcnNlZERlZmluaXRpb25zKVxuXG4gIGdyaWQub3B0aW9ucy5hcGkuc2V0Q29sdW1uRGVmcyhkZWVwUGFyc2VkRGVmaW5pdGlvbnMpXG4gIGdyaWQub3B0aW9ucy5jb2x1bW5EZWZzID0gZGVlcFBhcnNlZERlZmluaXRpb25zXG59XG5cbi8qKlxuICogTWFrZSB0aGUgY3VycmVudGx5IHZpc2libGUgY29sdW1ucyBmaXQgdGhlIHNjcmVlblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gdGhlIHdpZHRoIHRvIHVzZSB0byBmaXQgYWxsIGNvbHVtbnMgaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NpemVDb2x1bW5zVG9GaXQoaWQsIHdpZHRoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IGNvbHVtbnNBUEkgPSBvcHRpb25zLmNvbHVtbkFwaVxuICBpZiAod2lkdGgpIHtcbiAgICBjb2x1bW5zQVBJLnNpemVDb2x1bW5zVG9GaXQoTnVtYmVyKHdpZHRoKSlcbiAgfSBlbHNlIHtcbiAgICBhcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpXG4gIH1cbn1cblxuLyoqXG4gKiBXb3JrIG91dCB0aGUgYmVzdCB3aWR0aCB0byBmaXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjZWxscyBpbiB0aGUgY29sdW1uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtza2lwSGVhZGVyPWZhbHNlXSB3aGVuIHRydWUgaW5kaWNhdGUgdGhhdCB0aGUgaGVhZGVyIGNvbnRlbnQgKGhlYWRlck5hbWUpIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gW2NvbHVtbnM9bnVsbF0gYW4gYXJyYXkgb2YgY29sdW1ucyBpZHMgdG8gYXV0byBzaXplIG9yIG51bGwgdG8gYXV0byBzaXplIGFsbCBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hdXRvU2l6ZUNvbHVtbnMoaWQsIHNraXBIZWFkZXIgPSBmYWxzZSwgY29sdW1ucyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgY29sdW1uc0FQSSA9IG9wdGlvbnMuY29sdW1uQXBpXG5cbiAgaWYgKCEoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCkpIHtcbiAgICBjb25zdCBhbGxDb2x1bW5JZHMgPSBbXVxuXG4gICAgY29sdW1uc0FQSS5nZXRBbGxDb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmNvbElkKVxuICAgIH0pXG5cbiAgICBjb2x1bW5zQVBJLmF1dG9TaXplQ29sdW1ucyhhbGxDb2x1bW5JZHMsIEJvb2xlYW4oc2tpcEhlYWRlcikpXG4gIH0gZWxzZSB7XG4gICAgY29sdW1uc0FQSS5hdXRvU2l6ZUNvbHVtbnMoY29sdW1ucywgQm9vbGVhbihza2lwSGVhZGVyKSlcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmVzIHRoZSBjb2x1bW4gaXMgdmlzaWJsZSwgc2Nyb2xsaW5nIHRoZSB0YWJsZSBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgIHRoZSBjb2x1bW4gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2Vuc3VyZUNvbHVtblZpc2libGUoaWQsIGNvbHVtbklkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmVuc3VyZUNvbHVtblZpc2libGUoY29sdW1uSWQpXG59XG5cbi8qKlxuICogU2V0IENvbHVtbiBXaWR0aFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gd2lkdGggVGhlIG5ldyBjb2x1bW4gd2lkdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldENvbHVtbldpZHRoKGlkLCBjb2x1bW5JZCwgd2lkdGgpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uV2lkdGgoY29sdW1uSWQsIE51bWJlcih3aWR0aCkpXG59XG5cbi8qKlxuICogUGluIENvbHVtblxuICpcbiAqIFBpbiBhIGNvbHVtbiB0byBhIHNwZWNpZmljIGRpcmVjdGlvblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwaW4gVGhlIHBpbiBkaXJlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BpbkNvbHVtbihpZCwgY29sdW1uSWQsIHBpbikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5QaW5uZWQoY29sdW1uSWQsIHBpbilcbn1cblxuLyoqXG4gKiBNb3ZlIENvbHVtblxuICpcbiAqIE1vdmUgY29sdW1uIHRvIGEgc3BlY2lmaWMgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IHRvSW5kZXggVGhlIG5ldyBjb2x1bW4gaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X21vdmVDb2x1bW4oaWQsIGNvbHVtbklkLCB0b0luZGV4KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLm1vdmVDb2x1bW4oY29sdW1uSWQsIHRvSW5kZXgpXG59XG5cbi8qKlxuICogU2hvdyAvIEhpZGUgc2VsZWN0aW9uIGNoZWNrYm94IGJhc2VkIG9uIHRoZSBmaXJzdCBjb2x1bW5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbWFrZSBzdXJlIHRoYXQgdGhlIHNlbGVjdGlvbiBjaGVja2JveCBpcyBhbHdheXMgc2hvd24gb24gdGhlXG4gKiBmaXJzdCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gZmlyc3QgY29sdW1uICwgZmFsc2UgaWYgbm90IHRoZSBmaXJzdCBjb2x1bW4gb3IgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBncmlkJ3MgYENvbnRleHQuc2hvd1NlbGVjdGlvbkNoZWNrYm94YCBpcyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3gocGFyYW0pIHtcbiAgaWYgKCFwYXJhbS5jb250ZXh0LnNob3dTZWxlY3Rpb25DaGVja2JveCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IHBhcmFtLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpXG5cbiAgcmV0dXJuIGNvbHVtbnNbMF0uY29sRGVmLmZpZWxkID09PSBwYXJhbS5jb2xEZWYuZmllbGRcbn1cblxuLyoqXG4gKiBTaG93IC8gSGlkZSBoZWFkZXIgc2VsZWN0aW9uIGNoZWNrYm94IGJhc2VkIG9uIHRoZSBmaXJzdCBjb2x1bW5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbWFrZSBzdXJlIHRoYXQgdGhlIGhlYWRlciBzZWxlY3Rpb24gY2hlY2tib3ggaXMgYWx3YXlzIHNob3duIG9uIHRoZVxuICogZmlyc3QgY29sdW1uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtXG4gKlxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIGZpcnN0IGNvbHVtbiAsIGZhbHNlIGlmIG5vdCB0aGUgZmlyc3QgY29sdW1uIG9yIGlmIHRoZVxuICogICAgICAgICAgICAgICAgICAgZ3JpZCdzIGBDb250ZXh0LnNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveGAgaXMgZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24ocGFyYW0pIHtcbiAgY29uc3QgY29udGV4dCA9IHBhcmFtLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuXG4gIGlmICghY29udGV4dC5zaG93SGVhZGVyU2VsZWN0aW9uQ2hlY2tib3gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGNvbHVtbnMgPSBwYXJhbS5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVxuXG4gIHJldHVybiBjb2x1bW5zWzBdLmNvbERlZi5maWVsZCA9PT0gcGFyYW0uY29sRGVmLmZpZWxkXG59XG5cbi8qKlxuICogRW5hYmxlIHJvdyBncm91cGluZyBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHNldCAgV2hlbiB0cnVlICwgYHNldFJvd0dyb3VwQ29sdW1uc2Agd2lsbCBiZSB1c2VkICwgYGFkZFJvd0dyb3VwQ29sdW1uc2Agb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRSb3dHcm91cENvbHVtbihpZCwgY29sdW1ucywgc2V0KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpW1xuICAgIHNldCA/ICdzZXRSb3dHcm91cENvbHVtbnMnIDogJ2FkZFJvd0dyb3VwQ29sdW1ucydcbiAgXShjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpKVxufVxuXG4vKipcbiAqIERpc2FibGUgcm93IGdyb3VwaW5nIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVJvd0dyb3VwQ29sdW1uKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVJvd0dyb3VwQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFBpdm90TW9kZShpZCkge1xuICByZXR1cm4gZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuaXNQaXZvdE1vZGUoKVxufVxuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2JhbGUgcGl2b3QgbW9kZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtCb29sZWFufSBtb2RlIHdoZW4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGl2b3RNb2RlKGlkLCBtb2RlKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldFBpdm90TW9kZSghIU51bWJlcihtb2RlKSlcbn1cblxuLyoqXG4gKiBFbmFibGUgcGl2b3QgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICogQHBhcmFtIHtCb29sZWFufSBzZXQgIFdoZW4gdHJ1ZSAsIGBhZGRQaXZvdENvbHVtbnNgIHdpbGwgYmUgdXNlZCAsIGBzZXRQaXZvdENvbHVtbnNgIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkUGl2b3RDb2x1bW5zKGlkLCBjb2x1bW5zLCBzZXQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGlbc2V0ID8gJ3NldFBpdm90Q29sdW1ucycgOiAnYWRkUGl2b3RDb2x1bW5zJ10oXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRGlzYWJsZSBwaXZvdCBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVQaXZvdENvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlUGl2b3RDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIEVuYWJsZSB2YWx1ZSBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRWYWx1ZUNvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuYWRkVmFsdWVDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIERpc2FibGUgdmFsdWUgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlVmFsdWVDb2x1bW5zKGlkLCBjb2x1bW5zKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnJlbW92ZVZhbHVlQ29sdW1ucyhcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGNvbHVtbiBzb3J0aW5nIG1vZGVsXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gbW9kZWwgbW9kZWwgYXMganNvbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U29ydE1vZGVsKGlkLCBtb2RlbCkge1xuICBjb25zdCBhc0FycmF5ID0gSlNPTi5wYXJzZShtb2RlbClcbiAgY29uc3QgcGFyc2VkTW9kZWwgPSBbXVxuICBhc0FycmF5LmZvckVhY2goaSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaSkge1xuICAgICAgcGFyc2VkTW9kZWwucHVzaCh7XG4gICAgICAgIGNvbElkOiBrZXksXG4gICAgICAgIHNvcnQ6IGlba2V5XSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFNvcnRNb2RlbChwYXJzZWRNb2RlbClcbn1cblxuLyoqXG4gKiBSZWRyYXdzIHRoZSBoZWFkZXIuIFVzZWZ1bCBpZiBhIGNvbHVtbiBuYW1lIGNoYW5nZXMsXG4gKiBvciBzb21ldGhpbmcgZWxzZSB0aGF0IGNoYW5nZXMgaG93IHRoZSBjb2x1bW4gaGVhZGVyIGlzIGRpc3BsYXllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZWZyZXNoSGVhZGVyKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlZHJhd1Jvd3MoKVxufVxuXG4vKipcbiAqIFVwZGF0ZSBjb2x1bW4gdmlhYmlsaXR5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY29sdW1uIGlkc1xuICogQHBhcmFtIHtCb29sZWFufSB2aXNpYmxlIHRydWUgdG8gbWFrZSB0aGUgY29sdW1ucyB2aXNpYmxlICwgZmFsc2UgdG8gaGlkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uVmlzaWJsZShpZCwgY29sdW1ucywgdmlzaWJsZSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5zVmlzaWJsZShcbiAgICBjb2x1bW5zLnNwbGl0KCcsJyksXG4gICAgQm9vbGVhbih2aXNpYmxlKVxuICApXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogQnVpbGQgYSBqcyBmdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBleHByZXNzaW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBleHByZXNzaW9uIGNhY2hlIGhhcyBiZWVuIGluaXRpYWxpemVkXG4gIGlmICh0eXBlb2YgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID09ICd1bmRlZmluZWQnKSB7XG4gICAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlID0gW11cbiAgfVxuXG4gIC8vIGNoZWNrIGNhY2hlIGZpcnN0XG4gIGlmIChnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl0pIHtcbiAgICByZXR1cm4gZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dXG4gIH1cblxuICAvLyBpZiBub3QgZm91bmQgaW4gY2FjaGUsIHJldHVybiB0aGUgZnVuY3Rpb25cbiAgbGV0IGZ1bmN0aW9uQm9keSA9IG51bGxcbiAgLy8gaWYgdGhlIGV4cHJlc3Npb24gaGFzIHRoZSAncmV0dXJuJyB3b3JkIGluIGl0LCB0aGVuIHVzZSBhcyBpcyxcbiAgLy8gaWYgbm90LCB0aGVuIHdyYXAgaXQgd2l0aCByZXR1cm4gYW5kICc7JyB0byBtYWtlIGEgZnVuY3Rpb25cbiAgaWYgKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkge1xuICAgIGZ1bmN0aW9uQm9keSA9IGV4cHJlc3Npb25cbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbkJvZHkgPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gIH1cblxuICBjb25zdCB0aGVGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihcbiAgICAneCwgY3R4LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHZhbHVlLCBub2RlLCBkYXRhLCBjb2xEZWYsIHJvd0luZGV4LCBhcGksIGNvbHVtbkFwaSwgZ2V0VmFsdWUsIGNvbHVtbiwgY29sdW1uR3JvdXAnLFxuICAgIGZ1bmN0aW9uQm9keVxuICApXG5cbiAgLy8gc3RvcmUgaW4gY2FjaGVcbiAgZ3dfY29tcGlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbkNhY2hlW2V4cHJlc3Npb25dID0gdGhlRnVuY3Rpb25cblxuICByZXR1cm4gdGhlRnVuY3Rpb25cbn1cblxuLyoqXG4gKiBCdWlsZCBhbmQgZXhlY3V0ZWQgYW4gZXhwcmVzc2lvbiB3aXRoIHRoZSBwYXNzZWQgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIG1peGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19leGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXJhbXMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBqYXZhU2NyaXB0RnVuY3Rpb24gPSBnd19jb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKVxuICAgIC8vIHRoZSBwYXJhbXMgZG9uJ3QgaGF2ZSBhbGwgdGhlc2UgdmFsdWVzLCByYXRoZXIgd2UgYWRkIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gdmFsdWUgYSBwYXJhbXMgY2FuIGhhdmUsIHdoaWNoIG1ha2VzIHdoYXRldmVyIGlzIGluIHRoZSBwYXJhbXMgYXZhaWxhYmxlLlxuICAgIGNvbnN0IHJlc3VsdCA9IGphdmFTY3JpcHRGdW5jdGlvbihcbiAgICAgIHBhcmFtcy52YWx1ZSxcbiAgICAgIHBhcmFtcy5jb250ZXh0LFxuICAgICAgcGFyYW1zLm9sZFZhbHVlLFxuICAgICAgcGFyYW1zLm5ld1ZhbHVlLFxuICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgcGFyYW1zLm5vZGUsXG4gICAgICBwYXJhbXMuZGF0YSxcbiAgICAgIHBhcmFtcy5jb2xEZWYsXG4gICAgICBwYXJhbXMucm93SW5kZXgsXG4gICAgICBwYXJhbXMuYXBpLFxuICAgICAgcGFyYW1zLmNvbHVtbkFwaSxcbiAgICAgIHBhcmFtcy5nZXRWYWx1ZSxcbiAgICAgIHBhcmFtcy5jb2x1bW4sXG4gICAgICBwYXJhbXMuY29sdW1uR3JvdXBcbiAgICApXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gdGhlIGV4cHJlc3Npb24gZmFpbGVkLCB3aGljaCBjYW4gaGFwcGVuLCBhcyBpdCdzIHRoZSBjbGllbnQgdGhhdFxuICAgIC8vIHByb3ZpZGVzIHRoZSBleHByZXNzaW9uLiBzbyBwcmludCBhIG5pY2UgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzaW5nIG9mIHRoZSBleHByZXNzaW9uIGZhaWxlZCcpXG4gICAgY29uc29sZS5sb2coJ0V4cHJlc3Npb24gPSAnICsgZXhwcmVzc2lvbilcbiAgICBjb25zb2xlLmxvZygnUGFyYW1zID0nLCBwYXJhbXMpXG4gICAgY29uc29sZS5sb2coJ0V4Y2VwdGlvbiA9ICcgKyBlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGUgfSBmcm9tICdldmVudHMvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXhlY3V0ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9uJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UXVpY2tGaWx0ZXIoaWQsIGZpbHRlcikge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRRdWlja0ZpbHRlcihmaWx0ZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19leHBhbmRBbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuZXhwYW5kQWxsKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2NvbGxhcHNlQWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmNvbGxhcHNlQWxsKClcbn1cbi8qKlxuICogRW5zdXJlcyB0aGUgcm93IGluZGV4IGlzIHZpc2libGUgYnkgdmVydGljYWxseSBzY3JvbGxpbmcgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwb3NpdGlvbiB7J3RvcCcsICdtaWRkbGUnLCAnYm90dG9tJywgdW5kZWZpbmVkL251bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19lbnN1cmVJbmRleFZpc2libGUoaWQsIGluZGV4LCBwb3NpdGlvbikge1xuICBjb25zdCBhcGkgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaVxuICBjb25zdCBub2RlID0gYXBpLmdldFJvd05vZGUoaW5kZXgpXG5cbiAgaWYgKG5vZGUpIHtcbiAgICBhcGkuZW5zdXJlTm9kZVZpc2libGUobm9kZSwgcG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgYXBpLmVuc3VyZUluZGV4VmlzaWJsZShOdW1iZXIoaW5kZXgpLCBwb3NpdGlvbilcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfbmF2aWdhdGVUb05leHRSb3coaWQsIHBhcmFtcykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBsZXQgcHJldmlvdXNDZWxsID0gcGFyYW1zLnByZXZpb3VzQ2VsbFBvc2l0aW9uXG4gIGxldCBzdWdnZXN0ZWROZXh0Q2VsbCA9IHBhcmFtcy5uZXh0Q2VsbFBvc2l0aW9uXG5cbiAgY29uc3QgS0VZX1VQID0gMzhcbiAgY29uc3QgS0VZX0RPV04gPSA0MFxuICBjb25zdCBLRVlfTEVGVCA9IDM3XG4gIGNvbnN0IEtFWV9SSUdIVCA9IDM5XG5cbiAgc3dpdGNoIChwYXJhbXMua2V5KSB7XG4gICAgY2FzZSBLRVlfRE9XTjpcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBjZWxsIG9uIGN1cnJlbnQgY2VsbCArIDFcbiAgICAgIGlmIChzdWdnZXN0ZWROZXh0Q2VsbCAmJiAhc3VnZ2VzdGVkTmV4dENlbGwucm93UGlubmVkKSB7XG4gICAgICAgIGlmIChwcmV2aW91c0NlbGwucm93UGlubmVkKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gb3B0aW9ucy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChcbiAgICAgICAgICAgIG9wdGlvbnMuYXBpLmdldEZpcnN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCArIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1Z2dlc3RlZE5leHRDZWxsXG4gICAgY2FzZSBLRVlfVVA6XG4gICAgICAvLyBzZXQgc2VsZWN0ZWQgY2VsbCBvbiBjdXJyZW50IGNlbGwgLSAxXG4gICAgICBpZiAoc3VnZ2VzdGVkTmV4dENlbGwgJiYgIXN1Z2dlc3RlZE5leHRDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd1Bpbm5lZCkge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IG9wdGlvbnMuYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoXG4gICAgICAgICAgICBvcHRpb25zLmFwaS5nZXRMYXN0RGlzcGxheWVkUm93KClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuYXBpLmZvckVhY2hOb2RlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dJbmRleCAtIDEgPT09IG5vZGUucm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWdnZXN0ZWROZXh0Q2VsbFxuICAgIGNhc2UgS0VZX0xFRlQ6XG4gICAgY2FzZSBLRVlfUklHSFQ6XG4gICAgICByZXR1cm4gc3VnZ2VzdGVkTmV4dENlbGxcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSBzdXBlciBzdHJhbmdlIGtleWJvYXJkJylcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSByb3cgYmFzZWQgb24gYGdldFJvd05vZGVJZGAgY29uZmlnIGRlZmluZWQgaW4gdGhlIGdyaWQgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSAgdGhlIGRhdGEgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3dOb2RlSWQoaWQsIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGFbZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LmdldFJvd05vZGVJZF1cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGdyaWQncyBkYXRhIHNldFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0ganNvbiBqc29uIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgbmV3IGRhdGFzZXQgdG8gdXBkYXRlIHRoZSBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dEYXRhKGlkLCBqc29uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgb3B0aW9ucy5hcGkuc2V0Um93RGF0YShqc29uKVxuICBvcHRpb25zLnJvd0RhdGEgPSBqc29uXG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBncmlkIHdpdGggYSB0cmFuc2FjdGlvbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3VwZGF0ZVJvd0RhdGEoaWQsIHRyYW5zYWN0aW9uLCBiYXRjaFVwZGF0ZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICh0cmFuc2FjdGlvbi5yZW1vdmUubGVuZ3RoKSB7XG4gICAgbGV0IGl0ZW1zID0gW11cblxuICAgIHRyYW5zYWN0aW9uLnJlbW92ZS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIGl0ZW1zLnB1c2gob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCkuZGF0YSlcbiAgICB9KVxuXG4gICAgdHJhbnNhY3Rpb24ucmVtb3ZlID0gaXRlbXNcbiAgfVxuXG4gIGlmICghYmF0Y2hVcGRhdGUpIHtcbiAgICBvcHRpb25zLmFwaS5hcHBseVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLmFwcGx5VHJhbnNhY3Rpb25Bc3luYyh0cmFuc2FjdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFNldCB0aGUgaGVpZ2h0IG9mIGFsbCByb3dzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge051bWJlcn0gaGVpZ2h0IHRoZSByb3cgaGVpZ2h0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRSb3dzSGVpZ2h0KGlkLCBoZWlnaHQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcblxuICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICByb3cuc2V0Um93SGVpZ2h0KGhlaWdodClcbiAgfSlcblxuICBhcGkub25Sb3dIZWlnaHRDaGFuZ2VkKClcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGdpdmVuIHJvdyBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5kZXggdGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgdGhlIG5ldyBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd0hlaWdodChpZCwgaW5kZXgsIGhlaWdodCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuICBjb25zdCByb3cgPSBhcGkuZ2V0Um93Tm9kZShpbmRleCkgfHwgYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgoaW5kZXgpXG5cbiAgaWYgKHJvdykge1xuICAgIHJvdy5zZXRSb3dIZWlnaHQoaGVpZ2h0KVxuICAgIG9wdGlvbnMuYXBpLm9uUm93SGVpZ2h0Q2hhbmdlZCgpXG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gc2V0IGhlaWdodCBmb3Igcm93ICR7aW5kZXh9LiBSb3cgY2Fubm90IGJlIGZvdW5kYClcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSByb3cgaGVpZ2h0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVzZXRSb3dIZWlnaHRzKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnJlc2V0Um93SGVpZ2h0cygpXG59XG5cbi8qKlxuICogU2VsZWN0IHJvdyBvciBtb3JlIGJhc2VkIG9uIHRoZSByb3cgaWQgb3IgaW5kZXhcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gcm93cyBhbiBhcnJheSBvZiByb3cga2V5cyBhbmQgaW5kZXhlcyB0byBzZWxlY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNlbGVjdGVkUm93cyhpZCwgcm93cykge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuXG4gIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChub2RlID0+IHtcbiAgICBpZiAoXG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUucm93SW5kZXgpKSA+IC0xIHx8XG4gICAgICByb3dzLmluZGV4T2YoU3RyaW5nKG5vZGUuaWQpKSA+IC0xXG4gICAgKSB7XG4gICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZVxuICAgIH1cbiAgfSlcblxuICBhcGkub25Hcm91cEV4cGFuZGVkT3JDb2xsYXBzZWQoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2VsZWN0QWxsKGlkLCBmaWx0ZXJlZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICgxID09PSBmaWx0ZXJlZCkge1xuICAgIG9wdGlvbnMuYXBpLnNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5zZWxlY3RBbGwoKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19kZXNlbGVjdEFsbChpZCwgZmlsdGVyZWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICBpZiAoMSA9PT0gZmlsdGVyZWQpIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbEZpbHRlcmVkKClcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmFwaS5kZXNlbGVjdEFsbCgpXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcm93c1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgc2VsZWN0ZWQgcm93cyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRTZWxlY3RlZFJvd3MoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3Qgbm9kZXMgPSBvcHRpb25zLmFwaS5nZXRTZWxlY3RlZE5vZGVzKClcbiAgbGV0IHBhcnNlZCA9IFtdXG5cbiAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICBwYXJzZWQucHVzaChnd19wYXJzZU5vZGUobm9kZSwgb3B0aW9ucy5jb250ZXh0KSlcbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldCB0aGUgbGFzdCBzZWxlY3RlZCByb3dcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcm93IGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFNlbGVjdGVkUm93KGlkKSB7XG4gIGNvbnN0IHJvd3MgPSBKU09OLnBhcnNlKGd3X2dldFNlbGVjdGVkUm93cyhpZCkpXG5cbiAgaWYgKHJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJvd3Nbcm93cy5sZW5ndGggLSAxXSlcbiAgfVxuXG4gIHJldHVybiAnJ1xufVxuXG4vKipcbiAqIEdldCB0aGUgcm93IGJ5IGl0cyBpZCBvciBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5kZXhcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJvdyBhcyBKU09OXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRSb3coaWQsIGluZGV4KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBnd19wYXJzZU5vZGUob3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShpbmRleCksIG9wdGlvbnMuY29udGV4dClcbiAgKVxufVxuXG4vKipcbiAqIEdldCByb3dzIGZyb20gdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHBoYXNlIFRoZSByb3dzIHBoYXNlXG4gKiBAcGFyYW0ge1N0cmluZ30gZmlsdGVyRXhwcmVzc2lvbiBBIGZpbHRlciBleHByZXNzaW9uXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBKc29uIHN0cmluZ2lmaWVkIGFycmF5IG9mIHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvd3MoaWQsIHBoYXNlLCBmaWx0ZXJFeHByZXNzaW9uKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IHBhcnNlZCA9IFtdXG5cbiAgb3B0aW9ucy5hcGlbcGhhc2VdKG5vZGUgPT4ge1xuICAgIGlmICghbm9kZS5ncm91cCkge1xuICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb24pIHtcbiAgICAgICAgY29uc3QgY2FuUHJvY2VzcyA9IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGZpbHRlckV4cHJlc3Npb24sIHtcbiAgICAgICAgICB2YWx1ZTogbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICBvbGRWYWx1ZTogbnVsbCxcbiAgICAgICAgICBuZXdWYWx1ZTogbnVsbCxcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YSxcbiAgICAgICAgICBjb2xEZWY6IG51bGwsXG4gICAgICAgICAgcm93SW5kZXg6IG5vZGUucm93SW5kZXgsXG4gICAgICAgICAgYXBpOiBub2RlLmdyaWRBcGksXG4gICAgICAgICAgY29sdW1uQXBpOiBub2RlLmNvbHVtbkFwaSxcbiAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4gbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgICBjb2x1bW5Hcm91cDpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChjYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgcGFyc2VkLnB1c2goZ3dfcGFyc2VOb2RlKG5vZGUsIG9wdGlvbnMuY29udGV4dCkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZC5wdXNoKGd3X3BhcnNlTm9kZShub2RlLCBvcHRpb25zLmNvbnRleHQpKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkKVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGdyaWQgdG8gcmVtb3ZlIGEgcm93IGZyb20gdGhlIERPTSBhbmQgcmVjcmVhdGUgaXQgYWdhaW4gZnJvbSBzY3JhdGNoLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlZHJhd1Jvd3MoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVkcmF3Um93cygpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgdG9wIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkVG9wUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRUb3BSb3dEYXRhKGRhdGEpXG59XG5cbi8qKlxuICogUGluIGFuIGFycmF5IG9mIHRvdyB0byB0aGUgYm90dG9tIG9mIHRoZSBncmlkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YShpZCwgZGF0YSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRQaW5uZWRCb3R0b21Sb3dEYXRhKGRhdGEpXG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCwgZ3dfdXVpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZUFkZENlbGxSYW5nZSB9IGZyb20gJ2FwaS9jZWxscydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFRoZSBhcnJheSBjb250YWlucyByZWZlcmVuY2VzIHRvIGNyZWF0ZWQgY2hhcnRzIGZyb20gQkJqLlxuICogRXZlcnkgcmVmZXJlbmNlIGlzIGEgQ2hhcnRSZWYgb2JqZWN0IHdoaWNoIHByb3ZpZGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZVxuICogZGVzdHJveUNoYXJ0KCkgbWV0aG9kIHRoYXQgaXMgcmVxdWlyZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZGlzcG9zZSB0aGUgY2hhcnQuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGNoYXJ0IHRvb2xiYXIgaXRlbXMgZGVmaW5lZCBpbiB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5IG9mIHN1cHBvcnRlZCBjaGFydCBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMocGFyYW1zKSB7XG4gIHJldHVybiAoXG4gICAgcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dC5jaGFydFRvb2xiYXJJdGVtcyB8fCBbXVxuICApXG59XG5cbi8qKlxuICogQWRkIG5ldyBjaGFydCByYW5nZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSAgYm91bmRlZCBvciB1bmJvdW5kZWQgcmFuZ2UgbW9kZWxcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgdW5pcXVlIGlkIGZvciB0aGUgZ2VuZXJhdGUgY2hhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZENoYXJ0UmFuZ2UoaWQsIHJhbmdlKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuICBjb25zdCBvcHRpb25zID0gZ3JpZC5vcHRpb25zXG4gIGNvbnN0IHByID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShyYW5nZSkpXG5cbiAgcHIuY2VsbFJhbmdlID0gZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcHIuY2VsbFJhbmdlKVxuXG4gIGNvbnN0IHJlZiA9IG9wdGlvbnMuYXBpLmNyZWF0ZVJhbmdlQ2hhcnQocHIpXG4gIGNvbnN0IHV1aWQgPSBnd191dWlkKClcblxuICBncmlkLmNyZWF0ZWRfY2hhcnRzID0gZ3JpZC5jcmVhdGVkX2NoYXJ0cyB8fCB7fVxuICBncmlkLmNyZWF0ZWRfY2hhcnRzW3V1aWRdID0gcmVmXG5cbiAgcmV0dXJuIHV1aWRcbn1cblxuLyoqXG4gKiBEZXN0cm95IGNyZWF0ZWQgY2hhcnRzXG4gKlxuICogRGVzdHJveSBhbHJlYWR5IGNyZWF0ZWQgY2hhcnQgYnkgaWQgb3IgYWxsIGNyZWF0ZWQgY2hhcnRzXG4gKiB3aGVuIHRoZSBgdXVpZGAgaXMgb21pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdXVpZCBUaGUgY2hhcnQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZGVzdHJveUNoYXJ0KGlkLCB1dWlkKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuXG4gIGlmICh1dWlkKSB7XG4gICAgaWYgKFxuICAgICAgZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSAmJlxuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0cy5oYXNPd25Qcm9wZXJ0eSh1dWlkKVxuICAgICkge1xuICAgICAgZ3JpZC5jcmVhdGVkX2NoYXJ0c1t1dWlkXS5kZXN0cm95Q2hhcnQoKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZ3JpZC5oYXNPd25Qcm9wZXJ0eSgnY3JlYXRlZF9jaGFydHMnKSkge1xuICAgICAgZm9yIChjb25zdCBpIGluIGdyaWQuY3JlYXRlZF9jaGFydHMpIHtcbiAgICAgICAgaWYgKGdyaWQuY3JlYXRlZF9jaGFydHMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICBjb25zdCBjaGFydCA9IGdyaWQuY3JlYXRlZF9jaGFydHNbaV1cbiAgICAgICAgICBjaGFydC5kZXN0cm95Q2hhcnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuLyoqXG4gKiBTdGFydCBjZWxsIGVkaXRpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8bnVtYmVyfSByb3cgVGhlIHJvdyBpbmRleCBvciBrZXlcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2xLZXkgVGhlIGNvbHVtbidzIGtleVxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlQcmVzcyAgS2V5IHByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gY2hhclByZXNzXG4gKiBAcGFyYW0ge1N0cmluZ30gcm93UGlubmVkIFNldCB0byAndG9wJyBvciAnYm90dG9tJyB0byBzdGFydGVkIGVkaXRpbmcgYSBwaW5uZWQgcm93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zdGFydEVkaXRpbmdDZWxsKFxuICBpZCxcbiAgcm93LFxuICBjb2xLZXksXG4gIGtleVByZXNzLFxuICBjaGFyUHJlc3MsXG4gIHJvd1Bpbm5lZFxuKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IG5vZGUgPSBhcGkuZ2V0Um93Tm9kZShyb3cpIHx8IGFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHJvdylcblxuICBvcHRpb25zLmFwaS5zdGFydEVkaXRpbmdDZWxsKHtcbiAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICBrZXlQcmVzczogTnVtYmVyKGtleVByZXNzKSxcbiAgICBjb2xLZXksXG4gICAgY2hhclByZXNzLFxuICAgIHJvd1Bpbm5lZCxcbiAgfSlcbn1cblxuLyoqXG4gKiBTdG9wIGNlbGwgZWRpdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNhbmNlbCB3aGVuIHRydWUgY2FuY2VsIGVkaXRzICwgc2F2ZSBlZGl0cyBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3N0b3BFZGl0aW5nKGlkLCBjYW5jZWwpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc3RvcEVkaXRpbmcoY2FuY2VsKVxufVxuXG4vKipcbiAqIE5hdmlnYXRlcyB0aGUgZ3JpZCBmb2N1cyB0byB0aGUgbmV4dCBjZWxsLCBhcyBpZiB0YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvTmV4dENlbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkudGFiVG9OZXh0Q2VsbCgpXG59XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSBncmlkIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBjZWxsLCBhcyBpZiBzaGlmdC10YWJiaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3RhYlRvUHJldmlvdXNDZWxsKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnRhYlRvUHJldmlvdXNDZWxsKClcbn1cblxuLyoqXG4gKiBTZXQgRm9jdXMgb24gdGhlIGdpdmVuIHJvdyBhbmQgY29sdW1uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gcm93IFRoZSByb3cncyBpbmRleC9pZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbiBUaGUgY29sdW1uIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxvYXRpbmcgbnVsbCwgJ3RvcCcsIG9yICdib3R0b20nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Rm9jdXNlZENlbGwoaWQsIHJvdywgY29sdW1uLCBmbG9hdGluZyA9IG51bGwpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICAvLyBpZ25vcmUgZm9jdXMgY2FsbHMgaWYgZWRpdGluZ1xuICBpZiAob3B0aW9ucy5hcGkuZ2V0RWRpdGluZ0NlbGxzKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IHIsIGMsIGZcbiAgaWYgKHJvdyA9PSAtMSkge1xuICAgIC8vIHRyeSB0byByZXRhaW4gdGhlIGZvY3VzXG4gICAgY29uc3QgbGFzdEZvY3VzZWRDZWxsID0gb3B0aW9ucy5hcGkuZ2V0Rm9jdXNlZENlbGwoKVxuXG4gICAgaWYgKGxhc3RGb2N1c2VkQ2VsbCkge1xuICAgICAgciA9IGxhc3RGb2N1c2VkQ2VsbC5yb3dJbmRleFxuICAgICAgYyA9IGxhc3RGb2N1c2VkQ2VsbC5jb2x1bW4uY29sSWRcbiAgICAgIGYgPSBsYXN0Rm9jdXNlZENlbGwucm93UGlubmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSAwXG4gICAgICBjID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0QWxsR3JpZENvbHVtbnMoKVswXS5jb2xJZFxuICAgICAgZiA9IGZsb2F0aW5nXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHIgPSAhcm93XG4gICAgICA/IDBcbiAgICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcm93KVxuICAgICAgPyArcm93XG4gICAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocm93KS5yb3dJbmRleFxuICAgIGMgPSBjb2x1bW4gPyBjb2x1bW4gOiBvcHRpb25zLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpWzBdLmNvbElkXG4gICAgZiA9IGZsb2F0aW5nXG4gIH1cblxuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGb2N1c2VkQ2VsbChyLCBjLCBmKVxufVxuXG4vKipcbiAqIEdldCBSYW5nZSBTZWxlY3Rpb25zXG4gKlxuICogVGhlIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIHJhbmdlIGpzb24gbW9kZWwgZm9yIGVhY2ggcmFuZ2Ugd2hpY2ggY2FuIGJlIHBhcnNlZCBpbiBCQmogc2lkZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gc2VsZWN0ZWQgcmFuZ2VzIGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJhbmdlU2VsZWN0aW9ucyhpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0XG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IHJhbmdlcyA9IGFwaS5nZXRDZWxsUmFuZ2VzKClcbiAgY29uc3QgbW9kZWwgPSBhcGkuZ2V0TW9kZWwoKVxuICBsZXQgcmVzdWx0ID0gW11cblxuICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XG4gICAgLy8gY29uc3Qgc3RhcnQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4KSwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAvLyBjb25zdCBlbmQgPSBnd19wYXJzZU5vZGUobW9kZWwuZ2V0Um93KHJhbmdlLmVuZFJvdy5yb3dJbmRleCksIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAvL2lmIChzdGFydCAhPT0gZmFsc2UgJiYgZW5kICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSByYW5nZS5jb2x1bW5zXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4ge1xuICAgICAgICBpZiAoJ2FnLUdyaWQtQXV0b0NvbHVtbicgIT09IGN1cnJlbnQuY29sSWQpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKGN1cnJlbnQuY29sSWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3JcbiAgICAgIH0sIFtdKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuXG4gICAgY29uc3Qgc3RhckluZGV4ID0gTWF0aC5taW4ocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgsIHJhbmdlLmVuZFJvdy5yb3dJbmRleClcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWF4KHJhbmdlLnN0YXJ0Um93LnJvd0luZGV4LCByYW5nZS5lbmRSb3cucm93SW5kZXgpXG4gICAgY29uc3Qgcm93cyA9IFtdXG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IHN0YXJJbmRleDsgcm93SW5kZXggPD0gZW5kSW5kZXg7IHJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBtb2RlbC5nZXRSb3cocm93SW5kZXgpXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBjb25zdCBwYXJzZWROb2RlID0gZ3dfcGFyc2VOb2RlKG5vZGUsIGNvbnRleHQpXG4gICAgICAgIGlmIChwYXJzZWROb2RlKSB7XG4gICAgICAgICAgcm93cy5wdXNoKHBhcnNlZE5vZGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocm93cy5sZW5ndGggJiYgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgcjogcm93cywgYzogY29sdW1ucyB9KVxuICAgIH1cbiAgICAvL31cbiAgfSlcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KVxufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBjZWxscyByYW5nZSBpbiBhIGZvcm1hdCB0aGUgZ3JpZCBjYW4gdW5kZXJzdGFuZCB3aGVuIGl0IGlzIHBhc3NlZFxuICogdG8gYGFwaS5hZGRDZWxsUmFuZ2VgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGdyaWQncyBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHJhbmdlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCByYW5nZSkge1xuICBjb25zdCBwciA9IGRlZXBQYXJzZUpzb24oSlNPTi5zdHJpbmdpZnkocmFuZ2UpKVxuICBjb25zdCBzdGFydCA9ICEocHIuc3RhcnQgfHwgbnVsbClcbiAgICA/IDBcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLnN0YXJ0KVxuICAgID8gK3ByLnN0YXJ0XG4gICAgOiBvcHRpb25zLmFwaS5nZXRSb3dOb2RlKHByLnN0YXJ0KS5yb3dJbmRleFxuICBjb25zdCBlbmQgPSAhKHByLmVuZCB8fCBudWxsKVxuICAgID8gb3B0aW9ucy5yb3dEYXRhLmxlbmd0aCAtIDFcbiAgICA6IE51bWJlci5pc0ludGVnZXIoK3ByLmVuZClcbiAgICA/ICtwci5lbmRcbiAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocHIuZW5kKS5yb3dJbmRleFxuXG4gIHJldHVybiB7XG4gICAgcm93U3RhcnRJbmRleDogTWF0aC5hYnMoc3RhcnQpLFxuICAgIHJvd0VuZEluZGV4OiBNYXRoLmFicyhlbmQpLFxuICAgIGNvbHVtbnM6IHByLmNvbHVtbnMsXG4gIH1cbn1cbi8qKlxuICogQWRkIG5ldyBjZWxsIHJhbmdlXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlICBib3VuZGVkIG9yIHVuYm91bmRlZCByYW5nZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkQ2VsbFJhbmdlKGlkLCByYW5nZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBvcHRpb25zLmFwaS5hZGRDZWxsUmFuZ2UoZ3dfcGFyc2VBZGRDZWxsUmFuZ2Uob3B0aW9ucywgcmFuZ2UpKVxufVxuXG4vKipcbiAqIENsZWFycyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfY2xlYXJSYW5nZVNlbGVjdGlvbihpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5jbGVhclJhbmdlU2VsZWN0aW9uKClcbn1cbiIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcbiIsImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBc3NpZ25WYWx1ZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSXRlcmF0ZWVDYWxsO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJbmRleDtcbiIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcbiIsImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0ICdleHBvc2UtbG9hZGVyP0JCai5NYXNrcyFiYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuSW5wdXRNYXNraW5nIWJhc2lzLWlucHV0LW1hc2tpbmcvZGlzdC9iYXNpcy1pbnB1dC1tYXNraW5nLmpzJ1xuaW1wb3J0ICdleHBvc2UtbG9hZGVyP2ZsYXRwaWNrciFmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QmFzaXMuQWdHcmlkQ29tcG9uZW50cyFiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzJ1xuXG5yZXF1aXJlKCdmbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzJylcbnJlcXVpcmUoJy4vc3R5bGUvY2xhc3Nlcy5jc3MnKVxucmVxdWlyZSgnLi9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3MnKVxuXG5leHBvcnQgKiBmcm9tICcuL3BvbHlmaWxscy5qcydcbmV4cG9ydCAqIGZyb20gJy4vYXBpJ1xuIiwiaWYoIWdsb2JhbFtcIkJCalwiXSkgZ2xvYmFsW1wiQkJqXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJCalwiXVtcIk1hc2tzXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJiai1tYXNrcy5qc1wiKTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJNYXNrc1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCQmpcIl0gPSByb290W1wiQkJqXCJdIHx8IHt9LCByb290W1wiQkJqXCJdW1wiTWFza3NcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuLyoqKioqKi8gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRnZXQ6IGdldHRlclxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDUpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdG9JbnRlZ2VyO1xuZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZ1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiaFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiYlwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZFwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiZlwiXTsgfSk7XG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJjXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0ZU1hc2tfX1tcImNcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdHpQYXJzZVRpbWV6b25lO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdHpUb2tlbml6ZURhdGVfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RyaW5nTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlV0aWxzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVXRpbHM7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fU3RyaW5nTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlR5cGVzXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJOdW1iZXJNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRhdGVNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiY1wiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJTdHJpbmdNYXNrXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCJdOyB9KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cblxuXG52YXIgVXRpbHMgPSB7XG4gIERhdGVzOiB7XG4gICAgZ2V0RGF5T2ZZZWFyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJlXCIgLyogZ2V0RGF5T2ZZZWFyICovXSxcbiAgICBnZXRXZWVrTnVtYmVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJnXCIgLyogZ2V0V2Vla051bWJlciAqL10sXG4gICAgZ2V0V2Vla1N0YXJ0QnlMb2NhbGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImhcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10sXG4gICAgSVNfREFURV9SRUdFWDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiYVwiIC8qIElTX0RBVEVfUkVHRVggKi9dLFxuICAgIElTX1RJTUVfUkVHRVg6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImJcIiAvKiBJU19USU1FX1JFR0VYICovXSxcbiAgICBmaXhTaG9ydElTTzogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiZFwiIC8qIGZpeFNob3J0SVNPICovXSxcbiAgICBnZXRUaW1lem9uZU9yT2Zmc2V0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJmXCIgLyogZ2V0VGltZXpvbmVPck9mZnNldCAqL11cbiAgfVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19UeXBlc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG52YXIgTnVtYmVyTWFzayA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE51bWJlck1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE51bWJlck1hc2spO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE51bWJlck1hc2ssIG51bGwsIFt7XG4gICAga2V5OiBcIm1hc2tcIixcblxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVjaW1hbFNlcGFyYXRvcj0uXSAgLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqIFxuICAgICAqIEB0aHJvd3Mge01hc2tFcnJvcn0gb25seSBpZiBsb29zZSBpcyBkaXNhYmxlZFxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2sobnVtYmVyLCBfbWFzaykge1xuICAgICAgdmFyIGdyb3VwaW5nU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnLCc7XG4gICAgICB2YXIgZGVjaW1hbFNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJy4nO1xuICAgICAgdmFyIGZvcmNlVHJhaWxpbmdaZXJvcyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcblxuICAgICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gc3RyOyAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlcIlxuICAgICAgICAgIH07XG4gICAgICB9IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBNQVNLXG5cblxuICAgICAgdmFyIG1hc2tCZWZvcmVEZWNpbWFsID0gMDtcbiAgICAgIHZhciBtYXNrQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIHZhciBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrTGVuOyArK2kpIHtcbiAgICAgICAgdmFyIG0gPSBfbWFzay5jaGFyQXQoaSk7XG5cbiAgICAgICAgaWYgKG0gPT0gJzAnIHx8IG0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsO2Vsc2UgKyttYXNrQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bWJlciwgbWFza0FmdGVyRGVjaW1hbCk7XG5cbiAgICAgIHZhciBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7IC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBOVU1CRVJcblxuXG4gICAgICB2YXIgaW5MZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICB2YXIgbnVtQmVmb3JlRGVjaW1hbCA9IDA7XG4gICAgICB2YXIgbnVtQWZ0ZXJEZWNpbWFsID0gMDtcbiAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW5MZW47ICsrX2kpIHtcbiAgICAgICAgaWYgKGJ5dGVzW19pXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKytudW1BZnRlckRlY2ltYWw7ZWxzZSArK251bUJlZm9yZURlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrXCJcbiAgICAgICAgICB9O1xuICAgICAgfSAvLyByb3VuZCBpZiBtYXNrIGlzIGZvciBhIGxvd2VyIHByZWNpc2lvbiBudW1iZXJcblxuXG4gICAgICBpZiAobnVtQWZ0ZXJEZWNpbWFsID4gbWFza0FmdGVyRGVjaW1hbCkge1xuICAgICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpO1xuICAgICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSk7XG4gICAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoOyAvLyBHZXQgbmV3IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuXG4gICAgICAgIG51bUJlZm9yZURlY2ltYWwgPSAwO1xuICAgICAgICBudW1BZnRlckRlY2ltYWwgPSAwO1xuICAgICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBpbkxlbjsgKytfaTIpIHtcbiAgICAgICAgICBpZiAoYnl0ZXNbX2kyXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWU7ZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbDtlbHNlICsrbnVtQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG5cblxuICAgICAgICBpZiAobnVtQmVmb3JlRGVjaW1hbCA+IG1hc2tCZWZvcmVEZWNpbWFsKSB7XG4gICAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKCk7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza1wiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWxsQnl0ZSA9ICcgJyxcbiAgICAgICAgICBmbG9hdEJ5dGUgPSAnICc7XG4gICAgICB2YXIgaW5Qb3MgPSAwLFxuICAgICAgICAgIG91dFBvcyA9IDAsXG4gICAgICAgICAgZmxvYXRQb3MgPSAwO1xuICAgICAgaWYgKF9tYXNrLmNoYXJBdCgwKSA9PSAnKicpIGZpbGxCeXRlID0gJyonO1xuICAgICAgdmFyIGZpbGxJbml0ID0gZmlsbEJ5dGU7XG4gICAgICB2YXIgaXNOZWdhdGl2ZSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtKSA8IDA7XG4gICAgICB2YXIgZW1pdERlY2ltYWwgPSBpbkxlbiA+IDAgfHwgX21hc2suaW5kZXhPZignMCcpID49IDA7XG4gICAgICB2YXIgZm91bmRaZXJvID0gZmFsc2U7XG4gICAgICB2YXIgZm91bmREaWdpdCA9IGZhbHNlO1xuICAgICAgdmFyIGN1cnJlbmN5ID0gZmFsc2U7XG4gICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZTtcbiAgICAgIHZhciByZXQgPSBuZXcgQXJyYXkobWFza0xlbik7XG5cbiAgICAgIGZvciAodmFyIG1hc2tQb3MgPSAwOyBtYXNrUG9zIDwgbWFza0xlbjsgKyttYXNrUG9zKSB7XG4gICAgICAgIHZhciBfbSA9IF9tYXNrLmNoYXJBdChtYXNrUG9zKTtcblxuICAgICAgICBzd2l0Y2ggKF9tKSB7XG4gICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsO1xuXG4gICAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBieXRlc1tpblBvc107XG4gICAgICAgICAgICAgICsraW5Qb3M7XG4gICAgICAgICAgICAgIGZvdW5kRGlnaXQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCc7XG4gICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcjJzpcbiAgICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWw7XG5cbiAgICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXTtcbiAgICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCAmJiBmb3JjZVRyYWlsaW5nWmVyb3MgJiYgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDAgPyAnMCcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1BvcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgICAgaWYgKGZvdW5kWmVybyB8fCBpblBvcyA+IDApIHJldFtvdXRQb3NdID0gZ3JvdXBpbmdTZXBhcmF0b3I7ZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJy0nO1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1BvcztcbiAgICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiBmaWxsQnl0ZTtcblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgZmxvYXRCeXRlID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogJysnO1xuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBmbG9hdEJ5dGUgPSAnJCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnJCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICcmJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG4gICAgICAgICAgLy8gY2FzZSAnQCc6XG4gICAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICdAJ1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICdAJ1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgICAvLyAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSBmbG9hdEJ5dGUgPSAnKCc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcoJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcpJzpcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmb3VuZERlY2ltYWwgPyAnICcgOiBmaWxsQnl0ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcgJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnICc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgaWYgKG1hc2tQb3MgPCBtYXNrTGVuIC0gMSAmJiBfbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJztcbiAgICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnUic7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBvdXRQb3MgKz0gMjtcbiAgICAgICAgICAgICAgKyttYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCc7XG4gICAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKic7XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGVtaXREZWNpbWFsID8gZGVjaW1hbFNlcGFyYXRvciA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgZmlsbEJ5dGUgPSAnICc7XG4gICAgICAgICAgICBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IF9tO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmxvYXRCeXRlICE9ICcgJykge1xuICAgICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvcztcblxuICAgICAgICB3aGlsZSAoZmxvYXRQb3MgPj0gbWFza0xlbikge1xuICAgICAgICAgIC0tZmxvYXRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0W2Zsb2F0UG9zXSA9PSBmaWxsSW5pdCkgcmV0W2Zsb2F0UG9zXSA9IGZsb2F0Qnl0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3NoaWZ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgICBpZiAocmV2ZXJzZVNoaWZ0KSBwcmVjaXNpb24gPSAtcHJlY2lzaW9uO1xuICAgICAgdmFyIG51bUFycmF5ID0gKCcnICsgbnVtYmVyKS5zcGxpdCgnZScpO1xuICAgICAgcmV0dXJuICsobnVtQXJyYXlbMF0gKyAnZScgKyAobnVtQXJyYXlbMV0gPyArbnVtQXJyYXlbMV0gKyBwcmVjaXNpb24gOiBwcmVjaXNpb24pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3JvdW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yb3VuZChudW1iZXIsIHByZWNpc2lvbikge1xuICAgICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KE1hdGgucm91bmQoTnVtYmVyTWFzay5fc2hpZnQobnVtYmVyLCBwcmVjaXNpb24sIGZhbHNlKSksIHByZWNpc2lvbiwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl90b0NoYXJBcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9DaGFyQXJyYXkobnVtYmVyKSB7XG4gICAgICB2YXIgc2lnbnVtID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW1iZXIpO1xuXG4gICAgICB2YXIgY2hhcnMgPSBbXTtcblxuICAgICAgaWYgKHNpZ251bSAhPT0gMCkge1xuICAgICAgICB2YXIgc3RyaW5nID0gc2lnbnVtIDwgMCA/IFwiXCIuY29uY2F0KC0xICogbnVtYmVyLnRvU3RyaW5nKCkpIDogbnVtYmVyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJykgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKTsgLy8gVGhlIHN0cmluZyBjb250YWlucyBvbmx5IFswLTldIGFuZCAnLidcblxuICAgICAgICBjaGFycyA9IHN0cmluZy5zcGxpdCgnJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHggbnVtYmVyXG4gICAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG5lZ2F0aXZlIG51bWJlciwgcG9zaXRpdmUgemVyb1xuICAgICAqICAgICAgICAgICAgICAgICAgIG9yIG5lZ2F0aXZlIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxLCAtMSwgMCBvciAtMCByZXNwZWN0aXZlbHkuXG4gICAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0U2lnblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0U2lnbih4KSB7XG4gICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE51bWJlck1hc2s7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoTnVtYmVyTWFzayk7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSVNfVElNRV9SRUdFWDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElTX0RBVEVfUkVHRVg7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeUxvY2FsZTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldERheU9mWWVhcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpeFNob3J0SVNPOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0VGltZXpvbmVPck9mZnNldDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZ1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtOdW1iZXI7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc190el91dGNUb1pvbmVkVGltZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfd2Vla3N0YXJ0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cblxudmFyIElTX1RJTUVfUkVHRVggPSAvXigyWzAtM118WzAxXVswLTldKTo/KFswLTVdWzAtOV0pOj8oWzAtNV1bMC05XSkoWnxbKy1dKD86MlswLTNdfFswMV1bMC05XSkoPzo6Pyg/OlswLTVdWzAtOV0pKT8pJC87XG52YXIgSVNfREFURV9SRUdFWCA9IC9eKChbMTJdXFxkezN9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdXFxkfDNbMDFdKShafFsrLV0oPzoyWzAtM118WzAxXVswLTldKSg/Ojo/KD86WzAtNV1bMC05XSkpPykpJC87XG4vKipcbiAqIEZpbmQgb3V0IHdoZW4gdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgcGFzc2VkIGxvY2FsZVxuICpcbiAqIEBwYXJhbSB7bG9jYWxlfSBsb2NhbGVcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGEgbnVtYmVyIDAgPSBzdW5kYXkgLCAxID0gbW9uZGF5ICwgLi4uLlxuICovXG5cbnZhciBnZXRXZWVrU3RhcnRCeUxvY2FsZSA9IGZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlKGxvY2FsZSkge1xuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfX1tcImFcIiAvKiBnZXRXZWVrU3RhcnRCeUxvY2FsZSAqL10pKGxvY2FsZSk7XG59O1xuLyoqXG4gKiAgR2V0IGRheSBudW1iZXIgaW4gdGhlIHllYXIgb2YgdGhlIHBhc3NlZCBkYXRlXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBkYXkgbnVtYmVyXG4gKi9cblxudmFyIGdldERheU9mWWVhciA9IGZ1bmN0aW9uIGdldERheU9mWWVhcihkYXRlKSB7XG4gIHZhciBzdGFydCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCk7XG4gIHZhciBkaWZmID0gZGF0ZSAtIHN0YXJ0ICsgKHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpICogNjAgKiAxMDAwO1xuICB2YXIgb25lRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcbiAgdmFyIGRheSA9IE1hdGguZmxvb3IoZGlmZiAvIG9uZURheSk7XG4gIHJldHVybiBkYXk7XG59O1xuLyoqXG4gKiBUYWtlcyBpbmNvbXBsZXRlIGlzbyBzdHJpbmcgYW5kIHJldHVybiBhIGNvbXBsZXRlIG9uZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gY29tcGxldGUgaXNvIHN0cmluZ1xuICovXG5cbnZhciBmaXhTaG9ydElTTyA9IGZ1bmN0aW9uIGZpeFNob3J0SVNPKGRhdGUpIHtcbiAgdmFyIHZhbHVlID0gZGF0ZTtcbiAgdmFyIG9mZnNldCA9ICh2YWx1ZS5tYXRjaCgveiR8WytcXC1dXFxkXFxkOlxcZFxcZCQvaSkgfHwgW10pWzBdO1xuXG4gIGlmICghb2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gJ1onO1xuICAgIHZhbHVlICs9IG9mZnNldDtcbiAgfVxuXG4gIGlmIChJU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIjE5NzAtMDEtMDFUXCIuY29uY2F0KHZhbHVlKTtcbiAgfSBlbHNlIGlmIChJU19EQVRFX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBcIlwiLmNvbmNhdCh2YWx1ZS5zcGxpdChvZmZzZXQpWzBdLCBcIlQwMDowMDowMFwiKS5jb25jYXQob2Zmc2V0KTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIEdldCB0aGUgYnJvd3NlciB0aW1lem9uZSBuYW1lICwgaWYgbm90IHN1cHBvcnRlZCB0aGVuIHRoZSBicm93c2VyXG4gKiB0aW1lem9uZSBvZmZzZXQgZm9ybWF0dGVkXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSB0aW1lem9uZSBvZiBvZmZzZXRcbiAqL1xuXG52YXIgZ2V0VGltZXpvbmVPck9mZnNldCA9IGZ1bmN0aW9uIGdldFRpbWV6b25lT3JPZmZzZXQoKSB7XG4gIHZhciB0aW1lem9uZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcblxuICBpZiAoIXRpbWV6b25lKSB7XG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIHBhZChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgdmFyIHN0ciA9ICcnICsgbnVtYmVyO1xuXG4gICAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgICAgICBzdHIgPSAnMCcgKyBzdHI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfTtcblxuICAgIHZhciBvZmZzZXQgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgb2Zmc2V0ID0gKG9mZnNldCA8IDAgPyAnKycgOiAnLScpICsgLy8gTm90ZSB0aGUgcmV2ZXJzZWQgc2lnbiFcbiAgICBwYWQocGFyc2VJbnQoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSwgMikgKyBwYWQoTWF0aC5hYnMob2Zmc2V0ICUgNjApLCAyKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcmV0dXJuIHRpbWV6b25lO1xufTtcbi8qKlxuICogR2V0IHRoZSBXZWVrIE51bWJlciBpbiB0aGUgcGFzc2VkIGRhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBEYXRlIG9iamVjdFxuICogQHBhcmFtIHtOdW1iZXJ9IHdlZWtTdGFydCBBIG51bWJlciB3aGljaCBkZWZpbmVzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgID0gc3VuZGF5ICwgMSA9IG1vbmRheSAsIC4uLilcbiAqXG4gKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgd2VlayBudW1iZXJcbiAqL1xuXG52YXIgZ2V0V2Vla051bWJlciA9IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF0ZSwgd2Vla1N0YXJ0KSB7XG4gIHZhciBkID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7XG4gIHZhciBkYXlOdW0gPSBkLmdldFVUQ0RheSgpIC0gKHdlZWtTdGFydCAtIDEpIHx8IDc7XG4gIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSArIDQgLSBkYXlOdW0pO1xuICB2YXIgeWVhclN0YXJ0ID0gbmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSk7XG4gIHJldHVybiBNYXRoLmNlaWwoKChkIC0geWVhclN0YXJ0KSAvIDg2NDAwMDAwICsgMSkgLyA3KTtcbn07XG4vKipcbiAqIERhdGVNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogZGF0ZXMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIERhdGVNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGF0ZU1hc2soKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERhdGVNYXNrKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhEYXRlTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayBkYXRlXG4gICAgICpcbiAgICAgKiBNYXNrIHRoZSBwYXNzZWQgZGF0ZSB3aXRoIHRoZSBwYXNzZWQgbWFza1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIG1hc2sgYXMgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2xvY2FsZT1Ccm93c2VyJ3MgbG9jYWxlXSB0aGUgbGFuZ3VhZ2UgdG8gdXNlIGV4KGVuLVVTKS4gZGVmYXVsdCBpcyB0byB0aGUgc3lzdGVtIGxhbmd1YWdlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFt0aW1lem9uZT1TeXN0ZW0gdGltZXpvbmVdIHRoZSB0aW1lIHpvbmUgZGVzY3JpcHRvciAoZS5nLiBBbWVyaWNhL0xvc19BbmdlbGVzKS4gZGVmYXVsdCB0byB0aGUgc3lzdGVtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGEgZGF0ZSBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFza1xuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBtYXNrKGRhdGUsIF9tYXNrLCBsb2NhbGUsIHRpbWV6b25lKSB7XG4gICAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICAgIGlmICghX21hc2spIHJldHVybiBkYXRlO1xuICAgICAgdGltZXpvbmUgPSB0aW1lem9uZSB8fCBnZXRUaW1lem9uZU9yT2Zmc2V0KCk7XG4gICAgICBsb2NhbGUgPSBsb2NhbGUgfHwgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnOyAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbXBsZXRlIGlzbyBzdHJpbmdcblxuICAgICAgZGF0ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IGZpeFNob3J0SVNPKGRhdGUpO1xuICAgICAgdmFyIGRhdGVPYmplY3QgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX3R6X3V0Y1RvWm9uZWRUaW1lX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRhdGUsIHRpbWV6b25lKTtcblxuICAgICAgdmFyIHRyYW5zbGF0aW9uID0gRGF0ZU1hc2suX2J1aWxkVHJhbnNsYXRpb24oe1xuICAgICAgICB5ZWFyOiBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCksXG4gICAgICAgIG1vbnRoOiBkYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICBtb250aFNob3J0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgbW9udGhMb25nOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBkYXk6IGRhdGVPYmplY3QuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXlTaG9ydDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnXG4gICAgICAgIH0pLmZvcm1hdChkYXRlT2JqZWN0KSxcbiAgICAgICAgZGF5TG9uZzogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoW2xvY2FsZV0sIHtcbiAgICAgICAgICB3ZWVrZGF5OiAnbG9uZydcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBtaW51dGVzOiBkYXRlT2JqZWN0LmdldE1pbnV0ZXMoKSxcbiAgICAgICAgc2Vjb25kczogZGF0ZU9iamVjdC5nZXRTZWNvbmRzKCksXG5cbiAgICAgICAgZ2V0IGhvdXJzMjQoKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVPYmplY3QuZ2V0SG91cnMoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQgaG91cnMxMigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ob3VyczI0ICUgMTIgfHwgMTI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF5T2ZZZWFyOiBnZXREYXlPZlllYXIoZGF0ZU9iamVjdCksXG4gICAgICAgIGRheU9mV2VlazogZGF0ZU9iamVjdC5nZXREYXkoKSArIDEsXG4gICAgICAgIC8vIFN1bmRheSA9IDEgaW4gQkJqIGJ1dCBTdW5kYXkgPSAwIGluIEpTXG4gICAgICAgIHdlZWtOdW1iZXI6IGdldFdlZWtOdW1iZXIoZGF0ZU9iamVjdCwgZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSksXG4gICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICB0aW1lem9uZTogdGltZXpvbmVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gX21hc2s7XG5cbiAgICAgIGZvciAodmFyIGsgaW4gdHJhbnNsYXRpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cCgnKCUnICsgayArICcpJywgJ2cnKSwgdHJhbnNsYXRpb25ba10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBtYXAgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBwb3NzaWJsZSBmb3JtcyBvZiBtYXNrc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGVEZXRhaWxzIGRhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gZm9ybXMgbWFza3NcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIl9idWlsZFRyYW5zbGF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9idWlsZFRyYW5zbGF0aW9uKGRhdGVEZXRhaWxzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyB5ZWFyXG4gICAgICAgIFl6OiBkYXRlRGV0YWlscy55ZWFyLnRvU3RyaW5nKCkuc3Vic3RyKC0yKSxcbiAgICAgICAgWXM6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFlsOiBkYXRlRGV0YWlscy55ZWFyLFxuICAgICAgICBZcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy55ZWFyKSxcbiAgICAgICAgWWQ6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFk6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIC8vIG1vbnRoXG4gICAgICAgIE16OiBTdHJpbmcoZGF0ZURldGFpbHMubW9udGgpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubW9udGggOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgTXM6IGRhdGVEZXRhaWxzLm1vbnRoU2hvcnQsXG4gICAgICAgIE1sOiBkYXRlRGV0YWlscy5tb250aExvbmcsXG4gICAgICAgIE1wOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLm1vbnRoKSxcbiAgICAgICAgTWQ6IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICBNOiBkYXRlRGV0YWlscy5tb250aCxcbiAgICAgICAgLy8gZGF5XG4gICAgICAgIER6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5KS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheSA6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRHM6IGRhdGVEZXRhaWxzLmRheVNob3J0LFxuICAgICAgICBEbDogZGF0ZURldGFpbHMuZGF5TG9uZyxcbiAgICAgICAgRHA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5KSxcbiAgICAgICAgRGQ6IGRhdGVEZXRhaWxzLmRheSxcbiAgICAgICAgRDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICAvLyBob3VyIDI0XG4gICAgICAgIEh6OiBTdHJpbmcoZGF0ZURldGFpbHMuaG91cnMyNCkubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5ob3VyczI0IDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSHM6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEhsOiBkYXRlRGV0YWlscy5ob3VyczI0LFxuICAgICAgICBIcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5ob3VyczI0KSxcbiAgICAgICAgSGQ6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEg6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIC8vIGhvdXIgMTJcbiAgICAgICAgaHo6IFN0cmluZyhkYXRlRGV0YWlscy5ob3VyczEyKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmhvdXJzMTIgOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBoczogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaGw6IGRhdGVEZXRhaWxzLmhvdXJzMTIsXG4gICAgICAgIGhwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLmhvdXJzMTIpLFxuICAgICAgICBoZDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgLy8gbWludXRlc1xuICAgICAgICBtejogU3RyaW5nKGRhdGVEZXRhaWxzLm1pbnV0ZXMpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMubWludXRlcyA6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG1zOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtbDogZGF0ZURldGFpbHMubWludXRlcyxcbiAgICAgICAgbXA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMubWludXRlcyksXG4gICAgICAgIG1kOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICAvLyBzZWNvbmRzXG4gICAgICAgIHN6OiBTdHJpbmcoZGF0ZURldGFpbHMuc2Vjb25kcykubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5zZWNvbmRzIDogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgc3M6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHNsOiBkYXRlRGV0YWlscy5zZWNvbmRzLFxuICAgICAgICBzcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5zZWNvbmRzKSxcbiAgICAgICAgc2Q6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHM6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIC8vIEFNICwgUE1cbiAgICAgICAgUFA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdQTScgOiAnUE0nLFxuICAgICAgICBQOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAnUE0nIDogJ0FNJyxcbiAgICAgICAgcHA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdwbScgOiAnYW0nLFxuICAgICAgICBwOiBkYXRlRGV0YWlscy5ob3VyczI0ID4gMTIgPyAncG0nIDogJ2FtJyxcbiAgICAgICAgLy8gRGF5IG9mIFllYXJcbiAgICAgICAgSno6IFN0cmluZyhkYXRlRGV0YWlscy5kYXlPZlllYXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5T2ZZZWFyIDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKczogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKbDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKZDogZGF0ZURldGFpbHMuZGF5T2ZZZWFyLFxuICAgICAgICBKOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIC8vIERheSBPZiBXZWVrXG4gICAgICAgIFd6OiBTdHJpbmcoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmRheU9mV2VlayA6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3M6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV2w6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgV3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuZGF5T2ZXZWVrKSxcbiAgICAgICAgV2Q6IGRhdGVEZXRhaWxzLmRheU9mV2VlayxcbiAgICAgICAgVzogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICAvLyB3ZWVrIG51bWJlclxuICAgICAgICB3ejogU3RyaW5nKGRhdGVEZXRhaWxzLndlZWtOdW1iZXIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMud2Vla051bWJlciA6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHdzOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3bDogZGF0ZURldGFpbHMud2Vla051bWJlcixcbiAgICAgICAgd3A6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMud2Vla051bWJlciksXG4gICAgICAgIHdkOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3OiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBEYXRlTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiY1wiXSA9IChEYXRlTWFzayk7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdXRjVG9ab25lZFRpbWU7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG5cblxuXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodGltZVpvbmUsIGRhdGUpXG5cbiAgcmV0dXJuIG9mZnNldE1pbGxpc2Vjb25kc1xuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKHV0Y0RhdGUsIG9mZnNldE1pbGxpc2Vjb25kcylcbiAgICA6IHV0Y0RhdGVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHR6VG9rZW5pemVEYXRlO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzXSB0b2tlbnMgb2YgdGhlIHByb3ZpZGVkXG4gKiBgZGF0ZWAgYXMgaXQgd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgYHRpbWVab25lYC5cbiAqL1xuZnVuY3Rpb24gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZVpvbmUpIHtcbiAgdmFyIGR0ZiA9IGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKVxuICByZXR1cm4gZHRmLmZvcm1hdFRvUGFydHMgPyBwYXJ0c09mZnNldChkdGYsIGRhdGUpIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKVxufVxuXG52YXIgdHlwZVRvUG9zID0ge1xuICB5ZWFyOiAwLFxuICBtb250aDogMSxcbiAgZGF5OiAyLFxuICBob3VyOiAzLFxuICBtaW51dGU6IDQsXG4gIHNlY29uZDogNVxufVxuXG5mdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpXG4gIHZhciBmaWxsZWQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwb3MgPSB0eXBlVG9Qb3NbZm9ybWF0dGVkW2ldLnR5cGVdXG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQoZm9ybWF0dGVkW2ldLnZhbHVlLCAxMClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxlZFxufVxuXG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXFx1MjAwRS9nLCAnJylcbiAgdmFyIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKyksPyAoXFxkKyk6KFxcZCspOihcXGQrKS8uZXhlYyhmb3JtYXR0ZWQpXG4gIC8vIHZhciBbLCBmTW9udGgsIGZEYXksIGZZZWFyLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF0gPSBwYXJzZWRcbiAgLy8gcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF1cbiAgcmV0dXJuIFtwYXJzZWRbM10sIHBhcnNlZFsxXSwgcGFyc2VkWzJdLCBwYXJzZWRbNF0sIHBhcnNlZFs1XSwgcGFyc2VkWzZdXVxufVxuXG4vLyBHZXQgYSBjYWNoZWQgSW50bC5EYXRlVGltZUZvcm1hdCBpbnN0YW5jZSBmb3IgdGhlIElBTkEgYHRpbWVab25lYC4gVGhpcyBjYW4gYmUgdXNlZFxuLy8gdG8gZ2V0IGRldGVybWluaXN0aWMgbG9jYWwgZGF0ZS90aW1lIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGBlbi1VU2AgbG9jYWxlIHdoaWNoXG4vLyBjYW4gYmUgdXNlZCB0byBleHRyYWN0IGxvY2FsIHRpbWUgcGFydHMgYXMgbmVjZXNzYXJ5LlxudmFyIGR0ZkNhY2hlID0ge31cbmZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKSB7XG4gIGlmICghZHRmQ2FjaGVbdGltZVpvbmVdKSB7XG4gICAgLy8gTmV3IGJyb3dzZXJzIHVzZSBgaG91ckN5Y2xlYCwgSUUgYW5kIENocm9tZSA8NzMgZG9lcyBub3Qgc3VwcG9ydCBpdCBhbmQgdXNlcyBgaG91cjEyYFxuICAgIHZhciB0ZXN0RGF0ZUZvcm1hdHRlZCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICB0aW1lWm9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnLFxuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgIH0pLmZvcm1hdChuZXcgRGF0ZSgnMjAxNC0wNi0yNVQwNDowMDowMC4xMjNaJykpXG4gICAgdmFyIGhvdXJDeWNsZVN1cHBvcnRlZCA9XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJzA2LzI1LzIwMTQsIDAwOjAwOjAwJyB8fFxuICAgICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICfigI4wNuKAji/igI4yNeKAji/igI4yMDE04oCOIOKAjjAw4oCOOuKAjjAw4oCOOuKAjjAwJ1xuXG4gICAgZHRmQ2FjaGVbdGltZVpvbmVdID0gaG91ckN5Y2xlU3VwcG9ydGVkXG4gICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXJDeWNsZTogJ2gyMycsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICB9XG4gIHJldHVybiBkdGZDYWNoZVt0aW1lWm9uZV1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBzdWJNaWxsaXNlY29uZHM7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYWRkTWlsbGlzZWNvbmRzX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcblxuXG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cblxuZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hZGRNaWxsaXNlY29uZHNfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gYWRkTWlsbGlzZWNvbmRzO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cblxuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiB2YXIgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cblxuZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgdGltZXN0YW1wID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9EYXRlX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0b0RhdGU7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cblxuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTsgLy8gQ2xvbmUgdGhlIGRhdGVcblxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ29iamVjdCcgJiYgYXJnU3RyID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdudW1iZXInIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgTnVtYmVyXScpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IFN0cmluZ10nKSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXCJTdGFydGluZyB3aXRoIHYyLjAuMC1iZXRhLjEgZGF0ZS1mbnMgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyBhcyBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2ZqdWxlXCIpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHRvRGF0ZTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG5cblxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG52YXIgREVGQVVMVF9BRERJVElPTkFMX0RJR0lUUyA9IDJcblxudmFyIHBhdHRlcm5zID0ge1xuICBkYXRlVGltZURlbGltZXRlcjogL1tUIF0vLFxuICBwbGFpblRpbWU6IC86LyxcbiAgdGltZVpvbmVEZWxpbWV0ZXI6IC9bWiBdL2ksXG5cbiAgLy8geWVhciB0b2tlbnNcbiAgWVk6IC9eKFxcZHsyfSkkLyxcbiAgWVlZOiBbXG4gICAgL14oWystXVxcZHsyfSkkLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7M30pJC8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7NH0pJC8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuICBZWVlZOiAvXihcXGR7NH0pLyxcbiAgWVlZWVk6IFtcbiAgICAvXihbKy1dXFxkezR9KS8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezV9KS8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7Nn0pLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG5cbiAgLy8gZGF0ZSB0b2tlbnNcbiAgTU06IC9eLShcXGR7Mn0pJC8sXG4gIERERDogL14tPyhcXGR7M30pJC8sXG4gIE1NREQ6IC9eLT8oXFxkezJ9KS0/KFxcZHsyfSkkLyxcbiAgV3d3OiAvXi0/VyhcXGR7Mn0pJC8sXG4gIFd3d0Q6IC9eLT9XKFxcZHsyfSktPyhcXGR7MX0pJC8sXG5cbiAgSEg6IC9eKFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NOiAvXihcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU1TUzogL14oXFxkezJ9KTo/KFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcblxuICAvLyB0aW1lem9uZSB0b2tlbnMgKHRvIGlkZW50aWZ5IHRoZSBwcmVzZW5jZSBvZiBhIHR6KVxuICB0aW1lem9uZTogLyhbWistXS4qfCBVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgYW4gYXJndW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBpdC5cbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvciB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqIEFsbCAqZGF0ZS1mbnMqIGZ1bmN0aW9ucyB3aWxsIHRocm93IGBSYW5nZUVycm9yYCBpZiBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBpcyBub3QgMCwgMSwgMiBvciB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T3B0aW9uc1dpdGhUWn0gW29wdGlvbnNdIC0gdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVpvbmU9JyddIC0gdXNlZCB0byBzcGVjaWZ5IHRoZSBJQU5BIHRpbWUgem9uZSBvZmZzZXQgb2YgYSBkYXRlIFN0cmluZy5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcrMDIwMTQxMDEnLCB7YWRkaXRpb25hbERpZ2l0czogMX0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5mdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGRpcnR5T3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50J1xuICAgIClcbiAgfVxuXG4gIGlmIChhcmd1bWVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fVxuXG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID1cbiAgICBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMgPT0gbnVsbFxuICAgICAgPyBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfZXNtX2xpYl90b0ludGVnZXJfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbGliX3R6UGFyc2VUaW1lem9uZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSlcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKSlcbiAgICAgIG9mZnNldCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgdmFyIGRhdGVTdHJpbmdzID0ge31cbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltZXRlcilcbiAgdmFyIHRpbWVTdHJpbmdcblxuICBpZiAocGF0dGVybnMucGxhaW5UaW1lLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGxcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF1cbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF1cbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV1cbiAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IGFycmF5WzJdXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyKVswXVxuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICBpZiAodGltZVN0cmluZykge1xuICAgIHZhciB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZylcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nLnJlcGxhY2UodG9rZW5bMV0sICcnKVxuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5nc1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcGF0dGVybllZWSA9IHBhdHRlcm5zLllZWVthZGRpdGlvbmFsRGlnaXRzXVxuICB2YXIgcGF0dGVybllZWVlZID0gcGF0dGVybnMuWVlZWVlbYWRkaXRpb25hbERpZ2l0c11cblxuICB2YXIgdG9rZW5cblxuICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWVlZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIHllYXJTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyU3RyaW5nLCAxMCksXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSh5ZWFyU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBZWSBvciDCsVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoY2VudHVyeVN0cmluZywgMTApICogMTAwLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoY2VudHVyeVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHRva2VuXG4gIHZhciBkYXRlXG4gIHZhciBtb250aFxuICB2YXIgd2Vla1xuXG4gIC8vIFlZWVlcbiAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLU1NXG4gIHRva2VuID0gcGF0dGVybnMuTU0uZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aClcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1EREQgb3IgWVlZWURERFxuICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIHZhciBkYXlPZlllYXIgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyB5eXl5LU1NLWRkIG9yIFlZWVlNTUREXG4gIHRva2VuID0gcGF0dGVybnMuTU1ERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5ID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLVd3dyBvciBZWVlZV3d3XG4gIHRva2VuID0gcGF0dGVybnMuV3d3LmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaylcbiAgfVxuXG4gIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3dELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheU9mV2VlayA9IHBhcnNlSW50KHRva2VuWzJdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgZGF0ZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgdG9rZW5cbiAgdmFyIGhvdXJzXG4gIHZhciBtaW51dGVzXG5cbiAgLy8gaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISC5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICB9XG5cbiAgLy8gaGg6bW0gb3IgaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgKVxuICB9XG5cbiAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTVNTLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgK1xuICAgICAgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgK1xuICAgICAgc2Vjb25kcyAqIDEwMDBcbiAgICApXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgd2VlayA9IHdlZWsgfHwgMFxuICBkYXkgPSBkYXkgfHwgMFxuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApXG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpXG4gIHZhciBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDdcbiAgdmFyIGRpZmYgPSB3ZWVrICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXlcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZilcbiAgcmV0dXJuIGRhdGVcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICBpZiAoZGF5T2ZZZWFyIDwgMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgaWYgKGlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY2KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCFpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2NSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgaWYgKHdlZWsgPCAwIHx8IHdlZWsgPiA1Mikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRheSAhPSBudWxsICYmIChkYXkgPCAwIHx8IGRheSA+IDYpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzICE9IG51bGwgJiYgKGhvdXJzIDwgMCB8fCBob3VycyA+PSAyNSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoc2Vjb25kcyAhPSBudWxsICYmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzO1xudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSkge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRpcnR5RGF0ZS5nZXRUaW1lKCkpO1xuICB2YXIgYmFzZVRpbWV6b25lT2Zmc2V0ID0gTWF0aC5jZWlsKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGRhdGUuc2V0U2Vjb25kcygwLCAwKTtcbiAgdmFyIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lKCkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGdldFdlZWtTdGFydEJ5UmVnaW9uICovXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlJDE7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fcmVnaW9uRGF5TWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxuXG5cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlSZWdpb24kMShyZWdpb25Db2RlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYlwiIC8qIGdldFdlZWtTdGFydEJ5UmVnaW9uICovXSkocmVnaW9uQ29kZSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5TG9jYWxlJDEobG9jYWxlKSB7XG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwaV9qc19fW1wiYVwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSkobG9jYWxlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2xhbmdSZWdpb25NYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFpbi5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlOyB9KTtcbmZ1bmN0aW9uIGdldFdlZWtTdGFydEJ5UmVnaW9uKHJlZ2lvbkNvZGUsIHJlZ2lvbkRheU1hcCkge1xuICAgIHZhciBjb2RlID0gcmVnaW9uRGF5TWFwW3R5cGVvZiByZWdpb25Db2RlID09PSAnc3RyaW5nJyA/IHJlZ2lvbkNvZGUudG9VcHBlckNhc2UoKSA6IHJlZ2lvbkNvZGVdO1xuICAgIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ251bWJlcicgPyBjb2RlIDogMTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlLCBsYW5nUmVnaW9uTWFwLCByZWdpb25EYXlNYXApIHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgIHZhciBkYXRhID0gbG9jYWxlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1stX10vKTtcbiAgICAgICAgdmFyIGxhbmd1YWdlID0gZGF0YVswXTtcbiAgICAgICAgdmFyIGNvdW50cnk7XG4gICAgICAgIGlmIChkYXRhWzFdICYmIGRhdGFbMV0ubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICBsYW5ndWFnZSArPSBcIl9cIiArIChkYXRhWzFdKTtcbiAgICAgICAgICAgIGNvdW50cnkgPSBkYXRhWzJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRyeSA9IGRhdGFbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3VudHJ5KSB7XG4gICAgICAgICAgICBjb3VudHJ5ID0gbGFuZ1JlZ2lvbk1hcFtsYW5ndWFnZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRXZWVrU3RhcnRCeVJlZ2lvbihjb3VudHJ5Lm1hdGNoKC9eXFxkKyQvKSA/IE51bWJlcihjb3VudHJ5KSA6IGNvdW50cnksIHJlZ2lvbkRheU1hcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDE7XG59XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBpLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgbGFuZ1JlZ2lvbk1hcCA9IHtcbiAgICBlbjogJ1VTJyxcbiAgICB6aDogJ0NOJyxcbiAgICB6aF9oYW5zOiAnQ04nLFxuICAgIGhhbnM6ICdDTicsXG4gICAgd3V1OiAnQ04nLFxuICAgIGhzbjogJ0NOJyxcbiAgICBoYWs6ICdDTicsXG4gICAgbmFuOiAnQ04nLFxuICAgIGdhbjogJ0NOJyxcbiAgICBoaTogJ0lOJyxcbiAgICB0ZTogJ0lOJyxcbiAgICBtcjogJ0lOJyxcbiAgICB0YTogJ0lOJyxcbiAgICBndTogJ0lOJyxcbiAgICBrbjogJ0lOJyxcbiAgICBvcjogJ0lOJyxcbiAgICBtbDogJ0lOJyxcbiAgICBwYV9ndXJ1OiAnSU4nLFxuICAgIGJobzogJ0lOJyxcbiAgICBhd2E6ICdJTicsXG4gICAgYXM6ICdJTicsXG4gICAgbXdyOiAnSU4nLFxuICAgIG1haTogJ0lOJyxcbiAgICBtYWc6ICdJTicsXG4gICAgYmdjOiAnSU4nLFxuICAgIGhuZTogJ0lOJyxcbiAgICBkY2M6ICdJTicsXG4gICAgZHo6ICdCVCcsXG4gICAgdG46ICdCVycsXG4gICAgYW06ICdFVCcsXG4gICAgb206ICdFVCcsXG4gICAgcXVjOiAnR1QnLFxuICAgIGlkOiAnSUQnLFxuICAgIGp2OiAnSUQnLFxuICAgIHN1OiAnSUQnLFxuICAgIG1hZDogJ0lEJyxcbiAgICBtc19hcmFiOiAnSUQnLFxuICAgIGdhOiAnSUUnLFxuICAgIGhlOiAnSUwnLFxuICAgIGphbTogJ0pNJyxcbiAgICBqYTogJ0pQJyxcbiAgICBrbTogJ0tIJyxcbiAgICBrbzogJ0tSJyxcbiAgICBsbzogJ0xBJyxcbiAgICBtaDogJ01IJyxcbiAgICBteTogJ01NJyxcbiAgICBtdDogJ01UJyxcbiAgICBuZTogJ05QJyxcbiAgICBmaWw6ICdQSCcsXG4gICAgY2ViOiAnUEgnLFxuICAgIGlsbzogJ1BIJyxcbiAgICB1cjogJ1BLJyxcbiAgICBwYTogJ1BLJyxcbiAgICBwYV9hcmFiOiAnUEsnLFxuICAgIGFyYWI6ICdQSycsXG4gICAgbGFoOiAnUEsnLFxuICAgIHBzOiAnUEsnLFxuICAgIHNkOiAnUEsnLFxuICAgIHNkX2FyYWI6ICdQSycsXG4gICAgc2tyOiAnUEsnLFxuICAgIGduOiAnUFknLFxuICAgIHRoOiAnVEgnLFxuICAgIHR0czogJ1RIJyxcbiAgICBhZWI6ICdUTicsXG4gICAgemhfaGFudDogJ1RXJyxcbiAgICBoYW50OiAnVFcnLFxuICAgIHNtOiAnV1MnLFxuICAgIHp1OiAnWkEnLFxuICAgIHNuOiAnWlcnLFxuICAgIGFycTogJ0RaJyxcbiAgICBhcjogJ0VHJyxcbiAgICBhcno6ICdFRycsXG4gICAgZmE6ICdJUicsXG4gICAgYXpfYXJhYjogJ0lSJyxcbiAgICBhcnk6ICdNQScsXG4gICAgYm46ICdCRCcsXG4gICAgcmt0OiAnQkQnLFxuICAgIGR2OiAnTVYnXG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGxhbmdSZWdpb25NYXApO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFuZ1JlZ2lvbk1hcC5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xudmFyIHJlZ2lvbkRheU1hcCA9IHtcbiAgICBBRzogMCxcbiAgICBBVEc6IDAsXG4gICAgMjg6IDAsXG4gICAgQVI6IDAsXG4gICAgQVJHOiAwLFxuICAgIDMyOiAwLFxuICAgIEFTOiAwLFxuICAgIEFTTTogMCxcbiAgICAxNjogMCxcbiAgICBBVTogMCxcbiAgICBBVVM6IDAsXG4gICAgMzY6IDAsXG4gICAgQlI6IDAsXG4gICAgQlJBOiAwLFxuICAgIDc2OiAwLFxuICAgIEJTOiAwLFxuICAgIEJIUzogMCxcbiAgICA0NDogMCxcbiAgICBCVDogMCxcbiAgICBCVE46IDAsXG4gICAgNjQ6IDAsXG4gICAgQlc6IDAsXG4gICAgQldBOiAwLFxuICAgIDcyOiAwLFxuICAgIEJaOiAwLFxuICAgIEJMWjogMCxcbiAgICA4NDogMCxcbiAgICBDQTogMCxcbiAgICBDQU46IDAsXG4gICAgMTI0OiAwLFxuICAgIENOOiAwLFxuICAgIENITjogMCxcbiAgICAxNTY6IDAsXG4gICAgQ086IDAsXG4gICAgQ09MOiAwLFxuICAgIDE3MDogMCxcbiAgICBETTogMCxcbiAgICBETUE6IDAsXG4gICAgMjEyOiAwLFxuICAgIERPOiAwLFxuICAgIERPTTogMCxcbiAgICAyMTQ6IDAsXG4gICAgRVQ6IDAsXG4gICAgRVRIOiAwLFxuICAgIDIzMTogMCxcbiAgICBHVDogMCxcbiAgICBHVE06IDAsXG4gICAgMzIwOiAwLFxuICAgIEdVOiAwLFxuICAgIEdVTTogMCxcbiAgICAzMTY6IDAsXG4gICAgSEs6IDAsXG4gICAgSEtHOiAwLFxuICAgIDM0NDogMCxcbiAgICBITjogMCxcbiAgICBITkQ6IDAsXG4gICAgMzQwOiAwLFxuICAgIElEOiAwLFxuICAgIElETjogMCxcbiAgICAzNjA6IDAsXG4gICAgSUU6IDAsXG4gICAgSVJMOiAwLFxuICAgIDM3MjogMCxcbiAgICBJTDogMCxcbiAgICBJU1I6IDAsXG4gICAgMzc2OiAwLFxuICAgIElOOiAwLFxuICAgIElORDogMCxcbiAgICAzNTY6IDAsXG4gICAgSk06IDAsXG4gICAgSkFNOiAwLFxuICAgIDM4ODogMCxcbiAgICBKUDogMCxcbiAgICBKUE46IDAsXG4gICAgMzkyOiAwLFxuICAgIEtFOiAwLFxuICAgIEtFTjogMCxcbiAgICA0MDQ6IDAsXG4gICAgS0g6IDAsXG4gICAgS0hNOiAwLFxuICAgIDExNjogMCxcbiAgICBLUjogMCxcbiAgICBLT1I6IDAsXG4gICAgNDEwOiAwLFxuICAgIExBOiAwLFxuICAgIExBMDogMCxcbiAgICA0MTg6IDAsXG4gICAgTUg6IDAsXG4gICAgTUhMOiAwLFxuICAgIDU4NDogMCxcbiAgICBNTTogMCxcbiAgICBNTVI6IDAsXG4gICAgMTA0OiAwLFxuICAgIE1POiAwLFxuICAgIE1BQzogMCxcbiAgICA0NDY6IDAsXG4gICAgTVQ6IDAsXG4gICAgTUxUOiAwLFxuICAgIDQ3MDogMCxcbiAgICBNWDogMCxcbiAgICBNRVg6IDAsXG4gICAgNDg0OiAwLFxuICAgIE1aOiAwLFxuICAgIE1PWjogMCxcbiAgICA1MDg6IDAsXG4gICAgTkk6IDAsXG4gICAgTklDOiAwLFxuICAgIDU1ODogMCxcbiAgICBOUDogMCxcbiAgICBOUEw6IDAsXG4gICAgNTI0OiAwLFxuICAgIE5aOiAwLFxuICAgIE5aTDogMCxcbiAgICA1NTQ6IDAsXG4gICAgUEE6IDAsXG4gICAgUEFOOiAwLFxuICAgIDU5MTogMCxcbiAgICBQRTogMCxcbiAgICBQRVI6IDAsXG4gICAgNjA0OiAwLFxuICAgIFBIOiAwLFxuICAgIFBITDogMCxcbiAgICA2MDg6IDAsXG4gICAgUEs6IDAsXG4gICAgUEFLOiAwLFxuICAgIDU4NjogMCxcbiAgICBQUjogMCxcbiAgICBQUkk6IDAsXG4gICAgNjMwOiAwLFxuICAgIFBZOiAwLFxuICAgIFBSWTogMCxcbiAgICA2MDA6IDAsXG4gICAgU0E6IDAsXG4gICAgU0FVOiAwLFxuICAgIDY4MjogMCxcbiAgICBTRzogMCxcbiAgICBTR1A6IDAsXG4gICAgNzAyOiAwLFxuICAgIFNWOiAwLFxuICAgIFNMVjogMCxcbiAgICAyMjI6IDAsXG4gICAgVEg6IDAsXG4gICAgVEhBOiAwLFxuICAgIDc2NDogMCxcbiAgICBUTjogMCxcbiAgICBUVU46IDAsXG4gICAgNzg4OiAwLFxuICAgIFRUOiAwLFxuICAgIFRUTzogMCxcbiAgICA3ODA6IDAsXG4gICAgVFc6IDAsXG4gICAgVFdOOiAwLFxuICAgIDE1ODogMCxcbiAgICBVTTogMCxcbiAgICBVTUk6IDAsXG4gICAgNTgxOiAwLFxuICAgIFVTOiAwLFxuICAgIFVTQTogMCxcbiAgICA4NDA6IDAsXG4gICAgVkU6IDAsXG4gICAgVkVOOiAwLFxuICAgIDg2MjogMCxcbiAgICBWSTogMCxcbiAgICBWSVI6IDAsXG4gICAgODUwOiAwLFxuICAgIFdTOiAwLFxuICAgIFdTTTogMCxcbiAgICA4ODI6IDAsXG4gICAgWUU6IDAsXG4gICAgWUVNOiAwLFxuICAgIDg4NzogMCxcbiAgICBaQTogMCxcbiAgICBaQUY6IDAsXG4gICAgNzEwOiAwLFxuICAgIFpXOiAwLFxuICAgIFpXRTogMCxcbiAgICA3MTY6IDAsXG4gICAgQUU6IDYsXG4gICAgQVJFOiA2LFxuICAgIDc4NDogNixcbiAgICBBRjogNixcbiAgICBBRkc6IDYsXG4gICAgNDogNixcbiAgICBCSDogNixcbiAgICBCSFI6IDYsXG4gICAgNDg6IDYsXG4gICAgREo6IDYsXG4gICAgREpJOiA2LFxuICAgIDI2MjogNixcbiAgICBEWjogNixcbiAgICBEWkE6IDYsXG4gICAgMTI6IDYsXG4gICAgRUc6IDYsXG4gICAgRUdZOiA2LFxuICAgIDgxODogNixcbiAgICBJUTogNixcbiAgICBJUlE6IDYsXG4gICAgMzY4OiA2LFxuICAgIElSOiA2LFxuICAgIElSTjogNixcbiAgICAzNjQ6IDYsXG4gICAgSk86IDYsXG4gICAgSk9SOiA2LFxuICAgIDQwMDogNixcbiAgICBLVzogNixcbiAgICBLV1Q6IDYsXG4gICAgNDE0OiA2LFxuICAgIExZOiA2LFxuICAgIExCWTogNixcbiAgICA0MzQ6IDYsXG4gICAgTUE6IDYsXG4gICAgTUFSOiA2LFxuICAgIDUwNDogNixcbiAgICBPTTogNixcbiAgICBPTU46IDYsXG4gICAgNTEyOiA2LFxuICAgIFFBOiA2LFxuICAgIFFBVDogNixcbiAgICA2MzQ6IDYsXG4gICAgU0Q6IDYsXG4gICAgU0ROOiA2LFxuICAgIDcyOTogNixcbiAgICBTWTogNixcbiAgICBTWVI6IDYsXG4gICAgNzYwOiA2LFxuICAgIEJEOiA1LFxuICAgIEJHRDogNSxcbiAgICA1MDogNSxcbiAgICBNVjogNSxcbiAgICBNRFY6IDUsXG4gICAgNDYyOiA1XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHJlZ2lvbkRheU1hcCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdpb25EYXlNYXAuanMubWFwXG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG52YXIgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvO1xudmFyIGlzV2hpdGVzcGFjZVJlZ2V4ID0gL1xccy87XG52YXIgcHVuY3R1YXRpb25MaXN0ID0gJyFcIiMkJSZcXCcoKSorLC0uLzo7PD0+P0BbXV5fYHt8fX4nO1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cblxudmFyIGlzTG93ZXJDYXNlID0gZnVuY3Rpb24gaXNMb3dlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b1VwcGVyQ2FzZSgpO1xufTtcbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBpbiB1cHBlciBjYXNlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICovXG5cblxudmFyIGlzVXBwZXJDYXNlID0gZnVuY3Rpb24gaXNVcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIgPT0gc3RyLnRvVXBwZXJDYXNlKCkgJiYgc3RyICE9IHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIHBhc3NPclRocm93RXJyb3IgPSBmdW5jdGlvbiBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cikge1xuICBpZiAoIWxvb3NlKSB7XG4gICAgdmFyIF9jaGFyID0gc3RyLmNoYXJBdChpKTtcblxuICAgIHZhciBwb3MgPSBpICsgMTtcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IFwiU3RyaW5nTWFza0Vycm9yOiBlcnJvciBhcHBseWluZyBtYXNrIGF0IHBvc2l0aW9uIFxcXCJcIi5jb25jYXQocG9zLCBcIlxcXCIgLCBjaGFyIFxcXCJcIikuY29uY2F0KF9jaGFyLCBcIlxcXCJcIiksXG4gICAgICBwb3M6IHBvcyxcbiAgICAgIFwiY2hhclwiOiBfY2hhclxuICAgIH07XG4gIH0gZWxzZSByZXRbaV0gPSAnICc7XG59O1xuLyoqXG4gKiBOdW1iZXJNYXNrXG4gKlxuICogQSBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBCQmogbnVtYmVycyBtYXNraW5nXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG5cbnZhciBTdHJpbmdNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RyaW5nTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaW5nTWFzayk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3RyaW5nTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICogXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2soc3RyLCBfbWFzaykge1xuICAgICAgdmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgICBfbWFzayA9IFN0cmluZyhfbWFzayk7XG4gICAgICB2YXIgbWFza0xlbiA9IF9tYXNrLmxlbmd0aDtcbiAgICAgIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuXG4gICAgICBpZiAoc3RyTGVuID4gbWFza0xlbikge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBzdHI7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgIGVsc2UgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tJc1Rvb1Nob3J0RXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrSXNUb29TaG9ydEVycm9yOiBNYXNrIGlzIHNob3J0ZXIgdGhhbiB0aGUgcGFzc2VkIHN0cmluZ1wiXG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJldCA9IG5ldyBBcnJheShtYXNrTGVuKTtcbiAgICAgIHZhciBwb3MgPSAwOyAvLyB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJcblxuICAgICAgdmFyIG1hc2tCeXRlID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICAgIG1hc2tCeXRlID0gX21hc2suY2hhckF0KGkpO1xuXG4gICAgICAgIHN3aXRjaCAobWFza0J5dGUpIHtcbiAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGFueSBjaGFyYWN0ZXJcbiAgICAgICAgICAgIHJldFtpXSA9IHBvcyA8IHN0ckxlbiA/IHN0ci5jaGFyQXQocG9zKSA6ICcgJztcbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlcjsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGUgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlKSkgcmV0W2ldID0gX2J5dGU7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGUpKSByZXRbaV0gPSBfYnl0ZS50b1VwcGVyQ2FzZSgpO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTIgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlMikgfHwgaXNMb3dlckNhc2UoX2J5dGUyKSkgcmV0W2ldID0gX2J5dGUyO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlMyA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlMykpIHJldFtpXSA9IF9ieXRlMztlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdaJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU0ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTQpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTQpKSByZXRbaV0gPSBfYnl0ZTQ7ZWxzZSBpZiAoaXNMb3dlckNhc2UoX2J5dGU0KSkgcmV0W2ldID0gX2J5dGU0LnRvVXBwZXJDYXNlKCk7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAneic6XG4gICAgICAgICAgICAvLyBtYXRjaCBsZXR0ZXIgb3IgZGlnaXRcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlNSA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGU1KSB8fCBpc0xvd2VyQ2FzZShfYnl0ZTUpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTUpKSByZXRbaV0gPSBfYnl0ZTU7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdVJzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciAoZm9yY2UgdXBwZXIgY2FzZSksIGRpZ2l0LCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uLlxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU2ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShfYnl0ZTYpKSByZXRbaV0gPSBfYnl0ZTYudG9VcHBlckNhc2UoKTtlbHNlIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTYpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChfYnl0ZTYpIHx8IGlzV2hpdGVzcGFjZVJlZ2V4LnRlc3QoX2J5dGU2KSB8fCBwdW5jdHVhdGlvbkxpc3QuaW5kZXhPZihfYnl0ZTYpID4gLTEpIHJldFtpXSA9IF9ieXRlNjtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0W2ldID0gbWFza0J5dGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgIGlmICghbG9vc2UpIHtcbiAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gU3RyaW5nTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChTdHJpbmdNYXNrKTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVHlwZXNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSk7XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG5cbi8qKlxuICogVHlwZXNcbiAqXG4gKiBCQmogbWFza3MgZmFjdG9yeVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cblxudmFyIFR5cGVzID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHlwZXMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGVzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUeXBlcywgbnVsbCwgW3tcbiAgICBrZXk6IFwibnVtYmVyXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIHRoZSBnaXZlbiBudW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbWFzayBhY2NvcmRpbmcgdG8gQkJqIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlY2ltYWxTZXBhcmF0b3I9Ll0gIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VUcmFpbGluZ1plcm9zPWZhbHNlXSAtIEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG51bWJlcihfbnVtYmVyLCBtYXNrKSB7XG4gICAgICB2YXIgZ3JvdXBpbmdTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLic7XG4gICAgICB2YXIgZm9yY2VUcmFpbGluZ1plcm9zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5tYXNrKF9udW1iZXIsIG1hc2ssIGdyb3VwaW5nU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yLCBmb3JjZVRyYWlsaW5nWmVyb3MsIGxvb3NlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFzayBhIGRhdGUgYWNjb3JkaW5nIHRvIGJiaiBtYXNraW5nIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgbWFzayBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbbG9jYWxlPUJyb3dzZXIncyBsb2NhbGVdIHRoZSBsYW5ndWFnZSB0byB1c2UgZXgoZW4tVVMpLiBkZWZhdWx0IGlzIHRvIHRoZSBzeXN0ZW0gbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3RpbWV6b25lPVN5c3RlbSB0aW1lem9uZV0gdGhlIHRpbWUgem9uZSBkZXNjcmlwdG9yIChlLmcuIEFtZXJpY2EvTG9zX0FuZ2VsZXMpLiBkZWZhdWx0IHRvIHRoZSBzeXN0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gbnVtYmVyIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRhdGUoX2RhdGUsIG1hc2ssIGxvY2FsZSwgdGltZXpvbmUpIHtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJjXCIgLyogZGVmYXVsdCAqL10ubWFzayhfZGF0ZSwgbWFzaywgbG9jYWxlLCB0aW1lem9uZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBtYXNrXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqXG4gICAgICogQHRocm93cyB7TWFza0lzVG9vU2hvcnRFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInN0cmluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJpbmcoc3RyLCBtYXNrKSB7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10ubWFzayhzdHIsIG1hc2ssIGxvb3NlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVHlwZXM7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoVHlwZXMpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJiai1tYXNrcy5qcy5tYXAiLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiSW5wdXRNYXNraW5nXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJhc2lzLWlucHV0LW1hc2tpbmcuanNcIik7IiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJCYXNpc1wiXSA9IHJvb3RbXCJCYXNpc1wiXSB8fCB7fSwgcm9vdFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgZmQ3ZjYwNDIxOTJlMTIzMmNmNjUiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcImNvbW1vbmpzXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImNvbW1vbmpzMlwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJhbWRcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwicm9vdFwiOltcIkJCalwiLFwiTWFza3NcIixcIlN0cmluZ01hc2tcIl19XG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tICcuL1RleHRJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5pbXBvcnQge1xyXG4gIG1hc2tJZk5vdE1hc2tlZCxcclxuICB1bm1hc2ssXHJcbiAgZmluZENhcmV0UG9zaXRpb24sXHJcbiAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2ssXHJcbn0gZnJvbSAnLi90b29scy5qcydcclxuXHJcbi8qKlxyXG4gKiBUaGUgYFRleHRJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBzdHJpbmcgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNzdHJpbmctbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBzdHJpbmcgbWFzayBAc2VlIFtCQmogU3RyaW5nIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI3N0cmluZy1tYXNrcykgfFxyXG4gKlxyXG4gKiAgPGJyPlxyXG4gKlxyXG4gKiAqKkV4YW1wbGUgOioqXHJcbiAqIGBgYGh0bWxcclxuICogIDxpbnB1dCBjbGFzcz1cImJiai10ZXh0LW1hc2tlZFwiIG5hbWU9XCJ0ZXN0XCIgaWQ9XCJ0ZXN0XCIgdmFsdWU9XCJlZDIzXCIgZGF0YS1tYXNrPVwiQUEtMDBcIj5cclxuICpcclxuICogIDxzY3JpcHQ+XHJcbiAqICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoZSkge1xyXG4gKiAgICAgIG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuVGV4dElucHV0KHtcclxuICogICAgICAgICBvblVwZGF0ZTogKG1hc2tlZFZhbHVlICwgcmF3VmFsdWUgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH0sXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIFRleHRJbnB1dCB7XHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0IG5ldyBUZXh0SW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9ucyAtIFRoZSBpbnB1dCBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5lbGVtZW50cz1cIi5iYmotdGV4dC1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotdGV4dC1tYXNrZWQnLFxyXG4gICAgICAgIGRvYzogZG9jdW1lbnQsXHJcbiAgICAgICAgY3NzQ2xhc3NFcnJvcjogJ2Jiai1tYXNrLWVycm9yJyxcclxuICAgICAgICBjc3NDbGFzc1N1Y2Nlc3M6ICdiYmotbWFzay1zdWNjZXNzJyxcclxuICAgICAgICBvblVwZGF0ZTogbnVsbCxcclxuICAgICAgICBvbkludmFsaWQ6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9XHJcbiAgICB0aGlzLl9vbktleXN0cm9rZSA9IHRoaXMuX29uS2V5c3Ryb2tlLmJpbmQodGhpcylcclxuICAgIHRoaXMuX29uRm9jdXMgPSB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcylcclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQgYW5kIHdyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGZvciBtYXNraW5nIGluIGNhc2VcclxuICAgKiB0aGV5IGFyZSBub3Qgd3JhcHBlZCB5ZXRcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG4gICAgbGV0IGlucHV0LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgcGFyZW50Q2xhc3MgPSBpbnB1dC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgICBpZiAoIWlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQkJqTWFza2luZzogSW5wdXQgaGFzIG5vIElELiBXaXRob3V0IGFuIElEIHRoZSBpbnB1dCBjYW5ub3QgYmUgbWFza2VkYCxcclxuICAgICAgICAgICAgaW5wdXRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBpbnB1dCdzIHdyYXAgdHdpY2VcclxuICAgICAgICBjb25zdCBpc1dyYXBwZWQgPVxyXG4gICAgICAgICAgcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3MuaW5kZXhPZigndGV4dElucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCd0ZXh0SW5wdXRNYXNrX193cmFwJykgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3Vud3JhcChwYXJlbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgdGV4dCBtYXNraW5nIGlucHV0IHdyYXBwZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGlucHV0IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzV3JhcHBlZCB3aGVuIHRydWUgdGhlIGlucHV0IGlzIGFscmVhZHkgd3JhcHBlZCBhbmQgd2UgbmVlZCB0byBhZGQgd2hhdCBpc1xyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0hUTUxTcGFuRWxlbWVudH0gdGhlIHdyYXAgZWxlbWVudFxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF93cmFwKGlucHV0LCBpc1dyYXBwZWQpIHtcclxuICAgIGNvbnN0IGlucHV0SWQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgIGlucHV0TmFtZSA9IGlucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpLFxyXG4gICAgICBtYXNrID0gaW5wdXQuZGF0YXNldC5tYXNrIHx8ICcnLFxyXG4gICAgICBvcmlnaW5hbFBhdHRlcm4gPSBpbnB1dC5wYXR0ZXJuLFxyXG4gICAgICBkZWZhdWx0UGF0dGVybiA9IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICBwYXR0ZXJuID0gb3JpZ2luYWxQYXR0ZXJuIHx8IGRlZmF1bHRQYXR0ZXJuXHJcblxyXG4gICAgbGV0IHdyYXAgPSBudWxsLFxyXG4gICAgICB1bm1hc2tJbnB1dCA9IG51bGxcclxuXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICB3cmFwID0gdGhpcy5vcHRpb25zLmRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgdW5tYXNrSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza0lucHV0ID0gd3JhcC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uZmlndXJlIHRoZSBhY3R1YWwgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpbnB1dC52YWx1ZSA9IG1hc2tJZk5vdE1hc2tlZChpbnB1dC52YWx1ZSwgbWFzaylcclxuICAgIGlucHV0LnBhdHRlcm4gPSBwYXR0ZXJuXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX190ZXh0SW5wdXQnKVxyXG4gICAgaW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xyXG4gICAgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgaWYgKG9yaWdpbmFsUGF0dGVybiAmJiBvcmlnaW5hbFBhdHRlcm4gIT09IGRlZmF1bHRQYXR0ZXJuKSB7XHJcbiAgICAgIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIGlmICghKGlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSB8fCBpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGUnKSkpIHtcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uRm9jdXMpXHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgaW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcclxuICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShpbnB1dC52YWx1ZSwgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxyXG4gICAgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpXHJcbiAgICB1bm1hc2tJbnB1dC5jbGFzc0xpc3QuYWRkKCd0ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIHVubWFza0lucHV0LnZhbHVlID0gaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICBpZiAoaW5wdXRJZCkgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2lucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChpbnB1dE5hbWUpIHVubWFza0lucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke2lucHV0TmFtZX0tdW5tYXNrZWRgKVxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIC8vIGNvbmZpZ3VyZSB0aGUgd3JhcHBlclxyXG4gICAgICB3cmFwLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGV4dElucHV0TWFza19fd3JhcCcpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQodW5tYXNrSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoaW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB0ZXh0SW5wdXQgdGhlIHdyYXBwZXIgc3BhbiBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF91bndyYXAodGV4dElucHV0KSB7XHJcbiAgICB0ZXh0SW5wdXQucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHRleHRJbnB1dC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB0ZXh0SW5wdXQucXVlcnlTZWxlY3RvcignLnRleHRJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25Gb2N1cylcclxuICAgIGRlbGV0ZSBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIGlmICghaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm4pIHtcclxuICAgICAgaW5wdXQucmVtb3ZlQXR0cmlidXRlKCdwYXR0ZXJuJylcclxuICAgICAgZGVsZXRlIGlucHV0LmRhdGFzZXQuaXNDdXN0b21QYXR0ZXJuXHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuXHJcbiAgICB0ZXh0SW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5wdXQsIHRleHRJbnB1dClcclxuICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRJbnB1dClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBldmVyeSBrZXlzdHJva2Ugb24gdGhlIGlucHV0IGFuZCB1cGRhdGUgdGhlIG1hc2tlZCBhbmQgdGhlIHVubWFza2VkIHZhbHVlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX29uS2V5c3Ryb2tlKGUpIHtcclxuICAgIGlmIChlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmFsdEtleSB8fCBlLm1ldGFLZXkpIHJldHVyblxyXG4gICAgaWYoZS5rZXlDb2RlICE9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQsXHJcbiAgICAgIG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2ssXHJcbiAgICAgIGV2ZW50VHlwZSA9IGUudHlwZVxyXG5cclxuICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eSgnJyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWUsXHJcbiAgICAgIGtleUNvZGUgPSBlLmtleUNvZGUsXHJcbiAgICAgIGtleUNvbnRlbnQgPSBlLmtleSB8fCBlLmNvZGUucmVwbGFjZSgvW14wLTldL2csICcnKSxcclxuICAgICAga2V5ID0ga2V5Q29udGVudCA/IChrZXlDb250ZW50Lmxlbmd0aCA+IDEgPyAnJyA6IGtleUNvbnRlbnQpIDogJycsXHJcbiAgICAgIGluc2VydFBvc2l0aW9uID0gZmluZENhcmV0UG9zaXRpb24odmFsdWUsIG1hc2spLFxyXG4gICAgICBuZXdWYWx1ZSxcclxuICAgICAgdW5tYXNrZWRWYWx1ZSxcclxuICAgICAgbWFza0Vycm9yID0gZmFsc2VcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgbmV3VmFsdWUgPSBtYXNrSWZOb3RNYXNrZWQoXHJcbiAgICAgICAgICAoZS5jbGlwYm9hcmREYXRhIHx8IHdpbmRvdy5jbGlwYm9hcmREYXRhKS5nZXREYXRhKCdUZXh0JyksXHJcbiAgICAgICAgICBtYXNrXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2tleXVwJzpcclxuICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAna2V5cHJlc3MnOlxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnRcclxuICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgIT09IGluc2VydFBvc2l0aW9uKSBpbnNlcnRQb3NpdGlvbiA9IHNlbGVjdGlvblN0YXJ0XHJcblxyXG4gICAgICAgIG5ld1ZhbHVlID1cclxuICAgICAgICAgIHZhbHVlLnN1YnN0cigwLCBpbnNlcnRQb3NpdGlvbikgKyBrZXkgKyB2YWx1ZS5zdWJzdHIoaW5zZXJ0UG9zaXRpb24pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFza2VkVmFsdWUgPSB1bm1hc2sobmV3VmFsdWUsIG1hc2spXHJcblxyXG4gICAgaWYgKFszNSwgMzYsIDM3LCAzOCwgMzksIDQwXS5pbmRleE9mKGtleUNvZGUpID09PSAtMSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlucHV0LnZhbHVlID0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2ssIGZhbHNlKVxyXG4gICAgICAgIGlmKHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7XHJcbiAgICAgICAgICBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2tlZFZhbHVlXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGAjJHtpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyl9LXVubWFza2VkYFxyXG4gICAgICAgICAgKS52YWx1ZSA9IHVubWFza2VkVmFsdWVcclxuICAgICAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUoaW5wdXQudmFsdWUsIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCwgaW5wdXQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc2tFcnJvciA9IGZhbHNlXHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpXHJcbiAgICAgICAgbWFza0Vycm9yID0gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl91cGRhdGVDYXJldFBvc2l0aW9uKGlucHV0LCBtYXNrKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbWFza0Vycm9yKSB0aGlzLl92YWxpZGF0ZUlucHV0KGlucHV0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGZvY3VzIGV2ZW50cyBvbiB0aGUgaW5wdXQgYW5kIHVwZGF0ZSB0aGUgY2FyZXQgcG9zaXRpb25cclxuICAgKiB3aGVyZSB0aGUgbmV4dCBjaGFyIHNob3VsZCBiZSBpbnNlcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG1hc2tcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Rm9jdXNFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9vbkZvY3VzKGUpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXRcclxuICAgIGNvbnN0IG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgdGhpcy5vcHRpb25zLm1hc2tcclxuICAgIHRoaXMuX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGNhcmV0IHBvc2l0aW9uIG9uIHRoZSBpbnB1dCBiYXNlZCBvbiB0aGUgZ2l2ZW4gbWFza1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnN0YW5jZVxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBiYmogc3RyaW5nXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZpbmRDYXJldFBvc2l0aW9uKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShwb3NpdGlvbiwgcG9zaXRpb24pXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBgY2hlY2tWYWxpZGl0eWAgb24gdGhlIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcclxuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ2Vycm9yJylcclxuICAgICAgdGhpcy5fX2ZpcmVPbkludmFsaWQoaW5wdXQudmFsaWRhdGlvbk1lc3NhZ2UsIGlucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPbkludmFsaWQoZXJyb3IsIGlucHV0KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uSW52YWxpZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25JbnZhbGlkKGVycm9yLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsIHN0YXRlKSB7XHJcbiAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvVGV4dElucHV0LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrJ1xyXG5cclxuY29uc3QgU1VQUE9SVEVEX01BU0tTID0gWydYJywgJ2EnLCAnQScsICcwJywgJ3onLCAnWicsICdVJ11cclxuLyoqXHJcbiAqIFdoZW4gdHJ1ZSAsIHRoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgVW5pY29kZSBQcm9wZXJ0eSBFc2NhcGVzXHJcbiAqIG90aGVyd2lzZSBpdCBpcyBmYWxzZSBcclxuICogXHJcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yZWdleHAtdW5pY29kZS1wcm9wZXJ0eS1lc2NhcGVzfVxyXG4gKi9cclxubGV0IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxudHJ5IHtcclxuICBldmFsKCcvXFxcXHB7TH0vdScpXHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSB0cnVlXHJcbn0gY2F0Y2ggKGVycikge1xyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID0gZmFsc2VcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBtYXNrZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBvciBub3RcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIG1hc2tlZCBvciB1bm1hc2tlZCB2YWx1ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYSBiYmogbWFza1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHZhbHVlIGlzIG1hc2tlZCB3aXRoIGdpdmVuIG1hc2sgLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmNvbnN0IGlzTWFza2VkVmFsdWUgPSAodmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGlzTWFza2VkVmFsdWUuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHt2YWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCFpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0pIHtcclxuICAgIGNvbnN0IHVubWFza2VkVmFsdWUgPSB1bm1hc2sodmFsdWUsIG1hc2spXHJcbiAgICBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICB2YWx1ZSA9PT0gU3RyaW5nTWFzay5tYXNrKHVubWFza2VkVmFsdWUsIG1hc2spXHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXNrIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBtYXNrIGluIGNhc2UgdGhlIHZhbHVlIGlzIG5vdCBhbHJlYWR5IG1hc2tlZCB3aXRoIHRoZVxyXG4gKiBnaXZlbiBtYXNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBtYXNrZWQgb3IgdW5tYXNrZWQgdmFsdWVcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIGEgYmJqIG1hc2tcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSBhIG1hc2tlZCB2YWx1ZVxyXG4gKi9cclxuY29uc3QgbWFza0lmTm90TWFza2VkID0gKHZhbHVlLCBtYXNrKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke3ZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIW1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBpZiAoaXNNYXNrZWRWYWx1ZSh2YWx1ZSwgbWFzaykpIHtcclxuICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IFN0cmluZ01hc2subWFzayhcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgbWFzayxcclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgKVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSBTdHJpbmdNYXNrLm1hc2soJycsIG1hc2spXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgYSByZWdleCBwYXR0ZXIgYmFzZWQgb24gdGhlIGdpdmUgdGFza1xyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYmJqIHN0cmluZyBtYXNrXHJcbiAqXHJcbiAqIEByZXR1cm4ge1N0cmluZ30gcmVnZXggZm9yIHRoZSBnaXZlIG1hc2tcclxuICovXHJcbmNvbnN0IGdlbmVyYXRlUGF0dGVybkZyb21NYXNrID0gbWFzayA9PiB7XHJcbiAgaWYgKHR5cGVvZiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBtYXNrXHJcblxyXG4gIGlmICghZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyeSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBsZXQgcmVnZXggPSAnJ1xyXG4gICAgbWFza0FzQXJyeS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGMpIHtcclxuICAgICAgICBjYXNlICdYJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoW14gLX5dKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnYSc6XHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAvLyBodHRwczovL21vdGhlcmVmZi5pbi9yZWdleHB1I2lucHV0PXZhcityZWdleCslM0QrLyU1Q3AlN0JMJTdEL3UlM0ImdW5pY29kZVByb3BlcnR5RXNjYXBlPTFcclxuICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1MDAzMy9yZWd1bGFyLWV4cHJlc3Npb24tdG8tbWF0Y2gtbm9uLWFzY2lpLWNoYXJhY3RlcnMjYW5zd2VyLTQ4OTAyNzY1XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICdcXFxccHtMfSdcclxuICAgICAgICAgICAgOiAnKCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICcwJzpcclxuICAgICAgICAgIHJlZ2V4ICs9ICcoWzAtOV0pJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICd6JzpcclxuICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJyhbMC05XXxcXFxccHtMfSknXHJcbiAgICAgICAgICAgIDogJyhbMC05XXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICByZWdleCArPSBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRFxyXG4gICAgICAgICAgICA/ICcoKFswLTldKXwoXFxcXHMpfChbLiwvIyEkJV4mKjs6e309LV9gfigpXSl8KFxcXFxwe0x9KSknXHJcbiAgICAgICAgICAgIDogJygoWzAtOV0pfChcXFxccyl8KFsuLC8jISQlXiYqOzp7fT0tX2B+KCldKXwoPzpbQS1aYS16XFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QkRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkVGXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3QzZcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY3XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1REQwMC1cXHVERDIzXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjJbXFx1REMwMC1cXHVERUYyXXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF0pKSdcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJlZ2V4ICs9IGMucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldID0gcmVnZXhcclxuICB9XHJcblxyXG4gIHJldHVybiBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVbm1hc2sgdGhlIGdpdmVuIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrZWRWYWx1ZSBtYXNrZWQgc3RyaW5nXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICB0aGUgdXNlZCBtYXNrIHRvIHByb2R1Y2UgdGhlIG1hc2tlZCBzdHJpbmdcclxuICovXHJcbmNvbnN0IHVubWFzayA9IChtYXNrZWRWYWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgdW5tYXNrLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIHVubWFzay5fX0NBQ0hFX18gPSB7fVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2FjaGVLZXkgPSBgJHttYXNrZWRWYWx1ZX0tJHttYXNrfWBcclxuXHJcbiAgaWYgKCF1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgY29uc3QgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWUuc3BsaXQoJycpXHJcblxyXG4gICAgbGV0IHVubWFza2VkID0gJydcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbCA9IG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF1cclxuICAgICAgY29uc3QgbWFzayA9IG1hc2tBc0FycmF5W2luZGV4XVxyXG4gICAgICBjb25zdCBlbEhhc01hc2sgPSBTVVBQT1JURURfTUFTS1MuaW5kZXhPZihtYXNrKSA+IC0xXHJcbiAgICAgIGlmIChlbEhhc01hc2spIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrKG1hc2spLFxyXG4gICAgICAgICAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPyAndScgOiAnJ1xyXG4gICAgICAgIClcclxuICAgICAgICBpZiAocGF0dGVybi50ZXN0KGVsKSkgdW5tYXNrZWQgKz0gZWxcclxuICAgICAgICBlbHNlIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XSA9IHVubWFza2VkLnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICB9XHJcblxyXG4gIHJldHVybiB1bm1hc2suX19DQUNIRV9fW2NhY2hlS2V5XVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gdGhlIG1hc2tlZCBzdHJpbmcgLCBmaW5kIHRoZSBuZXh0IGNhcmV0IHBvc2l0aW9uIGRlcGVuZGluZyBvblxyXG4gKiB3aGF0IGlzIG1pc3NpbmcgdG8gY29tcGxldGUgdGhlIG1hc2tcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2tlZFZhbHVlIG1hc2tlZCBzdHJpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIHRoZSB1c2VkIG1hc2sgdG8gcHJvZHVjZSB0aGUgbWFza2VkIHN0cmluZ1xyXG4gKi9cclxuY29uc3QgZmluZENhcmV0UG9zaXRpb24gPSAobWFza2VkVmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke21hc2tlZFZhbHVlfS0ke21hc2t9YFxyXG4gIGlmICghZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgbWFza0FzQXJyYXkgPSBtYXNrLnNwbGl0KCcnKVxyXG4gICAgbGV0IG1hc2tlZFZhbHVlQXNBcnJheSA9IG1hc2tlZFZhbHVlLnNwbGl0KCcnKVxyXG4gICAgaWYgKG1hc2tlZFZhbHVlQXNBcnJheS5sZW5ndGggPCBtYXNrQXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWVBc0FycmF5LmNvbmNhdChcclxuICAgICAgICBuZXcgQXJyYXkobWFza0FzQXJyYXkubGVuZ3RoIC0gbWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aCkuam9pbignICcpLnNwbGl0KCcnKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uID0gLTFcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXNrQXNBcnJheS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWwgPSBtYXNrQXNBcnJheVtpbmRleF1cclxuICAgICAgaWYgKGVsICE9PSBtYXNrZWRWYWx1ZUFzQXJyYXlbaW5kZXhdKSB7XHJcbiAgICAgICAgLy8gaWYgKG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF0gPT09ICcgJykgcmV0dXJuIGluZGV4XHJcbiAgICAgICAgaWYgKFNVUFBPUlRFRF9NQVNLUy5pbmRleE9mKGVsKSA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2soZWwpLFxyXG4gICAgICAgICAgICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA/ICd1JyA6ICcnXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QobWFza2VkVmFsdWVBc0FycmF5W2luZGV4XSkpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSBpbmRleFxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfX1tjYWNoZUtleV0gPVxyXG4gICAgICBwb3NpdGlvbiA8IDAgPyBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoIDogcG9zaXRpb25cclxuICB9XHJcblxyXG4gIHJldHVybiBmaW5kQ2FyZXRQb3NpdGlvbi5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgaXNNYXNrZWRWYWx1ZSxcclxuICBtYXNrSWZOb3RNYXNrZWQsXHJcbiAgdW5tYXNrLFxyXG4gIGZpbmRDYXJldFBvc2l0aW9uLFxyXG4gIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLFxyXG4gIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVELFxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvdG9vbHMuanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgTnVtYmVySW5wdXQgZnJvbSAnLi9OdW1iZXJJbnB1dCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9pbmRleC5qcyIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWlucHV0LW1hc2tpbmcgbGliLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBOdW1iZXJNYXNrIGZyb20gJ2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzaydcclxuXHJcbmNvbnN0IGNvdW50RGVjaW1hbHMgPSB2YWx1ZSA9PiB7XHJcbiAgaWYgKHZhbHVlICUgMSAhPSAwKSB7XHJcbiAgICBjb25zdCBzcGxpdCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVxyXG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMikgcmV0dXJuIHNwbGl0WzFdLmxlbmd0aFxyXG4gIH1cclxuICByZXR1cm4gMFxyXG59XHJcblxyXG4vKipcclxuICogVGhlIGBOdW1iZXJJbnB1dGAgd2lsbCB3cmFwIHRleHQgaW5wdXRzIGFuZCBhcHBseSB0aGUgZ2l2ZW4gW2JiaiBOdW1iZXIgbWFza10oaHR0cHM6Ly9naXRodWIuY29tL0Jhc2lzSHViL2Jiai1tYXNrcyNudW1iZXItbWFza3MpXHJcbiAqXHJcbiAqICoqT3B0aW9ucyoqXHJcbiAqXHJcbiAqIF9PcHRpb25zIGNhbiBiZSBwYXNzZWQgdmlhIGRhdGEgYXR0cmlidXRlcyAuIEZvciBkYXRhIGF0dHJpYnV0ZXMsIGFwcGVuZCB0aGUgb3B0aW9uIG5hbWUgdG8gZGF0YS0sIGFzIGluIGRhdGEtbWFza19cclxuICpcclxuICogfCBPcHRpb24gICAgfCBEZWZhdWx0IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxyXG4gKiB8IG1hc2sgfCAgICAgICAgIHwgVGhlIGJiaiBudW1iZXIgbWFzayBAc2VlIFtCQmogTnVtYmVyIE1hc2tzXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI251bWJlci1tYXNrcykgfFxyXG4gKiB8IG1pbiB8ICAgICAgICAgfCBUaGUgbWF4aW11bSB2YWx1ZSB0byBhY2NlcHQgZm9yIHRoaXMgaW5wdXR8XHJcbiAqIHwgbWF4IHwgICAgICAgICB8IFRoZSBtaW5pbXVtIHZhbHVlIHRvIGFjY2VwdCBmb3IgdGhpcyBpbnB1dHxcclxuICogfCBzdGVwIHwgICAgICAgICB8IEEgc3RlcHBpbmcgaW50ZXJ2YWwgdG8gdXNlIHdoZW4gdXNpbmcgdXAgYW5kIGRvd24gYXJyb3dzIHRvIGFkanVzdCB0aGUgdmFsdWUsIGFzIHdlbGwgYXMgZm9yIHZhbGlkYXRpb258XHJcbiAqIHxncm91cGluZy1zZXBhcmF0b3IgfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvciB8XHJcbiAqIHxkZWNpbWFsLXNlcGFyYXRvciB8IC4gfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3IgfFxyXG4gKiB8Zm9yY2UtdHJhaWxpbmctemVyb3MgfCBmYWxzZSB8IEFmZmVjdHMgdGhlIG91dHB1dCBieSBzd2l0Y2hpbmcgdGhlIHdheSBhIG1hc2sgd2l0aCBcIiNcIiBjaGFyYWN0ZXJzIGluIHRoZSB0cmFpbGluZyBwb3NpdGlvbnMgaXMgZmlsbGVkLiBmb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpIHJldHVybnMgLjEwIGluc3RlYWQgb2YgLjF8XHJcbiAqXHJcbiAqICA8YnI+XHJcbiAqXHJcbiAqICoqRXhhbXBsZSA6KipcclxuICogYGBgaHRtbFxyXG4gKiAgPGlucHV0IGNsYXNzPVwiYmJqLW51bWJlci1tYXNrZWRcIiBuYW1lPVwidGVzdFwiIGlkPVwidGVzdFwiIHZhbHVlPVwiMTIzNFwiIGRhdGEtbWFzaz1cIiMjLCMjMFwiPlxyXG4gKlxyXG4gKiAgPHNjcmlwdD5cclxuICogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAqICAgICAgbmV3IEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dCh7XHJcbiAqXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtTdHJpbmd9IHZhbHVlTWFza2VkICBtYXNrZWQgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge051bWJlcn0gdmFsdWVVbm1hc2tlZCAgb3JpZ2luYWwgdmFsdWVcclxuICogICAgICAgICAvLyBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICogICAgICAgICBvblVwZGF0ZTogKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCwgaXNBcHBsaWVkLCBpc0luaXRpYWwpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9LFxyXG4gKlxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAqICAgICAgICAgb25JbnZhbGlkOiAoZXJyICwgaW5wdXQpID0+IHtcclxuICogICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICogICAgICAgICB9XHJcbiAqICAgICAgfSlcclxuICogICAgfSlcclxuICogIDwvc2NyaXB0PlxyXG4gKiBgYGBcclxuICpcclxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cclxuICovXHJcbmNsYXNzIE51bWJlcklucHV0IHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3QgbmV3IE51bWJlcklucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnMgLSBUaGUgaW5wdXQgb3B0aW9ucy5cclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fFN0cmluZ30gW29wdGlvbnMuZWxlbWVudHM9XCIuYmJqLW51bWJlci1tYXNrZWRcIl0gLSBUaGUgY2xhc3MgbmFtZSBvciB0aGUgbm9kZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge0hUTUxEb2N1bWVudH0gW29wdGlvbnMuZG9jdW1lbnQ9ZG9jdW1lbnRdIC0gRG9jdW1lbnQgaW5zdGFuY2UgdG8gdXNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzRXJyb3I9XCJiYmotbWFzay1lcnJvclwiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyBpbnZhbGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmNzc0NsYXNzU3VjY2Vzcz1cImJiai1tYXNrLXN1Y2Nlc3NcIl0gLSBBIGNzcyBjbGFzcyB0byBhdHRhY2ggdG8gdGhlIGlucHV0IHdoZW4gaXQgaXMgdmFsaWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vblVwZGF0ZT1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBuZXcgbWFza2VkIHZhbHVlIGlzIHNldFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uSW52YWxpZD1udWxsXSAtIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIHRoZSBpbnB1dCBvciB0aGUgbWFzayBpcyBpbnZhbGlkXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLntcclxuICAgICAgICBlbGVtZW50czogJy5iYmotbnVtYmVyLW1hc2tlZCcsXHJcbiAgICAgICAgZG9jOiBkb2N1bWVudCxcclxuICAgICAgICBjc3NDbGFzc0Vycm9yOiAnYmJqLW1hc2stZXJyb3InLFxyXG4gICAgICAgIGNzc0NsYXNzU3VjY2VzczogJ2Jiai1tYXNrLXN1Y2Nlc3MnLFxyXG4gICAgICAgIG9uVXBkYXRlOiBudWxsLFxyXG4gICAgICAgIG9uSW52YWxpZDogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIgPSB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIgPSB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnJlZnJlc2goKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50IGFuZCB3cmFwIHRoZSBpbnB1dCBlbGVtZW50cyBmb3IgbWFza2luZyBpbiBjYXNlXHJcbiAgICogdGhleSBhcmUgbm90IHdyYXBwZWQgeWV0XHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuICAgIGxldCBpbnB1dCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgIHBhcmVudENsYXNzID0gaW5wdXQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgICAgaWYgKCFpbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJykpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgYEJCak1hc2tpbmc6IElucHV0IGhhcyBubyBJRC4gV2l0aG91dCBhbiBJRCB0aGUgaW5wdXQgY2Fubm90IGJlIG1hc2tlZGAsXHJcbiAgICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gd2UgZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5wdXQncyB3cmFwIHR3aWNlXHJcbiAgICAgICAgY29uc3QgaXNXcmFwcGVkID1cclxuICAgICAgICAgIHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ251bWJlcklucHV0TWFza19fd3JhcCcpID4gLTFcclxuICAgICAgICB0aGlzLl93cmFwKGlucHV0LCBpc1dyYXBwZWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEJCak1hc2tpbmc6IEludmFsaWQgaW5wdXQgZWxlbWVudC4gVGhlIGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkYCxcclxuICAgICAgICAgIGlucHV0XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbndyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGFuZCByZW1vdmUgYXR0YWNoZWQgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID1cclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5lbGVtZW50cyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvckFsbCh0aGlzLm9wdGlvbnMuZWxlbWVudHMpXHJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuZWxlbWVudHNcclxuXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudCwgcGFyZW50Q2xhc3NcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlucHV0ID0gZWxlbWVudHNbaV1cclxuICAgICAgcGFyZW50ID0gaW5wdXQucGFyZW50Tm9kZVxyXG4gICAgICBwYXJlbnRDbGFzcyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJylcclxuXHJcbiAgICAgIGlmIChwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW53cmFwKHBhcmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBudW1iZXIgbWFza2luZyBpbnB1dCB3cmFwcGVyXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGFjdHVhbElucHV0IHRoZSBpbnB1dCBlbGVtZW50XHJcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc1dyYXBwZWQgd2hlbiB0cnVlIHRoZSBpbnB1dCBpcyBhbHJlYWR5IHdyYXBwZWQgYW5kIHdlIG5lZWQgdG8gYWRkIHdoYXQgaXNcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9ubHlcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtIVE1MU3BhbkVsZW1lbnR9IHdyYXBwZXIgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfd3JhcChhY3R1YWxJbnB1dCwgaXNXcmFwcGVkKSB7XHJcbiAgICBjb25zdCBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpLFxyXG4gICAgICBhY3R1YWxJbnB1dE5hbWUgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ25hbWUnKSxcclxuICAgICAgYWN0dWFsSW5wdXRTdGVwID0gYWN0dWFsSW5wdXQuZGF0YXNldC5zdGVwIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWF4ID0gYWN0dWFsSW5wdXQuZGF0YXNldC5tYXggfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNaW4gPSBhY3R1YWxJbnB1dC5kYXRhc2V0Lm1pbiB8fCBudWxsLFxyXG4gICAgICBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yID1cclxuICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yIHx8ICcsJyxcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yIHx8ICcuJyxcclxuICAgICAgYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MgPVxyXG4gICAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayA9IGFjdHVhbElucHV0LmRhdGFzZXQubWFzayB8fCAnJyxcclxuICAgICAgYWN0dWFsSW5wdXRDbGFzc2VzID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLFxyXG4gICAgICBhY3R1YWxJbnB1dFJlcXVpcmVkID0gYWN0dWFsSW5wdXQuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpIHx8IG51bGxcclxuXHJcbiAgICBsZXQgd3JhcCA9IG51bGwsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSBudWxsXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgd3JhcCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykgLy8gaGlkZGVuIGlucHV0IHdpdGggdGhlIHVubWFza2VkIHZhbHVlcyBmb3IgZm9ybXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdyYXAgPSBhY3R1YWxJbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy5udW1iZXJJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgYWN0dWFsIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgYWN0dWFsSW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcCwgYWN0dWFsSW5wdXQpIC8vIG1vdmUgdGhlIGlucHV0IG91dHNpZGUgdGhlIHdyYXBwZXJcclxuICAgICAgaWYgKFxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHxcclxuICAgICAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCA9IGFjdHVhbElucHV0LnZhbHVlIHx8IDBcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZ3JvdXBpbmdTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yXHJcbiAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3JcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zID0gYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3NcclxuICAgIGFjdHVhbElucHV0LnZhbHVlID0gTnVtYmVyTWFzay5tYXNrKFxyXG4gICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsXHJcbiAgICAgIGFjdHVhbElucHV0TWFzayxcclxuICAgICAgYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG4gICAgKS50cmltKClcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQoXHJcbiAgICAgICdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcsXHJcbiAgICAgIHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3NcclxuICAgIClcclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIHVubWFza2VkIGlucHV0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICB1bm1hc2tlZElucHV0LnZhbHVlID0gYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgYWN0dWFsSW5wdXRDbGFzc2VzKVxyXG4gICAgaWYgKGFjdHVhbElucHV0SWQpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIGAke2FjdHVhbElucHV0SWR9LXVubWFza2VkYClcclxuICAgIGlmIChhY3R1YWxJbnB1dE5hbWUpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7YWN0dWFsSW5wdXROYW1lfS11bm1hc2tlZGApXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRSZXF1aXJlZCkgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJ3JlcXVpcmVkJylcclxuXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRTdGVwKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIGFjdHVhbElucHV0U3RlcClcclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBkZWNpbWFscyA9IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgICAgbGV0IHN0ZXAgPSAnMSdcclxuICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xyXG4gICAgICAgIHN0ZXAgPSBgLiR7QXJyYXkoZGVjaW1hbHMpLmpvaW4oJzAnKX0xYFxyXG4gICAgICB9XHJcblxyXG4gICAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnc3RlcCcsIHN0ZXApXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdHVhbElucHV0TWluKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnbWluJywgYWN0dWFsSW5wdXRNaW4pXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRNYXgpIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdtYXgnLCBhY3R1YWxJbnB1dE1heClcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5pbnB1dElkID0gYWN0dWFsSW5wdXRJZFxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lm1hc2sgPSBhY3R1YWxJbnB1dE1hc2tcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3JcclxuICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yID0gYWN0dWFsSW5wdXREZWNpbWFsU2VwYXJhdG9yXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRGb3JjZVRyYWlsaW5nWmVyb3MpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgPSBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LmFkZCgnbnVtYmVySW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgICAgLy8gY29uZmlndXJlIHRoZSB3cmFwcGVyXHJcbiAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdjbGFzcycsICdudW1iZXJJbnB1dE1hc2tfX3dyYXAnKVxyXG4gICAgICB3cmFwLmFwcGVuZENoaWxkKHVubWFza2VkSW5wdXQpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYWN0dWFsSW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihOdW1iZXIoYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkKSkpIHtcclxuICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpKSB7XHJcbiAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShcclxuICAgICAgICAgIGFjdHVhbElucHV0LnZhbHVlLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdyYXBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgbWFza2VkIGlucHV0IGFuZCByZW1vdmUgdGhlIHZhbHVlIGNoYW5nZWQgbGlzdGVuZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTFNwYW5FbGVtZW50fSB3cmFwcGVyIHRoZSB3cmFwcGVyIHNwYW4gaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdW53cmFwKHdyYXBwZXIpIHtcclxuICAgIGNvbnN0IGFjdHVhbElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcubnVtYmVySW5wdXRNYXNrX190ZXh0SW5wdXQnKSxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGApXHJcblxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG5cclxuICAgIHdyYXBwZXIucmVtb3ZlQ2hpbGQodW5tYXNrZWRJbnB1dClcclxuXHJcbiAgICBhY3R1YWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgIGFjdHVhbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9hY3R1YWxJbnB1dEhhbmRsZXIpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdudW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgZGVsZXRlIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG5cclxuICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYWN0dWFsSW5wdXQsIHdyYXBwZXIpXHJcbiAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcilcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBjbGljayBhbmQgZm9jdXNpbiBldmVudCBvbiB0aGUgYWN0dWFsIGlucHV0IGFuZCB0b2dnbGUgdGhlIG51bWJlciBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF9hY3R1YWxJbnB1dEhhbmRsZXIoZSkge1xyXG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAgYWN0dWFsSW5wdXRJZCA9IGFjdHVhbElucHV0LmlkLFxyXG4gICAgICB1bm1hc2tlZElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGAjJHthY3R1YWxJbnB1dElkfS11bm1hc2tlZGBcclxuICAgICAgKVxyXG5cclxuICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbnVtYmVyJylcclxuICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5mb2N1cygpXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IFN0cmluZyh1bm1hc2tlZElucHV0LnZhbHVlKS5sZW5ndGhcclxuICAgICAgdW5tYXNrZWRJbnB1dC50eXBlID0gJ3RleHQnXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UobGVuZ3RoLCBsZW5ndGgpXHJcbiAgICAgIHVubWFza2VkSW5wdXQudHlwZSA9ICdudW1iZXInXHJcbiAgICB9LCAwKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIHRoZSB1bm1hc2tlZCBpbnB1dCBrZXlkb3duIGFuZCBmb2N1c291dCBldmVudHMgYW5kIGNoZWNrXHJcbiAgICogaWYgdGhlIGlucHV0IHZhbHVlIGNhbiBiZSBtYXNrZWQgb3Igbm90XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3VubWFza2VkSW5wdXRIYW5kbGVyKGUpIHtcclxuICAgIGNvbnN0IHVubWFza2VkSW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAga2V5Q29kZSA9IGUua2V5Q29kZSxcclxuICAgICAgbWFzayA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5tYXNrLFxyXG4gICAgICBncm91cGluZ1NlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgZGVjaW1hbFNlcGFyYXRvciA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSB1bm1hc2tlZElucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zLFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmlucHV0SWQsXHJcbiAgICAgIGFjdHVhbElucHV0ID0gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yKGAjJHthY3R1YWxJbnB1dElkfWApXHJcblxyXG4gICAgbGV0IHJlc3RvcmUgPSBmYWxzZSxcclxuICAgICAgYXBwbHkgPSBmYWxzZSxcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZSxcclxuICAgICAgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBOdW1iZXJNYXNrLm1hc2soXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC52YWx1ZSB8fCAwLFxyXG4gICAgICAgIG1hc2ssXHJcbiAgICAgICAgZ3JvdXBpbmdTZXBhcmF0b3IsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcixcclxuICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKS50cmltKClcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgbWFza2VkVmFsdWUgPSBmYWxzZVxyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChlLCBhY3R1YWxJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICByZXN0b3JlID0gWzEzLCAyN10uaW5kZXhPZihrZXlDb2RlKSA+IC0xIHx8IGUudHlwZSA9PT0gJ2ZvY3Vzb3V0J1xyXG4gICAgYXBwbHkgPSBtYXNrZWRWYWx1ZSAmJiBpc1ZhbGlkXHJcblxyXG4gICAgaWYgKHJlc3RvcmUpIHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuXHJcbiAgICAgIGFjdHVhbElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxyXG4gICAgICBhY3R1YWxJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpXHJcblxyXG4gICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgICBhY3R1YWxJbnB1dC52YWx1ZSA9IG1hc2tlZFZhbHVlXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gdW5tYXNrZWRJbnB1dC52YWx1ZVxyXG4gICAgICAgIHRoaXMuX19maXJlT25VcGRhdGUobWFza2VkVmFsdWUsIHVubWFza2VkSW5wdXQudmFsdWUsIGFjdHVhbElucHV0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVubWFza2VkSW5wdXQudmFsdWUgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYGNoZWNrVmFsaWRpdHlgIG9uIHRoZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSB1bm1hc2tlZElucHV0XHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBhY3R1YWxJbnB1dFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUlucHV0KHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0KSB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IHRydWVcclxuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKHVubWFza2VkSW5wdXQudmFsdWUpXHJcbiAgICBpZiAodW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbicgJiYgIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBtYXggPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnbWF4JylcclxuICAgICAgY29uc3QgbWluID0gdW5tYXNrZWRJbnB1dC5nZXRBdHRyaWJ1dGUoJ21pbicpXHJcbiAgICAgIGNvbnN0IHN0ZXAgPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnc3RlcCcpXHJcblxyXG4gICAgICBpZiAobWluKSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA+PSBOdW1iZXIobWluKVxyXG4gICAgICBpZiAobWF4KSBpc1ZhbGlkID0gaXNWYWxpZCAmJiB2YWx1ZSA8PSBOdW1iZXIobWF4KVxyXG5cclxuICAgICAgaWYgKHN0ZXApXHJcbiAgICAgICAgaXNWYWxpZCA9XHJcbiAgICAgICAgICBpc1ZhbGlkICYmIGNvdW50RGVjaW1hbHMoc3RlcCkgPT09IGNvdW50RGVjaW1hbHModW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgIH0gZWxzZSBpc1ZhbGlkID0gdW5tYXNrZWRJbnB1dC5jaGVja1ZhbGlkaXR5KClcclxuXHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnc3VjY2VzcycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChcclxuICAgICAgICB1bm1hc2tlZElucHV0LnZhbGlkYXRpb25NZXNzYWdlIHx8ICdWYWxpZGl0eSBjaGVjayBmYWlscycsXHJcbiAgICAgICAgYWN0dWFsSW5wdXRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1ZhbGlkXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVNYXNrZWQgIG1hc2tlZCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVVubWFza2VkICBvcmlnaW5hbCB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGFjdHVhbCBpbnB1dCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2ZpcmVPblVwZGF0ZSh2YWx1ZU1hc2tlZCwgdmFsdWVVbm1hc2tlZCwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25VcGRhdGUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgbGFzdCBvY2N1cnJlZCBlcnJvci4gY291bGQgYmUgbWFzayBlcnJvciBvciB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vbkludmFsaWQoZXJyb3IsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2FwcGx5Q3NzQ2xhc3NTdGF0ZSh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dCwgc3RhdGUpIHtcclxuICAgIGlmIChcclxuICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8XHJcbiAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKVxyXG4gICAgKSB7XHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3RhdGUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE51bWJlcklucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJJbnB1dC9OdW1iZXJJbnB1dC5qcyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV83X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiTnVtYmVyTWFza1wiXX1cbi8vIG1vZHVsZSBpZCA9IDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuY29uc3QgaXNOdW1iZXJSZWdleCA9IC9eXFxkKyQvXG5jb25zdCBpc1doaXRlc3BhY2VSZWdleCA9IC9cXHMvXG5jb25zdCBwdW5jdHVhdGlvbkxpc3QgPSAnIVwiIyQlJlxcJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fidcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIGxvd2VyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzTG93ZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvVXBwZXJDYXNlKClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIHVwcGVyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmNvbnN0IGlzVXBwZXJDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvTG93ZXJDYXNlKClcbn1cblxuY29uc3QgcGFzc09yVGhyb3dFcnJvciA9IChsb29zZSwgcmV0LCBpLCBzdHIpID0+IHtcbiAgaWYgKCFsb29zZSkge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckF0KGkpXG4gICAgY29uc3QgcG9zID0gaSArIDFcbiAgICB0aHJvdyB7XG4gICAgICBuYW1lOiAnU3RyaW5nTWFza0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IGBTdHJpbmdNYXNrRXJyb3I6IGVycm9yIGFwcGx5aW5nIG1hc2sgYXQgcG9zaXRpb24gXCIke3Bvc31cIiAsIGNoYXIgXCIke2NoYXJ9XCJgLFxuICAgICAgcG9zLFxuICAgICAgY2hhclxuICAgIH1cbiAgfSBlbHNlIHJldFtpXSA9ICcgJ1xufVxuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBTdHJpbmdNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIHN0cmluZyB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgdGhlIG1hc2sgdG8gdXNlIGZvciBmb3JtYXR0aW5nXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAqIFxuICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgKiBAdGhyb3dzIHtTdHJpbmdNYXNrRXJyb3J9XG4gICAqIEB0aHJvd3Mge01hc2tFcnJvcn1cbiAgICogXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgbWFzayhzdHIsIG1hc2ssIGxvb3NlID0gdHJ1ZSkge1xuICAgIHN0ciA9IFN0cmluZyhzdHIpXG4gICAgbWFzayA9IFN0cmluZyhtYXNrKVxuICAgIGNvbnN0IG1hc2tMZW4gPSBtYXNrLmxlbmd0aFxuICAgIGNvbnN0IHN0ckxlbiA9IHN0ci5sZW5ndGhcblxuICAgIGlmIChzdHJMZW4gPiBtYXNrTGVuKSB7XG4gICAgICBpZiAobG9vc2UpIHJldHVybiBzdHJcbiAgICAgIC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBuYW1lOiAnTWFza0lzVG9vU2hvcnRFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tJc1Rvb1Nob3J0RXJyb3I6IE1hc2sgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXNzZWQgc3RyaW5nYFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pXG4gICAgbGV0IHBvcyA9IDAgLy8gdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyXG4gICAgbGV0IG1hc2tCeXRlID0gJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0xlbjsgaSsrKSB7XG4gICAgICBtYXNrQnl0ZSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBzd2l0Y2ggKG1hc2tCeXRlKSB7XG4gICAgICAgIGNhc2UgJ1gnOiAvLyBtYXRjaCBhbnkgY2hhcmFjdGVyXG4gICAgICAgICAgcmV0W2ldID0gcG9zIDwgc3RyTGVuID8gc3RyLmNoYXJBdChwb3MpIDogJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0EnOiAvLyBtYXRjaCBsZXR0ZXI7IGZvcmNlIHVwcGVyIGNhc2VcbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdhJzogLy8gbWF0Y2ggbGV0dGVyXG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKGJ5dGUpIHx8IGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlXG4gICAgICAgICAgICBlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKVxuICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJzAnOiAvLyBtYXRjaCBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnWic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdDsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShieXRlKSB8fCBpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTG93ZXJDYXNlKGJ5dGUpKSByZXRbaV0gPSBieXRlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneic6IC8vIG1hdGNoIGxldHRlciBvciBkaWdpdFxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNVcHBlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNMb3dlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZWdleC50ZXN0KGJ5dGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ1UnOiAvLyBtYXRjaCBsZXR0ZXIgKGZvcmNlIHVwcGVyIGNhc2UpLCBkaWdpdCwgd2hpdGVzcGFjZSBvciBwdW5jdHVhdGlvbi5cbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGlzVXBwZXJDYXNlKGJ5dGUpIHx8XG4gICAgICAgICAgICAgIGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSB8fFxuICAgICAgICAgICAgICBpc1doaXRlc3BhY2VSZWdleC50ZXN0KGJ5dGUpIHx8XG4gICAgICAgICAgICAgIHB1bmN0dWF0aW9uTGlzdC5pbmRleE9mKGJ5dGUpID4gLTFcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldFtpXSA9IG1hc2tCeXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICBpZiAoIWxvb3NlKSB7XG4gICAgICAgIHRocm93IHsgbmFtZTogJ01hc2tFcnJvcicsIG1lc3NhZ2U6ICdNYXNrIGNhbm5vdCBiZSBhcHBsaWVkJyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0cmluZ01hc2tcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBOdW1iZXJNYXNrIHtcbiAgLyoqXG4gICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtncm91cGluZ1NlcGFyYXRvcj0sXSAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBncm91cGluZyBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWNpbWFsU2VwYXJhdG9yPS5dICAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYE51bWJlck1hc2subWFzayguMTA6XCIjLiMjXCIpYCByZXR1cm5zIGAgLjEwYCBpbnN0ZWFkIG9mIGAgLjEgYFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgKiBcbiAgICogQHRocm93cyB7TWFza0Vycm9yfSBvbmx5IGlmIGxvb3NlIGlzIGRpc2FibGVkXG4gICAqIFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgbWFza2VkIG51bWJlclxuICAgKi9cbiAgc3RhdGljIG1hc2soXG4gICAgbnVtYmVyLFxuICAgIG1hc2ssXG4gICAgZ3JvdXBpbmdTZXBhcmF0b3IgPSAnLCcsXG4gICAgZGVjaW1hbFNlcGFyYXRvciA9ICcuJyxcbiAgICBmb3JjZVRyYWlsaW5nWmVyb3MgPSBmYWxzZSxcbiAgICBsb29zZSA9IHRydWVcbiAgKSB7XG4gICAgY29uc3QgbWFza0xlbiA9IG1hc2subGVuZ3RoXG4gICAgaWYgKDAgPT09IG1hc2tMZW4pIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0clxuICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBNYXNrRXJyb3I6IE1hc2sgaXMgZW1wdHlgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTUFTS1xuICAgIGxldCBtYXNrQmVmb3JlRGVjaW1hbCA9IDBcbiAgICBsZXQgbWFza0FmdGVyRGVjaW1hbCA9IDBcbiAgICBsZXQgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2tMZW47ICsraSkge1xuICAgICAgY29uc3QgbSA9IG1hc2suY2hhckF0KGkpXG4gICAgICBpZiAobSA9PSAnMCcgfHwgbSA9PSAnIycpIHtcbiAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKyttYXNrQWZ0ZXJEZWNpbWFsXG4gICAgICAgIGVsc2UgKyttYXNrQmVmb3JlRGVjaW1hbFxuICAgICAgfSBlbHNlIGlmIChtID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgIH1cblxuICAgIGxldCBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW1iZXIsIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgbGV0IGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKVxuXG4gICAgLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuICAgIGxldCBpbkxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGxldCBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgIGxldCBudW1BZnRlckRlY2ltYWwgPSAwXG4gICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluTGVuOyArK2kpIHtcbiAgICAgIGlmIChieXRlc1tpXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbFxuICAgICAgICBlbHNlICsrbnVtQmVmb3JlRGVjaW1hbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsd2F5cyBpZ25vcmUgbWFzayBvdmVyZmxvd1xuICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIG51bWJlci50b1N0cmluZygpXG4gICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJvdW5kIGlmIG1hc2sgaXMgZm9yIGEgbG93ZXIgcHJlY2lzaW9uIG51bWJlclxuICAgIGlmIChudW1BZnRlckRlY2ltYWwgPiBtYXNrQWZ0ZXJEZWNpbWFsKSB7XG4gICAgICBudW0gPSBOdW1iZXJNYXNrLl9yb3VuZChudW0sIG1hc2tBZnRlckRlY2ltYWwpXG4gICAgICBieXRlcyA9IE51bWJlck1hc2suX3RvQ2hhckFycmF5KG51bSlcbiAgICAgIGluTGVuID0gYnl0ZXMubGVuZ3RoXG5cbiAgICAgIC8vIEdldCBuZXcgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG4gICAgICBudW1CZWZvcmVEZWNpbWFsID0gMFxuICAgICAgbnVtQWZ0ZXJEZWNpbWFsID0gMFxuICAgICAgZm91bmREZWNpbWFsID0gZmFsc2VcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5MZW47ICsraSkge1xuICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsXG4gICAgICAgICAgZWxzZSArK251bUJlZm9yZURlY2ltYWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcbiAgICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKClcbiAgICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTnVtYmVyIGlzIHRvbyBsYXJnZSBmb3IgbWFza2BcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpbGxCeXRlID0gJyAnLFxuICAgICAgZmxvYXRCeXRlID0gJyAnXG4gICAgbGV0IGluUG9zID0gMCxcbiAgICAgIG91dFBvcyA9IDAsXG4gICAgICBmbG9hdFBvcyA9IDBcbiAgICBpZiAobWFzay5jaGFyQXQoMCkgPT0gJyonKSBmaWxsQnl0ZSA9ICcqJ1xuXG4gICAgY29uc3QgZmlsbEluaXQgPSBmaWxsQnl0ZVxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgPCAwXG4gICAgbGV0IGVtaXREZWNpbWFsID0gaW5MZW4gPiAwIHx8IG1hc2suaW5kZXhPZignMCcpID49IDBcbiAgICBsZXQgZm91bmRaZXJvID0gZmFsc2VcbiAgICBsZXQgZm91bmREaWdpdCA9IGZhbHNlXG4gICAgbGV0IGN1cnJlbmN5ID0gZmFsc2VcbiAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuXG4gICAgbGV0IHJldCA9IG5ldyBBcnJheShtYXNrTGVuKVxuXG4gICAgZm9yIChsZXQgbWFza1BvcyA9IDA7IG1hc2tQb3MgPCBtYXNrTGVuOyArK21hc2tQb3MpIHtcbiAgICAgIGxldCBtID0gbWFzay5jaGFyQXQobWFza1BvcylcbiAgICAgIHN3aXRjaCAobSkge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAtLW1hc2tCZWZvcmVEZWNpbWFsXG4gICAgICAgICAgaWYgKG1hc2tCZWZvcmVEZWNpbWFsIDwgbnVtQmVmb3JlRGVjaW1hbCAmJiBpblBvcyA8IGluTGVuKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXVxuICAgICAgICAgICAgKytpblBvc1xuICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnMCdcbiAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWxcbiAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdXG4gICAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9XG4gICAgICAgICAgICAgIGZvdW5kRGVjaW1hbCAmJlxuICAgICAgICAgICAgICBmb3JjZVRyYWlsaW5nWmVyb3MgJiZcbiAgICAgICAgICAgICAgTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pICE9IDBcbiAgICAgICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgICAgIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3NcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJywnOlxuICAgICAgICAgIGlmIChmb3VuZFplcm8gfHwgaW5Qb3MgPiAwKSByZXRbb3V0UG9zXSA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBpZiAoIWZvdW5kRGVjaW1hbCkgZmxvYXRQb3MgPSBtYXNrUG9zXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICctJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogZmlsbEJ5dGVcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgIGZsb2F0Qnl0ZSA9IGlzTmVnYXRpdmUgPyAnLScgOiAnKydcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHJldFtvdXRQb3NdID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJ1xuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgZmxvYXRCeXRlID0gJyQnXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICckJ1xuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgLy8gY2FzZSAnJic6XG4gICAgICAgIC8vICAgY3VycmVuY3kgPSB0cnVlXG4gICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICcmJ1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSAnJidcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgLy8gICBicmVha1xuXG4gICAgICAgIC8vIGNhc2UgJ0AnOlxuICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAvLyAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgIC8vICAgICBmbG9hdEJ5dGUgPSAnQCdcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgLy8gICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJ0AnXG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyAgICsrb3V0UG9zXG4gICAgICAgIC8vICAgYnJlYWtcblxuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICcoJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKCdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcpJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnICdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIG1hc2suY2hhckF0KG1hc2tQb3MgKyAxKSA9PSAnUicpIHtcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0MnXG4gICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCdcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRQb3MgKz0gMlxuICAgICAgICAgICAgKyttYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0QnXG4gICAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyonXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gZW1pdERlY2ltYWwgPyBkZWNpbWFsU2VwYXJhdG9yIDogZmlsbEJ5dGVcbiAgICAgICAgICBmaWxsQnl0ZSA9ICcgJ1xuICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0W291dFBvc10gPSBtXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmbG9hdEJ5dGUgIT0gJyAnKSB7XG4gICAgICBpZiAoZmxvYXRQb3MgPCAwKSBmbG9hdFBvcyA9IG91dFBvc1xuICAgICAgd2hpbGUgKGZsb2F0UG9zID49IG1hc2tMZW4pIC0tZmxvYXRQb3NcbiAgICAgIGlmIChyZXRbZmxvYXRQb3NdID09IGZpbGxJbml0KSByZXRbZmxvYXRQb3NdID0gZmxvYXRCeXRlXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCcnKVxuICB9XG5cbiAgc3RhdGljIF9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgcmV2ZXJzZVNoaWZ0KSB7XG4gICAgaWYgKHJldmVyc2VTaGlmdCkgcHJlY2lzaW9uID0gLXByZWNpc2lvblxuICAgIHZhciBudW1BcnJheSA9ICgnJyArIG51bWJlcikuc3BsaXQoJ2UnKVxuICAgIHJldHVybiArKFxuICAgICAgbnVtQXJyYXlbMF0gK1xuICAgICAgJ2UnICtcbiAgICAgIChudW1BcnJheVsxXSA/ICtudW1BcnJheVsxXSArIHByZWNpc2lvbiA6IHByZWNpc2lvbilcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3JvdW5kKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgcmV0dXJuIE51bWJlck1hc2suX3NoaWZ0KFxuICAgICAgTWF0aC5yb3VuZChOdW1iZXJNYXNrLl9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgZmFsc2UpKSxcbiAgICAgIHByZWNpc2lvbixcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICBzdGF0aWMgX3RvQ2hhckFycmF5KG51bWJlcikge1xuICAgIGNvbnN0IHNpZ251bSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtYmVyKVxuICAgIGxldCBjaGFycyA9IFtdXG5cbiAgICBpZiAoc2lnbnVtICE9PSAwKSB7XG4gICAgICBsZXQgc3RyaW5nID0gc2lnbnVtIDwgMCA/IGAkey0xICogbnVtYmVyLnRvU3RyaW5nKCl9YCA6IG51bWJlci50b1N0cmluZygpXG5cbiAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMSAmJiBzdHJpbmcuY2hhckF0KDApID09ICcwJylcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygxKVxuXG4gICAgICAvLyBUaGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgWzAtOV0gYW5kICcuJ1xuICAgICAgY2hhcnMgPSBzdHJpbmcuc3BsaXQoJycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYXJzXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiBhIG51bWJlclxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0geCBudW1iZXJcbiAgICogQHJldHVybnMge051bWJlcn0gQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzaWduIG9mIHRoZSBnaXZlbiBhcmd1bWVudC5cbiAgICogICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCBuZWdhdGl2ZSBudW1iZXIsIHBvc2l0aXZlIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgb3IgbmVnYXRpdmUgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEsIC0xLCAwIG9yIC0wIHJlc3BlY3RpdmVseS5cbiAgICogICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBOYU4gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBzdGF0aWMgX2dldFNpZ24oeCkge1xuICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlck1hc2tcbiIsIm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiZmxhdHBpY2tyXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGZsYXRwaWNrci5qc1wiKTsiLCIvKiBmbGF0cGlja3IgdjQuNi42LCBAbGljZW5zZSBNSVQgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuZmxhdHBpY2tyID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcbiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxuICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcbiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuICAgIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuICAgIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG4gICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuICAgIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuICAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuICAgIHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfVxuXG4gICAgdmFyIEhPT0tTID0gW1xuICAgICAgICBcIm9uQ2hhbmdlXCIsXG4gICAgICAgIFwib25DbG9zZVwiLFxuICAgICAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgICAgIFwib25EZXN0cm95XCIsXG4gICAgICAgIFwib25LZXlEb3duXCIsXG4gICAgICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgICAgICBcIm9uT3BlblwiLFxuICAgICAgICBcIm9uUGFyc2VDb25maWdcIixcbiAgICAgICAgXCJvblJlYWR5XCIsXG4gICAgICAgIFwib25WYWx1ZVVwZGF0ZVwiLFxuICAgICAgICBcIm9uWWVhckNoYW5nZVwiLFxuICAgICAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuICAgIF07XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICBfZGlzYWJsZTogW10sXG4gICAgICAgIF9lbmFibGU6IFtdLFxuICAgICAgICBhbGxvd0lucHV0OiBmYWxzZSxcbiAgICAgICAgYWxsb3dJbnZhbGlkUHJlbG9hZDogZmFsc2UsXG4gICAgICAgIGFsdEZvcm1hdDogXCJGIGosIFlcIixcbiAgICAgICAgYWx0SW5wdXQ6IGZhbHNlLFxuICAgICAgICBhbHRJbnB1dENsYXNzOiBcImZvcm0tY29udHJvbCBpbnB1dFwiLFxuICAgICAgICBhbmltYXRlOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSA9PT0gLTEsXG4gICAgICAgIGFyaWFEYXRlRm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBhdXRvRmlsbERlZmF1bHRUaW1lOiB0cnVlLFxuICAgICAgICBjbGlja09wZW5zOiB0cnVlLFxuICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgICBjb25qdW5jdGlvbjogXCIsIFwiLFxuICAgICAgICBkYXRlRm9ybWF0OiBcIlktbS1kXCIsXG4gICAgICAgIGRlZmF1bHRIb3VyOiAxMixcbiAgICAgICAgZGVmYXVsdE1pbnV0ZTogMCxcbiAgICAgICAgZGVmYXVsdFNlY29uZHM6IDAsXG4gICAgICAgIGRpc2FibGU6IFtdLFxuICAgICAgICBkaXNhYmxlTW9iaWxlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlOiBbXSxcbiAgICAgICAgZW5hYmxlU2Vjb25kczogZmFsc2UsXG4gICAgICAgIGVuYWJsZVRpbWU6IGZhbHNlLFxuICAgICAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0V2VlazogZnVuY3Rpb24gKGdpdmVuRGF0ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShnaXZlbkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhci5cbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpKTtcbiAgICAgICAgICAgIC8vIEphbnVhcnkgNCBpcyBhbHdheXMgaW4gd2VlayAxLlxuICAgICAgICAgICAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlazEuXG4gICAgICAgICAgICByZXR1cm4gKDEgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtXG4gICAgICAgICAgICAgICAgICAgIDMgK1xuICAgICAgICAgICAgICAgICAgICAoKHdlZWsxLmdldERheSgpICsgNikgJSA3KSkgL1xuICAgICAgICAgICAgICAgICAgICA3KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhvdXJJbmNyZW1lbnQ6IDEsXG4gICAgICAgIGlnbm9yZWRGb2N1c0VsZW1lbnRzOiBbXSxcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgbG9jYWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgbWludXRlSW5jcmVtZW50OiA1LFxuICAgICAgICBtb2RlOiBcInNpbmdsZVwiLFxuICAgICAgICBtb250aFNlbGVjdG9yVHlwZTogXCJkcm9wZG93blwiLFxuICAgICAgICBuZXh0QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J00xMy4yMDcgOC40NzJsLTcuODU0IDcuODU0LTAuNzA3LTAuNzA3IDcuMTQ2LTcuMTQ2LTcuMTQ2LTcuMTQ4IDAuNzA3LTAuNzA3IDcuODU0IDcuODU0eicgLz48L3N2Zz5cIixcbiAgICAgICAgbm9DYWxlbmRhcjogZmFsc2UsXG4gICAgICAgIG5vdzogbmV3IERhdGUoKSxcbiAgICAgICAgb25DaGFuZ2U6IFtdLFxuICAgICAgICBvbkNsb3NlOiBbXSxcbiAgICAgICAgb25EYXlDcmVhdGU6IFtdLFxuICAgICAgICBvbkRlc3Ryb3k6IFtdLFxuICAgICAgICBvbktleURvd246IFtdLFxuICAgICAgICBvbk1vbnRoQ2hhbmdlOiBbXSxcbiAgICAgICAgb25PcGVuOiBbXSxcbiAgICAgICAgb25QYXJzZUNvbmZpZzogW10sXG4gICAgICAgIG9uUmVhZHk6IFtdLFxuICAgICAgICBvblZhbHVlVXBkYXRlOiBbXSxcbiAgICAgICAgb25ZZWFyQ2hhbmdlOiBbXSxcbiAgICAgICAgb25QcmVDYWxlbmRhclBvc2l0aW9uOiBbXSxcbiAgICAgICAgcGx1Z2luczogW10sXG4gICAgICAgIHBvc2l0aW9uOiBcImF1dG9cIixcbiAgICAgICAgcG9zaXRpb25FbGVtZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHByZXZBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTUuMjA3IDguNDcxbDcuMTQ2IDcuMTQ3LTAuNzA3IDAuNzA3LTcuODUzLTcuODU0IDcuODU0LTcuODUzIDAuNzA3IDAuNzA3LTcuMTQ3IDcuMTQ2eicgLz48L3N2Zz5cIixcbiAgICAgICAgc2hvcnRoYW5kQ3VycmVudE1vbnRoOiBmYWxzZSxcbiAgICAgICAgc2hvd01vbnRoczogMSxcbiAgICAgICAgc3RhdGljOiBmYWxzZSxcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICAgICAgd2Vla051bWJlcnM6IGZhbHNlLFxuICAgICAgICB3cmFwOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIGVuZ2xpc2ggPSB7XG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgICAgICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICAgICAgXCJTdW5kYXlcIixcbiAgICAgICAgICAgICAgICBcIk1vbmRheVwiLFxuICAgICAgICAgICAgICAgIFwiVHVlc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJUaHVyc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiRnJpZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJTYXR1cmRheVwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIkphblwiLFxuICAgICAgICAgICAgICAgIFwiRmViXCIsXG4gICAgICAgICAgICAgICAgXCJNYXJcIixcbiAgICAgICAgICAgICAgICBcIkFwclwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5cIixcbiAgICAgICAgICAgICAgICBcIkp1bFwiLFxuICAgICAgICAgICAgICAgIFwiQXVnXCIsXG4gICAgICAgICAgICAgICAgXCJTZXBcIixcbiAgICAgICAgICAgICAgICBcIk9jdFwiLFxuICAgICAgICAgICAgICAgIFwiTm92XCIsXG4gICAgICAgICAgICAgICAgXCJEZWNcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiSmFudWFyeVwiLFxuICAgICAgICAgICAgICAgIFwiRmVicnVhcnlcIixcbiAgICAgICAgICAgICAgICBcIk1hcmNoXCIsXG4gICAgICAgICAgICAgICAgXCJBcHJpbFwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5lXCIsXG4gICAgICAgICAgICAgICAgXCJKdWx5XCIsXG4gICAgICAgICAgICAgICAgXCJBdWd1c3RcIixcbiAgICAgICAgICAgICAgICBcIlNlcHRlbWJlclwiLFxuICAgICAgICAgICAgICAgIFwiT2N0b2JlclwiLFxuICAgICAgICAgICAgICAgIFwiTm92ZW1iZXJcIixcbiAgICAgICAgICAgICAgICBcIkRlY2VtYmVyXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgICAgICBmaXJzdERheU9mV2VlazogMCxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG50aCkge1xuICAgICAgICAgICAgdmFyIHMgPSBudGggJSAxMDA7XG4gICAgICAgICAgICBpZiAocyA+IDMgJiYgcyA8IDIxKVxuICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICBzd2l0Y2ggKHMgJSAxMCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5kXCI7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZFwiO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlU2VwYXJhdG9yOiBcIiB0byBcIixcbiAgICAgICAgd2Vla0FiYnJldmlhdGlvbjogXCJXa1wiLFxuICAgICAgICBzY3JvbGxUaXRsZTogXCJTY3JvbGwgdG8gaW5jcmVtZW50XCIsXG4gICAgICAgIHRvZ2dsZVRpdGxlOiBcIkNsaWNrIHRvIHRvZ2dsZVwiLFxuICAgICAgICBhbVBNOiBbXCJBTVwiLCBcIlBNXCJdLFxuICAgICAgICB5ZWFyQXJpYUxhYmVsOiBcIlllYXJcIixcbiAgICAgICAgbW9udGhBcmlhTGFiZWw6IFwiTW9udGhcIixcbiAgICAgICAgaG91ckFyaWFMYWJlbDogXCJIb3VyXCIsXG4gICAgICAgIG1pbnV0ZUFyaWFMYWJlbDogXCJNaW51dGVcIixcbiAgICAgICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdmFyIHBhZCA9IGZ1bmN0aW9uIChudW1iZXIsIGxlbmd0aCkge1xuICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMjsgfVxuICAgICAgICByZXR1cm4gKFwiMDAwXCIgKyBudW1iZXIpLnNsaWNlKGxlbmd0aCAqIC0xKTtcbiAgICB9O1xuICAgIHZhciBpbnQgPSBmdW5jdGlvbiAoYm9vbCkgeyByZXR1cm4gKGJvb2wgPT09IHRydWUgPyAxIDogMCk7IH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSA9PT0gdm9pZCAwKSB7IGltbWVkaWF0ZSA9IGZhbHNlOyB9XG4gICAgICAgIHZhciB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgdGltZW91dCAhPT0gbnVsbCAmJiBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKVxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlICYmICF0aW1lb3V0KVxuICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBhcnJheWlmeSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5ID8gb2JqIDogW29ial07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgICAgICBpZiAoYm9vbCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnLCBjbGFzc05hbWUsIGNvbnRlbnQpIHtcbiAgICAgICAgdmFyIGUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyTm9kZShub2RlKSB7XG4gICAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpXG4gICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRQYXJlbnQobm9kZSwgY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24obm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXJlbnQobm9kZS5wYXJlbnROb2RlLCBjb25kaXRpb24pO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBub3RoaW5nIGZvdW5kXG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU51bWJlcklucHV0KGlucHV0Q2xhc3NOYW1lLCBvcHRzKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcIm51bUlucHV0V3JhcHBlclwiKSwgbnVtSW5wdXQgPSBjcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgXCJudW1JbnB1dCBcIiArIGlucHV0Q2xhc3NOYW1lKSwgYXJyb3dVcCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dVcFwiKSwgYXJyb3dEb3duID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd0Rvd25cIik7XG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFIDkuMFwiKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIG51bUlucHV0LnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbnVtSW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgbnVtSW5wdXQucGF0dGVybiA9IFwiXFxcXGQqXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKVxuICAgICAgICAgICAgICAgIG51bUlucHV0LnNldEF0dHJpYnV0ZShrZXksIG9wdHNba2V5XSk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobnVtSW5wdXQpO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93VXApO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93RG93bik7XG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkb05vdGhpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB1bmRlZmluZWQ7IH07XG4gICAgdmFyIG1vbnRoVG9TdHIgPSBmdW5jdGlvbiAobW9udGhOdW1iZXIsIHNob3J0aGFuZCwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUubW9udGhzW3Nob3J0aGFuZCA/IFwic2hvcnRoYW5kXCIgOiBcImxvbmdoYW5kXCJdW21vbnRoTnVtYmVyXTsgfTtcbiAgICB2YXIgcmV2Rm9ybWF0ID0ge1xuICAgICAgICBEOiBkb05vdGhpbmcsXG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aE5hbWUsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLmxvbmdoYW5kLmluZGV4T2YobW9udGhOYW1lKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEc6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBIOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSjogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIEs6IGZ1bmN0aW9uIChkYXRlT2JqLCBhbVBNLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyKSArXG4gICAgICAgICAgICAgICAgMTIgKiBpbnQobmV3IFJlZ0V4cChsb2NhbGUuYW1QTVsxXSwgXCJpXCIpLnRlc3QoYW1QTSkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgTTogZnVuY3Rpb24gKGRhdGVPYmosIHNob3J0TW9udGgsIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLnNob3J0aGFuZC5pbmRleE9mKHNob3J0TW9udGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgUzogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgVTogZnVuY3Rpb24gKF8sIHVuaXhTZWNvbmRzKSB7IHJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KHVuaXhTZWNvbmRzKSAqIDEwMDApOyB9LFxuICAgICAgICBXOiBmdW5jdGlvbiAoZGF0ZU9iaiwgd2Vla051bSwgbG9jYWxlKSB7XG4gICAgICAgICAgICB2YXIgd2Vla051bWJlciA9IHBhcnNlSW50KHdlZWtOdW0pO1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkYXRlT2JqLmdldEZ1bGxZZWFyKCksIDAsIDIgKyAod2Vla051bWJlciAtIDEpICogNywgMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgbG9jYWxlLmZpcnN0RGF5T2ZXZWVrKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9LFxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcihwYXJzZUZsb2F0KHllYXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgWjogZnVuY3Rpb24gKF8sIElTT0RhdGUpIHsgcmV0dXJuIG5ldyBEYXRlKElTT0RhdGUpOyB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlT2JqLCBtaW51dGVzKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1pbnV0ZXMocGFyc2VGbG9hdChtaW51dGVzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBsOiBkb05vdGhpbmcsXG4gICAgICAgIG06IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbW9udGgpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TW9udGgocGFyc2VGbG9hdChtb250aCkgLSAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgczogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdTogZnVuY3Rpb24gKF8sIHVuaXhNaWxsU2Vjb25kcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peE1pbGxTZWNvbmRzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHc6IGRvTm90aGluZyxcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGVPYmosIHllYXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIoMjAwMCArIHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgdmFyIHRva2VuUmVnZXggPSB7XG4gICAgICAgIEQ6IFwiKFxcXFx3KylcIixcbiAgICAgICAgRjogXCIoXFxcXHcrKVwiLFxuICAgICAgICBHOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBIOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBKOiBcIihcXFxcZFxcXFxkfFxcXFxkKVxcXFx3K1wiLFxuICAgICAgICBLOiBcIlwiLFxuICAgICAgICBNOiBcIihcXFxcdyspXCIsXG4gICAgICAgIFM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIFU6IFwiKC4rKVwiLFxuICAgICAgICBXOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBZOiBcIihcXFxcZHs0fSlcIixcbiAgICAgICAgWjogXCIoLispXCIsXG4gICAgICAgIGQ6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGk6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIGw6IFwiKFxcXFx3KylcIixcbiAgICAgICAgbTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgbjogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgczogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgdTogXCIoLispXCIsXG4gICAgICAgIHc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHk6IFwiKFxcXFxkezJ9KVwiLFxuICAgIH07XG4gICAgdmFyIGZvcm1hdHMgPSB7XG4gICAgICAgIC8vIGdldCB0aGUgZGF0ZSBpbiBVVENcbiAgICAgICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBzaG9ydCwgZS5nLiBUaHVcbiAgICAgICAgRDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5cy5zaG9ydGhhbmRbZm9ybWF0cy53KGRhdGUsIGxvY2FsZSwgb3B0aW9ucyldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdWxsIG1vbnRoIG5hbWUgZS5nLiBKYW51YXJ5XG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGZvcm1hdHMubihkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIC0gMSwgZmFsc2UsIGxvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBob3VyIDEtMTJcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGhvdXJzIHdpdGggbGVhZGluZyB6ZXJvIGUuZy4gMDNcbiAgICAgICAgSDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEhvdXJzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgKDEtMzApIHdpdGggb3JkaW5hbCBzdWZmaXggZS5nLiAxc3QsIDJuZFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZGF0ZS5nZXREYXRlKCkgKyBsb2NhbGUub3JkaW5hbChkYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA6IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBTS9QTVxuICAgICAgICBLOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUuYW1QTVtpbnQoZGF0ZS5nZXRIb3VycygpID4gMTEpXTsgfSxcbiAgICAgICAgLy8gc2hvcnRoYW5kIG1vbnRoIGUuZy4gSmFuLCBTZXAsIE9jdCwgZXRjXG4gICAgICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGRhdGUuZ2V0TW9udGgoKSwgdHJ1ZSwgbG9jYWxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwMC01OVxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTsgfSxcbiAgICAgICAgLy8gdW5peCB0aW1lc3RhbXBcbiAgICAgICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICAgICAgVzogZnVuY3Rpb24gKGRhdGUsIF8sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmdldFdlZWsoZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bGwgeWVhciBlLmcuIDIwMTYsIHBhZGRlZCAoMDAwMS05OTk5KVxuICAgICAgICBZOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RnVsbFllYXIoKSwgNCk7IH0sXG4gICAgICAgIC8vIGRheSBpbiBtb250aCwgcGFkZGVkICgwMS0zMClcbiAgICAgICAgZDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldERhdGUoKSk7IH0sXG4gICAgICAgIC8vIGhvdXIgZnJvbSAxLTEyIChhbS9wbSlcbiAgICAgICAgaDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIChkYXRlLmdldEhvdXJzKCkgJSAxMiA/IGRhdGUuZ2V0SG91cnMoKSAlIDEyIDogMTIpOyB9LFxuICAgICAgICAvLyBtaW51dGVzLCBwYWRkZWQgd2l0aCBsZWFkaW5nIHplcm8gZS5nLiAwOVxuICAgICAgICBpOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TWludXRlcygpKTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoICgxLTMwKVxuICAgICAgICBqOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXRlKCk7IH0sXG4gICAgICAgIC8vIHdlZWtkYXkgbmFtZSwgZnVsbCwgZS5nLiBUaHVyc2RheVxuICAgICAgICBsOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLmxvbmdoYW5kW2RhdGUuZ2V0RGF5KCldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBwYWRkZWQgbW9udGggbnVtYmVyICgwMS0xMilcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKTsgfSxcbiAgICAgICAgLy8gdGhlIG1vbnRoIG51bWJlciAoMS0xMilcbiAgICAgICAgbjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7IH0sXG4gICAgICAgIC8vIHNlY29uZHMgMC01OVxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7IH0sXG4gICAgICAgIC8vIFVuaXggTWlsbGlzZWNvbmRzXG4gICAgICAgIHU6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFRpbWUoKTsgfSxcbiAgICAgICAgLy8gbnVtYmVyIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgdzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7IH0sXG4gICAgICAgIC8vIGxhc3QgdHdvIGRpZ2l0cyBvZiB5ZWFyIGUuZy4gMTYgZm9yIDIwMTZcbiAgICAgICAgeTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpLnN1YnN0cmluZygyKTsgfSxcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZURhdGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIF9iID0gX2EuY29uZmlnLCBjb25maWcgPSBfYiA9PT0gdm9pZCAwID8gZGVmYXVsdHMgOiBfYiwgX2MgPSBfYS5sMTBuLCBsMTBuID0gX2MgPT09IHZvaWQgMCA/IGVuZ2xpc2ggOiBfYywgX2QgPSBfYS5pc01vYmlsZSwgaXNNb2JpbGUgPSBfZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfZDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlT2JqLCBmcm10LCBvdmVycmlkZUxvY2FsZSkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG92ZXJyaWRlTG9jYWxlIHx8IGwxMG47XG4gICAgICAgICAgICBpZiAoY29uZmlnLmZvcm1hdERhdGUgIT09IHVuZGVmaW5lZCAmJiAhaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmZvcm1hdERhdGUoZGF0ZU9iaiwgZnJtdCwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmcm10XG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHNbY10gJiYgYXJyW2kgLSAxXSAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2NdKGRhdGVPYmosIGxvY2FsZSwgY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGdpdmVuRm9ybWF0LCB0aW1lbGVzcywgY3VzdG9tTG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGN1c3RvbUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgICAgICB2YXIgZGF0ZU9yaWcgPSBkYXRlO1xuICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGRhdGUudG9GaXhlZCAhPT0gdW5kZWZpbmVkIC8vIHRpbWVzdGFtcFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvcHlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdpdmVuRm9ybWF0IHx8IChjb25maWcgfHwgZGVmYXVsdHMpLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlc3RyID09PSBcInRvZGF5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoL1okLy50ZXN0KGRhdGVzdHIpIHx8XG4gICAgICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpIC8vIGRhdGVzdHJpbmdzIHcvIHRpbWV6b25lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJzZURhdGUpXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBjb25maWcucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZyB8fCAhY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHZvaWQgMCwgb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5fMSA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0JhY2tTbGFzaCA9IHRva2VuXzEgPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmb3JtYXRbaSAtIDFdID09PSBcIlxcXFxcIiB8fCBpc0JhY2tTbGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblJlZ2V4W3Rva2VuXzFdICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhTdHIgKz0gdG9rZW5SZWdleFt0b2tlbl8xXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1t0b2tlbl8xICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiByZXZGb3JtYXRbdG9rZW5fMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw6IG1hdGNoWysrbWF0Y2hJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0JhY2tTbGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSBcIi5cIjsgLy8gZG9uJ3QgcmVhbGx5IGNhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IF9hLmZuLCB2YWwgPSBfYS52YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZWREYXRlID0gZm4ocGFyc2VkRGF0ZSwgdmFsLCBsb2NhbGUpIHx8IHBhcnNlZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG1hdGNoZWQgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBpZiAoIShwYXJzZWREYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHByb3ZpZGVkOiBcIiArIGRhdGVPcmlnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGluIGRhdGVzLCBtZWFzdXJlZCBpbiBtc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRlcyhkYXRlMSwgZGF0ZTIsIHRpbWVsZXNzKSB7XG4gICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdm9pZCAwKSB7IHRpbWVsZXNzID0gdHJ1ZTsgfVxuICAgICAgICBpZiAodGltZWxlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLVxuICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUyLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHZhciBpc0JldHdlZW4gPSBmdW5jdGlvbiAodHMsIHRzMSwgdHMyKSB7XG4gICAgICAgIHJldHVybiB0cyA+IE1hdGgubWluKHRzMSwgdHMyKSAmJiB0cyA8IE1hdGgubWF4KHRzMSwgdHMyKTtcbiAgICB9O1xuICAgIHZhciBkdXJhdGlvbiA9IHtcbiAgICAgICAgREFZOiA4NjQwMDAwMCxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIF9hID0gMCwgYXJnc18xID0gYXJnczsgX2EgPCBhcmdzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3NfMVtfYV07XG4gICAgICAgICAgICAgICAgX2xvb3BfMShzb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgREVCT1VOQ0VEX0NIQU5HRV9NUyA9IDMwMDtcbiAgICBmdW5jdGlvbiBGbGF0cGlja3JJbnN0YW5jZShlbGVtZW50LCBpbnN0YW5jZUNvbmZpZykge1xuICAgICAgICB2YXIgc2VsZiA9IHtcbiAgICAgICAgICAgIGNvbmZpZzogX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRzKSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLFxuICAgICAgICAgICAgbDEwbjogZW5nbGlzaCxcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICBzZWxmLnBsdWdpbkVsZW1lbnRzID0gW107XG4gICAgICAgIHNlbGYubG9hZGVkUGx1Z2lucyA9IFtdO1xuICAgICAgICBzZWxmLl9iaW5kID0gYmluZDtcbiAgICAgICAgc2VsZi5fc2V0SG91cnNGcm9tRGF0ZSA9IHNldEhvdXJzRnJvbURhdGU7XG4gICAgICAgIHNlbGYuX3Bvc2l0aW9uQ2FsZW5kYXIgPSBwb3NpdGlvbkNhbGVuZGFyO1xuICAgICAgICBzZWxmLmNoYW5nZU1vbnRoID0gY2hhbmdlTW9udGg7XG4gICAgICAgIHNlbGYuY2hhbmdlWWVhciA9IGNoYW5nZVllYXI7XG4gICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcjtcbiAgICAgICAgc2VsZi5jbG9zZSA9IGNsb3NlO1xuICAgICAgICBzZWxmLl9jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudDtcbiAgICAgICAgc2VsZi5kZXN0cm95ID0gZGVzdHJveTtcbiAgICAgICAgc2VsZi5pc0VuYWJsZWQgPSBpc0VuYWJsZWQ7XG4gICAgICAgIHNlbGYuanVtcFRvRGF0ZSA9IGp1bXBUb0RhdGU7XG4gICAgICAgIHNlbGYub3BlbiA9IG9wZW47XG4gICAgICAgIHNlbGYucmVkcmF3ID0gcmVkcmF3O1xuICAgICAgICBzZWxmLnNldCA9IHNldDtcbiAgICAgICAgc2VsZi5zZXREYXRlID0gc2V0RGF0ZTtcbiAgICAgICAgc2VsZi50b2dnbGUgPSB0b2dnbGU7XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICAgICAgc2VsZi51dGlscyA9IHtcbiAgICAgICAgICAgICAgICBnZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKG1vbnRoLCB5cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IHZvaWQgMCkgeyBtb250aCA9IHNlbGYuY3VycmVudE1vbnRoOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh5ciA9PT0gdm9pZCAwKSB7IHlyID0gc2VsZi5jdXJyZW50WWVhcjsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IDEgJiYgKCh5ciAlIDQgPT09IDAgJiYgeXIgJSAxMDAgIT09IDApIHx8IHlyICUgNDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubDEwbi5kYXlzSW5Nb250aFttb250aF07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgICAgIHNlbGYuZWxlbWVudCA9IHNlbGYuaW5wdXQgPSBlbGVtZW50O1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHBhcnNlQ29uZmlnKCk7XG4gICAgICAgICAgICBzZXR1cExvY2FsZSgpO1xuICAgICAgICAgICAgc2V0dXBJbnB1dHMoKTtcbiAgICAgICAgICAgIHNldHVwRGF0ZXMoKTtcbiAgICAgICAgICAgIHNldHVwSGVscGVyRnVuY3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgYnVpbGQoKTtcbiAgICAgICAgICAgIGJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIHx8IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21EYXRlKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHwgc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDYWxlbmRhcldpZHRoKCk7XG4gICAgICAgICAgICB2YXIgaXNTYWZhcmkgPSAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICAgICAgLyogVE9ETzogaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyXG4gICAgICAgIFxuICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZXJlIGlzIHdlaXJkIHBvc2l0aW9uaW5nIGJlaGF2aW9yIGluIHNhZmFyaSBjYXVzaW5nIHBhZ2VzXG4gICAgICAgICAgICAgIHRvIHNjcm9sbCB1cC4gaHR0cHM6Ly9naXRodWIuY29tL2NobWxuL2ZsYXRwaWNrci9pc3N1ZXMvNTYzXG4gICAgICAgIFxuICAgICAgICAgICAgICBIb3dldmVyLCBtb3N0IGJyb3dzZXJzIGFyZSBub3QgU2FmYXJpIGFuZCBwb3NpdGlvbmluZyBpcyBleHBlbnNpdmUgd2hlbiB1c2VkXG4gICAgICAgICAgICAgIGluIHNjYWxlLiBodHRwczovL2dpdGh1Yi5jb20vY2htbG4vZmxhdHBpY2tyL2lzc3Vlcy8xMDk2XG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlICYmIGlzU2FmYXJpKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25SZWFkeVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBiaW5kVG9JbnN0YW5jZShmbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmJpbmQoc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0Q2FsZW5kYXJXaWR0aCgpIHtcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBzZWxmLmNvbmZpZztcbiAgICAgICAgICAgIGlmIChjb25maWcud2Vla051bWJlcnMgPT09IGZhbHNlICYmIGNvbmZpZy5zaG93TW9udGhzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLm5vQ2FsZW5kYXIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXlzV2lkdGggPSAoc2VsZi5kYXlzLm9mZnNldFdpZHRoICsgMSkgKiBjb25maWcuc2hvd01vbnRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5zdHlsZS53aWR0aCA9IGRheXNXaWR0aCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUud2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheXNXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLndlZWtXcmFwcGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi53ZWVrV3JhcHBlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGhhbmRsZXIgZm9yIGFsbCBldmVudHMgdGFyZ2V0aW5nIHRoZSB0aW1lIGlucHV0c1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGltZShlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZSA9IHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gZ2V0RGVmYXVsdEhvdXJzKCksIGhvdXJzID0gX2EuaG91cnMsIG1pbnV0ZXMgPSBfYS5taW51dGVzLCBzZWNvbmRzID0gX2Euc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcywgMCk7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGRlZmF1bHREYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZSAhPT0gdW5kZWZpbmVkICYmIGUudHlwZSAhPT0gXCJibHVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aW1lV3JhcHBlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2VmFsdWUgPSBzZWxmLl9pbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dC52YWx1ZSAhPT0gcHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYW1wbTJtaWxpdGFyeShob3VyLCBhbVBNKSB7XG4gICAgICAgICAgICByZXR1cm4gKGhvdXIgJSAxMikgKyAxMiAqIGludChhbVBNID09PSBzZWxmLmwxMG4uYW1QTVsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWlsaXRhcnkyYW1wbShob3VyKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGhvdXIgJSAyNCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgJSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGhlIHNlbGVjdGVkIGRhdGUgb2JqZWN0IHRpbWUgd2l0aCB1c2VyJ3MgdGltZSBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tSW5wdXRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBzZWxmLm1pbnV0ZUVsZW1lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG91cnMgPSAocGFyc2VJbnQoc2VsZi5ob3VyRWxlbWVudC52YWx1ZS5zbGljZSgtMiksIDEwKSB8fCAwKSAlIDI0LCBtaW51dGVzID0gKHBhcnNlSW50KHNlbGYubWludXRlRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjAsIHNlY29uZHMgPSBzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gKHBhcnNlSW50KHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjBcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBob3VycyA9IGFtcG0ybWlsaXRhcnkoaG91cnMsIHNlbGYuYW1QTS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGltaXRNaW5Ib3VycyA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgdmFyIGxpbWl0TWF4SG91cnMgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERhdGVIYXNUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5jb25maWcubWF4RGF0ZSwgdHJ1ZSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgICAgIGlmIChsaW1pdE1heEhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heFRpbWUgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhUaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4VGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWludXRlcywgbWF4VGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtYXhUaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWluKHNlY29uZHMsIG1heFRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW1pdE1pbkhvdXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pblRpbWUgPSBzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5UaW1lXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWluRGF0ZTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWF4KGhvdXJzLCBtaW5UaW1lLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWluVGltZS5nZXRIb3VycygpKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWludXRlcywgbWluVGltZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzID09PSBtaW5UaW1lLmdldE1pbnV0ZXMoKSlcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGgubWF4KHNlY29uZHMsIG1pblRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU3luY3MgdGltZSBpbnB1dCB2YWx1ZXMgd2l0aCBhIGRhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaikge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXRlT2JqIHx8IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqO1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0RGVmYXVsdEhvdXJzKCkge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gc2VsZi5jb25maWcuZGVmYXVsdEhvdXI7XG4gICAgICAgICAgICB2YXIgbWludXRlcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGU7XG4gICAgICAgICAgICB2YXIgc2Vjb25kcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBtaW5IciA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWluTWludXRlcyA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pbkhyKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhyKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWluTWludXRlcywgbWludXRlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5IciAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heEhyID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICAgIHZhciBtYXhNaW51dGVzID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4SHIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtYXhNaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heEhyICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGhvdXJzOiBob3VycywgbWludXRlczogbWludXRlcywgc2Vjb25kczogc2Vjb25kcyB9O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBob3VycywgbWludXRlcywgYW5kIG9wdGlvbmFsbHkgc2Vjb25kc1xuICAgICAgICAgKiBvZiB0aGUgbGF0ZXN0IHNlbGVjdGVkIGRhdGUgb2JqZWN0IGFuZCB0aGVcbiAgICAgICAgICogY29ycmVzcG9uZGluZyB0aW1lIGlucHV0c1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaG91cnMgdGhlIGhvdXIuIHdoZXRoZXIgaXRzIG1pbGl0YXJ5XG4gICAgICAgICAqICAgICAgICAgICAgICAgICBvciBhbS1wbSBnZXRzIGluZmVycmVkIGZyb20gY29uZmlnXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtaW51dGVzIHRoZSBtaW51dGVzXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzZWNvbmRzIHRoZSBzZWNvbmRzIChvcHRpb25hbClcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLnNldEhvdXJzKGhvdXJzICUgMjQsIG1pbnV0ZXMsIHNlY29uZHMgfHwgMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuaG91ckVsZW1lbnQgfHwgIXNlbGYubWludXRlRWxlbWVudCB8fCBzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoIXNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgID8gKCgxMiArIGhvdXJzKSAlIDEyKSArIDEyICogaW50KGhvdXJzICUgMTIgPT09IDApXG4gICAgICAgICAgICAgICAgOiBob3Vycyk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQobWludXRlcyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1baW50KGhvdXJzID49IDEyKV07XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBIYW5kbGVzIHRoZSB5ZWFyIGlucHV0IGFuZCBpbmNyZW1lbnRpbmcgZXZlbnRzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IHRoZSBrZXl1cCBvciBpbmNyZW1lbnQgZXZlbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG9uWWVhcklucHV0KGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KGV2ZW50VGFyZ2V0LnZhbHVlKSArIChldmVudC5kZWx0YSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh5ZWFyIC8gMTAwMCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgJiYgIS9bXlxcZF0vLnRlc3QoeWVhci50b1N0cmluZygpKSkpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHllYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFc3NlbnRpYWxseSBhZGRFdmVudExpc3RlbmVyICsgdHJhY2tpbmdcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIGFkZEV2ZW50TGlzdGVuZXIgdG9cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IHRoZSBldmVudCBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGJpbmQoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChldikgeyByZXR1cm4gYmluZChlbGVtZW50LCBldiwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gYmluZChlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9KTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgYWxsIHRoZSBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgICAgICBbXCJvcGVuXCIsIFwiY2xvc2VcIiwgXCJ0b2dnbGVcIiwgXCJjbGVhclwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzZWxmLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLVwiICsgZXZ0ICsgXCJdXCIpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBzZXR1cE1vYmlsZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZShvblJlc2l6ZSwgNTApO1xuICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICYmICEvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcihnZXRFdmVudFRhcmdldChlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudC5ib2R5LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuaW5saW5lICYmICFzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcInRvdWNoc3RhcnRcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwiY2xpY2tcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJmb2N1c1wiLCBkb2N1bWVudENsaWNrLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xpY2tPcGVucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiZm9jdXNcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImNsaWNrXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFwiY2xpY2tcIiwgb25Nb250aE5hdkNsaWNrKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFtcImtleXVwXCIsIFwiaW5jcmVtZW50XCJdLCBvblllYXJJbnB1dCk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwiY2xpY2tcIiwgc2VsZWN0RGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi50aW1lQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWxUZXh0ID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEV2ZW50VGFyZ2V0KGUpLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFtcImluY3JlbWVudFwiXSwgdXBkYXRlVGltZSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiYmx1clwiLCB1cGRhdGVUaW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiY2xpY2tcIiwgdGltZUluY3JlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZChbc2VsZi5ob3VyRWxlbWVudCwgc2VsZi5taW51dGVFbGVtZW50XSwgW1wiZm9jdXNcIiwgXCJjbGlja1wiXSwgc2VsVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuc2Vjb25kRWxlbWVudCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLnNlY29uZEVsZW1lbnQgJiYgc2VsZi5zZWNvbmRFbGVtZW50LnNlbGVjdCgpOyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZChzZWxmLmFtUE0sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0KVxuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiYmx1clwiLCBvbkJsdXIpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXQgdGhlIGNhbGVuZGFyIHZpZXcgdG8gYSBwYXJ0aWN1bGFyIGRhdGUuXG4gICAgICAgICAqIEBwYXJhbSB7RGF0ZX0ganVtcERhdGUgdGhlIGRhdGUgdG8gc2V0IHRoZSB2aWV3IHRvXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJpZ2dlckNoYW5nZSBpZiBjaGFuZ2UgZXZlbnRzIHNob3VsZCBiZSB0cmlnZ2VyZWRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGp1bXBUb0RhdGUoanVtcERhdGUsIHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBqdW1wVG8gPSBqdW1wRGF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBzZWxmLnBhcnNlRGF0ZShqdW1wRGF0ZSlcbiAgICAgICAgICAgICAgICA6IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIHx8XG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmIHNlbGYuY29uZmlnLm1pbkRhdGUgPiBzZWxmLm5vd1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiYgc2VsZi5jb25maWcubWF4RGF0ZSA8IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdyk7XG4gICAgICAgICAgICB2YXIgb2xkWWVhciA9IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICB2YXIgb2xkTW9udGggPSBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGp1bXBUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBqdW1wVG8uZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBqdW1wVG8uZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsganVtcFRvO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmIHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciAhPT0gb2xkWWVhciB8fCBzZWxmLmN1cnJlbnRNb250aCAhPT0gb2xkTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB1cC9kb3duIGFycm93IGhhbmRsZXIgZm9yIHRpbWUgaW5wdXRzXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGUgdGhlIGNsaWNrIGV2ZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB0aW1lSW5jcmVtZW50KGUpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgaWYgKH5ldmVudFRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImFycm93XCIpKVxuICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KGUsIGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikgPyAxIDogLTEpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmNyZW1lbnRzL2RlY3JlbWVudHMgdGhlIHZhbHVlIG9mIGlucHV0IGFzc29jaS1cbiAgICAgICAgICogYXRlZCB3aXRoIHRoZSB1cC9kb3duIGFycm93IGJ5IGRpc3BhdGNoaW5nIGFuXG4gICAgICAgICAqIFwiaW5jcmVtZW50XCIgZXZlbnQgb24gdGhlIGlucHV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBjbGljayBldmVudFxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGEgdGhlIGRpZmYgKHVzdWFsbHkgMSBvciAtMSlcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBpbnB1dEVsZW0gdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGluY3JlbWVudE51bUlucHV0KGUsIGRlbHRhLCBpbnB1dEVsZW0pIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlICYmIGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRFbGVtIHx8XG4gICAgICAgICAgICAgICAgKHRhcmdldCAmJiB0YXJnZXQucGFyZW50Tm9kZSAmJiB0YXJnZXQucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUV2ZW50KFwiaW5jcmVtZW50XCIpO1xuICAgICAgICAgICAgZXZlbnQuZGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgIGlucHV0ICYmIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRNb250aE5hdigpKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1pbm5lckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcud2Vla051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hID0gYnVpbGRXZWVrcygpLCB3ZWVrV3JhcHBlciA9IF9hLndlZWtXcmFwcGVyLCB3ZWVrTnVtYmVycyA9IF9hLndlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHdlZWtXcmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycyA9IHdlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtXcmFwcGVyID0gd2Vla1dyYXBwZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItckNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoYnVpbGRXZWVrZGF5cygpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWRheXNcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc2VsZi5pbm5lckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGJ1aWxkVGltZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmFuZ2VNb2RlXCIsIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFuaW1hdGVcIiwgc2VsZi5jb25maWcuYW5pbWF0ZSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcIm11bHRpTW9udGhcIiwgc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gICAgICAgICAgICB2YXIgY3VzdG9tQXBwZW5kID0gc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lIHx8IHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChzZWxmLmNvbmZpZy5pbmxpbmUgPyBcImlubGluZVwiIDogXCJzdGF0aWNcIik7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUFwcGVuZCAmJiBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBzZWxmLl9pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5hcHBlbmRUby5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd3JhcHBlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hcHBlbmRUb1xuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy5kb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVEYXkoY2xhc3NOYW1lLCBkYXRlLCBkYXlOdW1iZXIsIGkpIHtcbiAgICAgICAgICAgIHZhciBkYXRlSXNFbmFibGVkID0gaXNFbmFibGVkKGRhdGUsIHRydWUpLCBkYXlFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItZGF5IFwiICsgY2xhc3NOYW1lLCBkYXRlLmdldERhdGUoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuZGF0ZU9iaiA9IGRhdGU7XG4gICAgICAgICAgICBkYXlFbGVtZW50LiRpID0gaTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmZvcm1hdERhdGUoZGF0ZSwgc2VsZi5jb25maWcuYXJpYURhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5ub3cpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50b2RheURhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0b2RheVwiKTtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtY3VycmVudFwiLCBcImRhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IGRheUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwic3RhcnRSYW5nZVwiLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhkYXlFbGVtZW50LCBcImVuZFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09IFwibmV4dE1vbnRoRGF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1kaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlSW5SYW5nZShkYXRlKSAmJiAhaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgIT09IFwicHJldk1vbnRoRGF5XCIgJiZcbiAgICAgICAgICAgICAgICBkYXlOdW1iZXIgJSA3ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrTnVtYmVycy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgXCI8c3BhbiBjbGFzcz0nZmxhdHBpY2tyLWRheSc+XCIgKyBzZWxmLmNvbmZpZy5nZXRXZWVrKGRhdGUpICsgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25EYXlDcmVhdGVcIiwgZGF5RWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gZGF5RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb2N1c09uRGF5RWxlbSh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICB0YXJnZXROb2RlLmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKHRhcmdldE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEZpcnN0QXZhaWxhYmxlRGF5KGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRNb250aCA9IGRlbHRhID4gMCA/IDAgOiBzZWxmLmNvbmZpZy5zaG93TW9udGhzIC0gMTtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBzdGFydE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZGVsdGEgPiAwID8gMCA6IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gZGVsdGEgPiAwID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIDogLTE7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgIT0gZW5kSW5kZXg7IGkgKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBtb250aC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmIGlzRW5hYmxlZChjLmRhdGVPYmopKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlRGF5KGN1cnJlbnQsIGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgZ2l2ZW5Nb250aCA9IGN1cnJlbnQuY2xhc3NOYW1lLmluZGV4T2YoXCJNb250aFwiKSA9PT0gLTFcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQuZGF0ZU9iai5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgICAgIHZhciBlbmRNb250aCA9IGRlbHRhID4gMCA/IHNlbGYuY29uZmlnLnNob3dNb250aHMgOiAtMTtcbiAgICAgICAgICAgIHZhciBsb29wRGVsdGEgPSBkZWx0YSA+IDAgPyAxIDogLTE7XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGdpdmVuTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCA9PT0gbVxuICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQuJGkgKyBkZWx0YVxuICAgICAgICAgICAgICAgICAgICA6IGRlbHRhIDwgMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgdmFyIG51bU1vbnRoRGF5cyA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA+PSAwICYmIGkgPCBudW1Nb250aERheXMgJiYgaSAhPSAoZGVsdGEgPiAwID8gbnVtTW9udGhEYXlzIDogLTEpOyBpICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5hYmxlZChjLmRhdGVPYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhjdXJyZW50LiRpIC0gaSkgPj0gTWF0aC5hYnMoZGVsdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvY3VzT25EYXlFbGVtKGMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgobG9vcERlbHRhKTtcbiAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkobG9vcERlbHRhKSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXkoY3VycmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICB2YXIgZGF5Rm9jdXNlZCA9IGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgICB2YXIgc3RhcnRFbGVtID0gY3VycmVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICAgICAgOiBkYXlGb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYuc2VsZWN0ZWREYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYudG9kYXlEYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYudG9kYXlEYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYudG9kYXlEYXRlRWxlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Rmlyc3RBdmFpbGFibGVEYXkob2Zmc2V0ID4gMCA/IDEgOiAtMSk7XG4gICAgICAgICAgICBpZiAoc3RhcnRFbGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWRheUZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbShzdGFydEVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0TmV4dEF2YWlsYWJsZURheShzdGFydEVsZW0sIG9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aERheXMoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdE9mTW9udGggPSAobmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpIC0gc2VsZi5sMTBuLmZpcnN0RGF5T2ZXZWVrICsgNykgJSA3O1xuICAgICAgICAgICAgdmFyIHByZXZNb250aERheXMgPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKChtb250aCAtIDEgKyAxMikgJSAxMiwgeWVhcik7XG4gICAgICAgICAgICB2YXIgZGF5c0luTW9udGggPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKG1vbnRoLCB5ZWFyKSwgZGF5cyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGlzTXVsdGlNb250aCA9IHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxLCBwcmV2TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwicHJldk1vbnRoRGF5IGhpZGRlblwiIDogXCJwcmV2TW9udGhEYXlcIiwgbmV4dE1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcIm5leHRNb250aERheSBoaWRkZW5cIiA6IFwibmV4dE1vbnRoRGF5XCI7XG4gICAgICAgICAgICB2YXIgZGF5TnVtYmVyID0gcHJldk1vbnRoRGF5cyArIDEgLSBmaXJzdE9mTW9udGgsIGRheUluZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIHByZXBlbmQgZGF5cyBmcm9tIHRoZSBlbmRpbmcgb2YgcHJldmlvdXMgbW9udGhcbiAgICAgICAgICAgIGZvciAoOyBkYXlOdW1iZXIgPD0gcHJldk1vbnRoRGF5czsgZGF5TnVtYmVyKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShwcmV2TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCBhdCAxIHNpbmNlIHRoZXJlIGlzIG5vIDB0aCBkYXlcbiAgICAgICAgICAgIGZvciAoZGF5TnVtYmVyID0gMTsgZGF5TnVtYmVyIDw9IGRheXNJbk1vbnRoOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KFwiXCIsIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgZGF5cyBmcm9tIHRoZSBuZXh0IG1vbnRoXG4gICAgICAgICAgICBmb3IgKHZhciBkYXlOdW0gPSBkYXlzSW5Nb250aCArIDE7IGRheU51bSA8PSA0MiAtIGZpcnN0T2ZNb250aCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxIHx8IGRheUluZGV4ICUgNyAhPT0gMCk7IGRheU51bSsrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkobmV4dE1vbnRoRGF5Q2xhc3MsIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgZGF5TnVtICUgZGF5c0luTW9udGgpLCBkYXlOdW0sIGRheUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3VwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIHZhciBkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZGF5Q29udGFpbmVyXCIpO1xuICAgICAgICAgICAgZGF5Q29udGFpbmVyLmFwcGVuZENoaWxkKGRheXMpO1xuICAgICAgICAgICAgcmV0dXJuIGRheUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZERheXMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGVhck5vZGUoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIC8vIFRPRE86IHdlZWsgbnVtYmVycyBmb3IgZWFjaCBtb250aFxuICAgICAgICAgICAgaWYgKHNlbGYud2Vla051bWJlcnMpXG4gICAgICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYud2Vla051bWJlcnMpO1xuICAgICAgICAgICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGJ1aWxkTW9udGhEYXlzKGQuZ2V0RnVsbFllYXIoKSwgZC5nZXRNb250aCgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZyk7XG4gICAgICAgICAgICBzZWxmLmRheXMgPSBzZWxmLmRheXNDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aFN3aXRjaCgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlICE9PSBcImRyb3Bkb3duXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHNob3VsZEJ1aWxkTW9udGggPSBmdW5jdGlvbiAobW9udGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgICAgICAgICBtb250aCA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhKHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghc2hvdWxkQnVpbGRNb250aChpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCBcImZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIG1vbnRoLnZhbHVlID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgaSkuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIG1vbnRoLnRleHRDb250ZW50ID0gbW9udGhUb1N0cihpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbik7XG4gICAgICAgICAgICAgICAgbW9udGgudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50TW9udGggPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhcIik7XG4gICAgICAgICAgICB2YXIgbW9udGhOYXZGcmFnbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICB2YXIgbW9udGhFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImN1ci1tb250aFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ubW9udGhBcmlhTGFiZWwpO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lciwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRNb250aCA9IHBhcnNlSW50KHRhcmdldC52YWx1ZSwgMTApO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZU1vbnRoKHNlbGVjdGVkTW9udGggLSBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgeWVhcklucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJjdXIteWVhclwiLCB7IHRhYmluZGV4OiBcIi0xXCIgfSk7XG4gICAgICAgICAgICB2YXIgeWVhckVsZW1lbnQgPSB5ZWFySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgc2VsZi5sMTBuLnllYXJBcmlhTGFiZWwpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJyZW50TW9udGggPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWN1cnJlbnQtbW9udGhcIik7XG4gICAgICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQobW9udGhFbGVtZW50KTtcbiAgICAgICAgICAgIGN1cnJlbnRNb250aC5hcHBlbmRDaGlsZCh5ZWFySW5wdXQpO1xuICAgICAgICAgICAgbW9udGhOYXZGcmFnbWVudC5hcHBlbmRDaGlsZChjdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoTmF2RnJhZ21lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudDogeWVhckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50OiBtb250aEVsZW1lbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhzKCkge1xuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYubW9udGhOYXYpO1xuICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocykge1xuICAgICAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgbS0tOykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5wdXNoKG1vbnRoLnllYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMucHVzaChtb250aC5tb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5uZXh0TW9udGhOYXYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhOYXYoKSB7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aHNcIik7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXByZXYtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLW5leHQtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5uZXh0QXJyb3c7XG4gICAgICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZVByZXZNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYucHJldk1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZU5leHRNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYubmV4dE1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQgPSBzZWxmLnllYXJFbGVtZW50c1swXTtcbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLm1vbnRoTmF2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkVGltZSgpIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1RpbWVcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhcilcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJub0NhbGVuZGFyXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci10aW1lXCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpO1xuICAgICAgICAgICAgdmFyIGhvdXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLWhvdXJcIiwge1xuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxmLmwxMG4uaG91ckFyaWFMYWJlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZUlucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItbWludXRlXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLm1pbnV0ZUFyaWFMYWJlbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ID0gbWludXRlSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudGFiSW5kZXggPSBzZWxmLm1pbnV0ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldEhvdXJzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyXG4gICAgICAgICAgICAgICAgICAgIDogbWlsaXRhcnkyYW1wbShzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRNaW51dGVzKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGUpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLmhvdXJJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5taW51dGVJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjBcIiA6IFwiMVwiKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMjNcIiA6IFwiMTJcIik7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChob3VySW5wdXQpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlcGFyYXRvcik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQobWludXRlSW5wdXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnRpbWVfMjRocilcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInRpbWUyNGhyXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1NlY29uZHNcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlY29uZElucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3Itc2Vjb25kXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCA9IHNlY29uZElucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlID0gcGFkKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0U2Vjb25kcygpXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdFNlY29uZHMpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYubWludXRlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIFwiMFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIFwiNTlcIik7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKSk7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlY29uZElucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcudGltZV8yNGhyKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHNlbGYuYW1QTSBpZiBhcHByb3ByaWF0ZVxuICAgICAgICAgICAgICAgIHNlbGYuYW1QTSA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLWFtLXBtXCIsIHNlbGYubDEwbi5hbVBNW2ludCgoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmhvdXJFbGVtZW50LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdEhvdXIpID4gMTEpXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRpdGxlID0gc2VsZi5sMTBuLnRvZ2dsZVRpdGxlO1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmFtUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlbGYudGltZUNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpXG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5c1wiKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrZGF5Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVdlZWtkYXlzKCk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi53ZWVrZGF5Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVdlZWtkYXlzKCkge1xuICAgICAgICAgICAgaWYgKCFzZWxmLndlZWtkYXlDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWs7XG4gICAgICAgICAgICB2YXIgd2Vla2RheXMgPSBfX3NwcmVhZEFycmF5cyhzZWxmLmwxMG4ud2Vla2RheXMuc2hvcnRoYW5kKTtcbiAgICAgICAgICAgIGlmIChmaXJzdERheU9mV2VlayA+IDAgJiYgZmlyc3REYXlPZldlZWsgPCB3ZWVrZGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5cyA9IF9fc3ByZWFkQXJyYXlzKHdlZWtkYXlzLnNwbGljZShmaXJzdERheU9mV2Vlaywgd2Vla2RheXMubGVuZ3RoKSwgd2Vla2RheXMuc3BsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5jaGlsZHJlbltpXS5pbm5lckhUTUwgPSBcIlxcbiAgICAgIDxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XFxuICAgICAgICBcIiArIHdlZWtkYXlzLmpvaW4oXCI8L3NwYW4+PHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cIikgKyBcIlxcbiAgICAgIDwvc3Bhbj5cXG4gICAgICBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBidWlsZFdlZWtzKCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzV2Vla3NcIik7XG4gICAgICAgICAgICB2YXIgd2Vla1dyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWt3cmFwcGVyXCIpO1xuICAgICAgICAgICAgd2Vla1dyYXBwZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3Itd2Vla2RheVwiLCBzZWxmLmwxMG4ud2Vla0FiYnJldmlhdGlvbikpO1xuICAgICAgICAgICAgdmFyIHdlZWtOdW1iZXJzID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrc1wiKTtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKHdlZWtOdW1iZXJzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2Vla1dyYXBwZXI6IHdlZWtXcmFwcGVyLFxuICAgICAgICAgICAgICAgIHdlZWtOdW1iZXJzOiB3ZWVrTnVtYmVycyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoaXNPZmZzZXQgPT09IHZvaWQgMCkgeyBpc09mZnNldCA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGlzT2Zmc2V0ID8gdmFsdWUgOiB2YWx1ZSAtIHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIChkZWx0YSA+IDAgJiYgc2VsZi5faGlkZU5leHRNb250aEFycm93ID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA8IDAgfHwgc2VsZi5jdXJyZW50TW9udGggPiAxMSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgKz0gc2VsZi5jdXJyZW50TW9udGggPiAxMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYXIodHJpZ2dlckNoYW5nZUV2ZW50LCB0b0luaXRpYWwpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB2b2lkIDApIHsgdG9Jbml0aWFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBnZXREZWZhdWx0SG91cnMoKSwgaG91cnMgPSBfYS5ob3VycywgbWludXRlcyA9IF9hLm1pbnV0ZXMsIHNlY29uZHMgPSBfYS5zZWNvbmRzO1xuICAgICAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJDaGFuZ2VFdmVudCBpcyB0cnVlIChkZWZhdWx0KSBvciBhbiBFdmVudFxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgc2VsZi5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNsb3NlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRlc3Ryb3lcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5faGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIGggPSBzZWxmLl9oYW5kbGVyc1tpXTtcbiAgICAgICAgICAgICAgICBoLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLmV2ZW50LCBoLmhhbmRsZXIsIGgub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9oYW5kbGVycyA9IFtdO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5tb2JpbGVJbnB1dCk7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIubGFzdENoaWxkICYmIHdyYXBwZXIucmVtb3ZlQ2hpbGQod3JhcHBlci5sYXN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod3JhcHBlci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlci5maXJzdENoaWxkLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmFsdElucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBzZWxmLmlucHV0Ll90eXBlO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnJlbW92ZUF0dHJpYnV0ZShcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiX3Nob3dUaW1lSW5wdXRcIixcbiAgICAgICAgICAgICAgICBcImxhdGVzdFNlbGVjdGVkRGF0ZU9ialwiLFxuICAgICAgICAgICAgICAgIFwiX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX19oaWRlTmV4dE1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcIl9faGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJpc01vYmlsZVwiLFxuICAgICAgICAgICAgICAgIFwiaXNPcGVuXCIsXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJtaW5EYXRlSGFzVGltZVwiLFxuICAgICAgICAgICAgICAgIFwibWF4RGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgICAgICBcImRheXNcIixcbiAgICAgICAgICAgICAgICBcImRheXNDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIl9pbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwiX3Bvc2l0aW9uRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwiaW5uZXJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcInJDb250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJ0b2RheURhdGVFbGVtXCIsXG4gICAgICAgICAgICAgICAgXCJjYWxlbmRhckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheUNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwicHJldk1vbnRoTmF2XCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0TW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50TW9udGhFbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50WWVhckVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcIm5hdmlnYXRpb25DdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcImNvbmZpZ1wiLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJFbGVtKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hcHBlbmRUbyAmJiBzZWxmLmNvbmZpZy5hcHBlbmRUby5jb250YWlucyhlbGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGRvY3VtZW50Q2xpY2soZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXRfMSA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIHZhciBpc0NhbGVuZGFyRWxlbWVudCA9IGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0XzEpO1xuICAgICAgICAgICAgICAgIHZhciBpc0lucHV0ID0gZXZlbnRUYXJnZXRfMSA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldF8xID09PSBzZWxmLmFsdElucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5jb250YWlucyhldmVudFRhcmdldF8xKSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZWIgY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyBlLnBhdGggaXMgbm90IHByZXNlbnQgaW4gYWxsIGJyb3dzZXJzLiBjaXJjdW12ZW50aW5nIHR5cGVjaGVja3NcbiAgICAgICAgICAgICAgICAgICAgKGUucGF0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXRoLmluZGV4T2YgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh+ZS5wYXRoLmluZGV4T2Yoc2VsZi5pbnB1dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+ZS5wYXRoLmluZGV4T2Yoc2VsZi5hbHRJbnB1dCkpKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9zdEZvY3VzID0gZS50eXBlID09PSBcImJsdXJcIlxuICAgICAgICAgICAgICAgICAgICA/IGlzSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmVsYXRlZFRhcmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgOiAhaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB2YXIgaXNJZ25vcmVkID0gIXNlbGYuY29uZmlnLmlnbm9yZWRGb2N1c0VsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uY29udGFpbnMoZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvc3RGb2N1cyAmJiBpc0lnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSBcIlwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlWWVhcihuZXdZZWFyKSB7XG4gICAgICAgICAgICBpZiAoIW5ld1llYXIgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBuZXdZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmIG5ld1llYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBuZXdZZWFyTnVtID0gbmV3WWVhciwgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gbmV3WWVhck51bTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBuZXdZZWFyTnVtIHx8IHNlbGYuY3VycmVudFllYXI7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5taW4oc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1heChzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05ld1llYXIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNFbmFibGVkKGRhdGUsIHRpbWVsZXNzKSB7XG4gICAgICAgICAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkYXRlVG9DaGVjayA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHVuZGVmaW5lZCwgdGltZWxlc3MpOyAvLyB0aW1lbGVzc1xuICAgICAgICAgICAgaWYgKChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1pbkRhdGVIYXNUaW1lKSA8IDApIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5tYXhEYXRlSGFzVGltZSkgPiAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA9PT0gMCAmJiBzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkYXRlVG9DaGVjayA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHZhciBib29sID0gc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCA+IDAsIGFycmF5ID0gYm9vbCA/IHNlbGYuY29uZmlnLmVuYWJsZSA6IHNlbGYuY29uZmlnLmRpc2FibGU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZCA9IHZvaWQgMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZCA9IGFycmF5W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIGQoZGF0ZVRvQ2hlY2spIC8vIGRpc2FibGVkIGJ5IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChkIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIgJiYgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBkYXRlIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZURhdGUoZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCAmJiBwYXJzZWQuZ2V0VGltZSgpID09PSBkYXRlVG9DaGVjay5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYm9vbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAhYm9vbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgcmFuZ2VcbiAgICAgICAgICAgICAgICB0eXBlb2YgZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIGQuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBkLnRvICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA+PSBkLmZyb20uZ2V0VGltZSgpICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA8PSBkLnRvLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIWJvb2w7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNJblZpZXcoZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUuaW5kZXhPZihcImZsYXRwaWNrci1kaXNhYmxlZFwiKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBlLnRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgICAgICBpZiAoaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICEoZS5yZWxhdGVkVGFyZ2V0ICYmIGlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBlLnRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICAgICAgICAvLyBlLmtleSAgICAgICAgICAgICAgICAgICAgICBlLmtleUNvZGVcbiAgICAgICAgICAgIC8vIFwiQmFja3NwYWNlXCIgICAgICAgICAgICAgICAgICAgICAgICA4XG4gICAgICAgICAgICAvLyBcIlRhYlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOVxuICAgICAgICAgICAgLy8gXCJFbnRlclwiICAgICAgICAgICAgICAgICAgICAgICAgICAgMTNcbiAgICAgICAgICAgIC8vIFwiRXNjYXBlXCIgICAgIChJRSBcIkVzY1wiKSAgICAgICAgICAgMjdcbiAgICAgICAgICAgIC8vIFwiQXJyb3dMZWZ0XCIgIChJRSBcIkxlZnRcIikgICAgICAgICAgMzdcbiAgICAgICAgICAgIC8vIFwiQXJyb3dVcFwiICAgIChJRSBcIlVwXCIpICAgICAgICAgICAgMzhcbiAgICAgICAgICAgIC8vIFwiQXJyb3dSaWdodFwiIChJRSBcIlJpZ2h0XCIpICAgICAgICAgMzlcbiAgICAgICAgICAgIC8vIFwiQXJyb3dEb3duXCIgIChJRSBcIkRvd25cIikgICAgICAgICAgNDBcbiAgICAgICAgICAgIC8vIFwiRGVsZXRlXCIgICAgIChJRSBcIkRlbFwiKSAgICAgICAgICAgNDZcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KVxuICAgICAgICAgICAgICAgIDogZXZlbnRUYXJnZXQgPT09IHNlbGYuX2lucHV0O1xuICAgICAgICAgICAgdmFyIGFsbG93SW5wdXQgPSBzZWxmLmNvbmZpZy5hbGxvd0lucHV0O1xuICAgICAgICAgICAgdmFyIGFsbG93S2V5ZG93biA9IHNlbGYuaXNPcGVuICYmICghYWxsb3dJbnB1dCB8fCAhaXNJbnB1dCk7XG4gICAgICAgICAgICB2YXIgYWxsb3dJbmxpbmVLZXlkb3duID0gc2VsZi5jb25maWcuaW5saW5lICYmIGlzSW5wdXQgJiYgIWFsbG93SW5wdXQ7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiBpc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBldmVudFRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldCkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd0tleWRvd24gfHxcbiAgICAgICAgICAgICAgICBhbGxvd0lubGluZUtleWRvd24pIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNUaW1lT2JqID0gISFzZWxmLnRpbWVDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGltZU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5wdXQgJiYgIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiAhaXNJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG93SW5wdXQgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBpc0luVmlldyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YV8xID0gZS5rZXlDb2RlID09PSAzOSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoKGRlbHRhXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheSgxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gZS5rZXlDb2RlID09PSA0MCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuJGkgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNUaW1lT2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KHVuZGVmaW5lZCwgZGVsdGEgKiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0ID09PSBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiBzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLnBsdWdpbkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVsZW1zLmluZGV4T2YoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZWxlbXNbaSArIChlLnNoaWZ0S2V5ID8gLTEgOiAxKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldCB8fCBzZWxmLl9pbnB1dCkuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZXZlbnRUYXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMF0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVsxXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25LZXlEb3duXCIsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VPdmVyKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSAxIHx8XG4gICAgICAgICAgICAgICAgKGVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFlbGVtLmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kYXlcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvdmVyRGF0ZSA9IGVsZW1cbiAgICAgICAgICAgICAgICA/IGVsZW0uZGF0ZU9iai5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuZGF5cy5maXJzdEVsZW1lbnRDaGlsZC5kYXRlT2JqLmdldFRpbWUoKSwgaW5pdGlhbERhdGUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHVuZGVmaW5lZCwgdHJ1ZSkuZ2V0VGltZSgpLCByYW5nZVN0YXJ0RGF0ZSA9IE1hdGgubWluKGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSksIHJhbmdlRW5kRGF0ZSA9IE1hdGgubWF4KGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB2YXIgY29udGFpbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIG1pblJhbmdlID0gMCwgbWF4UmFuZ2UgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgdCA9IHJhbmdlU3RhcnREYXRlOyB0IDwgcmFuZ2VFbmREYXRlOyB0ICs9IGR1cmF0aW9uLkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNFbmFibGVkKG5ldyBEYXRlKHQpLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgfHwgKHQgPiByYW5nZVN0YXJ0RGF0ZSAmJiB0IDwgcmFuZ2VFbmREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCBpbml0aWFsRGF0ZSAmJiAoIW1pblJhbmdlIHx8IHQgPiBtaW5SYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPiBpbml0aWFsRGF0ZSAmJiAoIW1heFJhbmdlIHx8IHQgPCBtYXhSYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBtKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSwgbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF5RWxlbSA9IG1vbnRoLmNoaWxkcmVuW2ldLCBkYXRlID0gZGF5RWxlbS5kYXRlT2JqO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvdXRPZlJhbmdlID0gKG1pblJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPCBtaW5SYW5nZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA+IDAgJiYgdGltZXN0YW1wID4gbWF4UmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcImluUmFuZ2VcIiwgXCJzdGFydFJhbmdlXCIsIFwiZW5kUmFuZ2VcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250YWluc0Rpc2FibGVkICYmICFvdXRPZlJhbmdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgW1wic3RhcnRSYW5nZVwiLCBcImluUmFuZ2VcIiwgXCJlbmRSYW5nZVwiLCBcIm5vdEFsbG93ZWRcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGhvdmVyRGF0ZSA8PSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInN0YXJ0UmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsRGF0ZSA8IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcInN0YXJ0UmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcImVuZFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA+PSBtaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA9PT0gMCB8fCB0aW1lc3RhbXAgPD0gbWF4UmFuZ2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNCZXR3ZWVuKHRpbWVzdGFtcCwgaW5pdGlhbERhdGUsIGhvdmVyRGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBtb250aC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3BfMShpLCBsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLnN0YXRpYyAmJiAhc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvcGVuKGUsIHBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uRWxlbWVudCA9PT0gdm9pZCAwKSB7IHBvc2l0aW9uRWxlbWVudCA9IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDsgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCAmJiBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uT3BlblwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQuZGlzYWJsZWQgfHwgc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB3YXNPcGVuID0gc2VsZi5pc09wZW47XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXdhc09wZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIocG9zaXRpb25FbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgKGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuaG91ckVsZW1lbnQuc2VsZWN0KCk7IH0sIDUwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWluTWF4RGF0ZVNldHRlcih0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZU9iaiA9IChzZWxmLmNvbmZpZ1tcIl9cIiArIHR5cGUgKyBcIkRhdGVcIl0gPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgdmFyIGludmVyc2VEYXRlT2JqID0gc2VsZi5jb25maWdbXCJfXCIgKyAodHlwZSA9PT0gXCJtaW5cIiA/IFwibWF4XCIgOiBcIm1pblwiKSArIFwiRGF0ZVwiXTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGZbdHlwZSA9PT0gXCJtaW5cIiA/IFwibWluRGF0ZUhhc1RpbWVcIiA6IFwibWF4RGF0ZUhhc1RpbWVcIl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0U2Vjb25kcygpID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBzZWxmLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBpc0VuYWJsZWQoZCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggJiYgdHlwZSA9PT0gXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaik7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlT2JqICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudFt0eXBlXSA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICEhaW52ZXJzZURhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlRGF0ZU9iai5nZXRGdWxsWWVhcigpID09PSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZUNvbmZpZygpIHtcbiAgICAgICAgICAgIHZhciBib29sT3B0cyA9IFtcbiAgICAgICAgICAgICAgICBcIndyYXBcIixcbiAgICAgICAgICAgICAgICBcIndlZWtOdW1iZXJzXCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0ludmFsaWRQcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgXCJjbGlja09wZW5zXCIsXG4gICAgICAgICAgICAgICAgXCJ0aW1lXzI0aHJcIixcbiAgICAgICAgICAgICAgICBcImVuYWJsZVRpbWVcIixcbiAgICAgICAgICAgICAgICBcIm5vQ2FsZW5kYXJcIixcbiAgICAgICAgICAgICAgICBcImFsdElucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJzaG9ydGhhbmRDdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcImlubGluZVwiLFxuICAgICAgICAgICAgICAgIFwic3RhdGljXCIsXG4gICAgICAgICAgICAgICAgXCJlbmFibGVTZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlTW9iaWxlXCIsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LmRhdGFzZXQgfHwge30pKSksIGluc3RhbmNlQ29uZmlnKTtcbiAgICAgICAgICAgIHZhciBmb3JtYXRzID0ge307XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5wYXJzZURhdGUgPSB1c2VyQ29uZmlnLnBhcnNlRGF0ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmZvcm1hdERhdGUgPSB1c2VyQ29uZmlnLmZvcm1hdERhdGU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZW5hYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9lbmFibGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuX2VuYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwiZGlzYWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZGlzYWJsZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZGlzYWJsZSA9IHBhcnNlRGF0ZVJ1bGVzKGRhdGVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgdGltZU1vZGUgPSB1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiO1xuICAgICAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmRhdGVGb3JtYXQgJiYgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdERhdGVGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0IHx8IGRlZmF1bHRzLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5kYXRlRm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERhdGVGb3JtYXQgKyBcIiBIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLmFsdElucHV0ICYmXG4gICAgICAgICAgICAgICAgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkgJiZcbiAgICAgICAgICAgICAgICAhdXNlckNvbmZpZy5hbHRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdEFsdEZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmFsdEZvcm1hdCB8fCBkZWZhdWx0cy5hbHRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5hbHRGb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTIEtcIiA6IFwiIEtcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdEFsdEZvcm1hdCArIChcIiBoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKSArIFwiIEtcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluRGF0ZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heERhdGVTZXR0ZXIoXCJtaW5cIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9tYXhEYXRlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG1pbk1heFRpbWVTZXR0ZXIgPSBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW3R5cGUgPT09IFwibWluXCIgPyBcIl9taW5UaW1lXCIgOiBcIl9tYXhUaW1lXCJdID0gc2VsZi5wYXJzZURhdGUodmFsLCBcIkg6aTpTXCIpO1xuICAgICAgICAgICAgfTsgfTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtaW5UaW1lXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5UaW1lOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1pblwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heFRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWF4XCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodXNlckNvbmZpZy5tb2RlID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLmNvbmZpZywgZm9ybWF0cywgdXNlckNvbmZpZyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xPcHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzE2NjNcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICBIT09LUy5maWx0ZXIoZnVuY3Rpb24gKGhvb2spIHsgcmV0dXJuIHNlbGYuY29uZmlnW2hvb2tdICE9PSB1bmRlZmluZWQ7IH0pLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tob29rXSA9IGFycmF5aWZ5KHNlbGYuY29uZmlnW2hvb2tdIHx8IFtdKS5tYXAoYmluZFRvSW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmlzTW9iaWxlID1cbiAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZU1vYmlsZSAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuaW5saW5lICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgICAgICAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZmlnLnBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcGx1Z2luQ29uZiA9IHNlbGYuY29uZmlnLnBsdWdpbnNbaV0oc2VsZikgfHwge307XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBsdWdpbkNvbmYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEhPT0tTLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gYXJyYXlpZnkocGx1Z2luQ29uZltrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYmluZFRvSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzZWxmLmNvbmZpZ1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdXNlckNvbmZpZ1trZXldID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdba2V5XSA9IHBsdWdpbkNvbmZba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXVzZXJDb25maWcuYWx0SW5wdXRDbGFzcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJbnB1dEVsZW0oKS5jbGFzc05hbWUgKyBcIiBcIiArIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblBhcnNlQ29uZmlnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldElucHV0RWxlbSgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICAgICAgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1pbnB1dF1cIilcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBMb2NhbGUoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlbGYuY29uZmlnLmxvY2FsZSAhPT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiZmxhdHBpY2tyOiBpbnZhbGlkIGxvY2FsZSBcIiArIHNlbGYuY29uZmlnLmxvY2FsZSkpO1xuICAgICAgICAgICAgc2VsZi5sMTBuID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0KSwgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubG9jYWxlICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICA/IGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcpLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLnRpbWVfMjRociA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPSBzZWxmLmwxMG4udGltZV8yNGhyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcihzZWxmKTtcbiAgICAgICAgICAgIHNlbGYucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7IGNvbmZpZzogc2VsZi5jb25maWcsIGwxMG46IHNlbGYubDEwbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwb3NpdGlvbkNhbGVuZGFyKGN1c3RvbVBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblByZUNhbGVuZGFyUG9zaXRpb25cIik7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25FbGVtZW50ID0gY3VzdG9tUG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDtcbiAgICAgICAgICAgIHZhciBjYWxlbmRhckhlaWdodCA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNoaWxkcmVuLCAoZnVuY3Rpb24gKGFjYywgY2hpbGQpIHsgcmV0dXJuIGFjYyArIGNoaWxkLm9mZnNldEhlaWdodDsgfSksIDApLCBjYWxlbmRhcldpZHRoID0gc2VsZi5jYWxlbmRhckNvbnRhaW5lci5vZmZzZXRXaWR0aCwgY29uZmlnUG9zID0gc2VsZi5jb25maWcucG9zaXRpb24uc3BsaXQoXCIgXCIpLCBjb25maWdQb3NWZXJ0aWNhbCA9IGNvbmZpZ1Bvc1swXSwgY29uZmlnUG9zSG9yaXpvbnRhbCA9IGNvbmZpZ1Bvcy5sZW5ndGggPiAxID8gY29uZmlnUG9zWzFdIDogbnVsbCwgaW5wdXRCb3VuZHMgPSBwb3NpdGlvbkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGRpc3RhbmNlRnJvbUJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGlucHV0Qm91bmRzLmJvdHRvbSwgc2hvd09uVG9wID0gY29uZmlnUG9zVmVydGljYWwgPT09IFwiYWJvdmVcIiB8fFxuICAgICAgICAgICAgICAgIChjb25maWdQb3NWZXJ0aWNhbCAhPT0gXCJiZWxvd1wiICYmXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlRnJvbUJvdHRvbSA8IGNhbGVuZGFySGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCA+IGNhbGVuZGFySGVpZ2h0KTtcbiAgICAgICAgICAgIHZhciB0b3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgK1xuICAgICAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCArXG4gICAgICAgICAgICAgICAgKCFzaG93T25Ub3AgPyBwb3NpdGlvbkVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgMiA6IC1jYWxlbmRhckhlaWdodCAtIDIpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1RvcFwiLCAhc2hvd09uVG9wKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dCb3R0b21cIiwgc2hvd09uVG9wKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5sZWZ0O1xuICAgICAgICAgICAgdmFyIGlzQ2VudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaXNSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgICAgICBsZWZ0IC09IChjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGgpIC8gMjtcbiAgICAgICAgICAgICAgICBpc0NlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWdQb3NIb3Jpem9udGFsID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgICAgICBsZWZ0IC09IGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dMZWZ0XCIsICFpc0NlbnRlciAmJiAhaXNSaWdodCk7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93Q2VudGVyXCIsIGlzQ2VudGVyKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dSaWdodFwiLCBpc1JpZ2h0KTtcbiAgICAgICAgICAgIHZhciByaWdodCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoIC1cbiAgICAgICAgICAgICAgICAod2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMucmlnaHQpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0TW9zdCA9IGxlZnQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTW9zdCA9IHJpZ2h0ICsgY2FsZW5kYXJXaWR0aCA+IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICBpZiAoIXJpZ2h0TW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNlbnRlck1vc3QpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZ2V0RG9jdW1lbnRTdHlsZVNoZWV0KCk7XG4gICAgICAgICAgICAgICAgLy8gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGNzcyBzdXBwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGRvYyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIGJvZHlXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJMZWZ0ID0gTWF0aC5tYXgoMCwgYm9keVdpZHRoIC8gMiAtIGNhbGVuZGFyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckFmdGVyID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YWZ0ZXJcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVySW5kZXggPSBkb2MuY3NzUnVsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJjZW50ZXJNb3N0XCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGNlbnRlckxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldERvY3VtZW50U3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgIHZhciBlZGl0YWJsZVNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWRpdGFibGVTaGVldCA9IHNoZWV0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVkaXRhYmxlU2hlZXQgIT0gbnVsbCA/IGVkaXRhYmxlU2hlZXQgOiBjcmVhdGVTdHlsZVNoZWV0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlLnNoZWV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNBbmRDbG9zZSgpIHtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGhhY2sgLSBidWdzIGluIHRoZSB3YXkgSUUgaGFuZGxlcyBmb2N1cyBrZWVwcyB0aGUgY2FsZW5kYXIgb3BlblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5jbG9zZSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0RGF0ZShlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyIGlzU2VsZWN0YWJsZSA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kaXNhYmxlZFwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHQgPSBmaW5kUGFyZW50KGdldEV2ZW50VGFyZ2V0KGUpLCBpc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdDtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDaGFuZ2VNb250aCA9IChzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA8IHNlbGYuY3VycmVudE1vbnRoIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgPlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc3BsaWNlKHBhcnNlSW50KHNlbGVjdGVkSW5kZXgpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHNlbGVjdGluZyBzYW1lIGRhdGUgdHdpY2UsIHNvcnQgYXNjZW5kaW5nbHlcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZURhdGVzKHNlbGVjdGVkRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIC8vIG1haW50YWluIGZvY3VzXG4gICAgICAgICAgICBpZiAoIXNob3VsZENoYW5nZU1vbnRoICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgICAgICBmb2N1c09uRGF5RWxlbSh0YXJnZXQpO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gJiYgc2VsZi5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBzaW5nbGUgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5lbmFibGVUaW1lO1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGUgfHwgcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQ0FMTEJBQ0tTID0ge1xuICAgICAgICAgICAgbG9jYWxlOiBbc2V0dXBMb2NhbGUsIHVwZGF0ZVdlZWtkYXlzXSxcbiAgICAgICAgICAgIHNob3dNb250aHM6IFtidWlsZE1vbnRocywgc2V0Q2FsZW5kYXJXaWR0aCwgYnVpbGRXZWVrZGF5c10sXG4gICAgICAgICAgICBtaW5EYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgICAgICBtYXhEYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHNldChvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENBTExCQUNLU1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW29wdGlvbl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChIT09LUy5pbmRleE9mKG9wdGlvbikgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IGFycmF5aWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRTZWxlY3RlZERhdGUoaW5wdXREYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIHZhciBkYXRlcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZCwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBpbnB1dERhdGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBpbnB1dERhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGYuY29uZmlnLm1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYW5nZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoaW5wdXREYXRlKSkpO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gKHNlbGYuY29uZmlnLmFsbG93SW52YWxpZFByZWxvYWRcbiAgICAgICAgICAgICAgICA/IGRhdGVzXG4gICAgICAgICAgICAgICAgOiBkYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzRW5hYmxlZChkLCBmYWxzZSk7IH0pKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQ7IH1cbiAgICAgICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xlYXIodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXNbc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIGp1bXBUb0RhdGUodW5kZWZpbmVkLCB0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlRGF0ZVJ1bGVzKGFycikge1xuICAgICAgICAgICAgcmV0dXJuIGFyclxuICAgICAgICAgICAgICAgIC5zbGljZSgpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgICAgICAgICBydWxlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZURhdGUocnVsZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocnVsZSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcnVsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICBydWxlLmZyb20gJiZcbiAgICAgICAgICAgICAgICAgICAgcnVsZS50bylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHNlbGYucGFyc2VEYXRlKHJ1bGUuZnJvbSwgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBzZWxmLnBhcnNlRGF0ZShydWxlLnRvLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9KTsgLy8gcmVtb3ZlIGZhbHN5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwRGF0ZXMoKSB7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYubm93ID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubm93KSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBJRTExIHNldHRpbmcgcGxhY2Vob2xkZXIgYXMgdGhlIGlucHV0J3MgdmFsdWVcbiAgICAgICAgICAgIHZhciBwcmVsb2FkZWREYXRlID0gc2VsZi5jb25maWcuZGVmYXVsdERhdGUgfHxcbiAgICAgICAgICAgICAgICAoKHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiSU5QVVRcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0Lm5vZGVOYW1lID09PSBcIlRFWFRBUkVBXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9PT0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcmVsb2FkZWREYXRlKVxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRGF0ZShwcmVsb2FkZWREYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuc2VsZWN0ZWREYXRlc1swXVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpID4gc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0VGltZSgpIDwgc2VsZi5ub3cuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5tYXhEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdztcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZi5zZWxlY3RlZERhdGVzWzBdO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWluVGltZSwgXCJIOmlcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heFRpbWUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5tYXhUaW1lLCBcIkg6aVwiKTtcbiAgICAgICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZS5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICAgICAgc2VsZi5tYXhEYXRlSGFzVGltZSA9XG4gICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBJbnB1dHMoKSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0ID0gZ2V0SW5wdXRFbGVtKCk7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgZWxlbWVudCBzcGVjaWZpZWRcIikpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhY2s6IHN0b3JlIHByZXZpb3VzIHR5cGUgdG8gcmVzdG9yZSBpdCBhZnRlciBkZXN0cm95KClcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuX3R5cGUgPSBzZWxmLmlucHV0LnR5cGU7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuY2xhc3NMaXN0LmFkZChcImZsYXRwaWNrci1pbnB1dFwiKTtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbHRJbnB1dCkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxpY2F0ZSBzZWxmLmVsZW1lbnRcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0ID0gY3JlYXRlRWxlbWVudChzZWxmLmlucHV0Lm5vZGVOYW1lLCBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzKTtcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5yZXF1aXJlZCA9IHNlbGYuaW5wdXQucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50YWJJbmRleCA9IHNlbGYuaW5wdXQudGFiSW5kZXg7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmFsdElucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuYWxsb3dJbnB1dClcbiAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICAgICAgc2VsZi5fcG9zaXRpb25FbGVtZW50ID0gc2VsZi5jb25maWcucG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX2lucHV0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldHVwTW9iaWxlKCkge1xuICAgICAgICAgICAgdmFyIGlucHV0VHlwZSA9IHNlbGYuY29uZmlnLmVuYWJsZVRpbWVcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgPyBcInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgIDogXCJkYXRlXCI7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgZmxhdHBpY2tyLW1vYmlsZVwiKTtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudGFiSW5kZXggPSAxO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50eXBlID0gaW5wdXRUeXBlO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFxcXFxUSDppOlNcIlxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiSDppOlNcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGVmYXVsdFZhbHVlID0gc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWluID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnN0ZXAgPSBTdHJpbmcoc2VsZi5pbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5tb2JpbGVJbnB1dCwgc2VsZi5pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHsgfVxuICAgICAgICAgICAgYmluZChzZWxmLm1vYmlsZUlucHV0LCBcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShnZXRFdmVudFRhcmdldChlKS52YWx1ZSwgZmFsc2UsIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNsb3NlXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdG9nZ2xlKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzT3BlbiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jbG9zZSgpO1xuICAgICAgICAgICAgc2VsZi5vcGVuKGUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChldmVudCwgZGF0YSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZCBhbHJlYWR5LCBhbGwgaG9va3MgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob29rcyA9IHNlbGYuY29uZmlnW2V2ZW50XTtcbiAgICAgICAgICAgIGlmIChob29rcyAhPT0gdW5kZWZpbmVkICYmIGhvb2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaG9va3NbaV0gJiYgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBob29rc1tpXShzZWxmLnNlbGVjdGVkRGF0ZXMsIHNlbGYuaW5wdXQudmFsdWUsIHNlbGYsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBcIm9uQ2hhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJjaGFuZ2VcIikpO1xuICAgICAgICAgICAgICAgIC8vIG1hbnkgZnJvbnQtZW5kIGZyYW1ld29ya3MgYmluZCB0byB0aGUgaW5wdXQgZXZlbnRcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoXCJpbnB1dFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuICAgICAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgICAgICAgICAgZS5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0RhdGVTZWxlY3RlZChkYXRlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlRGF0ZXMoc2VsZi5zZWxlY3RlZERhdGVzW2ldLCBkYXRlKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0ZUluUmFuZ2UoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fCBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gKGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0pID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzFdKSA8PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSB8fCAhc2VsZi5tb250aE5hdilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uICh5ZWFyRWxlbWVudCwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoc2VsZi5jdXJyZW50TW9udGggKyBpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzW2ldLnRleHRDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoVG9TdHIoZC5nZXRNb250aCgpLCBzZWxmLmNvbmZpZy5zaG9ydGhhbmRDdXJyZW50TW9udGgsIHNlbGYubDEwbikgKyBcIiBcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudmFsdWUgPSBkLmdldE1vbnRoKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQudmFsdWUgPSBkLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5faGlkZVByZXZNb250aEFycm93ID1cbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCA8PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jdXJyZW50WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY3VycmVudE1vbnRoICsgMSA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXREYXRlU3RyKGZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VsZWN0ZWREYXRlc1xuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRPYmopIHsgcmV0dXJuIHNlbGYuZm9ybWF0RGF0ZShkT2JqLCBmb3JtYXQpOyB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQsIGksIGFycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZW5hYmxlVGltZSB8fFxuICAgICAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZihkKSA9PT0gaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5jb25qdW5jdGlvblxuICAgICAgICAgICAgICAgIDogc2VsZi5sMTBuLnJhbmdlU2VwYXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVXBkYXRlcyB0aGUgdmFsdWVzIG9mIGlucHV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGVuZGFyXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkICYmIHNlbGYubW9iaWxlRm9ybWF0U3RyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5mb3JtYXREYXRlKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLm1vYmlsZUZvcm1hdFN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBnZXREYXRlU3RyKHNlbGYuY29uZmlnLmFsdEZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25WYWx1ZVVwZGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbk1vbnRoTmF2Q2xpY2soZSkge1xuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2YXIgaXNQcmV2TW9udGggPSBzZWxmLnByZXZNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoaXNQcmV2TW9udGggfHwgaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VNb250aChpc1ByZXZNb250aCA/IC0xIDogMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLnllYXJFbGVtZW50cy5pbmRleE9mKGV2ZW50VGFyZ2V0KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldmVudFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93RG93blwiKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdGltZVdyYXBwZXIoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGlzS2V5RG93biA9IGUudHlwZSA9PT0gXCJrZXlkb3duXCIsIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSksIGlucHV0ID0gZXZlbnRUYXJnZXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZXZlbnRUYXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgICAgIChpc0tleURvd24gPyAoZS53aGljaCA9PT0gMzggPyAxIDogLTEpIDogMCk7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXJWYWx1ZSArIHN0ZXAgKiBkZWx0YTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzSG91ckVsZW0gPSBpbnB1dCA9PT0gc2VsZi5ob3VyRWxlbWVudCwgaXNNaW51dGVFbGVtID0gaW5wdXQgPT09IHNlbGYubWludXRlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludChpc0hvdXJFbGVtKSAmJiBpbnQoIXNlbGYuYW1QTSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld1ZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50ID8gbmV3VmFsdWUgLSBtYXggLSBpbnQoIXNlbGYuYW1QTSkgOiBtaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKHN0ZXAgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUgKyBjdXJWYWx1ZSA9PT0gMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBwYWQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluaXQoKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgICAgIC8vIHN0YXRpYyBsaXN0XG4gICAgICAgIHZhciBub2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAgICAgLmNhbGwobm9kZUxpc3QpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgICAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZnAtb21pdFwiKSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuX2ZsYXRwaWNrciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gRmxhdHBpY2tySW5zdGFuY2Uobm9kZSwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIEhUTUxDb2xsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBicm93c2VyIGVudlxuICAgICAgICBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuZmxhdHBpY2tyID0gTm9kZUxpc3QucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihbdGhpc10sIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdmFyIGZsYXRwaWNrciA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGZsYXRwaWNrci5sMTBucyA9IHtcbiAgICAgICAgZW46IF9fYXNzaWduKHt9LCBlbmdsaXNoKSxcbiAgICAgICAgZGVmYXVsdDogX19hc3NpZ24oe30sIGVuZ2xpc2gpLFxuICAgIH07XG4gICAgZmxhdHBpY2tyLmxvY2FsaXplID0gZnVuY3Rpb24gKGwxMG4pIHtcbiAgICAgICAgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQpLCBsMTBuKTtcbiAgICB9O1xuICAgIGZsYXRwaWNrci5zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLCBjb25maWcpO1xuICAgIH07XG4gICAgZmxhdHBpY2tyLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoe30pO1xuICAgIGZsYXRwaWNrci5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcih7fSk7XG4gICAgZmxhdHBpY2tyLmNvbXBhcmVEYXRlcyA9IGNvbXBhcmVEYXRlcztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBqUXVlcnkuZm4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgalF1ZXJ5LmZuLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY2FtZWxjYXNlXG4gICAgRGF0ZS5wcm90b3R5cGUuZnBfaW5jciA9IGZ1bmN0aW9uIChkYXlzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksIHRoaXMuZ2V0TW9udGgoKSwgdGhpcy5nZXREYXRlKCkgKyAodHlwZW9mIGRheXMgPT09IFwic3RyaW5nXCIgPyBwYXJzZUludChkYXlzLCAxMCkgOiBkYXlzKSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB3aW5kb3cuZmxhdHBpY2tyID0gZmxhdHBpY2tyO1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0cGlja3I7XG5cbn0pKSk7XG4iLCJpZighZ2xvYmFsW1wiQmFzaXNcIl0pIGdsb2JhbFtcIkJhc2lzXCJdID0ge307XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcIkJhc2lzXCJdW1wiQWdHcmlkQ29tcG9uZW50c1wiXSA9IHJlcXVpcmUoXCItIUQ6XFxcXEdpdGh1YlxcXFxCQmpHcmlkRXhXaWRnZXRcXFxcY2xpZW50XFxcXG5vZGVfbW9kdWxlc1xcXFxiYWJlbC1sb2FkZXJcXFxcbGliXFxcXGluZGV4LmpzPz9yZWYtLTQhLlxcXFxiYXNpcy1hZ2dyaWQtY29tcG9uZW50cy5qc1wiKTsiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0Mik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgMGJhZTA1OWUyYjVmZTI2YzViMTAiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4vQ29tcG9uZW50J1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Db21wb25lbnQvaW5kZXguanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlcixcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycywgZ2V0T3duS2V5cywgYmluZCB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRQcm90b3R5cGVPZiB9ID0gT2JqZWN0O1xuXG5sZXQgbWFwU3RvcmU7XG5cbmZ1bmN0aW9uIGdldEJvdW5kU3VwZXIob2JqLCBmbikge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVzaW5nIEBhdXRvYmluZCBvbiAke2ZuLm5hbWV9KCkgcmVxdWlyZXMgV2Vha01hcCBzdXBwb3J0IGR1ZSB0byBpdHMgdXNlIG9mIHN1cGVyLiR7Zm4ubmFtZX0oKVxuICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXlwaGVscHMvY29yZS1kZWNvcmF0b3JzLmpzL2lzc3Vlcy8yMGBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFtYXBTdG9yZSkge1xuICAgICBtYXBTdG9yZSA9IG5ldyBXZWFrTWFwKCk7XG4gIH1cblxuICBpZiAobWFwU3RvcmUuaGFzKG9iaikgPT09IGZhbHNlKSB7XG4gICAgbWFwU3RvcmUuc2V0KG9iaiwgbmV3IFdlYWtNYXAoKSk7XG4gIH1cblxuICBjb25zdCBzdXBlclN0b3JlID0gbWFwU3RvcmUuZ2V0KG9iaik7XG5cbiAgaWYgKHN1cGVyU3RvcmUuaGFzKGZuKSA9PT0gZmFsc2UpIHtcbiAgICBzdXBlclN0b3JlLnNldChmbiwgYmluZChmbiwgb2JqKSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJTdG9yZS5nZXQoZm4pO1xufVxuXG5mdW5jdGlvbiBhdXRvYmluZENsYXNzKGtsYXNzKSB7XG4gIGNvbnN0IGRlc2NzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhrbGFzcy5wcm90b3R5cGUpO1xuICBjb25zdCBrZXlzID0gZ2V0T3duS2V5cyhkZXNjcyk7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgY29uc3QgZGVzYyA9IGRlc2NzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgIT09ICdmdW5jdGlvbicgfHwga2V5ID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBkZWZpbmVQcm9wZXJ0eShrbGFzcy5wcm90b3R5cGUsIGtleSwgYXV0b2JpbmRNZXRob2Qoa2xhc3MucHJvdG90eXBlLCBrZXksIGRlc2MpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRvYmluZE1ldGhvZCh0YXJnZXQsIGtleSwgeyB2YWx1ZTogZm4sIGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSB9KSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEBhdXRvYmluZCBjYW4gb25seSBiZSB1c2VkIG9uIGZ1bmN0aW9ucywgbm90OiAke2ZufWApO1xuICB9XG5cbiAgY29uc3QgeyBjb25zdHJ1Y3RvciB9ID0gdGFyZ2V0O1xuXG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGUsXG5cbiAgICBnZXQoKSB7XG4gICAgICAvLyBDbGFzcy5wcm90b3R5cGUua2V5IGxvb2t1cFxuICAgICAgLy8gU29tZW9uZSBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZSBvbiB3aGljaCBpdCBpc1xuICAgICAgLy8gYWN0dWFsbHkgZGVmaW5lZCBvbiwgaS5lLiBDbGFzcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYXNzLnByb3RvdHlwZS5rZXkgbG9va3VwXG4gICAgICAvLyBTb21lb25lIGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBkaXJlY3RseSBvbiBhIHByb3RvdHlwZSBidXQgaXQgd2FzIGZvdW5kXG4gICAgICAvLyB1cCB0aGUgY2hhaW4sIG5vdCBkZWZpbmVkIGRpcmVjdGx5IG9uIGl0XG4gICAgICAvLyBpLmUuIENsYXNzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShrZXkpID09IGZhbHNlICYmIGtleSBpbiBDbGFzcy5wcm90b3R5cGVcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvciA9PT0gY29uc3RydWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvYm91bmQgbWV0aG9kIGNhbGxpbmcgc3VwZXIuc2FtZU1ldGhvZCgpIHdoaWNoIGlzIGFsc28gYXV0b2JvdW5kIGFuZCBzbyBvbi5cbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9PSBjb25zdHJ1Y3RvciAmJiBrZXkgaW4gdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIGdldEJvdW5kU3VwZXIodGhpcywgZm4pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZEZuID0gYmluZChmbiwgdGhpcyk7XG5cbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAvLyBOT1QgZW51bWVyYWJsZSB3aGVuIGl0J3MgYSBib3VuZCBtZXRob2RcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBib3VuZEZuXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJvdW5kRm47XG4gICAgfSxcbiAgICBzZXQ6IGNyZWF0ZURlZmF1bHRTZXR0ZXIoa2V5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYXV0b2JpbmRDbGFzcyguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXV0b2JpbmRNZXRob2QoLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2JpbmQoLi4uYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZShhcmd1bWVudHMpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGhhbmRsZShhcmdzKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvYXV0b2JpbmQuanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5cbmNvbnN0IEdFTkVSSUNfRlVOQ1RJT05fRVJST1IgPSAne2NoaWxkfSBkb2VzIG5vdCBwcm9wZXJseSBvdmVycmlkZSB7cGFyZW50fSc7XG5jb25zdCBGVU5DVElPTl9SRUdFWFAgPSAvXmZ1bmN0aW9uIChbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVtfJGEtekEtWjAtOVxceEEwLVxcdUZGRkZdKik/KFxcKFteXFwpXSpcXCkpW1xcc1xcU10rJC87XG5cbmNsYXNzIFN5bnRheEVycm9yUmVwb3J0ZXIge1xuICBwYXJlbnRLbGFzcztcbiAgY2hpbGRLbGFzcztcbiAgcGFyZW50RGVzY3JpcHRvcjtcbiAgY2hpbGREZXNjcmlwdG9yO1xuICBcbiAgZ2V0IGtleSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZERlc2NyaXB0b3Iua2V5OyAgXG4gIH1cbiAgXG4gIGdldCBwYXJlbnROb3RhdGlvbigpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYXJlbnRLbGFzcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMucGFyZW50UHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuXG4gIGdldCBjaGlsZE5vdGF0aW9uKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmNoaWxkS2xhc3MuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLmNoaWxkUHJvcGVydHlTaWduYXR1cmV9YDtcbiAgfVxuICBcbiAgZ2V0IHBhcmVudFRvcGljKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUb3BpYyh0aGlzLnBhcmVudERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBnZXQgY2hpbGRUb3BpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VG9waWModGhpcy5jaGlsZERlc2NyaXB0b3IpO1xuICB9XG4gIFxuICBfZ2V0VG9waWMoZGVzY3JpcHRvcikge1xuICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsOyAgXG4gICAgfVxuICAgIFxuICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ2dldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuICAgIH1cbiAgICBcbiAgICBpZiAoJ3NldCcgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iuc2V0O1xuICAgIH1cbiAgfVxuICBcbiAgZ2V0IHBhcmVudFByb3BlcnR5U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYWN0VG9waWNTaWduYXR1cmUodGhpcy5wYXJlbnRUb3BpYyk7IFxuICB9XG4gIFxuICBnZXQgY2hpbGRQcm9wZXJ0eVNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRoaXMuY2hpbGRUb3BpYyk7IFxuICB9XG4gIFxuICBfZXh0cmFjdFRvcGljU2lnbmF0dXJlKHRvcGljKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdG9waWMpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RGdW5jdGlvblNpZ25hdHVyZSh0b3BpYyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5rZXk7XG4gICAgfVxuICB9XG4gIFxuICBfZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlKGZuKSB7XG4gICAgcmV0dXJuIGZuXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgIEZVTkNUSU9OX1JFR0VYUCxcbiAgICAgICAgKG1hdGNoLCBuYW1lID0gdGhpcy5rZXksIHBhcmFtcykgPT4gbmFtZSArIHBhcmFtc1xuICAgICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHBhcmVudEtsYXNzLCBjaGlsZEtsYXNzLCBwYXJlbnREZXNjcmlwdG9yLCBjaGlsZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLnBhcmVudEtsYXNzID0gcGFyZW50S2xhc3M7XG4gICAgdGhpcy5jaGlsZEtsYXNzID0gY2hpbGRLbGFzcztcbiAgICB0aGlzLnBhcmVudERlc2NyaXB0b3IgPSBwYXJlbnREZXNjcmlwdG9yO1xuICAgIHRoaXMuY2hpbGREZXNjcmlwdG9yID0gY2hpbGREZXNjcmlwdG9yO1xuICB9XG4gIFxuICBhc3NlcnQoY29uZGl0aW9uLCBtc2cgPSAnJykge1xuICAgIGlmIChjb25kaXRpb24gIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZXJyb3IoR0VORVJJQ19GVU5DVElPTl9FUlJPUiArIG1zZyk7XG4gICAgfVxuICB9XG4gIFxuICBlcnJvcihtc2cpIHtcbiAgICBtc2cgPSBtc2dcbiAgICAgIC8vIFJlcGxhY2UgbGF6aWx5LCBiZWNhdXNlIHRoZXkgYWN0dWFsbHkgbWlnaHQgbm90XG4gICAgICAvLyBiZSBhdmFpbGFibGUgaW4gYWxsIGNhc2VzXG4gICAgICAucmVwbGFjZSgne3BhcmVudH0nLCBtID0+IHRoaXMucGFyZW50Tm90YXRpb24pXG4gICAgICAucmVwbGFjZSgne2NoaWxkfScsIG0gPT4gdGhpcy5jaGlsZE5vdGF0aW9uKTtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IobXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yVHlwZShkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgcmV0dXJuICdkYXRhJztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdnZXQnKSB8fCBkZXNjcmlwdG9yLmhhc093blByb3BlcnR5KCdzZXQnKSkge1xuICAgIHJldHVybiAnYWNjZXNzb3InO1xuICB9XG5cbiAgLy8gSWYgbm9uZSBvZiB0aGVtIGV4aXN0LCBicm93c2VycyB0cmVhdCBpdCBhc1xuICAvLyBhIGRhdGEgZGVzY3JpcHRvciB3aXRoIGEgdmFsdWUgb2YgYHVuZGVmaW5lZGBcbiAgcmV0dXJuICdkYXRhJztcbn1cblxuZnVuY3Rpb24gY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgcmVwb3J0ZXIuYXNzZXJ0KHBhcmVudC5sZW5ndGggPT09IGNoaWxkLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFZhbHVlVHlwZSA9IHR5cGVvZiBwYXJlbnQudmFsdWU7XG4gIGNvbnN0IGNoaWxkVmFsdWVUeXBlID0gdHlwZW9mIGNoaWxkLnZhbHVlO1xuICBcbiAgaWYgKHBhcmVudFZhbHVlVHlwZSA9PT0gJ3VuZGVmaW5lZCcgJiYgY2hpbGRWYWx1ZVR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gY2xhc3MgcHJvcGVydGllcyBjYW4gYmUgYW55IGV4cHJlc3Npb24sIHdoaWNoIGlzbid0IHJhbiB1bnRpbCB0aGVcbiAgICAvLyB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZCwgc28gd2UgY2FuJ3QgcmVsaWFibHkgZ2V0IHR5cGUgaW5mb3JtYXRpb25cbiAgICAvLyBmb3IgdGhlbSB5ZXQgKHBlciBzcGVjKS4gUGVyaGFwcyB3aGVuIEJhYmVsIGluY2x1ZGVzIGZsb3ctdHlwZSBpbmZvXG4gICAgLy8gaW4gcnVudGltZT8gVHJpZWQgcmVnZXggc29sdXRpb25zLCBidXQgc3VwZXIgaGFja3kgYW5kIG9ubHkgZmVhc2libGVcbiAgICAvLyBvbiBwcmltaXRpdmVzLCB3aGljaCBpcyBjb25mdXNpbmcgZm9yIHVzYWdlLi4uXG4gICAgcmVwb3J0ZXIuZXJyb3IoYGRlc2NyaXB0b3IgdmFsdWVzIGFyZSBib3RoIHVuZGVmaW5lZC4gKGNsYXNzIHByb3BlcnRpZXMgYXJlIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCknYCk7XG4gIH1cbiAgXG4gIGlmIChwYXJlbnRWYWx1ZVR5cGUgIT09IGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY29uc3QgaXNGdW5jdGlvbk92ZXJVbmRlZmluZWQgPSAoY2hpbGRWYWx1ZVR5cGUgPT09ICdmdW5jdGlvbicgJiYgcGFyZW50VmFsdWVUeXBlID09PSB1bmRlZmluZWQpO1xuICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgY2xhc3MgcHJvcGVydGllcywgdGhpc1xuICAgIC8vIHdpbGwgc3RpbGwgaGFuZGxlIG1vcmUgdGhhbiBqdXN0IGZ1bmN0aW9ucywganVzdCBpbiBjYXNlLlxuICAgIC8vIFNoYWRvd2luZyBhbiB1bmRlZmluZWQgdmFsdWUgaXMgYW4gZXJyb3IgaWYgdGhlIGluaGVyaXRlZFxuICAgIC8vIHZhbHVlIHdhcyB1bmRlZmluZWQgKHVzdWFsbHkgYSBjbGFzcyBwcm9wZXJ0eSwgbm90IGEgbWV0aG9kKVxuICAgIGlmIChpc0Z1bmN0aW9uT3ZlclVuZGVmaW5lZCB8fCBwYXJlbnRWYWx1ZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHZhbHVlIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFZhbHVlVHlwZX1cIiwge2NoaWxkfSBpcyBcIiR7Y2hpbGRWYWx1ZVR5cGV9XCJgKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFN3aXRjaCwgaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcgbW9yZSB0eXBlc1xuICBzd2l0Y2ggKGNoaWxkVmFsdWVUeXBlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LnZhbHVlLCBjaGlsZC52YWx1ZSwgcmVwb3J0ZXIpO1xuICAgICAgYnJlYWs7XG4gICAgICBcbiAgICBkZWZhdWx0OlxuICAgICAgcmVwb3J0ZXIuZXJyb3IoYFVuZXhwZWN0ZWQgZXJyb3IuIFBsZWFzZSBmaWxlIGEgYnVnIHdpdGg6IHtwYXJlbnR9IGlzIFwiJHtwYXJlbnRWYWx1ZVR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVmFsdWVUeXBlfVwiYCk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgY29uc3QgcGFyZW50SGFzR2V0dGVyID0gdHlwZW9mIHBhcmVudC5nZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzR2V0dGVyID0gdHlwZW9mIGNoaWxkLmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgcGFyZW50SGFzU2V0dGVyID0gdHlwZW9mIHBhcmVudC5zZXQgPT09ICdmdW5jdGlvbic7XG4gIGNvbnN0IGNoaWxkSGFzU2V0dGVyID0gdHlwZW9mIGNoaWxkLnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgXG4gIGlmIChwYXJlbnRIYXNHZXR0ZXIgfHwgY2hpbGRIYXNHZXR0ZXIpIHtcbiAgICBpZiAoIXBhcmVudEhhc0dldHRlciAmJiBwYXJlbnRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBzZXR0ZXIgYnV0IHtjaGlsZH0gaXMgZ2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghY2hpbGRIYXNHZXR0ZXIgJiYgY2hpbGRIYXNTZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBnZXR0ZXIgYnV0IHtjaGlsZH0gaXMgc2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudC5nZXQsIGNoaWxkLmdldCwgcmVwb3J0ZXIpO1xuICB9XG4gIFxuICBpZiAocGFyZW50SGFzU2V0dGVyIHx8IGNoaWxkSGFzU2V0dGVyKSB7XG4gICAgaWYgKCFwYXJlbnRIYXNTZXR0ZXIgJiYgcGFyZW50SGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgZ2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIHNldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWNoaWxkSGFzU2V0dGVyICYmIGNoaWxkSGFzR2V0dGVyKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihge3BhcmVudH0gaXMgc2V0dGVyIGJ1dCB7Y2hpbGR9IGlzIGdldHRlcmApO1xuICAgIH1cbiAgICBcbiAgICBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQuc2V0LCBjaGlsZC5zZXQsIHJlcG9ydGVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0Rlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKSB7XG4gIGNvbnN0IHBhcmVudFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShwYXJlbnQpO1xuICBjb25zdCBjaGlsZFR5cGUgPSBnZXREZXNjcmlwdG9yVHlwZShjaGlsZCk7XG5cbiAgaWYgKHBhcmVudFR5cGUgIT09IGNoaWxkVHlwZSkge1xuICAgIHJlcG9ydGVyLmVycm9yKGBkZXNjcmlwdG9yIHR5cGVzIGRvIG5vdCBtYXRjaC4ge3BhcmVudH0gaXMgXCIke3BhcmVudFR5cGV9XCIsIHtjaGlsZH0gaXMgXCIke2NoaWxkVHlwZX1cImApO1xuICB9XG5cbiAgc3dpdGNoIChjaGlsZFR5cGUpIHtcbiAgICBjYXNlICdkYXRhJzpcbiAgICAgIGNoZWNrRGF0YURlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYWNjZXNzb3InOlxuICAgICAgY2hlY2tBY2Nlc3NvckRlc2NyaXB0b3JzKHBhcmVudCwgY2hpbGQsIHJlcG9ydGVyKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmNvbnN0IHN1Z2dlc3Rpb25UcmFuc2Zvcm1zID0gW1xuICBrZXkgPT4ga2V5LnRvTG93ZXJDYXNlKCksXG4gIGtleSA9PiBrZXkudG9VcHBlckNhc2UoKSxcbiAga2V5ID0+IGtleSArICdzJyxcbiAga2V5ID0+IGtleS5zbGljZSgwLCAtMSksXG4gIGtleSA9PiBrZXkuc2xpY2UoMSwga2V5Lmxlbmd0aCksXG5dO1xuXG5mdW5jdGlvbiBmaW5kUG9zc2libGVBbHRlcm5hdGl2ZXMoc3VwZXJLbGFzcywga2V5KSB7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gc3VnZ2VzdGlvblRyYW5zZm9ybXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgZm4gPSBzdWdnZXN0aW9uVHJhbnNmb3Jtc1tpXTtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gZm4oa2V5KTtcblxuICAgIGlmIChzdWdnZXN0aW9uIGluIHN1cGVyS2xhc3MpIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci5rZXkgPSBrZXk7XG4gIGNvbnN0IHN1cGVyS2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgY29uc3Qgc3VwZXJEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdXBlcktsYXNzLCBrZXkpO1xuICBjb25zdCByZXBvcnRlciA9IG5ldyBTeW50YXhFcnJvclJlcG9ydGVyKHN1cGVyS2xhc3MsIHRhcmdldCwgc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yKTtcbiAgXG4gIGlmIChzdXBlckRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHN1Z2dlc3RlZEtleSA9IGZpbmRQb3NzaWJsZUFsdGVybmF0aXZlcyhzdXBlcktsYXNzLCBrZXkpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBzdWdnZXN0ZWRLZXkgPyBgXFxuXFxuICBEaWQgeW91IG1lYW4gXCIke3N1Z2dlc3RlZEtleX1cIj9gIDogJyc7XG4gICAgcmVwb3J0ZXIuZXJyb3IoYE5vIGRlc2NyaXB0b3IgbWF0Y2hpbmcge2NoaWxkfSB3YXMgZm91bmQgb24gdGhlIHByb3RvdHlwZSBjaGFpbi4ke3N1Z2dlc3Rpb259YCk7XG4gIH1cbiAgXG4gIGNoZWNrRGVzY3JpcHRvcnMoc3VwZXJEZXNjcmlwdG9yLCBkZXNjcmlwdG9yLCByZXBvcnRlcik7XG4gIFxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3ZlcnJpZGUoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9vdmVycmlkZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih1c2VTb3VyY2VNYXApIHtcblx0dmFyIGxpc3QgPSBbXTtcblxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRcdHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXHRcdFx0aWYoaXRlbVsyXSkge1xuXHRcdFx0XHRyZXR1cm4gXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdH1cblx0XHR9KS5qb2luKFwiXCIpO1xuXHR9O1xuXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcblx0XHRpZih0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG5cdFx0fVxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gbW9kdWxlc1tpXTtcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG5cdFx0XHRcdGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcblx0XHRcdFx0XHRpdGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7XG5cdHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblx0aWYgKCFjc3NNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdH1cblxuXHRpZiAodXNlU291cmNlTWFwICYmIHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIHNvdXJjZU1hcHBpbmcgPSB0b0NvbW1lbnQoY3NzTWFwcGluZyk7XG5cdFx0dmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0XHRcdHJldHVybiAnLyojIHNvdXJjZVVSTD0nICsgY3NzTWFwcGluZy5zb3VyY2VSb290ICsgc291cmNlICsgJyAqLydcblx0XHR9KTtcblxuXHRcdHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuXHR9XG5cblx0cmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn1cblxuLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuZnVuY3Rpb24gdG9Db21tZW50KHNvdXJjZU1hcCkge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSk7XG5cdHZhciBkYXRhID0gJ3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCcgKyBiYXNlNjQ7XG5cblx0cmV0dXJuICcvKiMgJyArIGRhdGEgKyAnICovJztcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qcyIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG59O1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8gKyBcIiBcIiArIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0b3B0aW9ucy5hdHRycy50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGUsIHVwZGF0ZSwgcmVtb3ZlLCByZXN1bHQ7XG5cblx0Ly8gSWYgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gd2FzIGRlZmluZWQsIHJ1biBpdCBvbiB0aGUgY3NzXG5cdGlmIChvcHRpb25zLnRyYW5zZm9ybSAmJiBvYmouY3NzKSB7XG5cdCAgICByZXN1bHQgPSBvcHRpb25zLnRyYW5zZm9ybShvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0TGlrZS5qcyIsImltcG9ydCBsYXp5SW5pdGlhbGl6ZSBmcm9tICcuLi9sYXp5LWluaXRpYWxpemUnO1xuXG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgIGdldE93blByb3BlcnR5TmFtZXMsIGdldE93blByb3BlcnR5U3ltYm9scyB9ID0gT2JqZWN0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjcmlwdG9yKGRlc2MpIHtcbiAgaWYgKCFkZXNjIHx8ICFkZXNjLmhhc093blByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IFsndmFsdWUnLCAnaW5pdGlhbGl6ZXInLCAnZ2V0JywgJ3NldCddO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZGVzYy5oYXNPd25Qcm9wZXJ0eShrZXlzW2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgZW50cnlBcmdzKSB7XG4gIGlmIChpc0Rlc2NyaXB0b3IoZW50cnlBcmdzW2VudHJ5QXJncy5sZW5ndGggLSAxXSkpIHtcbiAgICByZXR1cm4gaGFuZGxlRGVzY3JpcHRvciguLi5lbnRyeUFyZ3MsIFtdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhhbmRsZURlc2NyaXB0b3IoLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgZW50cnlBcmdzKTtcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIE1ldGEge1xuICBAbGF6eUluaXRpYWxpemVcbiAgZGVib3VuY2VUaW1lb3V0SWRzID0ge307XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHRocm90dGxlVGltZW91dElkcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVByZXZpb3VzVGltZXN0YW1wcyA9IHt9O1xuXG4gIEBsYXp5SW5pdGlhbGl6ZVxuICB0aHJvdHRsZVRyYWlsaW5nQXJncyA9IG51bGw7XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHByb2ZpbGVMYXN0UmFuID0gbnVsbDtcbn1cblxuY29uc3QgTUVUQV9LRVkgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJylcbiAgPyBTeW1ib2woJ19fY29yZV9kZWNvcmF0b3JzX18nKVxuICA6ICdfX2NvcmVfZGVjb3JhdG9yc19fJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFGb3Iob2JqKSB7XG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkoTUVUQV9LRVkpID09PSBmYWxzZSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iaiwgTUVUQV9LRVksIHtcbiAgICAgIC8vIERlZmF1bHRzOiBOT1QgZW51bWVyYWJsZSwgY29uZmlndXJhYmxlLCBvciB3cml0YWJsZVxuICAgICAgdmFsdWU6IG5ldyBNZXRhKClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmpbTUVUQV9LRVldO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T3duS2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9sc1xuICAgID8gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpXG4gICAgICAgICAgLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSk7XG4gICAgICB9XG4gICAgOiBnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaikge1xuICBjb25zdCBkZXNjcyA9IHt9O1xuXG4gIGdldE93bktleXMob2JqKS5mb3JFYWNoKFxuICAgIGtleSA9PiAoZGVzY3Nba2V5XSA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkpXG4gICk7XG5cbiAgcmV0dXJuIGRlc2NzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldChuZXdWYWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgLy8gSVMgZW51bWVyYWJsZSB3aGVuIHJlYXNzaWduZWQgYnkgdGhlIG91dHNpZGUgd29yZFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZChmbiwgY29udGV4dCkge1xuICBpZiAoZm4uYmluZCkge1xuICAgIHJldHVybiBmbi5iaW5kKGNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBfX2F1dG9iaW5kX18oKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB3YXJuID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAnb2JqZWN0JyB8fCAhY29uc29sZSB8fCB0eXBlb2YgY29uc29sZS53YXJuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiaW5kKGNvbnNvbGUud2FybiwgY29uc29sZSk7XG4gIH1cbn0pKCk7XG5cbmNvbnN0IHNlZW5EZXByZWNhdGlvbnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbERlcHJlY2F0aW9uKG1zZykge1xuICBpZiAoc2VlbkRlcHJlY2F0aW9uc1ttc2ddICE9PSB0cnVlKSB7XG4gICAgc2VlbkRlcHJlY2F0aW9uc1ttc2ddID0gdHJ1ZTtcbiAgICB3YXJuKCdERVBSRUNBVElPTjogJyArIG1zZyk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL3ByaXZhdGUvdXRpbHMuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19TeW1ib2wuanMiLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXlMaWtlLmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9JbnRlZ2VyKGRpcnR5TnVtYmVyKSB7XG4gIGlmIChkaXJ0eU51bWJlciA9PT0gbnVsbCB8fCBkaXJ0eU51bWJlciA9PT0gdHJ1ZSB8fCBkaXJ0eU51bWJlciA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgcmV0dXJuIG51bWJlciA8IDAgPyBNYXRoLmNlaWwobnVtYmVyKSA6IE1hdGguZmxvb3IobnVtYmVyKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZWRBcmdzKHJlcXVpcmVkLCBhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA8IHJlcXVpcmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihyZXF1aXJlZCArICcgYXJndW1lbnQnICsgKHJlcXVpcmVkID4gMSA/ICdzJyA6ICcnKSArICcgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmdzLmxlbmd0aCArICcgcHJlc2VudCcpO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuU3dpdGNoIGZyb20gJy4vQm9vbGVhblN3aXRjaCdcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuL1RlbXBsYXRlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZW1wbGF0ZVJlbmRlcmVyL2luZGV4LmpzIiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnblZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUFzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuZXhwb3J0IGRlZmF1bHQgZnJlZUdsb2JhbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IG92ZXJSZXN0IGZyb20gJy4vX292ZXJSZXN0LmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcHBseTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNMZW5ndGg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsImltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TGlrZUtleXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XHJcblx0aWYoIW9yaWdpbmFsTW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xyXG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRpZighbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiZXhwb3J0c1wiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHR9KTtcclxuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xyXG5cdH1cclxuXHRyZXR1cm4gbW9kdWxlO1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanMiLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNQcm90b3R5cGUuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICogYFN5bnRheEVycm9yYCwgYFR5cGVFcnJvcmAsIG9yIGBVUklFcnJvcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRXJyb3IoRXJyb3IpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGVycm9yVGFnIHx8IHRhZyA9PSBkb21FeGNUYWcgfHxcbiAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNFcnJvcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNFcnJvci5qcyIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TWFwO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXJyYXlNYXAuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVJbnRlcnBvbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlSW50ZXJwb2xhdGUuanMiLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RvU3RyaW5nLmpzIiwiaW1wb3J0IHsgZGVjb3JhdGUgfSBmcm9tICcuL3ByaXZhdGUvdXRpbHMnO1xuXG5mdW5jdGlvbiBoYW5kbGVEZXNjcmlwdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlYWRvbmx5KC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcmVhZG9ubHkuanMiLCJpbXBvcnQgdHpQYXJzZVRpbWV6b25lIGZyb20gJy4uL19saWIvdHpQYXJzZVRpbWV6b25lJ1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzJ1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUnXG5cbi8qKlxuICogQG5hbWUgdXRjVG9ab25lZFRpbWVcbiAqIEBjYXRlZ29yeSBUaW1lIFpvbmUgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGEgZGF0ZS90aW1lIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIGluIGEgZ2l2ZW4gdGltZSB6b25lIGZyb20gdGhlIFVUQyBkYXRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGEgZGF0ZSBpbnN0YW5jZSB3aXRoIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgaW4gdGhlIHRpbWUgem9uZVxuICogc3BlY2lmaWVkIG9mIHRoZSBVVEMgdGltZSBmcm9tIHRoZSBkYXRlIHByb3ZpZGVkLiBJbiBvdGhlciB3b3Jkcywgd2hlbiB0aGUgbmV3IGRhdGVcbiAqIGlzIGZvcm1hdHRlZCBpdCB3aWxsIHNob3cgdGhlIGVxdWl2YWxlbnQgaG91cnMgaW4gdGhlIHRhcmdldCB0aW1lIHpvbmUgcmVnYXJkbGVzc1xuICogb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgem9uZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHdpdGggdGhlIHJlbGV2YW50IFVUQyB0aW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdGltZVpvbmUgLSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIGVxdWl2YWxlbnQgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBKdW5lIDEwYW0gVVRDIGlzIDZhbSBpbiBOZXcgWW9yayAoLTA0OjAwKVxuICogY29uc3QgcmVzdWx0ID0gdXRjVG9ab25lZFRpbWUoJzIwMTQtMDYtMjVUMTA6MDA6MDAuMDAwWicsICdBbWVyaWNhL05ld19Zb3JrJylcbiAqIC8vPT4gSnVuIDI1IDIwMTQgMDY6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXRjVG9ab25lZFRpbWUoZGlydHlEYXRlLCB0aW1lWm9uZSwgb3B0aW9ucykge1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUsIG9wdGlvbnMpXG5cbiAgLy8gVGhpcyBkYXRlIGhhcyB0aGUgVVRDIHRpbWUgdmFsdWVzIG9mIHRoZSBpbnB1dCBkYXRlIGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lXG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgIGRhdGUuZ2V0VVRDTW9udGgoKSxcbiAgICBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKVxuICApXG4gIC8vIFdlIGp1c3QgbmVlZCB0byBhcHBseSB0aGUgb2Zmc2V0IGluZGljYXRlZCBieSB0aGUgdGltZSB6b25lIHRvIHRoaXMgbG9jYWxpemVkIGRhdGVcbiAgdmFyIG9mZnNldE1pbGxpc2Vjb25kcyA9IHR6UGFyc2VUaW1lem9uZSh0aW1lWm9uZSwgdXRjRGF0ZSlcblxuICByZXR1cm4gb2Zmc2V0TWlsbGlzZWNvbmRzXG4gICAgPyBzdWJNaWxsaXNlY29uZHModXRjRGF0ZSwgb2Zmc2V0TWlsbGlzZWNvbmRzKVxuICAgIDogdXRjRGF0ZVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS91dGNUb1pvbmVkVGltZS9pbmRleC5qcyIsImltcG9ydCB0elRva2VuaXplRGF0ZSBmcm9tICcuLi90elRva2VuaXplRGF0ZS9pbmRleC5qcydcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxuXG52YXIgcGF0dGVybnMgPSB7XG4gIHRpbWV6b25lOiAvKFtaKy1dLiopJC8sXG4gIHRpbWV6b25lWjogL14oWikkLyxcbiAgdGltZXpvbmVISDogL14oWystXSkoXFxkezJ9KSQvLFxuICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSUFOQTogLyhVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLy8gUGFyc2UgdmFyaW91cyB0aW1lIHpvbmUgb2Zmc2V0IGZvcm1hdHMgdG8gYW4gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlKSB7XG4gIHZhciB0b2tlblxuICB2YXIgYWJzb2x1dGVPZmZzZXRcblxuICAvLyBaXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHJldHVybiAwXG4gIH1cblxuICB2YXIgaG91cnNcblxuICAvLyDCsWhoXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISC5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9IGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyDCsWhoOm1tIG9yIMKxaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSEhNTS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICBhYnNvbHV0ZU9mZnNldCA9XG4gICAgICBob3VycyAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0XG4gIH1cblxuICAvLyBJQU5BIHRpbWUgem9uZVxuICB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lSUFOQS5leGVjKHRpbWV6b25lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICAvLyB2YXIgW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciB0b2tlbnMgPSB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lem9uZVN0cmluZylcbiAgICB2YXIgYXNVVEMgPSBEYXRlLlVUQyhcbiAgICAgIHRva2Vuc1swXSxcbiAgICAgIHRva2Vuc1sxXSAtIDEsXG4gICAgICB0b2tlbnNbMl0sXG4gICAgICB0b2tlbnNbM10sXG4gICAgICB0b2tlbnNbNF0sXG4gICAgICB0b2tlbnNbNV1cbiAgICApXG4gICAgdmFyIHRpbWVzdGFtcFdpdGhNc1plcm9lZCA9IGRhdGUuZ2V0VGltZSgpIC0gKGRhdGUuZ2V0VGltZSgpICUgMTAwMClcbiAgICByZXR1cm4gLShhc1VUQyAtIHRpbWVzdGFtcFdpdGhNc1plcm9lZClcbiAgfVxuXG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpIHtcbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elBhcnNlVGltZXpvbmUvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi9FdmVudHNNaXhpbidcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRzTWl4aW5cbmV4cG9ydCB7IHdpdGhFdmVudHNNaXhpbiB9XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRXZlbnRzTWl4aW4vaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuL0RhdGVUaW1lSW5wdXQnXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lSW5wdXRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUlucHV0L2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5FZGl0b3IgZnJvbSAnLi9Cb29sZWFuRWRpdG9yJ1xuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcbmltcG9ydCBCb29sZWFuRmlsdGVyIGZyb20gJy4vQm9vbGVhbkZpbHRlcidcbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL1RleHRFZGl0b3InXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuL1RlbXBsYXRlUmVuZGVyZXInXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5pbXBvcnQgRGF0ZVRpbWVGaWx0ZXIgZnJvbSAnLi9EYXRlVGltZUZpbHRlcidcbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQge1xuICBCb29sZWFuRWRpdG9yLFxuICBCb29sZWFuUmVuZGVyZXIsXG4gIEJvb2xlYW5GaWx0ZXIsXG4gIE51bWJlckVkaXRvcixcbiAgVGV4dEVkaXRvcixcbiAgVGVtcGxhdGVSZW5kZXJlcixcbiAgSW1hZ2VSZW5kZXJlcixcbiAgRGF0ZVRpbWVGaWx0ZXIsXG4gIERhdGVUaW1lRWRpdG9yLFxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5FZGl0b3IgZnJvbSAnLi9Cb29sZWFuRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IEJvb2xlYW5Td2l0Y2ggZnJvbSAnLi4vQm9vbGVhblN3aXRjaCdcblxuLyoqXG4gKiBCb29sZWFucyBFZGl0b3JcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmJvb2xlYW5Vc2VkVHJ1ZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0aGUgZWRpdG9yIGNoYW5nZXMgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZSB0byB0cnVlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiB0aGUgZWRpdG9yIGNoYW5nZXMgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZSB0byBmYWxzZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQm9vbGVhbkVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBCb29sZWFuKHBhcmFtcy5rZXlQcmVzcylcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gQm9vbGVhbihwYXJhbXMuY2hhclByZXNzKVxuICAgIH1cblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdLmNvbmNhdChcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pXG4gICAgKVxuXG4gICAgdGhpcy5fZmFsc2VWYWx1ZSA9IFtdLmNvbmNhdChcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSlcbiAgICApXG5cbiAgICB0aGlzLl9yZXR1cm5UcnVlVmFsdWUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdib29sZWFuVXNlZFRydWVWYWx1ZScsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl90cnVlVmFsdWVbMF1cbiAgICApXG4gICAgdGhpcy5fcmV0dXJuRmFsc2VWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2Jvb2xlYW5Vc2VkRmFsc2VWYWx1ZScsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl9mYWxzZVZhbHVlWzBdXG4gICAgKVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gdGhpcy5fdHJ1ZVZhbHVlLm1hcCh4ID0+IFN0cmluZyh4KSlcbiAgICB0aGlzLl9mYWxzZVZhbHVlID0gdGhpcy5fZmFsc2VWYWx1ZS5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICB0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCA9IHBhcmFtcy5jZWxsU3RhcnRlZEVkaXRcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZShcbiAgICAgIHRoaXMuX3ZhbHVlLFxuICAgICAgdGhpcy5fdHJ1ZVZhbHVlLFxuICAgICAgdGhpcy5fZmFsc2VWYWx1ZVxuICAgIClcblxuICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2godGhpcy5fdmFsdWUsIHN3aXRjaGVyID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKFxuICAgICAgICBzd2l0Y2hlci5pc0NoZWNrZWQoKSxcbiAgICAgICAgdGhpcy5fdHJ1ZVZhbHVlLFxuICAgICAgICB0aGlzLl9mYWxzZVZhbHVlXG4gICAgICApXG4gICAgfSlcbiAgICB0aGlzLl9zd2l0Y2hlci5pbml0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3dpdGNoZXIuZ2V0R3VpKClcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKiBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCBhbmQgbGlzdGVuaW5nIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgdGhpcy5mb2N1c0luKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaW5hbCB2YWx1ZSB0byB0aGUgZ3JpZCwgdGhlIHJlc3VsdCBvZiB0aGUgZWRpdGluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8gdGhpcy5fcmV0dXJuVHJ1ZVZhbHVlIDogdGhpcy5fcmV0dXJuRmFsc2VWYWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgaW5pdGlhbGl6ZWQgYW5kIHJldHVybnMgZmFsc2Ugc28gdGhlIGVkaXRvciBhcHBlYXJzIGluIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGFsd2F5cyBmYWxzZVxuICAgKiovXG4gIGlzUG9wdXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgaW50byB0aGUgY2VsbC5cbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGZvY3VzSW4oKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQoZmFsc2UpXG4gICAgdGhpcy5fc3dpdGNoZXIuZm9jdXMoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgb3V0IG9mIHRoZSBjZWxsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZm9jdXNPdXQoKSB7XG4gICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWUgdGhlIGN1cnJlbnQgY2VsbCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHRydWVWYWx1ZSB0cnVlIHZhbHVlIGFsaWFzXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gZmFsc2VWYWx1ZSBmYWxzZSB2YWx1ZSBhbGlhc1xuICAgKi9cbiAgX2NvbnZlcnRWYWx1ZSh2YWx1ZSwgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWVBc1N0cmluZyA9IFN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiB0cnVlVmFsdWUuaW5kZXhPZih2YWx1ZUFzU3RyaW5nKSA+IC0xXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlQXNTdHJpbmcpID4gLTFcbiAgICAgID8gZmFsc2VcbiAgICAgIDogdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkVkaXRvci9Cb29sZWFuRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogVGhlIGJhc2UgY29tcG9uZW50IGNsYXNzXG4gKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgYWJzdHJhY3QgY2xhc3Mgd2hpY2ggYWxsIGNvbXBvbmVudHMgc2hvdWxkIHVzZVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGh0bWwgZWxlbWVudFxuICAgKlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBfZ3VpID0gbnVsbFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbaW5pdF0gbWV0aG9kYFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIERPTSBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQsIHRoaXMgaXMgd2hhdCB0aGUgZ3JpZCBwdXRzIGludG8gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuIElmIHlvdXIgY3VzdG9tIGNvbXBvbmVudCBuZWVkcyB0byBkb1xuICAgKiBhbnkgcmVzb3VyY2UgY2xlYW5pbmcgdXAsIGRvIGl0IGhlcmUuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIC8vIHBhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSByZXF1aXJlZCBvcHRpb24gdmFsdWVcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBmaW5kIHRoZSBwYXNzZWQgb3B0aW9uJ3MgdmFsdWUgaW4gdGhlIGZvbGxvd2luZyBvcmRlclxuICAgKlxuICAgKiAgMS4gcGFyYW1zXG4gICAqICAyLiBTZWFyY2ggYHBhcmFtcy5jb2xEZWZgXG4gICAqICAzLiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0LkFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbQ09MVU1OX0lEXWAgb3IgYHBhcmFtcy5jb250ZXh0Lm1ldGFbQ09MVU1OX0lEXWBcbiAgICogIDQuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHQuQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ2Agb3IgYHBhcmFtcy5jb250ZXh0Lm1ldGFgXG4gICAqICA1LiBTZWFyY2ggYHBhcmFtcy5jb250ZXh0YFxuICAgKiAgNi4gSWYgbm9uZSBmb3VuZCByZXR1cm4gdGhlIGZhbGxiYWNrXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBvcHRpb25cbiAgICogQHBhcmFtIHtwYXJhbXN9IHBhcmFtcyBhbiBvYmplY3QgdXNlZCB0byBzZWFyY2ggZm9yIHRoZSBvcHRpb25cbiAgICogQHBhcmFtIHtTdHJpbmd9IGZhbGxiYWNrIGEgdmFsdWUgdG8gcmV0dXJuIGluIGNhc2UgdGhlIG9wdGlvbiBjYW4gbm90IGJlIGZvdW5kXG4gICAqL1xuICBnZXRPcHRpb24obmFtZSwgcGFyYW1zLCBmYWxsYmFjayA9IG51bGwpIHtcbiAgICBsZXQgb3B0aW9uXG5cbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBwYXJhbXNbbmFtZV0gIT09IG51bGwpIHtcbiAgICAgIG9wdGlvbiA9IHBhcmFtc1tuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0cnkgdG8gZmV0Y2ggZnJvbSB0aGUgY29sdW1uIGRlZiBmaXJzdFxuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2NvbERlZicpICYmXG4gICAgICAgIHBhcmFtcy5jb2xEZWYuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgcGFyYW1zLmNvbERlZltuYW1lXSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbiA9IHBhcmFtcy5jb2xEZWZbbmFtZV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWd8bWV0YSBpbiB0aGUgY29udGV4dFxuICAgICAgICBsZXQgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyA9IG51bGxcbiAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnY29udGV4dCcpKSB7XG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZyA9XG4gICAgICAgICAgICBwYXJhbXMuY29udGV4dC5BR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnIHx8IHBhcmFtcy5jb250ZXh0Lm1ldGFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwYXJhbXMuY29sdW1uLmNvbElkKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF0uaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW3BhcmFtcy5jb2x1bW4uY29sSWRdW25hbWVdICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIG9wdGlvbiA9IEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF1bbmFtZV1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbbmFtZV0gIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9uID0gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tuYW1lXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdCBpdHNlbGZcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFyYW1zLmNvbnRleHRcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb250ZXh0ICYmXG4gICAgICAgICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgICBjb250ZXh0W25hbWVdICE9PSBudWxsXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvcHRpb24gPSBjb250ZXh0W25hbWVdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRyeSB0byBjaGVjayBwYXJhbXMgaXRzZWxmIG9yIGZhbGxiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgICAgIG9wdGlvbiA9IGZhbGxiYWNrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBvcHRpb24gIT09ICd1bmRlZmluZWQnID8gb3B0aW9uIDogZmFsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2luZG93IEluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgd2luZG93IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge1dpbmRvd31cbiAgICovXG4gIGdldFdpbihwYXJhbXMpIHtcbiAgICBjb25zdCB3aW4gPSB0aGlzLmdldE9wdGlvbignd2luZG93JywgcGFyYW1zKSB8fCB3aW5kb3cgfHwgbnVsbFxuXG4gICAgaWYgKCF3aW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHdpbmRvdycpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkb2N1bWVudCBJbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge3BhcmFtc30gcGFyYW1zIGFuIG9iamVjdCB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIGRvY3VtZW50IGluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxEb2N1bWVudH1cbiAgICovXG4gIGdldERvYyhwYXJhbXMpIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLmdldE9wdGlvbignZG9jdW1lbnQnLCBwYXJhbXMpIHx8IGRvY3VtZW50IHx8IG51bGxcblxuICAgIGlmICghZG9jKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkb2N1bWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0NvbXBvbmVudC9Db21wb25lbnQuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIEJvb2xlYW4gUmVuZGVyZXJcbiAqXG4gKiBTaW1wbGUgdG9nZ2xlIHN3aXRjaCB0byBoYW5kbGUgYm9vbGVhbiB2YWx1ZXNcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuU3dpdGNoIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhblN3aXRjaCBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSBbaW5pdGlhbFZhbHVlID0gZmFsc2VdIHRoZSBkZWZhdWx0IHN0YXRlICwgY2hlY2tlZCBvciB1bmNoZWNrZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyID0gbnVsbF0gYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZFxuICAgKi9cbiAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlID0gZmFsc2UsIGxpc3RlbmVyID0gbnVsbCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldENoZWNrZWQoaW5pdGlhbFZhbHVlKVxuICAgIHRoaXMuc2V0TGlzdGVuZXIobGlzdGVuZXIpXG4gICAgdGhpcy5zZXREaXNhYmxlZChmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX29uQ2xpY2sgPSB0aGlzLl9vbkNsaWNrLmJpbmQodGhpcylcbiAgICB0aGlzLl9vbktleWRvd24gPSB0aGlzLl9vbktleWRvd24uYmluZCh0aGlzKVxuXG4gICAgdGhpcy5fZ3VpID0gdGhpcy5nZXREb2MocGFyYW1zKS5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAtMVxuXG4gICAgdGhpcy5yZW5kZXIoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc3dpdGNoIHNsaWRlciBhbmQgaGlkZGVuIGlucHV0LlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2V0RG9jKHRoaXMuX3BhcmFtcylcblxuICAgIGNvbnN0IGJvb2xTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvb2xTd2l0Y2guY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2gnXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5pZCA9IGBlbC0ke01hdGgucmFuZG9tKCl9YFxuICAgIHRoaXMuX2lucHV0Lm5hbWUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2NoZWNrYm94J1xuICAgIHRoaXMuX2lucHV0LnR5cGUgPSAnY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkKClcbiAgICB0aGlzLl9pbnB1dC5kaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAnMCdcblxuICAgIC8vIGxhYmVsXG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpXG4gICAgbGFiZWwuY2xhc3NOYW1lID0gJ2Jvb2xTd2l0Y2hfX2xhYmVsJ1xuICAgIGxhYmVsLmZvciA9IHRoaXMuX2lucHV0LmlkXG4gICAgbGFiZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c3BhbiBjbGFzcz1cImJvb2xTd2l0Y2hfX2lubmVyXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJib29sU3dpdGNoX19zd2l0Y2hcIj48L3NwYW4+XG4gICAgYFxuXG4gICAgLy8gYXR0YWNoZSBpbnB1dCBhbmQgc2xpZGVyIHRvIGNvbXBvbmVudFxuICAgIGJvb2xTd2l0Y2guYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG4gICAgYm9vbFN3aXRjaC5hcHBlbmRDaGlsZChsYWJlbClcblxuICAgIGJvb2xTd2l0Y2guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKVxuICAgIHRoaXMuX2d1aS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlkb3duKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvb2xTd2l0Y2gpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCBib29sU3dpdGNoID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sU3dpdGNoJylcbiAgICBib29sU3dpdGNoLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGljaylcbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uS2V5ZG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgY29tcG9uZW50XG4gICAqL1xuICBmb2N1cygpIHtcbiAgICB0aGlzLl9ndWkuZm9jdXMoKVxuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3dpdGNoIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAgICovXG4gIHNldExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdGVuZXIgaW5zdGFuY2UgLCBpZlxuICAgKlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbnxudWxsfVxuICAgKi9cbiAgZ2V0TGlzdGVuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3RlbmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0IGNoZWNrZWRcbiAgICpcbiAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSB0cnVlIHRvIGNoZWNrICwgZmFsc2UgdG8gdW5jaGVja1xuICAgKi9cbiAgc2V0Q2hlY2tlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2NoZWNrZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuY2hlY2tlZCA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBpZiBzd2l0Y2ggaXMgY2hlY2tlZFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSAgdHJ1ZSB3aGVuIGNoZWNrZWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGlzQ2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZFxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgY29tcG9uZW50IHN0YXRlXG4gICAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5zZXRDaGVja2VkKCF0aGlzLmlzQ2hlY2tlZCgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkaXNhYmxlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRydWUgdG8gZGlzYWJsZWQgLCBmYWxzZSB0byBlbmFibGVcbiAgICovXG4gIHNldERpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZVxuICAgIGlmICh0aGlzLl9pbnB1dCkge1xuICAgICAgdGhpcy5faW5wdXQuZGlzYWJsZWQgPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgc3dpdGNoIGlzIGRpc2FibGVkXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBkaXNhYmxlZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjbGljayBsaXN0ZW5lciBvZiB0aGUgc3dpdGNoLiBJdCB3aWxsIHRvZ2dsZSB0aGUgc3RhdGUgYW5kIGZpcmUgYW55IHJlZ2lzdGVyZWQgbGlzdGVuZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZSB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQ2xpY2soZSkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdGhpcy50b2dnbGUoKVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBrZXkgbGlzdGVuZXIgb2YgdGhlIHN3aXRjaC4gSXQgd2lsbCB0b2dnbGUgdGhlIHN0YXRlIHVzaW5nIGtleWJvYXJkIGtleXMgKGxlZnQgLCByaWdodCAsIHNwYWNlKVxuICAgKiBhbmQgZmlyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlICB0aGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25LZXlkb3duKGUpIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGUud2hpY2ggfHwgZS5rZXlDb2RlXG5cbiAgICAvLyBzcGFjZVxuICAgIGlmIChrZXkgPT0gMzIpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICAvLyByaWdodFxuICAgIGVsc2UgaWYgKGtleSA9PSAzOSkge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKHRydWUpXG4gICAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXIodGhpcylcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gICAgLy8gbGVmdFxuICAgIGVsc2UgaWYgKGtleSA9PSAzNykge1xuICAgICAgdGhpcy5zZXRDaGVja2VkKGZhbHNlKVxuICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2hcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSwgY3JlYXRlRGVmYXVsdFNldHRlciB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5jb25zdCB7IGRlZmluZVByb3BlcnR5IH0gPSBPYmplY3Q7XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgY29uc3QgeyBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIGluaXRpYWxpemVyLCB2YWx1ZSB9ID0gZGVzY3JpcHRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGUsXG4gICAgZW51bWVyYWJsZSxcblxuICAgIGdldCgpIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiBzb21lb25lIGFjY2Vzc2VzIHRoZVxuICAgICAgLy8gcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIHByb3RvdHlwZVxuICAgICAgaWYgKHRoaXMgPT09IHRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIuY2FsbCh0aGlzKSA6IHZhbHVlO1xuXG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlLFxuICAgICAgICBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHJldFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHNldDogY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhenlJbml0aWFsaXplKC4uLmFyZ3MpIHtcbiAgcmV0dXJuIGRlY29yYXRlKGhhbmRsZURlc2NyaXB0b3IsIGFyZ3MpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvbGF6eS1pbml0aWFsaXplLmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmFnLWNlbGwtaW5saW5lLWVkaXRpbmcgLmJvb2xTd2l0Y2hfX3dyYXBwZXJ7bWFyZ2luOmF1dG8gMTFweH0uYm9vbFN3aXRjaF9fd3JhcHBlcntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7b3V0bGluZTpub25lO3BhZGRpbmctbGVmdDo2cHg7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmJvb2xTd2l0Y2h7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NTVweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5ib29sU3dpdGNoX19jaGVja2JveHtkaXNwbGF5Om5vbmV9LmJvb2xTd2l0Y2hfX2xhYmVse2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpwb2ludGVyO2JvcmRlcjoycHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjIwcHh9LmJvb2xTd2l0Y2hfX2lubmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjAwJTttYXJnaW4tbGVmdDotMTAwJTt0cmFuc2l0aW9uOm1hcmdpbiAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2lubmVyOmJlZm9yZSwuYm9vbFN3aXRjaF9faW5uZXI6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjUwJTtoZWlnaHQ6MTVweDtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6MTVweDtmb250LXNpemU6MTRweDtjb2xvcjp3aGl0ZTtmb250LWZhbWlseTonU2Vnb2UgVUkgU3ltYm9sJywgVHJlYnVjaGV0LCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXdlaWdodDpib2xkO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYm9vbFN3aXRjaF9faW5uZXI6YmVmb3Jle2NvbnRlbnQ6J1xcXFwyNzE0JztwYWRkaW5nLWxlZnQ6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLWFnLWFscGluZS1hY3RpdmUtY29sb3IsICMyMTk2ZjMpKTtjb2xvcjojZmZmZmZmfS5ib29sU3dpdGNoX19pbm5lcjphZnRlcntjb250ZW50OidcXFxcMjcxOCc7cGFkZGluZy1yaWdodDoxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTt0ZXh0LWFsaWduOnJpZ2h0fS5ib29sU3dpdGNoX19zd2l0Y2h7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O21hcmdpbjoxcHg7YmFja2dyb3VuZDojZmZmZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjM1cHg7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6MjBweDt0cmFuc2l0aW9uOmFsbCAwLjNzIGVhc2UtaW4gMHN9LmJvb2xTd2l0Y2hfX2NoZWNrYm94OmNoZWNrZWQrLmJvb2xTd2l0Y2hfX2xhYmVsIC5ib29sU3dpdGNoX19pbm5lcnttYXJnaW4tbGVmdDowfS5ib29sU3dpdGNoX19jaGVja2JveDpjaGVja2VkKy5ib29sU3dpdGNoX19sYWJlbCAuYm9vbFN3aXRjaF9fc3dpdGNoe3JpZ2h0OjBweH1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5SZW5kZXJlciBmcm9tICcuL0Jvb2xlYW5SZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuLi9Cb29sZWFuU3dpdGNoJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBCb29sZWFucyBSZW5kZXJlclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBSZW5kZXJpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVHJ1ZVJlbmRlclZhbHVlKiogIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGB0cnVlYCB2YWx1ZXMuIDxicj4gKipzd2l0Y2gqKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byByZW5kZXIgdHJ1ZSB2YWx1ZXMgYXMgYSBzd2l0Y2ggY29tcG9uZW50ICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSoqIFx0fCBzd2l0Y2ggICAgICBcdHwgVGhlIG9wdGlvbiBjb250cm9scyBob3cgdG8gcmVuZGVyIGBmYWxzZWAgdmFsdWVzLiA8YnI+ICoqc3dpdGNoKiogaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gcmVuZGVyIHRydWUgdmFsdWVzIGFzIGEgc3dpdGNoIGNvbXBvbmVudCBcdHxcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5SZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5SZW5kZXJlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gd2lsbCB0aGlzIGFmZmVjdCBCQmogYnVpID9cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2Jvb2xSZW5kZXJlcidcbiAgICB0aGlzLl9ndWkuc3R5bGUuZm9udEZhbWlseSA9XG4gICAgICAnXCJTZWdvZSBVSSBTeW1ib2xcIixUcmVidWNoZXQsIEFyaWFsLCBzYW5zLXNlcmlmJ1xuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICB0aGlzLnJlZnJlc2gocGFyYW1zLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuX3N3aXRjaGVyKSB7XG4gICAgICB0aGlzLl9zd2l0Y2hlci5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY2VsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJlZnJlc2gocGFyYW1zLCBpc0luaXQpIHtcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgPyBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgOiBwYXJhbXMudmFsdWVcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgICBjb25zdCBib29sZWFuVHJ1ZVJlbmRlclZhbHVlID0gU3RyaW5nKFxuICAgICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblRydWVSZW5kZXJWYWx1ZScsIHBhcmFtcywgJ3N3aXRjaCcpXG4gICAgICApXG4gICAgICBjb25zdCBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSA9IFN0cmluZyhcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVJlbmRlclZhbHVlJywgcGFyYW1zLCAnc3dpdGNoJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGJvb2xlYW5UcnVlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuICAgICAgY29uc3QgYm9vbGVhbkZhbHNlVmFsdWUgPSBbXVxuICAgICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSkpXG4gICAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpXG5cbiAgICAgIC8vIGhhbmRsZSB0cnVlIHZhbHVlc1xuICAgICAgaWYgKGJvb2xlYW5UcnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJvb2xlYW5UcnVlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhblRydWVSZW5kZXJWYWx1ZSA9PT0gJ3N3aXRjaCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZXIgPSB0aGlzLl9nZXRTd2l0Y2hlcihwYXJhbXMpXG4gICAgICAgICAgc3dpdGNoZXIuc2V0Q2hlY2tlZCh0cnVlKVxuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAnJ1xuICAgICAgICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChzd2l0Y2hlci5nZXRHdWkoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gYm9vbGVhblRydWVSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgZmFsc2UgdmFsdWVzXG4gICAgICBlbHNlIGlmIChib29sZWFuRmFsc2VWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUgPT09ICdzd2l0Y2gnXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHN3aXRjaGVyID0gdGhpcy5fZ2V0U3dpdGNoZXIocGFyYW1zKVxuICAgICAgICAgIHN3aXRjaGVyLnNldENoZWNrZWQoZmFsc2UpXG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHN3aXRjaGVyLmdldEd1aSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzd2l0Y2ggaW5zdGFuY2UgaWYgYXZhaWxhYmxlICwgb3IgY3JlYXRlIGl0IG90aGVyd2lzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW5Td2l0Y2h9IHN3aXRjaCBpbnN0YW5jZVxuICAgKi9cbiAgX2dldFN3aXRjaGVyKHBhcmFtcykge1xuICAgIGlmICghdGhpcy5fc3dpdGNoZXIpIHtcbiAgICAgIHRoaXMuX3N3aXRjaGVyID0gbmV3IEJvb2xlYW5Td2l0Y2goKVxuICAgICAgdGhpcy5fc3dpdGNoZXIuc2V0RGlzYWJsZWQodHJ1ZSlcbiAgICAgIHRoaXMuX3N3aXRjaGVyLmluaXQocGFyYW1zKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hlclxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5SZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5SZW5kZXJlci9Cb29sZWFuUmVuZGVyZXIuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkZpbHRlciBmcm9tICcuL0Jvb2xlYW5GaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgdG9UaXRsZUNhc2UgPSBwaHJhc2UgPT4ge1xuICByZXR1cm4gcGhyYXNlXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHN0cmlwSFRNTCA9IGh0bWwgPT4ge1xuICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKVxuICB0bXAuaW5uZXJIVE1MID0gaHRtbFxuICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJydcbn1cblxuLyoqXG4gKiBCb29sZWFucyBGaWx0ZXJcbiAqXG4gKiBIYW5kbGUgYm9vbGVhbiB2YWx1ZXMgRmlsdGVyaW5nXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqYm9vbGVhblVzZWRUcnVlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIHRoZSBmaWx0ZXIgZGlzcGxheXMgdGhlIHRydWUgc3RhdGUgLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqXG4gKiB8ICoqYm9vbGVhblVzZWRGYWxzZVZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IHRoZSB2YWx1ZSB0byB1c2Ugd2hlbiB0aGUgZmlsdGVyIGRpc3BsYXlzIHRoZSBmYWxzZSBzdGF0ZS4gaW4gY2FzZSBpdCBpcyB1bmRlZmluZWQgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGl0ZW0gaW4gKipib29sZWFuRmFsc2VWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVHJ1ZVZhbHVlW10qKiAgICAgICB8IHRydWUoYm9vbCkgIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8ICoqYm9vbGVhbkZhbHNlVmFsdWVbXSoqICAgICAgfCBmYWxzZShib29sKSBcdHwgVGhlIG9wdGlvbnMgZGVzY3JpYmVzIHdoYXQgaXMgY29uc2lkZXJlZCBgZmFsc2VgXG4gKiB8ICoqY2xlYXJCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIENsZWFyIGJ1dHRvbi4gVGhlIENsZWFyIGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSAoZm9ybSkgZGV0YWlscyBvZiB0aGUgZmlsdGVyIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoZSBjb2x1bW4uXG4gKiB8ICoqYXBwbHlCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhbiBBcHBseSBidXR0b24uIElmIHRoZSBBcHBseSBidXR0b24gaXMgcHJlc2VudCwgdGhlbiB0aGUgZmlsdGVyIGlzIG9ubHkgYXBwbGllZCBhZnRlciB0aGUgdXNlciBoaXRzIHRoZSBBcHBseSBidXR0b24uXG4gKiB8ICoqcmVzZXRCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIFJlc2V0IGJ1dHRvbi4gVGhlIFJlc2V0IGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgYW5kIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGF0IGNvbHVtbi5cbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRydWUgLCBmYWxzZSB0cmFuc2xhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbiA9IHt9XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IEJvb2xlYW5GaWx0ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdib29sZWFuRmlsdGVyIGFnLWZpbHRlci1ib2R5LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdldExvY2FsZVRleHRGdW5jKClcbiAgICBjb25zdCBpc0NsZWFyRmlsdGVyID0gdGhpcy5nZXRPcHRpb24oJ2NsZWFyQnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc1Jlc2V0QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ3Jlc2V0QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBpc0FwcGx5QnV0dG9uID0gdGhpcy5nZXRPcHRpb24oJ2FwcGx5QnV0dG9uJywgcGFyYW1zLCBmYWxzZSlcblxuICAgIHRoaXMuX3RydWVWYWx1ZSA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVZhbHVlJywgcGFyYW1zLCBbdHJ1ZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSBbXVxuICAgICAgLmNvbmNhdCh0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlVmFsdWUnLCBwYXJhbXMsIFtmYWxzZV0pKVxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuX3VzZWRUcnVlVmFsdWUgPSBTdHJpbmcoXG4gICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhblVzZWRUcnVlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX3RydWVWYWx1ZVswXSlcbiAgICApXG5cbiAgICB0aGlzLl91c2VkRmFsc2VWYWx1ZSA9IFN0cmluZyhcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVXNlZEZhbHNlVmFsdWUnLCBwYXJhbXMsIHRoaXMuX2ZhbHNlVmFsdWVbMF0pXG4gICAgKVxuXG4gICAgdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHtcbiAgICAgICAgdHJ1ZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuVHJ1ZScsXG4gICAgICAgICAgdG9UaXRsZUNhc2UoU3RyaW5nKHRoaXMuX3VzZWRUcnVlVmFsdWUpKVxuICAgICAgICApLFxuICAgICAgICBmYWxzZTogdHJhbnNsYXRlKFxuICAgICAgICAgICdib29sZWFuRmFsc2UnLFxuICAgICAgICAgIHRvVGl0bGVDYXNlKFN0cmluZyh0aGlzLl91c2VkRmFsc2VWYWx1ZSkpXG4gICAgICAgICksXG4gICAgICAgIHJlc2V0OiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5SZXNldCcsXG4gICAgICAgICAgdHJhbnNsYXRlKCdyZXNldEZpbHRlcicsICdSZXNldCBGaWx0ZXInKVxuICAgICAgICApLFxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuX2ZpbHRlclRleHQgPSBudWxsXG5cbiAgICB0aGlzLl9vblJhZGlvQ2hhbmdlID0gdGhpcy5fb25SYWRpb0NoYW5nZS5iaW5kKHRoaXMsIGlzQXBwbHlCdXR0b24pXG5cbiAgICAvLyBjcmVhdGUgYm9keVxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGJvZHkuY2xhc3NOYW1lID0gJ2Jvb2xlYW5GaWx0ZXJfX2JvZHkgYWctZmlsdGVyLWJvZHknXG4gICAgYm9keS5zdHlsZS5wYWRkaW5nID0gJzVweCAxNXB4J1xuICAgIGJvZHkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzXCI+XG5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCI+ICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItdHJ1ZSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidHJ1ZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwidHJ1ZVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlfTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cblxuXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiPiAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyLWZhbHNlIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmYWxzZS1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiZmFsc2VcIi8+ICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24uZmFsc2V9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIFxuICAgICAgICAgICR7XG4gICAgICAgICAgICAhaXNSZXNldEJ1dHRvblxuICAgICAgICAgICAgICA/IC8qIGh0bWwgKi8gYFxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIj4gICAgICAgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1yZXNldCBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXIgYWctY2hlY2tlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJyZXNldC1pbnB1dCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYm9vbGVhblwiIHZhbHVlPVwiXCIgY2hlY2tlZC8+ICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgPHNwYW4+JHt0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24ucmVzZXR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgfSAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgYFxuXG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGJvZHkpXG5cbiAgICAvLyBjcmVhdGUgYXBwbHkgZmlsdGVyIHBhbmVsXG4gICAgY29uc3QgYXBwbHlGaWx0ZXJQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5jbGFzc05hbWUgPSBgYm9vbGVhbkZpbHRlcl9fYm9keV9fYXBwbHlQYW5lbCBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzJylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblJhZGlvQ2hhbmdlKVxuXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2FwcGx5UGFuZWwnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgc2VsZWN0ZWQgZmlsdGVyIG1hdGNoZXMgdGhlIHBhc3NlZCBjZWxsIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gcGFzcywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBkb2VzRmlsdGVyUGFzcyhwYXJhbXMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXIocGFyYW1zKVxuICAgICAgICA6IHRoaXMuX3BhcmFtcy52YWx1ZUdldHRlcihwYXJhbXMpXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclRleHQgPT09ICd0cnVlJ1xuICAgICAgPyB0aGlzLl90cnVlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMVxuICAgICAgOiB0aGlzLl9mYWxzZVZhbHVlLmluZGV4T2YodmFsdWUpID4gLTFcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYXBwbHlpbmcgYW55IGZpbHRlciBvbiB0aGUgY29sdW1uXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqKi9cbiAgaXNGaWx0ZXJBY3RpdmUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2ZpbHRlclRleHQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gJydcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlsdGVyIHN0YXRlLiBJZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZSwgdGhlbiBzaG91bGQgcmV0dXJuIG51bGwvdW5kZWZpbmVkLlxuICAgKiBUaGUgZ3JpZCBjYWxscyBnZXRNb2RlbCgpIG9uIGFsbCBhY3RpdmUgZmlsdGVycyB3aGVuIGdyaWRBcGkuZ2V0RmlsdGVyTW9kZWwoKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gT2JqZWN0IHwgbnVsbCB0aGUgZmlsdGVyIHN0YXRlXG4gICAqL1xuICBnZXRNb2RlbCgpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWx0ZXJBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbCA9IHsgdmFsdWU6IHRoaXMuX2ZpbHRlclRleHQsIGZpbHRlclR5cGU6ICdib29sZWFuJyB9XG4gICAgcmV0dXJuIG1vZGVsXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4gICAgdGhpcy5fZmlsdGVyVGV4dCA9IG1vZGVsICYmIG1vZGVsLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gbW9kZWwudmFsdWUgOiAnJ1xuXG4gICAgY29uc3QgZmlsdGVyVGV4dEFzU3RyaW5nID0gU3RyaW5nKHRoaXMuX2ZpbHRlclRleHQpXG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keScpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkudmFsdWUgPT0gZmlsdGVyVGV4dEFzU3RyaW5nKSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbHRlciBtb2RlbCBhcyBwbGFpbiBzdHJpbmcgdG8gZGlzcGxheSBpbiB0aGUgZmxvYXRpbmcgZmlsdGVyIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIGdldE1vZGVsQXNTdHJpbmcobW9kZWwpIHtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaXBIVE1MKFxuICAgICAgbW9kZWwudmFsdWUgPT09ICd0cnVlJ1xuICAgICAgICA/IHRoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi50cnVlXG4gICAgICAgIDogdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLmZhbHNlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHknKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykuZm9yRWFjaChpID0+IHtcbiAgICAgIGkuY2hlY2tlZCA9IGZhbHNlXG4gICAgfSlcblxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICB0cnkge1xuICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIHBhc3MgKi9cbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBzZWxlY3Rpb24gY2hhbmdlcyBpbiB0aGUgZmlsdGVyIHJhZGlvIGJ1dHRvbnMgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBmaWx0ZXIgdGV4dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBfb25SYWRpb0NoYW5nZShpc0FwcGx5QnV0dG9uLCBlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5JylcblxuICAgIGlmIChib2R5KSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1ZS1pbnB1dCcpKSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhbHNlLWlucHV0JykpIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QuYWRkKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItdHJ1ZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWZhbHNlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1yZXNldCcpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLyogcGFzcyAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhbHNlID09PSBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHRoZSBidXR0b24gY2xpY2tzIGluIHRoZSBidXR0b25zIHBhbmVsIGFuZCBhcHBseSB0aGUgY2hvc2VuIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGljayhlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcblxuICAgIGlmICh0YXJnZXQubm9kZU5hbWUgPT09ICdCVVRUT04nKSB7XG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncmVzZXQnKSkge1xuICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NsZWFyJykpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5GaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL0Jvb2xlYW5GaWx0ZXIuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo2cHh9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4IDB9LmJvb2xlYW5GaWx0ZXJfX2JvZHlfX2xhYmVscyBsYWJlbCBzcGFue3BhZGRpbmctbGVmdDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBOdW1iZXJFZGl0b3IgZnJvbSAnLi9OdW1iZXJFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKm51bWJlck1pblZhbHVlKiogICB8IHVuZGVmaW5lZCAgICB8IG1pbiBhbGxvd2VkIHZhbHVlXG4gKiB8ICoqbnVtYmVyTWF4VmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbWF4IGFsbG93ZWQgdmFsdWVcbiAqIHwgKipudW1iZXJTdGVwVmFsdWUqKiAgICAgICB8IHVuZGVmaW5lZCAgXHR8IG51bWJlciBvZiBzdGVwIGJ5IGluY3JlbWVudCBvciBkZWNyZW1lbnRcbiAqIHwgKipudW1iZXJNYXNrKiogICAgICAgfCB1bmRlZmluZWQgIFx0fCBhIGJiaiBudW1iZXIgbWFzayB0byB2YWxpZGF0ZSB0aGUgbnVtYmVyIGFnYWluc3RcbiAqIHwqKm51bWJlckdyb3VwaW5nU2VwYXJhdG9yKiogfCAsIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvci4gVGhlIG9wdGlvbnMgaXMgdXNlZCBvbmx5IHdoZW4gKipudW1iZXJNYXNrKiogaXMgZGVmaW5lZCB8XG4gKiB8KipudW1iZXJEZWNpbWFsU2VwYXJhdG9yKiogfCAuIHwgYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yLiBUaGUgb3B0aW9ucyBpcyB1c2VkIG9ubHkgd2hlbiAqKm51bWJlck1hc2sqKiBpcyBkZWZpbmVkICB8XG4gKiB8KipudW1iZXJGb3JjZVRyYWlsaW5nWmVyb3MqKiB8IGZhbHNlIHwgQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIikgcmV0dXJucyAuMTAgaW5zdGVhZCBvZiAuMSAuIFRoZSBvcHRpb25zIGlzIHVzZWQgb25seSB3aGVuICoqbnVtYmVyTWFzayoqIGlzIGRlZmluZWR8XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgTnVtYmVyRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1pblZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKCdudW1iZXJNYXhWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBzdGVwID0gdGhpcy5nZXRPcHRpb24oJ251bWJlclN0ZXBWYWx1ZScsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1hc2snLCBwYXJhbXMpXG5cbiAgICBsZXQgc3RhcnRWYWx1ZVxuXG4gICAgdGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIGxldCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPSAxMTMpIHtcbiAgICAgICAgICAvL0YyXG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgLy8gbWFrZSBwYXJhbXMgaXQgYWNjZXNzaWJsZSBmcm9tIHRhbGwgbWV0aG9kc1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgLy8gY3JlYXRlIHRoZSBpbnB1dCB3cmFwcGVyXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnbnVtYmVyRWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBjcmVhdGUgdGhlIGlucHV0XG4gICAgdGhpcy5faW5wdXRHZW5lcmF0ZWRJZCA9IE1hdGgucmFuZG9tKClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zbGljZSgyLCAxMCkgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID0gJ251bWJlckVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0J1xuICAgIHRoaXMuX2lucHV0LmlkID0gYGVsLSR7dGhpcy5faW5wdXRHZW5lcmF0ZWRJZH1gXG4gICAgdGhpcy5faW5wdXQudHlwZSA9IG1hc2sgPyAndGV4dCcgOiAnbnVtYmVyJ1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgLy8gcGxhY2UgdGhlIGlucHV0IGluc2lkZSB0aGUgd3JhcHBlclxuICAgIHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctaW5wdXQtd3JhcHBlcicpLmFwcGVuZENoaWxkKHRoaXMuX2lucHV0KVxuXG4gICAgaWYgKG1pbiAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0Lm1pbiA9IG1pbikgOiAodGhpcy5faW5wdXQubWluID0gbWluKVxuICAgIH1cblxuICAgIGlmIChtYXggIT09IG51bGwpIHtcbiAgICAgIG1hc2sgPyAodGhpcy5faW5wdXQuZGF0YXNldC5tYXggPSBtYXgpIDogKHRoaXMuX2lucHV0Lm1heCA9IG1heClcbiAgICB9XG5cbiAgICBpZiAoc3RlcCAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0LnN0ZXAgPSBzdGVwKSA6ICh0aGlzLl9pbnB1dC5zdGVwID0gc3RlcClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIG1hc2sgdGhlbiB3ZSB1c2UgdGhlIGBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXRgXG4gICAgaWYgKG1hc2spIHtcbiAgICAgIGNvbnN0IGdyb3VwaW5nU2VwYXJhdG9yID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAgICdudW1iZXJHcm91cGluZ1NlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckdyb3VwU2VwJywgcGFyYW1zKVxuICAgICAgKVxuICAgICAgY29uc3QgZGVjaW1hbFNlcGFyYXRvciA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgICAnbnVtYmVyRGVjaW1hbFNlcGFyYXRvcicsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ251bWJlckRlY2ltYWxTZXAnLCBwYXJhbXMpXG4gICAgICApXG4gICAgICBjb25zdCBmb3JjZVRyYWlsaW5nWmVyb3MgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICAgJ251bWJlckZvcmNlVHJhaWxpbmdaZXJvcycsXG4gICAgICAgIHBhcmFtc1xuICAgICAgKVxuXG4gICAgICBpZiAoZ3JvdXBpbmdTZXBhcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGdyb3VwaW5nU2VwYXJhdG9yXG4gICAgICB9XG5cbiAgICAgIGlmIChkZWNpbWFsU2VwYXJhdG9yICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQuZGVjaW1hbFNlcGFyYXRvciA9IGRlY2ltYWxTZXBhcmF0b3JcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmNlVHJhaWxpbmdaZXJvcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0LmZvcmNlVHJhaWxpbmdaZXJvcyA9IGZvcmNlVHJhaWxpbmdaZXJvc1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXG4gICAgICB0aGlzLl9udW1iZXJJbnB1dCA9IG5ldyBCYXNpcy5JbnB1dE1hc2tpbmcuTnVtYmVySW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgLy8gZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25OdW1iZXJJbnB1dFVwZGF0ZSxcbiAgICAgICAgb25JbnZhbGlkOiB0aGlzLl9vbk51bWJlcklucHV0SW52YWxpZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9vbklucHV0S2V5RG93blVwKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbnVtYmVySW5wdXQuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKlxuICAgKiBNYWtlIHN1cmUgY29udGFpbmVyIGlzIGFsd2F5cyBmb2N1c2VkIHRvIGxpc3RlbiB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZUlucHV0KHRoaXMuX2lucHV0KVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IGNhc3RlZCA9IE51bWJlcih0aGlzLl9jdXJyZW50VmFsdWUpXG4gICAgY29uc3QgcmV0VmFsdWUgPSBpc05hTihjYXN0ZWQpID8gdGhpcy5fY3VycmVudFZhbHVlIDogY2FzdGVkXG4gICAgcmV0dXJuIHRoaXMuX19pc01hc2tlZF9fID8gcmV0VmFsdWUgOiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZShyZXRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgaXMgY2hhbmdlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkNoYW5nZShldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IHZhbHVlIHdoZW4gdGhlIE51bWJlcklucHV0IGNvbXBvbmVudHMgZmlyZSB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge051bWJlcn0gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk51bWJlcklucHV0VXBkYXRlKF9tYXNrZWQsIHVubWFza2VkKSB7XG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gdW5tYXNrZWRcbiAgICB0aGlzLmZvY3VzSW4oKVxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuICAvKipcbiAgICogT24gaW52YWxpZCBpbnB1dHMgLCB1cGRhdGUgdGhlIGlucHV0IHdpdGggYSBjdXN0b20gdmFsaWRpdHkgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGVycm9yIHRoZSBlcnJvciBtZXNzYWdlIHJlcG9ydGVkIGJ5IE51bWJlcklucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25OdW1iZXJJbnB1dEludmFsaWQoZXJyb3IsIGlucHV0KSB7XG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgY2VsbFxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhbGwga2V5Ym9hcmQgZXZlbnRzIHRvIGFsbG93IHZhbHVlIHByb2Nlc3NpbmcgYnkgdGhlIE51bWJlcklucHV0IGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Db21wb25lbnRLZXlEb3duKGUpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPVxuICAgICAga2V5ID09PSAzNyB8fCAvLyBsZWZ0XG4gICAgICBrZXkgPT09IDM4IHx8IC8vIHVwXG4gICAgICBrZXkgPT09IDM5IHx8IC8vIHJpZ2h0XG4gICAgICBrZXkgPT09IDQwIHx8IC8vIGRvd25cbiAgICAgIGtleSA9PT0gMzMgfHwgLy8gcGFnZSB1cFxuICAgICAga2V5ID09PSAzNCB8fCAvLyBwYWdlIGRvd25cbiAgICAgIGtleSA9PT0gMzUgfHwgLy8gcGFnZSBob21lXG4gICAgICBrZXkgPT09IDM2IHx8IC8vIHBhZ2UgZW5kXG4gICAgICBrZXkgPT09IDEzIC8vIGVudGVyXG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjYXB0dXJlIGtleSBzbyBOdW1iZXJJbnB1dCBjYW4gcGFzcyBpdCBhZ2FpbiB0byB0aGUgZ3JpZC5cbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8ga2V5IGNoYW5nZXMgYW5kIHZhbGlkYXRlIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbklucHV0S2V5RG93blVwKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBpZiAoa2V5ID09IDM4IHx8IGtleSA9PSA0MCkge1xuICAgICAgLy8gdG9wIHwgZG93blxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChrZXkgPT0gMTMgfHwga2V5ID09PSA5KSB7XG4gICAgICAvLyBlbnRlclxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5faW5wdXQudmFsdWVcbiAgICB9XG5cbiAgICAvLyB3ZSBwYXNzIHRoZSBsYXN0IGNhcHR1cmVkIGV2ZW50IGJhY2sgdG8gdGhlIGdyaWQgdG8gaGFuZGxlIGl0IGludGVybmFsbHlcbiAgICBpZiAodGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5vbktleURvd24odGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdiYmotbWFzay1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdiYmotbWFzay1zdWNjZXNzJylcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bWJlckVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5udW1iZXJFZGl0b3J7b3ZlcmZsb3c6aGlkZGVufS5udW1iZXJFZGl0b3IgLm51bWJlcklucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Lm51bWJlckVkaXRvciAuYmJqLW1hc2stZXJyb3J7Ym94LXNoYWRvdzowIC0ycHggMCAjZTkxZTYzIGluc2V0fS5udW1iZXJFZGl0b3IgLmJiai1tYXNrLXN1Y2Nlc3N7Ym94LXNoYWRvdzowIC0ycHggMCAjNGNhZjUwIGluc2V0fS5udW1iZXJFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLm51bWJlckVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLm51bWJlckVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5udW1iZXJFZGl0b3JfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9OdW1iZXJFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRleHRFZGl0b3IgZnJvbSAnLi9UZXh0RWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dEVkaXRvci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBUZXh0IEVkaXRvclxuICpcbiAqIEhhbmRsZSB0ZXh0IHZhbHVlcyBFZGl0aW5nXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKip0ZXh0UGF0dGVybioqICAgfCB1bmRlZmluZWQgICAgfCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSBpbnB1dCdzIHZhbHVlIG11c3QgbWF0Y2ggaW4gb3JkZXIgZm9yIHRoZSB2YWx1ZSB0byBwYXNzIGNvbnN0cmFpbnQgdmFsaWRhdGlvblxuICogfCAqKnRleHRSZXF1aXJlZCoqICAgfCB1bmRlZmluZWQgICAgfCBCb29sZWFuLiBBIHZhbHVlIGlzIHJlcXVpcmVkIHRvIGNvbnNpZGVyIHRoZSBpbnB1dCB2YWxpZFxuICogfCAqKnRleHRNYXNrKiogICB8IHVuZGVmaW5lZCAgICB8IEEgYmJqIHN0cmluZyBtYXNrIHRvIHZhbGlkYXRlIHRoZSB2YWx1ZVxuICogfCAqKnRleHRUaXRsZSoqICAgfCBudWxsICAgIHwgVGhlIGlucHV0IHRpdGxlICwgd2hlbiBudWxsIGFuZCB0aGUgKip0ZXh0TWFzayoqIG9wdGlvbnMgaXMgZGVmaW5lZCAsIHRoZW4gd2UgdXNlIHRoZSBtYXNrIGFzIHRpdGxlICwgd2hlbiBzZXQgdG8gYGRlZmF1bHRgIHdlIHRoZSBicm93c2VyJ3MgZGVmYXVsdCB0aXRsZSAsIG90aGVyd2lzZSB0aGUgdmFsdWUgZGVmaW5lZCBpbiB0aGlzIG9wdGlvblxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5nZXRPcHRpb24oJ3RleHRQYXR0ZXJuJywgcGFyYW1zKVxuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5nZXRPcHRpb24oJ3RleHRSZXF1aXJlZCcsIHBhcmFtcylcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRPcHRpb24oJ3RleHRNYXNrJywgcGFyYW1zKVxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRPcHRpb24oJ3RleHRUaXRsZScsIHBhcmFtcylcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICBzdGFydFZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcykge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICd0ZXh0RWRpdG9yIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmNsYXNzTmFtZSA9XG4gICAgICAndGV4dEVkaXRvcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQuaWQgPSBgZWwtJHtNYXRoLnJhbmRvbSgpXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAuc2xpY2UoMiwgMTApfWAgLy8gZ2VuZXJhdGUgcmFuZG9tIGlkXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRpdGxlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSB0aXRsZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQudGl0bGUgPSBtYXNrXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBtYXNrIHRoZW4gd2UgdXNlIHRoZSBgQmFzaXMuSW5wdXRNYXNraW5nLlRleHRJbnB1dGBcbiAgICBpZiAobWFzaykge1xuICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5tYXNrID0gbWFza1xuICAgICAgdGhpcy5fdGV4dElucHV0ID0gbmV3IEJhc2lzLklucHV0TWFza2luZy5UZXh0SW5wdXQoe1xuICAgICAgICBlbGVtZW50czogW3RoaXMuX2lucHV0XSxcbiAgICAgICAgZG9jOiB0aGlzLmdldERvYyhwYXJhbXMpLFxuICAgICAgICBvblVwZGF0ZTogdGhpcy5fb25UZXh0SW5wdXRVcGRhdGUsXG4gICAgICAgIG9uSW52YWxpZDogdGhpcy5fb25UZXh0SW5wdXRJbnZhbGlkLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbkNvbXBvbmVudEtleURvd24pXG5cbiAgICAvLyB1cGRhdGUgYGN1cnJlbnRWYWx1ZWAgdGhlIHZhbHVlIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIG1hbmFnaW5nXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX19pc01hc2tlZF9fID0gbWFzayAmJiBtYXNrLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RleHRJbnB1dC5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodGhpcy5faW5wdXQpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHRoaXMuX2N1cnJlbnRWYWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICB0aGlzLl9pbnB1dC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgdmFsdWUgd2hlbiB0aGUgVGV4dElucHV0IGNvbXBvbmVudCBmaXJlcyB0aGUgdXBkYXRlXG4gICAqIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gX21hc2tlZCAgdGhlIG1hc2tlZCB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdW5tYXNrZWQgIHRoZSB1bm1hc2tlZCB2YWx1ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblRleHRJbnB1dFVwZGF0ZShfbWFza2VkLCB1bm1hc2tlZCwgaW5wdXQpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB1bm1hc2tlZFxuICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKVxuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPbiBpbnZhbGlkIGlucHV0cyAsIHVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgdGhlIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgVGV4dElucHV0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0IFRoZSBpbnB1dCBlbGVtZW50IHVzZWQgaW5zdGFuY2VcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25UZXh0SW5wdXRJbnZhbGlkKGVycm9yLCBpbnB1dCkge1xuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGNlbGxcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9wYXJhbXMudmFsdWVcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYWxsIGtleWJvYXJkIGV2ZW50cyB0byBhbGxvdyB2YWx1ZSBwcm9jZXNzaW5nIGJ5IHRoZSBOdW1iZXJJbnB1dCBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ29tcG9uZW50S2V5RG93bihlKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID1cbiAgICAgIGtleSA9PT0gMzcgfHwgLy8gbGVmdFxuICAgICAga2V5ID09PSAzOCB8fCAvLyB1cFxuICAgICAga2V5ID09PSAzOSB8fCAvLyByaWdodFxuICAgICAga2V5ID09PSA0MCB8fCAvLyBkb3duXG4gICAgICBrZXkgPT09IDMzIHx8IC8vIHBhZ2UgdXBcbiAgICAgIGtleSA9PT0gMzQgfHwgLy8gcGFnZSBkb3duXG4gICAgICBrZXkgPT09IDM1IHx8IC8vIHBhZ2UgaG9tZVxuICAgICAga2V5ID09PSAzNiB8fCAvLyBwYWdlIGVuZFxuICAgICAga2V5ID09PSAxMyAvLyBlbnRlclxuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIC8vIHNhdmUgdGhlIGxhc3QgY2FwdHVyZSBrZXkgc28gTnVtYmVySW5wdXQgY2FuIHBhc3MgaXQgYWdhaW4gdG8gdGhlIGdyaWQuXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGtleSBjaGFuZ2VzIGFuZCB2YWxpZGF0ZSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25JbnB1dEtleURvd25VcChldmVudCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZVxuXG4gICAgaWYgKGtleSA9PSAxMyB8fCBrZXkgPT09IDkpIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cblxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGN1cnJlbnRWYWx1ZWAgb24gdGhlIGlucHV0IHZhbHVlIGlzIGNoYW5nZWQgYW5kIGl0IGlzIHZhbGlkXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi50ZXh0RWRpdG9ye292ZXJmbG93OmhpZGRlbn0udGV4dEVkaXRvciAudGV4dElucHV0TWFza19fd3JhcHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0Om5vcm1hbDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnRleHRFZGl0b3IgLmJiai1tYXNrLWVycm9ye2JveC1zaGFkb3c6MCAtMnB4IDAgI2U5MWU2MyBpbnNldH0udGV4dEVkaXRvciAuYmJqLW1hc2stc3VjY2Vzc3tib3gtc2hhZG93OjAgLTJweCAwICM0Y2FmNTAgaW5zZXR9LnRleHRFZGl0b3JfX2lucHV0e3BhZGRpbmctbGVmdDo2cHg7Ym9yZGVyOnRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSk7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0gLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLnRleHRFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1iYWxoYW0tZGFyayAudGV4dEVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqcmVuZGVyVGVtcGxhdGUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbG9kYXNoIHRlbXBsYXRlXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgVGVtcGxhdGVSZW5kZXJlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgbmV3IFRlbXBsYXRlUmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcblxuICAgIC8vIHdpbGwgdGhpcyBhZmZlY3QgQkJqIGJ1aSA/XG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ3RlbXBsYXRlUmVuZGVyZXIgYWctY2VsbC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS53aWR0aCA9ICcxMDAlJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5oZWlnaHQgPSAnMTAwJSdcbiAgICB0aGlzLl9ndWkuc3R5bGUubGluZUhlaWdodCA9ICdub3JtYWwnXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMucmVmcmVzaChwYXJhbXMsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGNlbGwgbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIGNlbGwgcmVuZGVyZXIgcGFyYW1zXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNJbml0IHRydWUgd2hlbiB0aGlzIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgaW4gYGluaXRgIHBoYXNlICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHJlZnJlc2ggc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgcmVmcmVzaChwYXJhbXMsIGlzSW5pdCkge1xuICAgIGlmIChpc0luaXQpIHtcbiAgICAgIHRoaXMuX2NvbXBpbGVkVGVtcGxhdGUgPSB0ZW1wbGF0ZShcbiAgICAgICAgdGhpcy5nZXRPcHRpb24oJ3JlbmRlclRlbXBsYXRlJywgcGFyYW1zLCAnJylcbiAgICAgIClcbiAgICB9XG5cbiAgICBsZXQgY29udGVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jb21waWxlZFRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY29tcGlsZWRUZW1wbGF0ZSh7IHBhcmFtcyB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gcGFyYW1zLnZhbHVlRm9ybWF0dGVkID8gcGFyYW1zLnZhbHVlRm9ybWF0dGVkIDogcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IGNvbnRlbnRcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RlbXBsYXRlUmVuZGVyZXIvVGVtcGxhdGVSZW5kZXJlci5qcyIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGUuanMiLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gKiB9XG4gKlxuICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluV2l0aDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc01hc2tlZCBmcm9tICcuL19pc01hc2tlZC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9Tb3VyY2UgZnJvbSAnLi9fdG9Tb3VyY2UuanMnO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNOYXRpdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29yZUpzRGF0YS5qcyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9XG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUFzc2lnbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsImltcG9ydCBjb25zdGFudCBmcm9tICcuL2NvbnN0YW50LmpzJztcbmltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tICcuL19kZWZpbmVQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2V0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlU2V0VG9TdHJpbmcuanMiLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uc3RhbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2NvbnN0YW50LmpzIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5c0luLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcmd1bWVudHM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCBzdHViRmFsc2UgZnJvbSAnLi9zdHViRmFsc2UuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQnVmZmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCJpbXBvcnQgYmFzZUlzVHlwZWRBcnJheSBmcm9tICcuL19iYXNlSXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc1R5cGVkQXJyYXk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzVHlwZWRBcnJheS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VVbmFyeTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNFcnJvciBmcm9tICcuL2lzRXJyb3IuanMnO1xuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gKiB2YXIgZWxlbWVudHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICogfSwgJz5fPicpO1xuICpcbiAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gKiAgIGVsZW1lbnRzID0gW107XG4gKiB9XG4gKi9cbnZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXR0ZW1wdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXR0ZW1wdC5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVmFsdWVzLmpzIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduSW5gIHVzZSB0byBhc3NpZ24gcHJvcGVydGllc1xuICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgcmV0dXJuIHNyY1ZhbHVlO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXMgZnJvbSAnLi9fYmFzZUtleXMuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMva2V5cy5qcyIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJpbXBvcnQgZXNjYXBlSHRtbENoYXIgZnJvbSAnLi9fZXNjYXBlSHRtbENoYXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMuICovXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIiddL2csXG4gICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICpcbiAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gKlxuICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAqIHVubGVzcyB0aGV5J3JlIHBhcnQgb2YgYSB0YWcgb3IgdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBTZWVcbiAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gKiBYU1MgdmVjdG9ycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VzY2FwZS5qcyIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZUh0bWxDaGFyLmpzIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlPZjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNTeW1ib2w7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUVzY2FwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgSW1hZ2VSZW5kZXJlciBmcm9tICcuL0ltYWdlUmVuZGVyZXInXG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFRlbXBsYXRlUmVuZGVyZXIgZnJvbSAnLi4vVGVtcGxhdGVSZW5kZXJlcidcblxuLyoqXG4gKiBOdW1iZXJzIEVkaXRvclxuICpcbiAqIEhhbmRsZSBudW1iZXIgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmltYWdlUmVuZGVyZXJXaWR0aCoqICAgfCAyOHB4ICAgIHwgaW1hZ2Ugd2lkdGhcbiAqIHwgKippbWFnZVJlbmRlcmVySGVpZ2h0KiogICB8IDI4cHggICAgfCBpbWFnZSBoZWlnaHRcbiAqIHwgKippbWFnZVJlbmRlcmVyTGlzdCoqICAgICAgIHwge30gIFx0fCBhIGxpc3Qgb2Ygd2hpY2ggbWFwcyBpbWFnZXMgd2l0aCBjZWxsIHZhbHVlcyBhcyBKU09OIG9yIHBsYWluIEpTIG9iamVjdFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKlxuICogQHNlZSBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjE1I3RlbXBsYXRlXG4gKi9cbmNsYXNzIEltYWdlUmVuZGVyZXIgZXh0ZW5kcyBUZW1wbGF0ZVJlbmRlcmVyIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICByZWZyZXNoKHBhcmFtcywgaXNJbml0KSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJXaWR0aCcsIHBhcmFtcywgJzI4cHgnKVxuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJIZWlnaHQnLCBwYXJhbXMsICcyOHB4JylcbiAgICBsZXQgaW1hZ2VMaXN0ID0gdGhpcy5nZXRPcHRpb24oJ2ltYWdlUmVuZGVyZXJMaXN0JywgcGFyYW1zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGltYWdlTGlzdCA9IEpTT04ucGFyc2UoaW1hZ2VMaXN0KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGltYWdlTGlzdCA9IGltYWdlTGlzdCB8fCB7fVxuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuICAgIGlmIChpbWFnZUxpc3QgJiYgaW1hZ2VMaXN0Lmhhc093blByb3BlcnR5KHZhbHVlKSkge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gLypodG1sKi8gYFxuICAgICAgICA8aW1nIFxuICAgICAgICAgIHNyYz1cIiR7aW1hZ2VMaXN0W3BhcmFtcy52YWx1ZV19XCIgXG4gICAgICAgICAgd2lkdGg9XCIke2ltYWdlV2lkdGh9XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2ltYWdlSGVpZ2h0fVwiICBcbiAgICAgICAgLz5cbiAgICAgIGBcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnJlbmRlclRlbXBsYXRlID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIucmVmcmVzaChwYXJhbXMsIGlzSW5pdClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvSW1hZ2VSZW5kZXJlci9JbWFnZVJlbmRlcmVyLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lRmlsdGVyIGZyb20gJy4vRGF0ZVRpbWVGaWx0ZXInXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUsIHJlYWRvbmx5IH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IHsgd2l0aEV2ZW50c01peGluIH0gZnJvbSAnLi4vRXZlbnRzTWl4aW4nXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuLi9EYXRlVGltZUlucHV0J1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuY29uc3QgVE9LRU5TID0ge1xuICBUT0tFTl9FUVVBTDogJ2VxdWFscycsXG4gIFRPS0VOX05PVF9FUVVBTDogJ25vdEVxdWFsJyxcbiAgVE9LRU5fTEVTUzogJ2xlc3NUaGFuJyxcbiAgVE9LRU5fR1JFQVRFUjogJ2dyZWF0ZXJUaGFuJyxcbiAgVE9LRU5fUkFOR0U6ICdpblJhbmdlJyxcbiAgVE9LRU5fQU5EOiAnQU5EJyxcbiAgVE9LRU5fT1I6ICdPUicsXG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIENvbmRpdGlvblBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgb3B0aW9uXG4gICAqIHN0YXRlIGlzIGNoYW5nZWRcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0aWMgT05fQ09ORElUSU9OX0NIQU5HRUQgPSAnQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIHN0YXRlXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGUgPSB7XG4gICAgdHlwZTogVE9LRU5TLlRPS0VOX0VRVUFMLFxuICAgIGZpbHRlcjogbnVsbCxcbiAgICBmaWx0ZXJUbzogbnVsbCxcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7RGF0ZVRpbWVJbnB1dH1cbiAgICovXG4gIF9maWx0ZXJUaW1lSW5wdXQgPSBuZXcgRGF0ZVRpbWVJbnB1dCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dCA9IG5ldyBEYXRlVGltZUlucHV0KClcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZW5hYmxlZCBmaWx0ZXIgdHlwZXNcbiAgICpcbiAgICogQHR5cGUge0FycmF5fVxuICAgKi9cbiAgX2ZpbHRlck9wdGlvbnMgPSBbXVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBlbmFibGVkIGZpbHRlciB0eXBlXG4gICAqXG4gICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAqL1xuICBfZGVmYXVsdE9wdGlvbiA9IC0xXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuXG4gICAgdGhpcy5fZmlsdGVyT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKCdmaWx0ZXJPcHRpb25zJywgcGFyYW1zLCBbXG4gICAgICBUT0tFTlMuVE9LRU5fRVFVQUwsXG4gICAgICBUT0tFTlMuVE9LRU5fTk9UX0VRVUFMLFxuICAgICAgVE9LRU5TLlRPS0VOX0xFU1MsXG4gICAgICBUT0tFTlMuVE9LRU5fR1JFQVRFUixcbiAgICAgIFRPS0VOUy5UT0tFTl9SQU5HRSxcbiAgICBdKVxuXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RlZmF1bHRPcHRpb24nLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5pbmRleE9mKFRPS0VOUy5UT0tFTl9FUVVBTCkgPiAtMVxuICAgICAgICA/IFRPS0VOUy5UT0tFTl9FUVVBTFxuICAgICAgICA6IHRoaXMuX2ZpbHRlck9wdGlvbnNbMF1cbiAgICApXG5cbiAgICB0aGlzLnN0YXRlLnR5cGUgPSB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBvcHRpb25zVHJhbnNsYXRpb25zID0ge1xuICAgICAgW1RPS0VOUy5UT0tFTl9FUVVBTF06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fRVFVQUwsICdFcXVhbHMnKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fTk9UX0VRVUFMXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9FUVVBTCwgJ05vdCBlcXVhbCcpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9MRVNTXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9MRVNTLCAnTGVzcyB0aGFuJyksXG4gICAgICBbVE9LRU5TLlRPS0VOX0dSRUFURVJdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0dSRUFURVIsICdHcmVhdGVyIHRoYW4nKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fUkFOR0VdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX1JBTkdFLCAnSW4gcmFuZ2UnKSxcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnZGF0ZVRpbWVGaWx0ZXIgYWctZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8c2VsZWN0IGNsYXNzPVwiYWctZmlsdGVyLXNlbGVjdCBkYXRlVGltZUZpbHRlcl9fc2VsZWN0XCIgICR7XG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAxID8gJ2Rpc2FibGVkJyA6ICcnXG4gICAgICB9PlxuICAgICAgICAke3RoaXMuX2ZpbHRlck9wdGlvbnMubWFwKFxuICAgICAgICAgIG9wdGlvbiA9PiAvKiBodG1sICovIGBcbiAgICAgICAgICA8b3B0aW9uIFxuICAgICAgICAgICAgdmFsdWU9XCIke29wdGlvbn1cIiBcbiAgICAgICAgICAgICR7b3B0aW9uID09PSB0aGlzLl9kZWZhdWx0T3B0aW9uID8gJ3NlbGVjdGVkJyA6ICcnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtvcHRpb25zVHJhbnNsYXRpb25zW29wdGlvbl19XG4gICAgICAgICAgPC9vcHRpb24+YFxuICAgICAgICApfVxuICAgICAgPC9zZWxlY3Q+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1kYXRlLWZyb21cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItZGF0ZS10byBhZy1oaWRkZW5cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVGltZUlucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzZWxlY3RlZERhdGVcbiAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgIH0pXG5cbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0Lm9uKFxuICAgICAgRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsXG4gICAgICBzZWxlY3RlZERhdGUgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gc2VsZWN0ZWREYXRlXG4gICAgICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItZGF0ZS1mcm9tJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZ2V0R3VpKCkpXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcbiAgICAgIC5hcHBlbmRDaGlsZCh0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG5cbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuX3N0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLm9mZihDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRClcbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQuZGVzdHJveSgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LmRlc3Ryb3koKVxuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vblR5cGVDaGFuZ2UpXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlLmZpbHRlciA9IG51bGxcbiAgICB0aGlzLnN0YXRlLmZpbHRlclRvID0gbnVsbFxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5yZXNldCgpXG4gICAgdGhpcy5fZmlsdGVyVG9EYXRlVGltZUlucHV0LnJlc2V0KClcblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKi9cbiAgc2V0U3RhdGUoc3RhdGUpIHtcbiAgICBzdGF0ZSA9IHN0YXRlIHx8IHt9XG4gICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSBzdGF0ZS5maWx0ZXIgfHwgbnVsbFxuICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBzdGF0ZS5maWx0ZXJUbyB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS50eXBlID0gc3RhdGUudHlwZSB8fCB0aGlzLl9kZWZhdWx0T3B0aW9uXG5cbiAgICBjb25zdCBndWkgPSB0aGlzLl9ndWlcbiAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gdGhpcy5fZmlsdGVyT3B0aW9uc1xuICAgIGNvbnN0IHNlbGVjdEVsID0gZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1maWx0ZXItc2VsZWN0JylcbiAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuX2ZpbHRlclRpbWVJbnB1dFxuICAgIGNvbnN0IGZpbHRlclRvSW5wdXQgPSB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXRcblxuICAgIHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggPSBmaWx0ZXJPcHRpb25zLmluZGV4T2YodGhpcy5zdGF0ZS50eXBlKVxuICAgIGZpbHRlcklucHV0LnNldERhdGUodGhpcy5zdGF0ZS5maWx0ZXIpXG4gICAgZmlsdGVyVG9JbnB1dC5zZXREYXRlKHRoaXMuc3RhdGUuZmlsdGVyVG8pXG5cbiAgICAvLyB3ZSBmaXJlIG9uIGNoYW5nZSBldmVudCBpbiBjYXNlIHRoZSBmaWx0ZXIgb3B0aW9ucyBjb250YWluXG4gICAgLy8gb25lIG9wdGlvbiB3aGljaCBpcyBpbiBSYW5nZSBcImluUmFuZ2VcIlxuICAgIGlmICgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSB7XG4gICAgICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpXG4gICAgICBldnQuaW5pdEV2ZW50KCdjaGFuZ2UnLCBmYWxzZSwgdHJ1ZSlcbiAgICAgIHNlbGVjdEVsLmRpc3BhdGNoRXZlbnQoZXZ0KVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RFbC5maXJlRXZlbnQoJ29uY2hhbmdlJylcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHN0YXRlIHdpdGggdGhlIHNlbGVjdGVkIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblR5cGVDaGFuZ2UoZSkge1xuICAgIGNvbnN0IGVsID0gZS50YXJnZXRcbiAgICBjb25zdCBmaWx0ZXJEYXRlVG8gPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLXRvJylcblxuICAgIHRoaXMuc3RhdGUudHlwZSA9IGVsLm9wdGlvbnNbZWwuc2VsZWN0ZWRJbmRleF0udmFsdWVcblxuICAgIGlmICh0aGlzLnN0YXRlLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgZmlsdGVyRGF0ZVRvLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlckRhdGVUby5jbGFzc0xpc3QuYWRkKCdhZy1oaWRkZW4nKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG59XG5cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIEpvaW5Db25kaXRpb25QYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBDb25zdGFudCB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IG5hbWUgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gdGhlIGpvaW5cbiAgICogc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRpYyBPTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEID1cbiAgICAnSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQnXG4gIC8qKlxuICAgKiBUaGUgam9pbiBzdGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRlID0ge1xuICAgIGNvbmRpdGlvbjE6IHt9LFxuICAgIGNvbmRpdGlvbjI6IHt9LFxuICAgIG9wZXJhdG9yOiBUT0tFTlMuVE9LRU5fT1IsXG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9maXJzdENvbmRpdGlvblBhbmVsID0gbmV3IENvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogQHR5cGUge09wdGlvbn1cbiAgICovXG4gIF9zZWNvbmRDb25kaXRpb25QYW5lbCA9IG5ldyBDb25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vcGVyYXRvclBhbmVsID0gbnVsbFxuXG4gIC8qKlxuICAgKiBQYXJhbXMgcmVjZWl2ZWQgYWZ0ZXIgaW5pdFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IG51bGxcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG5cbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25GaXJzdENvbmRpdGlvbkNoYW5nZWRcbiAgICApXG5cbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5vbihcbiAgICAgIENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgdGhpcy5fb25TZWNvbmRDb25kaXRpb25DaGFuZ2VkXG4gICAgKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYWctZmlsdGVyLWJvZHktd3JhcHBlciBhZy1zaW1wbGUtZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQodGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcblxuICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgY29uc3QgaWRPbmUgPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXG4gICAgICAgICAgaWRUd28gPSAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSlcblxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuY2xhc3NOYW1lID0gJ2FnLWZpbHRlci1jb25kaXRpb24gYWctaGlkZGVuJ1xuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1jb25kaXRpb24tb3BlcmF0b3IgYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvci1hbmQgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1yaWdodCBhZy1yYWRpby1idXR0b24gYWctaW5wdXQtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCIgZm9yPVwiJHtpZE9uZX1cIj4gICAgICAgXG4gICAgICAgICAgJHt0cmFuc2xhdGUoJ2FuZENvbmRpdGlvbicsICdBTkQnKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItYW5kIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlciBhZy1jaGVja2VkXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZE9uZX1cIiBjbGFzcz1cIkFORCBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy1yYWRpby1idXR0b24taW5wdXRcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwib3JBbmRSYWRpb1wiIHZhbHVlPVwiJHtcbiAgICAgIFRPS0VOUy5UT0tFTl9BTkRcbiAgICB9XCIvPiAgICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PiBcbiAgICA8L2Rpdj4gICBcbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvciBhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yLWFuZCBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLXJpZ2h0IGFnLXJhZGlvLWJ1dHRvbiBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIiBmb3I9XCIke2lkVHdvfVwiPiAgICAgICBcbiAgICAgICAgICAke3RyYW5zbGF0ZSgnb3JDb25kaXRpb24nLCAnT1InKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItb3IgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGlkPVwiJHtpZFR3b31cIiBjbGFzcz1cIk9SIGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvckFuZFJhZGlvXCIgdmFsdWU9XCIke1xuICAgICAgVE9LRU5TLlRPS0VOX09SXG4gICAgfVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICA8L2Rpdj4gICAgICAgICBcbiAgICA8L2Rpdj4gICBcbiAgICBgXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX29wZXJhdG9yUGFuZWwpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbk9wZXJhdG9yQ2hhbmdlZClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5nZXRHdWkoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uT3BlcmF0b3JDaGFuZ2VkKVxuICAgIHRoaXMub2ZmKEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VEKVxuICAgIHRoaXMucmVzZXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwucmVzZXQoKVxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29uZGl0aW9uIGpvaW4gc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHN0YXRlID0gc3RhdGUgfHwge31cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gc3RhdGUub3BlcmF0b3IgfHwgVE9LRU5TLlRPS0VOX09SXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24xID0gc3RhdGUuY29uZGl0aW9uMSB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24yID0gc3RhdGUuY29uZGl0aW9uMiB8fCBudWxsXG5cbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLnNldFN0YXRlKHRoaXMuc3RhdGUuY29uZGl0aW9uMSlcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5zZXRTdGF0ZSh0aGlzLnN0YXRlLmNvbmRpdGlvbjIpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYgKGlucHV0LmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnN0YXRlLm9wZXJhdG9yKSkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgc2VsZWN0ZWQgY29uZGl0aW9uIHRvIHRoZSBjb21wb25lbnQgc3RhdGVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25PcGVyYXRvckNoYW5nZWQoZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0XG5cbiAgICB0aGlzLnN0YXRlLm9wZXJhdG9yID0gdGFyZ2V0LnZhbHVlXG5cbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnT1InKSkge1xuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItb3InKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1hbmQnKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wZXJhdG9yUGFuZWxcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLW9yJylcbiAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItYW5kJylcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSAgdGhlIG9wdGlvbiBzdGF0ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkZpcnN0Q29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMSA9IHN0YXRlXG5cbiAgICBjb25zdCBzdXBwcmVzc0FuZE9yQ29uZGl0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnc3VwcHJlc3NBbmRPckNvbmRpdGlvbicsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBmYWxzZVxuICAgIClcblxuICAgIGlmICghc3VwcHJlc3NBbmRPckNvbmRpdGlvbikge1xuICAgICAgY29uc3QgeyBmaWx0ZXIsIGZpbHRlclRvLCB0eXBlIH0gPSB0aGlzLnN0YXRlLmNvbmRpdGlvbjFcbiAgICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkd1aSA9IHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpXG4gICAgICBjb25zdCBvcGVyYXRvclBhbmVsR3VpID0gdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgdHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFID8gIWZpbHRlciB8fCAhZmlsdGVyVG8gOiAhZmlsdGVyXG5cbiAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgc2Vjb25kQ29uZGl0aW9uR3VpLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG4gICAgICAgIG9wZXJhdG9yUGFuZWxHdWkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZENvbmRpdGlvbkd1aS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1oaWRkZW4nKVxuICAgICAgICBvcGVyYXRvclBhbmVsR3VpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlICB0aGUgb3B0aW9uIHN0YXRlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uU2Vjb25kQ29uZGl0aW9uQ2hhbmdlZChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUuY29uZGl0aW9uMiA9IHN0YXRlXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRlVGltZSBGaWx0ZXJcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipkYXRlVGltZUVuYWJsZVRpbWUqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWVcbiAqIHwgKipkYXRlVGltZUVuYWJsZTI0SFIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWUgMjQgZm9ybWF0XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVTZWNvbmRzKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBzZWNvbmRzIG1hbmFnZW1lbnRcbiAqIHwgKipkYXRlVGltZUVuYWJsZUNhbGVuZGFyKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBDYWxlbmRhci5cbiAqIHwgKipkYXRlVGltZU1hc2sqKiAgIHwgZmFsc2UgICAgfCBUaGUgbWFzayB1c2VkIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWF4KiogICB8IHVuZGVmaW5lZCAgICB8ICBNYXggYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNaW4qKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1pbiBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZUZvcm1hdHRlcioqICAgfCB1bmRlZmluZWQgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICogfCAqKmZpbHRlck9wdGlvbnMqKiAgIHwgRXF1YWxzLCBHcmVhdGVyIFRoYW4sIExlc3MgVGhhbiwgTm90IEVxdWFscywgSW4gUmFuZ2UuICAgIHwgIFdoYXQgRmlsdGVyIE9wdGlvbnMgdG8gcHJlc2VudCB0byB0aGUgdXNlci5cbiAqIHwgKipkZWZhdWx0T3B0aW9uKiogICB8IEVxdWFscyAgICB8ICBUaGUgZGVmYXVsdCBGaWx0ZXIgT3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAqIHwgKipzdXBwcmVzc0FuZE9yQ29uZGl0aW9uKiogICB8IGZhbHNlICAgIHwgIElmIHRydWUsIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9mZmVyIENvbmRpdGlvbiAxLlxuICogfCAqKmluUmFuZ2VJbmNsdXNpdmUqKiAgIHwgZmFsc2UgICAgfCAgSWYgdHJ1ZSB0aGVuIGRvaW5nICdpblJhbmdlJyBmaWx0ZXIgb3B0aW9uIHdpbGwgaW5jbHVkZSB2YWx1ZXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHJhbmdlLlxuICogfCAqKmNsZWFyQnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBDbGVhciBidXR0b24uIFRoZSBDbGVhciBidXR0b24gd2lsbCBjbGVhciB0aGUgKGZvcm0pIGRldGFpbHMgb2YgdGhlIGZpbHRlciB3aXRob3V0IHJlbW92aW5nIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGUgY29sdW1uLlxuICogfCAqKmFwcGx5QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYW4gQXBwbHkgYnV0dG9uLiBJZiB0aGUgQXBwbHkgYnV0dG9uIGlzIHByZXNlbnQsIHRoZW4gdGhlIGZpbHRlciBpcyBvbmx5IGFwcGxpZWQgYWZ0ZXIgdGhlIHVzZXIgaGl0cyB0aGUgQXBwbHkgYnV0dG9uLlxuICogfCAqKnJlc2V0QnV0dG9uKiogICB8IGZhbHNlICAgIHwgIFNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGZpbHRlciB1c2UgYSBSZXNldCBidXR0b24uIFRoZSBSZXNldCBidXR0b24gd2lsbCBjbGVhciB0aGUgZGV0YWlscyBvZiB0aGUgZmlsdGVyIGFuZCBhbnkgYWN0aXZlIGZpbHRlcnMgb24gdGhhdCBjb2x1bW4uXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVGaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQHR5cGUge0pvaW59XG4gICAqL1xuICBfSm9pbkNvbmRpdGlvblBhbmVsID0gbmV3IEpvaW5Db25kaXRpb25QYW5lbCgpXG5cbiAgLyoqXG4gICAqIEpvaW4gcGFuZWwgc3RhdGVcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9zdGF0ZSA9IHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwYXJhbXNcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSB7fVxuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgb2YgYWxsIHRoZSByZXF1aXJlZCBvcHRpb25zIGNhY2hlZCBmb3IgZG9lc0ZpbHRlclBhc3MgbWV0aG9kXG4gICAqL1xuICBfZG9lc0ZpbHRlclBhc3NPcHRpb25zID0gbnVsbFxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuICAgIGNvbnN0IGlzQ2xlYXJGaWx0ZXIgPSB0aGlzLmdldE9wdGlvbignY2xlYXJCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzUmVzZXRCdXR0b24gPSB0aGlzLmdldE9wdGlvbigncmVzZXRCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzQXBwbHlCdXR0b24gPSB0aGlzLmdldE9wdGlvbignYXBwbHlCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcblxuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwub24oXG4gICAgICBKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCxcbiAgICAgIHN0YXRlID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHtcbiAgICAgICAgICB0aGlzLl9vbkpvaW5Db25kaXRpb25QYW5lbFN0YXRlQ2hhbmdlZChzdGF0ZSwgaXNBcHBseUJ1dHRvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKCkpXG5cbiAgICBjb25zdCBhcHBseUZpbHRlclBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTmFtZSA9IGBhZy1maWx0ZXItYXBwbHktcGFuZWwgYWctaGlkZGVuYFxuICAgIGFwcGx5RmlsdGVyUGFuZWwuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gY2xlYXIgJHshaXNDbGVhckZpbHRlciAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAnY2xlYXJGaWx0ZXInLFxuICAgICAgJ0NsZWFyIEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIHJlc2V0ICR7IWlzUmVzZXRCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ3Jlc2V0RmlsdGVyJyxcbiAgICAgICdSZXNldCBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBhcHBseSAkeyFpc0FwcGx5QnV0dG9uICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdhcHBseUZpbHRlcicsXG4gICAgICAnQXBwbHkgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgYFxuXG4gICAgaWYgKGlzQ2xlYXJGaWx0ZXIgfHwgaXNSZXNldEJ1dHRvbiB8fCBpc0FwcGx5QnV0dG9uKSB7XG4gICAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMuX0FwcGx5RmlsdGVyUGFuZWxCdXR0b25DbGlja1xuICAgIClcblxuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZChhcHBseUZpbHRlclBhbmVsKVxuXG4gICAgdGhpcy5fc3RhdGUgPSB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuc3RhdGVcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcblxuICAgIHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZVRpbWU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCB0aGlzLl9wYXJhbXMsIHRydWUpLFxuICAgICAgaW5SYW5nZUluY2x1c2l2ZTogdGhpcy5nZXRPcHRpb24oJ2luUmFuZ2VJbmNsdXNpdmUnLCB0aGlzLl9wYXJhbXMsIGZhbHNlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhbHVlR2V0dGVyOiB0aGlzLl9wYXJhbXMuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclZhbHVlR2V0dGVyJylcbiAgICAgICAgPyB0aGlzLl9wYXJhbXMuZmlsdGVyVmFsdWVHZXR0ZXJcbiAgICAgICAgOiB0aGlzLl9wYXJhbXMudmFsdWVHZXR0ZXIsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzZWxlY3RlZCBmaWx0ZXIgbWF0Y2hlcyB0aGUgcGFzc2VkIGNlbGwgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBwYXNzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRvZXNGaWx0ZXJQYXNzKHBhcmFtcykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZG9lc0ZpbHRlclBhc3NPcHRpb25zLnZhbHVlR2V0dGVyKHBhcmFtcylcbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSB0aGlzLl9zdGF0ZVxuICAgIGNvbnN0IGRvZXNQYXNzRmlyc3RDb25kaXRpb24gPSB0aGlzLl9kb2VzUGFzc0NvbmRpdGlvbihjb25kaXRpb24xLCB2YWx1ZSlcbiAgICBjb25zdCBkb2VzUGFzc1NlY29uZENvbmRpdGlvbiA9IHRoaXMuX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbjIsIHZhbHVlKVxuXG4gICAgcmV0dXJuIG9wZXJhdG9yID09PSBUT0tFTlMuVE9LRU5fT1JcbiAgICAgID8gZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiB8fCBkb2VzUGFzc1NlY29uZENvbmRpdGlvblxuICAgICAgOiBkb2VzUGFzc0ZpcnN0Q29uZGl0aW9uICYmIGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFwcGx5aW5nIGFueSBmaWx0ZXIgb24gdGhlIGNvbHVtblxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKiovXG4gIGlzRmlsdGVyQWN0aXZlKCkge1xuICAgIGNvbnN0IHsgY29uZGl0aW9uMSB9ID0gdGhpcy5fc3RhdGVcblxuICAgIGlmIChjb25kaXRpb24xICYmIGNvbmRpdGlvbjEuZmlsdGVyKSB7XG4gICAgICBpZiAoY29uZGl0aW9uMS5maWx0ZXJUbyAmJiBjb25kaXRpb24xLnR5cGUgPT09IFRPS0VOUy5UT0tFTl9SQU5HRSkge1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGwgJiYgY29uZGl0aW9uMS5maWx0ZXJUbyAhPT0gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZGl0aW9uMS5maWx0ZXIgIT09IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaWx0ZXIgc3RhdGUuIElmIGZpbHRlciBpcyBub3QgYWN0aXZlLCB0aGVuIHNob3VsZCByZXR1cm4gbnVsbC91bmRlZmluZWQuXG4gICAqIFRoZSBncmlkIGNhbGxzIGdldE1vZGVsKCkgb24gYWxsIGFjdGl2ZSBmaWx0ZXJzIHdoZW4gZ3JpZEFwaS5nZXRGaWx0ZXJNb2RlbCgpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiBPYmplY3QgfCBudWxsIHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIGdldE1vZGVsKCkge1xuICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9zdGF0ZSkpXG4gICAgO1tjbG9uZS5jb25kaXRpb24xLCBjbG9uZS5jb25kaXRpb24yXS5mb3JFYWNoKChjb25kaXRpb24sIGkpID0+IHtcbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXIgPSB0aGlzLl9zdGF0ZVtgY29uZGl0aW9uJHtpICsgMX1gXS5maWx0ZXIudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSB0aGlzLl9zdGF0ZVtcbiAgICAgICAgICBgY29uZGl0aW9uJHtpICsgMX1gXG4gICAgICAgIF0uZmlsdGVyVG8udG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjbG9uZS5maWx0ZXJUeXBlID0gJ2RhdGV0aW1lJ1xuICAgIGNsb25lLmNvbmRpdGlvbjEuZmlsdGVyVHlwZSA9ICdkYXRldGltZSdcbiAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclR5cGUgPSAnZGF0ZXRpbWUnXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgcmV0dXJuIGNsb25lLmhhc093blByb3BlcnR5KCdjb25kaXRpb24yJykgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGNsb25lLmNvbmRpdGlvbjIuaGFzT3duUHJvcGVydHkoJ2ZpbHRlcicpICYmXG4gICAgICBjbG9uZS5jb25kaXRpb24yLmZpbHRlclxuICAgICAgPyBjbG9uZVxuICAgICAgOiBjbG9uZS5jb25kaXRpb24xXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIGZpbHRlciBzdGF0ZS4gQ2FsbGVkIGJ5IHRoZSBncmlkIGFmdGVyIGdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobW9kZWwpIGlzIGNhbGxlZC5cbiAgICogVGhlIGdyaWQgd2lsbCBwYXNzIHVuZGVmaW5lZC9udWxsIHRvIGNsZWFyIHRoZSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbH0gbW9kZWxcbiAgICovXG4gIHNldE1vZGVsKG1vZGVsKSB7XG4gICAgaWYgKFxuICAgICAgbW9kZWwgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICFtb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZGl0aW9uMScpICYmXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAhbW9kZWwuaGFzT3duUHJvcGVydHkoJ2NvbmRpdGlvbjInKVxuICAgICkge1xuICAgICAgbW9kZWwgPSB7XG4gICAgICAgIGNvbmRpdGlvbjE6IG1vZGVsLFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9fZGlzYWJsZVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSB0cnVlXG4gICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnNldFN0YXRlKG1vZGVsKVxuICAgIHRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IGZhbHNlXG5cbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5zdGF0ZVxuICAgIDtbdGhpcy5fc3RhdGUuY29uZGl0aW9uMSwgdGhpcy5fc3RhdGUuY29uZGl0aW9uMl0uZm9yRWFjaChjb25kaXRpb24gPT4ge1xuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlciA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXIpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IG5ldyBEYXRlKGNvbmRpdGlvbi5maWx0ZXJUbylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsdGVyIG1vZGVsIGFzIHBsYWluIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBmbG9hdGluZyBmaWx0ZXIgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgZ2V0TW9kZWxBc1N0cmluZyhtb2RlbCkge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVUaW1lTWFzayA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RhdGVUaW1lTWFzaycsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICAvLyBAdG9kbyBGaW5kIGEgYmV0dGVyIHdheSBmb3IgdGhpc1xuICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLl9maXJzdENvbmRpdGlvblBhbmVsLl9maWx0ZXJUaW1lSW5wdXQucGlja2VyXG4gICAgICAgIC5jb25maWdbJ2RhdGVGb3JtYXQnXVxuICAgIClcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdkYXRlVGltZUxvY2FsZScsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcbiAgICApXG5cbiAgICBjb25zdCB7IGNvbmRpdGlvbjEsIGNvbmRpdGlvbjIsIG9wZXJhdG9yIH0gPSBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkobW9kZWwpXG4gICAgKVxuXG4gICAgO1tjb25kaXRpb24xLCBjb25kaXRpb24yXS5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlcikge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyID0gQkJqLk1hc2tzLkRhdGVNYXNrLm1hc2soXG4gICAgICAgICAgY29uZGl0aW9uLmZpbHRlcixcbiAgICAgICAgICBkYXRlVGltZU1hc2ssXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXJUbykge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8gPSBCQmouTWFza3MuRGF0ZU1hc2subWFzayhcbiAgICAgICAgICBjb25kaXRpb24uZmlsdGVyVG8sXG4gICAgICAgICAgZGF0ZVRpbWVNYXNrLFxuICAgICAgICAgIGxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGZpcnN0Q29uZGl0aW9uQXNTdHJpbmcgPSBgJHtjb25kaXRpb24xLmZpbHRlciB8fCAnJ30gJHtcbiAgICAgIGNvbmRpdGlvbjEuZmlsdGVyVG8gPyAn4oaSICcgKyBjb25kaXRpb24xLmZpbHRlclRvIDogJydcbiAgICB9YFxuICAgIGNvbnN0IHNlY29uZENvbmRpdGlvbkFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgfHwgJyd9ICR7XG4gICAgICBjb25kaXRpb24yLmZpbHRlclRvID8gJ+KGkiAnICsgY29uZGl0aW9uMi5maWx0ZXJUbyA6ICcnXG4gICAgfWBcbiAgICBjb25zdCBvcGVyYXRvckFzU3RyaW5nID0gYCR7Y29uZGl0aW9uMi5maWx0ZXIgJiYgb3BlcmF0b3IgPyBvcGVyYXRvciA6ICcnfWBcblxuICAgIHJldHVybiBgJHtmaXJzdENvbmRpdGlvbkFzU3RyaW5nfSAke29wZXJhdG9yQXNTdHJpbmd9ICR7c2Vjb25kQ29uZGl0aW9uQXNTdHJpbmd9YC50cmltKClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdmFsdWUgcGFzc2VzIHRoZSBmaWx0ZXIgZGVmaW5lZCBpbiB0aGUgcGFzc2VkIENvbmRpdGlvblBhbmVsJ3Mgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmRpdGlvbiBjb25kaXRpb24gcGFuZWwgc3RhdGVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIGNlbGwgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHBhc3MsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbiwgdmFsdWUpIHtcbiAgICBpZiAoIWNvbmRpdGlvbi5maWx0ZXIgfHwgIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyVG8sIHR5cGUgfSA9IGNvbmRpdGlvblxuICAgIGNvbnN0IHRpbWV6b25lID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmdldFRpbWV6b25lT3JPZmZzZXQoKVxuICAgIGNvbnN0IGluUmFuZ2VJbmNsdXNpdmUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuaW5SYW5nZUluY2x1c2l2ZVxuICAgIGNvbnN0IGVuYWJsZVRpbWUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMuZW5hYmxlVGltZVxuICAgIGxldCBwYXNzZWQgPSBmYWxzZVxuXG4gICAgaWYgKEJCai5NYXNrcy5VdGlscy5EYXRlcy5JU19USU1FX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgICAgO1tmaWx0ZXIsIGZpbHRlclRvXS5mb3JFYWNoKGRhdGUgPT4ge1xuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKDE5NzApXG4gICAgICAgICAgZGF0ZS5zZXRNb250aCgwKVxuICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQkJqLk1hc2tzLlV0aWxzLkRhdGVzLklTX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gQkJqLk1hc2tzLlV0aWxzLkRhdGVzLmZpeFNob3J0SVNPKHZhbHVlKVxuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgdGhlIGRhdGV0aW1lIGZyb20gdXRjIHRvIGxvY2FsZVxuICAgIHZhbHVlID0gdXRjVG9ab25lZFRpbWUodmFsdWUsIHRpbWV6b25lKVxuICAgIC8vIGZpcnN0RGF0ZSA9IGZpcnN0RGF0ZSA/IHpvbmVkVGltZVRvVXRjKGZpcnN0RGF0ZSAsIHRpbWV6b25lKSA6IGZpcnN0RGF0ZVxuICAgIC8vIHNlY29uZERhdGUgPSBzZWNvbmREYXRlID8gem9uZWRUaW1lVG9VdGMoc2Vjb25kRGF0ZSAsIHRpbWV6b25lKSA6IHNlY29uZERhdGVcblxuICAgIGlmICghZW5hYmxlVGltZSkge1xuICAgICAgLy8gcmVtb3ZlIHRoZSB0aW1lIHBvcnRpb24gZnJvbSB0aGUgZGF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgIDtbdmFsdWUsIGZpbHRlciwgZmlsdGVyVG9dLmZvckVhY2goZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGUuc2V0SG91cnMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoMClcbiAgICAgICAgICBkYXRlLnNldFNlY29uZHMoMClcbiAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcygwKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fRVFVQUwpIHtcbiAgICAgIHBhc3NlZCA9IGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX05PVF9FUVVBTCkge1xuICAgICAgcGFzc2VkID0gIShmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fR1JFQVRFUikge1xuICAgICAgcGFzc2VkID0gZmlsdGVyIDwgdmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9MRVNTKSB7XG4gICAgICBwYXNzZWQgPSBmaWx0ZXIgPiB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFICYmIGZpbHRlclRvKSB7XG4gICAgICBpZiAoaW5SYW5nZUluY2x1c2l2ZSkge1xuICAgICAgICBwYXNzZWQgPVxuICAgICAgICAgICgoZmlsdGVyIDwgdmFsdWUgfHxcbiAgICAgICAgICAgIChmaWx0ZXIgPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyIDwgdmFsdWUgPT0gZmFsc2UpKSAmJlxuICAgICAgICAgICAgZmlsdGVyVG8gPiB2YWx1ZSkgfHxcbiAgICAgICAgICAoZmlsdGVyVG8gPiB2YWx1ZSA9PT0gZmFsc2UgJiYgZmlsdGVyVG8gPCB2YWx1ZSA9PSBmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3NlZCA9IGZpbHRlciA8IHZhbHVlICYmIGZpbHRlclRvID4gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFzc2VkXG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byBjbGljayBidXR0b24gZXZlbnQgb24gdGhlIGZpbHRlciBwYW5lbCBhbmQgZXhlY3V0ZSB0aGVcbiAgICogcmlnaHQgYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNldCcpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICAgIHRoaXMuX3BhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKVxuICAgICAgfSBlbHNlIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjbGVhcicpKSB7XG4gICAgICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2FwcGx5JykpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZmlsdGVyIHN0YXRlIGFuZCBBcHBseSB0aGUgZmlsdGVyIGRlcGVuZGluZyBvblxuICAgKiB3aGV0aGVyIHRoZSBgaXNBcHBseUJ1dHRvbkFjdGl2ZWAgaXMgdHJ1ZSBvciBmYWxzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0FwcGx5QnV0dG9uQWN0aXZlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uSm9pbkNvbmRpdGlvblBhbmVsU3RhdGVDaGFuZ2VkKHN0YXRlLCBpc0FwcGx5QnV0dG9uQWN0aXZlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZVxuICAgIGlmIChmYWxzZSA9PT0gaXNBcHBseUJ1dHRvbkFjdGl2ZSkge1xuICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRmlsdGVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvRGF0ZVRpbWVGaWx0ZXIuanMiLCIvKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lWm9uZSkge1xuICB2YXIgZHRmID0gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpXG4gIHJldHVybiBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpXG59XG5cbnZhciB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGhvdXI6IDMsXG4gIG1pbnV0ZTogNCxcbiAgc2Vjb25kOiA1XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSlcbiAgdmFyIGZpbGxlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBvcyA9IHR5cGVUb1Bvc1tmb3JtYXR0ZWRbaV0udHlwZV1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludChmb3JtYXR0ZWRbaV0udmFsdWUsIDEwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkXG59XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csICcnKVxuICB2YXIgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZClcbiAgLy8gdmFyIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZFxuICAvLyByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXVxuICByZXR1cm4gW3BhcnNlZFszXSwgcGFyc2VkWzFdLCBwYXJzZWRbMl0sIHBhcnNlZFs0XSwgcGFyc2VkWzVdLCBwYXJzZWRbNl1dXG59XG5cbi8vIEdldCBhIGNhY2hlZCBJbnRsLkRhdGVUaW1lRm9ybWF0IGluc3RhbmNlIGZvciB0aGUgSUFOQSBgdGltZVpvbmVgLiBUaGlzIGNhbiBiZSB1c2VkXG4vLyB0byBnZXQgZGV0ZXJtaW5pc3RpYyBsb2NhbCBkYXRlL3RpbWUgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgYGVuLVVTYCBsb2NhbGUgd2hpY2hcbi8vIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgbG9jYWwgdGltZSBwYXJ0cyBhcyBuZWNlc3NhcnkuXG52YXIgZHRmQ2FjaGUgPSB7fVxuZnVuY3Rpb24gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAvLyBOZXcgYnJvd3NlcnMgdXNlIGBob3VyQ3ljbGVgLCBJRSBhbmQgQ2hyb21lIDw3MyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB1c2VzIGBob3VyMTJgXG4gICAgdmFyIHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSkuZm9ybWF0KG5ldyBEYXRlKCcyMDE0LTA2LTI1VDA0OjAwOjAwLjEyM1onKSlcbiAgICB2YXIgaG91ckN5Y2xlU3VwcG9ydGVkID1cbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJ+KAjjA24oCOL+KAjjI14oCOL+KAjjIwMTTigI4g4oCOMDDigI464oCOMDDigI464oCOMDAnXG5cbiAgICBkdGZDYWNoZVt0aW1lWm9uZV0gPSBob3VyQ3ljbGVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3RpbWVab25lXVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qcyc7XG5pbXBvcnQgYWRkTWlsbGlzZWNvbmRzIGZyb20gJy4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qcyc7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCAtYW1vdW50KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3N1Yk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanMnO1xuaW1wb3J0IHRvRGF0ZSBmcm9tICcuLi90b0RhdGUvaW5kZXguanMnO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZC4gUG9zaXRpdmUgZGVjaW1hbHMgd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmZsb29yYCwgZGVjaW1hbHMgbGVzcyB0aGFuIHplcm8gd2lsbCBiZSByb3VuZGVkIHVzaW5nIGBNYXRoLmNlaWxgLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRvRGF0ZShkaXJ0eURhdGUpLmdldFRpbWUoKTtcbiAgdmFyIGFtb3VudCA9IHRvSW50ZWdlcihkaXJ0eUFtb3VudCk7XG4gIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyBhbW91bnQpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tICcuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdC5pby9manVsZVwiKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblxuICAgICAgY29uc29sZS53YXJuKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vdG9EYXRlL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICdkYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMnXG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tICdkYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzJ1xuaW1wb3J0IHR6UGFyc2VUaW1lem9uZSBmcm9tICcuLi9fbGliL3R6UGFyc2VUaW1lem9uZSdcblxudmFyIE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMFxudmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMFxudmFyIERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgPSAyXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgZGF0ZVRpbWVEZWxpbWV0ZXI6IC9bVCBdLyxcbiAgcGxhaW5UaW1lOiAvOi8sXG4gIHRpbWVab25lRGVsaW1ldGVyOiAvW1ogXS9pLFxuXG4gIC8vIHllYXIgdG9rZW5zXG4gIFlZOiAvXihcXGR7Mn0pJC8sXG4gIFlZWTogW1xuICAgIC9eKFsrLV1cXGR7Mn0pJC8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezN9KSQvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezR9KSQvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcbiAgWVlZWTogL14oXFxkezR9KS8sXG4gIFlZWVlZOiBbXG4gICAgL14oWystXVxcZHs0fSkvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHs1fSkvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAvXihbKy1dXFxkezZ9KS8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuXG4gIC8vIGRhdGUgdG9rZW5zXG4gIE1NOiAvXi0oXFxkezJ9KSQvLFxuICBEREQ6IC9eLT8oXFxkezN9KSQvLFxuICBNTUREOiAvXi0/KFxcZHsyfSktPyhcXGR7Mn0pJC8sXG4gIFd3dzogL14tP1coXFxkezJ9KSQvLFxuICBXd3dEOiAvXi0/VyhcXGR7Mn0pLT8oXFxkezF9KSQvLFxuXG4gIEhIOiAvXihcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTTogL14oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NU1M6IC9eKFxcZHsyfSk6PyhcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG5cbiAgLy8gdGltZXpvbmUgdG9rZW5zICh0byBpZGVudGlmeSB0aGUgcHJlc2VuY2Ugb2YgYSB0eilcbiAgdGltZXpvbmU6IC8oW1orLV0uKnwgVVRDfCg/OlthLXpBLVpdK1xcL1thLXpBLVpfXSsoPzpcXC9bYS16QS1aX10rKT8pKSQvXG59XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIGFuIGFyZ3VtZW50IGlzIGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gcGFyc2UgaXQuXG4gKiBGdW5jdGlvbiBhY2NlcHRzIGNvbXBsZXRlIElTTyA4NjAxIGZvcm1hdHMgYXMgd2VsbCBhcyBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy5cbiAqIElTTyA4NjAxOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxXG4gKiBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IHBhcnNlIHRoZSBzdHJpbmcgb3IgdGhlIHZhbHVlcyBhcmUgaW52YWxpZCwgaXQgcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKiBBbGwgKmRhdGUtZm5zKiBmdW5jdGlvbnMgd2lsbCB0aHJvdyBgUmFuZ2VFcnJvcmAgaWYgYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgaXMgbm90IDAsIDEsIDIgb3IgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRpbWVab25lPScnXSAtIHVzZWQgdG8gc3BlY2lmeSB0aGUgSUFOQSB0aW1lIHpvbmUgb2Zmc2V0IG9mIGEgZGF0ZSBTdHJpbmcuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJzIwMTQtMDItMTFUMTE6MzA6MzAnIHRvIGRhdGU6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnKzAyMDE0MTAxJywge2FkZGl0aW9uYWxEaWdpdHM6IDF9KVxuICogLy89PiBGcmkgQXByIDExIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBkaXJ0eU9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICcxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgcHJlc2VudCdcbiAgICApXG4gIH1cblxuICBpZiAoYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIG9wdGlvbnMgPSBkaXJ0eU9wdGlvbnMgfHwge31cblxuICB2YXIgYWRkaXRpb25hbERpZ2l0cyA9XG4gICAgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzID09IG51bGxcbiAgICAgID8gREVGQVVMVF9BRERJVElPTkFMX0RJR0lUU1xuICAgICAgOiB0b0ludGVnZXIob3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzKVxuICBpZiAoXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMiAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDEgJiZcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJylcbiAgfVxuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgRGF0ZV0nKVxuICApIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBkYXRlIHRvIGxvc2UgdGhlIG1pbGxpc2Vjb25kcyB3aGVuIHBhc3NlZCB0byBuZXcgRGF0ZSgpIGluIElFMTBcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKVxuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHxcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpXG4gIH0gZWxzZSBpZiAoXG4gICAgIShcbiAgICAgIHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgdmFyIGRhdGVTdHJpbmdzID0gc3BsaXREYXRlU3RyaW5nKGFyZ3VtZW50KVxuXG4gIHZhciBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cylcbiAgdmFyIHllYXIgPSBwYXJzZVllYXJSZXN1bHQueWVhclxuICB2YXIgcmVzdERhdGVTdHJpbmcgPSBwYXJzZVllYXJSZXN1bHQucmVzdERhdGVTdHJpbmdcblxuICB2YXIgZGF0ZSA9IHBhcnNlRGF0ZShyZXN0RGF0ZVN0cmluZywgeWVhcilcblxuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG5cbiAgaWYgKGRhdGUpIHtcbiAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKClcbiAgICB2YXIgdGltZSA9IDBcbiAgICB2YXIgb2Zmc2V0XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZSkge1xuICAgICAgdGltZSA9IHBhcnNlVGltZShkYXRlU3RyaW5ncy50aW1lKVxuXG4gICAgICBpZiAoaXNOYU4odGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgb2Zmc2V0ID0gdHpQYXJzZVRpbWV6b25lKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICAgIG9mZnNldCA9IHR6UGFyc2VUaW1lem9uZShcbiAgICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSxcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBvZmZzZXQgYWNjdXJhdGUgdG8gaG91ciBpbiB0aW1lem9uZXMgdGhhdCBjaGFuZ2Ugb2Zmc2V0XG4gICAgICBvZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKVxuICAgICAgb2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhcbiAgICAgICAgbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgdGltZSArIG9mZnNldClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNwbGl0RGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gIHZhciBkYXRlU3RyaW5ncyA9IHt9XG4gIHZhciBhcnJheSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMuZGF0ZVRpbWVEZWxpbWV0ZXIpXG4gIHZhciB0aW1lU3RyaW5nXG5cbiAgaWYgKHBhdHRlcm5zLnBsYWluVGltZS50ZXN0KGFycmF5WzBdKSkge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBudWxsXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzBdXG4gIH0gZWxzZSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGFycmF5WzBdXG4gICAgdGltZVN0cmluZyA9IGFycmF5WzFdXG4gICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSBhcnJheVsyXVxuICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7XG4gICAgICBkYXRlU3RyaW5ncy5kYXRlID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy50aW1lWm9uZURlbGltZXRlcilbMF1cbiAgICAgIHRpbWVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cihkYXRlU3RyaW5ncy5kYXRlLmxlbmd0aCwgZGF0ZVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICB2YXIgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZS5leGVjKHRpbWVTdHJpbmcpXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZy5yZXBsYWNlKHRva2VuWzFdLCAnJylcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gdG9rZW5bMV1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0ZVN0cmluZ3Ncbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGRhdGVTdHJpbmcsIGFkZGl0aW9uYWxEaWdpdHMpIHtcbiAgdmFyIHBhdHRlcm5ZWVkgPSBwYXR0ZXJucy5ZWVlbYWRkaXRpb25hbERpZ2l0c11cbiAgdmFyIHBhdHRlcm5ZWVlZWSA9IHBhdHRlcm5zLllZWVlZW2FkZGl0aW9uYWxEaWdpdHNdXG5cbiAgdmFyIHRva2VuXG5cbiAgLy8gWVlZWSBvciDCsVlZWVlZXG4gIHRva2VuID0gcGF0dGVybnMuWVlZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVlZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciB5ZWFyU3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoeWVhclN0cmluZywgMTApLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoeWVhclN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gWVkgb3IgwrFZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVkuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB2YXIgY2VudHVyeVN0cmluZyA9IHRva2VuWzFdXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXI6IHBhcnNlSW50KGNlbnR1cnlTdHJpbmcsIDEwKSAqIDEwMCxcbiAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKGNlbnR1cnlTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIHJldHVybiB7XG4gICAgeWVhcjogbnVsbFxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0ZShkYXRlU3RyaW5nLCB5ZWFyKSB7XG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gIGlmICh5ZWFyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhciB0b2tlblxuICB2YXIgZGF0ZVxuICB2YXIgbW9udGhcbiAgdmFyIHdlZWtcblxuICAvLyBZWVlZXG4gIGlmIChkYXRlU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1NTVxuICB0b2tlbiA9IHBhdHRlcm5zLk1NLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktREREIG9yIFlZWVlERERcbiAgdG9rZW4gPSBwYXR0ZXJucy5EREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICB2YXIgZGF5T2ZZZWFyID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGRheU9mWWVhcilcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8geXl5eS1NTS1kZCBvciBZWVlZTU1ERFxuICB0b2tlbiA9IHBhdHRlcm5zLk1NREQuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheSA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXkpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgbW9udGgsIGRheSlcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1Xd3cgb3IgWVlZWVd3d1xuICB0b2tlbiA9IHBhdHRlcm5zLld3dy5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWspXG4gIH1cblxuICAvLyBZWVlZLVd3dy1EIG9yIFlZWVlXd3dEXG4gIHRva2VuID0gcGF0dGVybnMuV3d3RC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHdlZWsgPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuICAgIHZhciBkYXlPZldlZWsgPSBwYXJzZUludCh0b2tlblsyXSwgMTApIC0gMVxuXG4gICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheU9mV2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaywgZGF5T2ZXZWVrKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIGRhdGVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWVTdHJpbmcpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBob3Vyc1xuICB2YXIgbWludXRlc1xuXG4gIC8vIGhoXG4gIHRva2VuID0gcGF0dGVybnMuSEguZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlRmxvYXQodG9rZW5bMV0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVJcbiAgfVxuXG4gIC8vIGhoOm1tIG9yIGhobW1cbiAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlRmxvYXQodG9rZW5bMl0ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIClcbiAgfVxuXG4gIC8vIGhoOm1tOnNzIG9yIGhobW1zc1xuICB0b2tlbiA9IHBhdHRlcm5zLkhITU1TUy5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuICAgIG1pbnV0ZXMgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG4gICAgdmFyIHNlY29uZHMgPSBwYXJzZUZsb2F0KHRva2VuWzNdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICtcbiAgICAgIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICtcbiAgICAgIHNlY29uZHMgKiAxMDAwXG4gICAgKVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7XG4gIHdlZWsgPSB3ZWVrIHx8IDBcbiAgZGF5ID0gZGF5IHx8IDBcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KVxuICB2YXIgZm91cnRoT2ZKYW51YXJ5RGF5ID0gZGF0ZS5nZXRVVENEYXkoKSB8fCA3XG4gIHZhciBkaWZmID0gd2VlayAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpXG4gIHJldHVybiBkYXRlXG59XG5cbi8vIFZhbGlkYXRpb24gZnVuY3Rpb25zXG5cbnZhciBEQVlTX0lOX01PTlRIID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG52YXIgREFZU19JTl9NT05USF9MRUFQX1lFQVIgPSBbMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cblxuZnVuY3Rpb24gaXNMZWFwWWVhckluZGV4KHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkge1xuICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gICAgaWYgKGlzTGVhcFllYXIgJiYgZGF0ZSA+IERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmICghaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USFttb250aF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHtcbiAgaWYgKGRheU9mWWVhciA8IDEpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpXG4gIGlmIChpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2Nikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5KSB7XG4gIGlmICh3ZWVrIDwgMCB8fCB3ZWVrID4gNTIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChkYXkgIT0gbnVsbCAmJiAoZGF5IDwgMCB8fCBkYXkgPiA2KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gIGlmIChob3VycyAhPSBudWxsICYmIChob3VycyA8IDAgfHwgaG91cnMgPj0gMjUpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHNlY29uZHMgIT0gbnVsbCAmJiAoc2Vjb25kcyA8IDAgfHwgc2Vjb25kcyA+PSA2MCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3RvRGF0ZS9pbmRleC5qcyIsInZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDA7XG5cbmZ1bmN0aW9uIGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURTtcbn1cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgaGFzTmVnYXRpdmVVVENPZmZzZXQgPSBiYXNlVGltZXpvbmVPZmZzZXQgPiAwO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBoYXNOZWdhdGl2ZVVUQ09mZnNldCA/IChNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkpICUgTUlMTElTRUNPTkRTX0lOX01JTlVURSA6IGdldERhdGVNaWxsaXNlY29uZHNQYXJ0KGRhdGUpO1xuICByZXR1cm4gYmFzZVRpbWV6b25lT2Zmc2V0ICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArIG1pbGxpc2Vjb25kc1BhcnRPZlRpbWV6b25lT2Zmc2V0O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5cbi8qKlxuICogRXZlbnRzIE1peGluXG4gKlxuICogQWxsb3cgY2xhc3NlcyB0byBoYXZlIHRoZWlyIG93biBldmVudHMgbWFuYWdlclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jb25zdCBFdmVudHNNaXhpbiA9IHN1cGVyQ2xhc3MgPT5cbiAgY2xhc3MgZXh0ZW5kcyBzdXBlckNsYXNzIHtcbiAgICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcmVnaXN0ZXJzIGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIF9faGFuZGxlcnMgPSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgaGFuZGxlciBmdW5jdGlvblxuICAgICAqL1xuICAgIG9uKG5hbWUsIGhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX19oYW5kbGVyc1tuYW1lXSA9IHRoaXMuX19oYW5kbGVyc1tuYW1lXSB8fCBbXVxuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlclxuICAgICAqXG4gICAgICogKipOb3RlIDoqKiBpZiBoYW5kbGVyIGlzIG5vdCBwcm92aWRlZCB0aGVuIGFsbCByZWdpc3RlcmVkIGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBldmVudCB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIGhhbmRsZXIgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBvZmYobmFtZSwgaGFuZGxlcikge1xuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdID0gdGhpcy5fX2hhbmRsZXJzW25hbWVdIHx8IFtdXG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX19oYW5kbGVyc1tuYW1lXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCByZWdpc3RlcmVkSGFuZGxlciBpbiB0aGlzLl9faGFuZGxlcnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnMuaGFzT3duUHJvcGVydHkocmVnaXN0ZXJlZEhhbmRsZXIpICYmXG4gICAgICAgICAgICB0aGlzLl9faGFuZGxlcnNbcmVnaXN0ZXJlZEhhbmRsZXJdID09PSBoYW5kbGVyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fX2hhbmRsZXJzW25hbWVdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZ5IGhhbmRsZXJzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBldmVudCBuYW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHBheWxvYWRcbiAgICAgKi9cbiAgICBub3RpZnkobmFtZSwgcGF5bG9hZCkge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNbbmFtZV0gfHwgW11cbiAgICAgIGhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgIGhhbmRsZXIocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbi8qKlxuICogQW4gZXZlbnRzIG1peGluIGRlY29yYXRvclxuICpcbiAqIEBwYXJhbSB7Q2xhc3N9IHN1cGVyQ2xhc3NcbiAqXG4gKiBAc2VlIHtFdmVudHNNaXhpbn1cbiAqL1xuZnVuY3Rpb24gd2l0aEV2ZW50c01peGluKHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIEV2ZW50c01peGluKHN1cGVyQ2xhc3MpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50c01peGluXG5leHBvcnQgeyBFdmVudHNNaXhpbiwgd2l0aEV2ZW50c01peGluIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FdmVudHNNaXhpbi9FdmVudHNNaXhpbi5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSwgcmVhZG9ubHkgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuLi9FdmVudHNNaXhpbidcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0ICcuL3N0eWxlLnNjc3MnXG5cbi8qKlxuICogRGF0ZVRpbWVJbnB1dFxuICpcbiAqIFNpbXBsZSBEYXRlVGltZUlucHV0IGNvbXBvbmVudCB3aGljaCBpbnRlZ3JhdGVzIHRoZSBmbGF0cGlja3JcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5Ad2l0aEV2ZW50c01peGluXG5jbGFzcyBEYXRlVGltZUlucHV0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBhIGRhdGVcbiAgICogaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIGRhdGUgcGlja2VyXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGljIE9OX0RBVEVfQ0hBTkdFRCA9ICdEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRCdcblxuICAvKipcbiAgICogVGhlIGRhdGUgcGlja2VyIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlIHtGbGF0cGlja3JGbn1cbiAgICovXG4gIHBpY2tlciA9IG51bGxcblxuICAvKipcbiAgICogVGhlIGxhc3Qgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZXxudWxsfVxuICAgKi9cbiAgc2VsZWN0ZWREYXRlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHJlY2VpdmVkIHBhcmFtcyB3aGVuIGluaXQgaXMgY2FsbGVkXG4gICAqc1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IHt9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgRGF0ZVRpbWVJbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzRWRpdG9yIHdoZW4gdHJ1ZSAsIHRoZSBpbnB1dCB3aWxsIHN0eWxlZCB0byBmaXQgYXMgYSBjZWxsIGVkaXRvclxuICAgKi9cbiAgY29uc3RydWN0b3IoaXNFZGl0b3IgPSBmYWxzZSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0ICR7XG4gICAgICAgIGlzRWRpdG9yID8gJ2RhdGV0aW1lX19pbnB1dC0tZWRpdG9yICcgOiAnJ1xuICAgICAgfSBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0X19pbnB1dCAke1xuICAgICAgICAgICAgaXNFZGl0b3IgPyAnYWctY2VsbC1lZGl0LWlucHV0ICcgOiAnJ1xuICAgICAgICAgIH0gYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1pbnB1dD5cbiAgICAgICAgICA8YSBjbGFzcz1cImRhdGV0aW1lX19pbnB1dF9fY2xlYXJcIiBkYXRhLWNsZWFyPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJkYXRldGltZV9faW5wdXRfX2NsZWFyX19pY29uIGFnLWljb24gYWctaWNvbi1jcm9zc1wiPjwvaT5cbiAgICAgICAgICA8L2E+ICAgIFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgY29uc3QgZW5hYmxlVGltZSA9IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZVRpbWUnLCBwYXJhbXMsIHRydWUpXG4gICAgY29uc3QgdGltZV8yNGhyID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlMjRIUicsIHBhcmFtcywgdHJ1ZSlcbiAgICBjb25zdCBlbmFibGVTZWNvbmRzID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlU2Vjb25kcycsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3Qgbm9DYWxlbmRhciA9ICF0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVDYWxlbmRhcicsIHBhcmFtcywgdHJ1ZSlcblxuICAgIGxldCBkYXRlRm9ybWF0ID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWFzaycsIHBhcmFtcylcblxuICAgIC8vIHRyeSB0byBnZW5lcmF0ZSBhIGRlZmF1bHQgZGF0ZSBmb3JtYXQgYmFzZWQgb24gdGhlIG9wdGlvbnNcbiAgICBpZiAoIWRhdGVGb3JtYXQpIHtcbiAgICAgIGRhdGVGb3JtYXQgPSBub0NhbGVuZGFyID8gJycgOiAnJVkvJU16LyVEeidcbiAgICAgIGlmIChlbmFibGVUaW1lKSB7XG4gICAgICAgIGRhdGVGb3JtYXQgKz0gdGltZV8yNGhyID8gJyAlSHo6JW16JyA6ICcgJWh6OiVteidcblxuICAgICAgICBpZiAoZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgIGRhdGVGb3JtYXQgKz0gJzolc3onXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50cmltKClcblxuICAgIC8vIGluaXQgdGhlIGRhdGUgcGlja2VyXG4gICAgdGhpcy5waWNrZXIgPSBmbGF0cGlja3IodGhpcy5fZ3VpLCB7XG4gICAgICB3cmFwOiB0cnVlLFxuICAgICAgLy8gYWxsb3cgZW50ZXJpbmcgdGhlIGRhdGUgbWFudWFsbHkgcmVxdWlyZXMgZGF0ZSBwYXJzaW5nIGZyb20gc3RyaW5nXG4gICAgICAvLyB0aGlzIGlzIGEgdG91Z2ggdGhpbmcgYW5kIHJlcXVpcmVzIGxpYnMgbGlrZSBtb21lbnRcbiAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMuX29uRGF0ZUNoYW5nZWQsXG4gICAgICBmb3JtYXREYXRlOiB0aGlzLmZvcm1hdERhdGUsXG4gICAgICBtYXhEYXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNYXgnLCBwYXJhbXMsIG51bGwpLFxuICAgICAgbWluRGF0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lTWluJywgcGFyYW1zLCBudWxsKSxcbiAgICAgIGRlZmF1bHRIb3VyOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEZWZhdWx0SG91cicsIHBhcmFtcywgMTIpLFxuICAgICAgZGVmYXVsdE1pbnV0ZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRGVmYXVsdE1pbnV0ZScsIHBhcmFtcywgMCksXG4gICAgICBkaXNhYmxlTW9iaWxlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEaXNhYmxlTW9iaWxlJywgcGFyYW1zLCBmYWxzZSksXG4gICAgICB3ZWVrTnVtYmVyczogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlV2Vla051bWJlcicsIHBhcmFtcywgZmFsc2UpLFxuICAgICAgbG9jYWxlOiB0aGlzLl9nZXRQaWNrZXJMb2NhbGUoKSxcbiAgICAgIG5vQ2FsZW5kYXIsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgICAgZW5hYmxlVGltZSxcbiAgICAgIGVuYWJsZVNlY29uZHMsXG4gICAgICB0aW1lXzI0aHIsXG4gICAgfSlcblxuICAgIC8vIGZvcmNlIGRpYWxvZyBvdmVyZmxvd1xuICAgIHRoaXMucGlja2VyLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2FnLWN1c3RvbS1jb21wb25lbnQtcG9wdXAnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnBpY2tlci5kZXN0cm95KClcbiAgICB0aGlzLm9mZihEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBpY2tlciBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd9IHZhbHVlIHRoZSBkYXRlIHZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0RGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMucGlja2VyLnNldERhdGUodmFsdWUsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBQaWNrZXJcbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5waWNrZXIub3BlbigpXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHBpY2tlclxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5waWNrZXIuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBwaWNrZXJcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIC8qKiB0aGlzIGNoZWNrIGJlY2F1c2UgdGhlIHRlc3RzIGZhaWwgaGVyZSBmb3Igc29tZSByZWFzb25zICAqL1xuICAgIGlmICh0aGlzLnBpY2tlci5jb25maWcpIHtcbiAgICAgIHRoaXMucGlja2VyLmNsZWFyKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBkYXRlIHVzaW5nIGBCQmouTWFza3MuVHlwZXMuZGF0ZWBcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgZGF0ZSBhcyBhIHN0cmluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IEJCaiBkYXRlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGZvcm1hdHRlZCBkYXRlIGFzIHN0cmluZ1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIGZvcm1hdERhdGUoZGF0ZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVGb3JtYXR0ZXInLCB0aGlzLl9wYXJhbXMpXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGF0ZVRpbWVMb2NhbGUnLFxuICAgICAgdGhpcy5fcGFyYW1zLFxuICAgICAgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG4gICAgKVxuXG4gICAgaWYgKGRhdGVUaW1lRm9ybWF0dGVyKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGVUaW1lRm9ybWF0dGVyXG4gICAgICBsZXQgZXhwcmVzc2lvbiA9IGRhdGVUaW1lRm9ybWF0dGVyXG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGlmICghKGV4cHJlc3Npb24uaW5kZXhPZigncmV0dXJuJykgPj0gMCkpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb24gPSAncmV0dXJuICcgKyBleHByZXNzaW9uICsgJzsnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcbiAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICdmb3JtYXQnLFxuICAgICAgICAgICAgJ2xvY2FsZScsXG4gICAgICAgICAgICAnRGF0ZU1hc2snLFxuICAgICAgICAgICAgZXhwcmVzc2lvblxuICAgICAgICAgICkoZGF0ZSwgZm9ybWF0LCBsb2NhbGUsIEJCai5NYXNrcy5EYXRlTWFzaylcblxuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0dGVyKGRhdGUsIGZvcm1hdCwgbG9jYWxlLCBCQmouTWFza3MuRGF0ZU1hc2spXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgZGF0ZVRpbWVGb3JtYXR0ZXIgZGVmaW5lZCBmb3IgY29sdW1uIFwiJHt0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkfVwiLiBUaGUgZm9ybWF0dGVyIHNob3VsZCBiZSBhbiBleHByZXNzaW9uIG9yIHBsYWluIGZ1bmN0aW9uYFxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb3JtYXQgfHwgKGZvcm1hdCAmJiBmb3JtYXQuaW5kZXhPZignJScpIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCQmouTWFza3MuRGF0ZU1hc2subWFzayhkYXRlLCBmb3JtYXQsIGxvY2FsZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIGRhdGUgcGlja2VyIGNoYW5nZXMgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZERhdGVzICBhcnJheSBvZiBzZWxlY3RlZCBkYXRlc1xuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkRhdGVDaGFuZ2VkKHNlbGVjdGVkRGF0ZXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHNlbGVjdGVkRGF0ZXNbMF0gfHwgbnVsbFxuICAgIHRoaXMubm90aWZ5KERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLnNlbGVjdGVkRGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGlja2VyIGdsb2JhbCBsb2NhbGl6YXRpb24gd2hpY2ggd2lsbCB3b3JrIHdpdGggYW55IGxvY2FsZVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0cGlja3IvZmxhdHBpY2tyL2Jsb2IvbWFzdGVyL3NyYy9sMTBuL2RlZmF1bHQudHNcbiAgICovXG4gIF9nZXRQaWNrZXJMb2NhbGUoKSB7XG4gICAgY29uc3QgbG9jYWxlID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZSB8fCAnZW4tVVMnXG5cbiAgICBjb25zdCB3ZWVrRGF5c1Nob3J0ID0gW11cbiAgICBjb25zdCB3ZWVrRGF5c0xvbmcgPSBbXVxuXG4gICAgZm9yIChsZXQgZGF5ID0gNDsgZGF5IDwgMTE7IGRheSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMTk3MCwgMSAtIDEsIGRheSlcblxuICAgICAgd2Vla0RheXNTaG9ydC5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ3Nob3J0JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zcGxpdCgnLCcpWzBdIC8vIHRoZSBkYXRlLXRpbWUtZm9ybWF0LXRpbWV6b25lIHBvbHlmaWxsIGF0dGFjaCB0aGUgZGF0ZSBhbHNvXG4gICAgICApXG5cbiAgICAgIHdlZWtEYXlzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlXG4gICAgICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNwbGl0KCcsJylbMF0gLy8gdGhlIGRhdGUtdGltZS1mb3JtYXQtdGltZXpvbmUgcG9seWZpbGwgYXR0YWNoIHRoZSBkYXRlIGFsc29cbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBtb250aHNTaG9ydCA9IFtdXG4gICAgY29uc3QgbW9udGhzTG9uZyA9IFtdXG5cbiAgICBmb3IgKGxldCBtb250aCA9IDA7IG1vbnRoIDwgMTI7IG1vbnRoKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCBtb250aCwgNClcblxuICAgICAgbW9udGhzU2hvcnQucHVzaChcbiAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgbW9udGhzTG9uZy5wdXNoKFxuICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIHNob3J0aGFuZDogd2Vla0RheXNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IHdlZWtEYXlzTG9uZyxcbiAgICAgIH0sXG4gICAgICBtb250aHM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiBtb250aHNTaG9ydCxcbiAgICAgICAgbG9uZ2hhbmQ6IG1vbnRoc0xvbmcsXG4gICAgICB9LFxuICAgICAgZGF5c0luTW9udGg6IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgb3JkaW5hbDogbnVtYmVyID0+ICcnLFxuICAgICAgcmFuZ2VTZXBhcmF0b3I6ICcgICcsXG4gICAgICB3ZWVrQWJicmV2aWF0aW9uOiAnJyxcbiAgICAgIHNjcm9sbFRpdGxlOiAnJyxcbiAgICAgIHRvZ2dsZVRpdGxlOiAnJyxcbiAgICAgIGFtUE06IFsnQU0nLCAnUE0nXSxcbiAgICAgIHllYXJBcmlhTGFiZWw6ICcnLFxuICAgICAgaG91ckFyaWFMYWJlbDogJycsXG4gICAgICBtaW51dGVBcmlhTGFiZWw6ICcnLFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUlucHV0XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGV0aW1lX19pbnB1dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWctaW5wdXQtYm9yZGVyLWNvbG9yLCB2YXIoLS1hZy1ib3JkZXItY29sb3IsICNiYWJmYzcpKTtib3JkZXItcmFkaXVzOjNweH0uZGF0ZXRpbWVfX2lucHV0OmZvY3VzLC5kYXRldGltZV9faW5wdXQ6YWN0aXZlLC5kYXRldGltZV9faW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFnLWlucHV0LWZvY3VzLWJvcmRlci1jb2xvciwgcmdiYSgzMywxNTAsMjQzLDAuNCkpfS5kYXRldGltZV9faW5wdXRfX2lucHV0e2ZsZXg6MTtwYWRkaW5nOjZweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjppbmhlcml0fS5hZy10aGVtZS1hbHBpbmUgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtbWF0ZXJpYWwgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKX0uYWctdGhlbWUtYWxwaW5lLWRhcmsgLmRhdGV0aW1lX19pbnB1dF9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5kYXRldGltZV9faW5wdXRfX2lucHV0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzJkMzQzNil9LmRhdGV0aW1lX19pbnB1dF9fY2xlYXJ7bWFyZ2luLWxlZnQ6MXB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6NnB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0fS5kYXRldGltZV9faW5wdXQtLWVkaXRvcntib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGV0aW1lX19pbnB1dC0tZWRpdG9yIC5kYXRldGltZV9faW5wdXRfX2lucHV0e3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5kYXRlVGltZUZpbHRlciBzZWxlY3R7bWFyZ2luLWJvdHRvbTo5cHg7cGFkZGluZzo2cHg7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2NvbG9yOmluaGVyaXR9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdDpmb2N1cywuZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGVUaW1lRmlsdGVyIHNlbGVjdCBvcHRpb257dGV4dC1pbmRlbnQ6NnB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gMTI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIDIgMyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBEYXRlVGltZUVkaXRvciBmcm9tICcuL0RhdGVUaW1lRWRpdG9yJ1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlIH0gZnJvbSAnY29yZS1kZWNvcmF0b3JzJ1xuaW1wb3J0IHV0Y1RvWm9uZWRUaW1lIGZyb20gJ2RhdGUtZm5zLXR6L3V0Y1RvWm9uZWRUaW1lJ1xuaW1wb3J0IERhdGVUaW1lSW5wdXQgZnJvbSAnLi4vRGF0ZVRpbWVJbnB1dCdcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuXG4vKipcbiAqIERhdGVUaW1lSW5wdXRcbiAqXG4gKiBTaW1wbGUgRGF0ZVRpbWVJbnB1dCBjb21wb25lbnQgd2hpY2ggaW50ZWdyYXRlcyB0aGUgZmxhdHBpY2tyXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVUaW1lKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lXG4gKiB8ICoqZGF0ZVRpbWVFbmFibGUyNEhSKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSB0aW1lIDI0IGZvcm1hdFxuICogfCAqKmRhdGVUaW1lRW5hYmxlU2Vjb25kcyoqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgc2Vjb25kcyBtYW5hZ2VtZW50XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVDYWxlbmRhcioqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgQ2FsZW5kYXIuXG4gKiB8ICoqZGF0ZVRpbWVNYXNrKiogICB8IGZhbHNlICAgIHwgVGhlIG1hc2sgdXNlZCB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGVcbiAqIHwgKipkYXRlVGltZU1heCoqICAgfCB1bmRlZmluZWQgICAgfCAgTWF4IGFsbG93ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWluKiogICB8IHVuZGVmaW5lZCAgICB8ICBNaW4gYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVGb3JtYXR0ZXIqKiAgIHwgZmFsc2UgICAgfCAgQSBmdW5jdGlvbiBvciBleHByZXNzaW9uIHRvIGZvcm1hdCB0aGUgZGF0ZSAoQHNlZSBzdXBwb3J0ZWQgcGFyYW0pXG4gKiB8ICoqZGF0ZVRpbWVMb2NhbGUqKiAgIHwgU3lzdGVtIGRlZmF1bHQgICAgfCAgQSBsb2NhbGUgdG8gdXNlIGZvciBkYXRlIGZvcm1hdHRpbmdcbiAqIHwgKipkYXRlVGltZURlZmF1bHRIb3VyKiogICB8IDEyICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIGhvdXIgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURlZmF1bHRNaW51dGUqKiAgIHwgMCAgICB8ICBJbml0aWFsIHZhbHVlIG9mIHRoZSBtaW51dGUgZWxlbWVudC5cbiAqIHwgKipkYXRlVGltZURpc2FibGVNb2JpbGUqKiAgIHwgZmFsc2UgICAgfCAgU2V0IGRpc2FibGVNb2JpbGUgdG8gdHJ1ZSB0byBhbHdheXMgdXNlIHRoZSBub24tbmF0aXZlIHBpY2tlci5cbiAqIHwgKipkYXRlVGltZUVuYWJsZVdlZWtOdW1iZXIqKiAgIHwgdHJ1ZSAgICB8ICBFbmFibGVzIGRpc3BsYXkgb2Ygd2VlayBudW1iZXJzIGluIGNhbGVuZGFyLlxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIERhdGVUaW1lRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2lucHV0ID0gbmV3IERhdGVUaW1lSW5wdXQodHJ1ZSlcblxuICAvKipcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIF92YWx1ZSA9IG51bGxcblxuICAvKipcbiAgICogUGFyYW1zIHJlY2VpdmVkIGluIGluaXRcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIF9wYXJhbXMgPSBudWxsXG5cbiAgLyoqXG4gICAqIFRha2VzIGluY29tcGxldGUgaXNvIHN0cmluZyBhbmQgcmV0dXJuIGEgY29tcGxldGUgb25lXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGluY29tcGxldGUgaXNvIHN0cmluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGNvbXBsZXRlIGlzbyBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBmaXhTaG9ydElTTyh2YWx1ZSkge1xuICAgIHJldHVybiBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuICAgIHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IERhdGVUaW1lRWRpdG9yLmZpeFNob3J0SVNPKHRoaXMuX3ZhbHVlKVxuICAgIHRoaXMuX2lucHV0LmluaXQocGFyYW1zKVxuICAgIHRoaXMuX2lucHV0Lm9uKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VELCB0aGlzLl9vbkRhdGVDaGFuZ2UpXG5cbiAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldERhdGUoXG4gICAgICAgIHV0Y1RvWm9uZWRUaW1lKHRoaXMuX3ZhbHVlLCBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0VGltZXpvbmVPck9mZnNldCgpKVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuX2d1aSA9IHRoaXMuX2lucHV0LmdldEd1aSgpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2lucHV0LmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICogTWFrZSBzdXJlIHRoZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgYW5kIGxpc3RlbmluZyB0byBrZXkgY2hhbmdlc1xuICAgKi9cbiAgYWZ0ZXJHdWlBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgdmFsdWUgdG8gdGhlIGdyaWQsIHRoZSByZXN1bHQgb2YgdGhlIGVkaXRpbmdcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbXMucGFyc2VWYWx1ZSh0aGlzLl92YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0Lm9wZW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIG91dCBvZiB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzT3V0KCkge1xuICAgIHRoaXMuX2lucHV0LmNsb3NlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGVkaXRvciB2YWx1ZSB3aXRoIHNlbGVjdGVkIGRhdGUgZnJvbSB0aGUgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25EYXRlQ2hhbmdlKGRhdGUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZS50b0lTT1N0cmluZygpIDogJydcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRlVGltZUVkaXRvclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lRWRpdG9yL0RhdGVUaW1lRWRpdG9yLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L0N1c3RvbUV2ZW50ICAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbjsoZnVuY3Rpb24oKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy9JZiBub3QgSUVcblxuICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHsgYnViYmxlczogZmFsc2UsIGNhbmNlbGFibGU6IGZhbHNlLCBkZXRhaWw6IHVuZGVmaW5lZCB9XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpXG4gICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKVxuICAgIHJldHVybiBldnRcbiAgfVxuXG4gIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGVcblxuICB3aW5kb3cuQ3VzdG9tRXZlbnQgPSBDdXN0b21FdmVudFxufSkoKVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5pdC5qcydcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1ucy5qcydcbmV4cG9ydCAqIGZyb20gJy4vcm93cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vY2VsbHMuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi90b29scGFuZWwuanMnXG5leHBvcnQgKiBmcm9tICcuL3N0YXR1c2Jhci5qcydcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheXMuanMnXG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQuanMnXG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vanNzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMuanMnXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMgfSBmcm9tICcuL2NvbHVtbnMnXG5pbXBvcnQgeyBnd19uYXZpZ2F0ZVRvTmV4dFJvdywgZ3dfZ2V0Um93Tm9kZUlkIH0gZnJvbSAnLi9yb3dzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q29udGV4dE1lbnUgfSBmcm9tICcuL21lbnVzJ1xuaW1wb3J0IHsgZ3dfZ2V0Q2hhcnRUb29sYmFySXRlbXMgfSBmcm9tICcuL2NoYXJ0cydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50LCBnd19nZXRXaW5kb3csIGd3X2FkZEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIGd3X29uUm93Q2xpY2tlZCxcbiAgZ3dfb25Sb3dEb3VibGVDbGlja2VkLFxuICBnd19vblNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vbkNlbGxFZGl0aW5nRXZlbnQsXG4gIGd3X29uUm93RWRpdGluZ0V2ZW50LFxuICBnd19vblJlYWR5RXZlbnQsXG4gIGd3X2RlYm91bmNlLFxufSBmcm9tICdldmVudHMnXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuaW1wb3J0IEhUTUxUb29sdGlwIGZyb20gJy4uL2NvbXBvbmVudHMvSFRNTFRvb2x0aXAuanMnXG5pbXBvcnQgU3VnZ2VzdGlvbkVkaXRvciBmcm9tICcuLi9jb21wb25lbnRzL1N1Z2dlc3Rpb25FZGl0b3IuanMnXG5cbmNvbnN0IHsgZGVlcFBhcnNlSnNvbiB9ID0gcmVxdWlyZSgnZGVlcC1wYXJzZS1qc29uJylcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2luaXQob3B0aW9ucywgbGljZW5zZSwgZGF0YSkge1xuICBpZiAoYWdHcmlkLkxpY2Vuc2VNYW5hZ2VyICYmIGxpY2Vuc2UpIHtcbiAgICBhZ0dyaWQuTGljZW5zZU1hbmFnZXIuc2V0TGljZW5zZUtleShsaWNlbnNlKVxuICB9XG5cbiAgY29uc3QgaWQgPSBvcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgY29udGFpbmVyID0gZ3dfZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChpZClcbiAgLy8gd2UgbWFrZSB0aGUgZ3JpZCBvcHRpb25zIGF2YWlsYWJsZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gIGNvbnN0IGdyaWQgPSBnd19hZGRHcmlkKGlkLCB7XG4gICAgY29udGFpbmVyLFxuICAgIG9wdGlvbnMsXG4gIH0pXG5cbiAgLy8gVE9ETzogdXNlIGFnIGdyaWQgZGVzdHJveVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gJydcblxuICBjb25zdCBwYXJzZWRPcHRpb25zID0gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpXG4gIHBhcnNlZE9wdGlvbnMucm93RGF0YSA9IGRhdGFcblxuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBhZ0dyaWQuR3JpZChjb250YWluZXIsIHBhcnNlZE9wdGlvbnMpXG4gIGdyaWQuaW5zdGFuY2UgPSBpbnN0YW5jZVxuICBncmlkLm9wdGlvbnMgPSBwYXJzZWRPcHRpb25zXG5cbiAgY29uc29sZS5sb2coXG4gICAgYCVjIEdyaWQgWyR7aWR9XSBzZXR0aW5ncyA6IGAsXG4gICAgJ2JhY2tncm91bmQ6ICMyMjI7IGNvbG9yOiAjYmFkYTU1JyxcbiAgICBwYXJzZWRPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBQYXJzZSBPcHRpb25zXG4gKlxuICogUGFyc2UgdGhlIGdyaWQgb3B0aW9ucyBhbmQgcmV0dXJuXG4gKiBhbiBvYmplY3Qgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEdyaWQgb3B0aW9ucyBhcyBKc29uIE9iamVjdFxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gb3B0aW9ucyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ3dfcGFyc2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgZGVlcFBhcnNlZE9wdGlvbnMgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxuICBjb25zdCBpZCA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuaWRcbiAgY29uc3QgZ2V0RGF0YVBhdGhUZW1wbGF0ZSA9IGRlZXBQYXJzZWRPcHRpb25zLmNvbnRleHQuZ2V0RGF0YVBhdGggfHwgJydcbiAgLy8gVE9ETzogZG8gd2UgbmVlZCB0byBjb250cm9sIHRoaXMgc2V0dGluZyBmcm9tIEJCaiA/XG4gIGNvbnN0IGRlYm91bmNlRHVyYXRpb24gPSAyNTBcbiAgY29uc3QgZmluYWxPcHRpb25zID0ge1xuICAgIC4uLmRlZXBQYXJzZWRPcHRpb25zLFxuICAgIC4uLntcbiAgICAgIGdldERvY3VtZW50OiAoKSA9PiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgb25DZWxsRWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsRWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vbkNlbGxFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25DZWxsVmFsdWVDaGFuZ2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0YXJ0ZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvblJvd1ZhbHVlQ2hhbmdlZDogZSA9PiB7XG4gICAgICAgIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uUm93RWRpdGluZ1N0b3BwZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvbkdyaWRSZWFkeTogZSA9PiB7XG4gICAgICAgIGd3X29uUmVhZHlFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBnZXRSb3dOb2RlSWQ6IGRhdGEgPT4gZ3dfZ2V0Um93Tm9kZUlkKGlkLCBkYXRhKSxcbiAgICAgIGdldENvbnRleHRNZW51SXRlbXM6IHBhcmFtcyA9PiBnd19nZXRDb250ZXh0TWVudShpZCwgcGFyYW1zKSxcbiAgICAgIGdldENoYXJ0VG9vbGJhckl0ZW1zOiBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyxcbiAgICAgIHBvcHVwUGFyZW50OiBnd19nZXREb2N1bWVudCgpLmJvZHksXG4gICAgICBvblJvd0RvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93RG91YmxlQ2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblJvd0NsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uUm93Q2xpY2tlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvbkNlbGxDbGlja2VkOiBnd19kZWJvdW5jZShnd19vbkNlbGxDbGlja0V2ZW50LCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uQ2VsbERvdWJsZUNsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uQ2VsbENsaWNrRXZlbnQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25TZWxlY3Rpb25DaGFuZ2VkOiBnd19kZWJvdW5jZShnd19vblNlbGVjdGlvbkNoYW5nZWQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQ6IGd3X2RlYm91bmNlKFxuICAgICAgICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbiAgICAgICAgZGVib3VuY2VEdXJhdGlvblxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQm9vbGVhbkZpbHRlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5Cb29sZWFuRmlsdGVyLFxuICAgICAgICBCb29sZWFuUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuQm9vbGVhblJlbmRlcmVyLFxuICAgICAgICBCb29sZWFuRWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkJvb2xlYW5FZGl0b3IsXG4gICAgICAgIE51bWJlckVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5OdW1iZXJFZGl0b3IsXG4gICAgICAgIFRleHRFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuVGV4dEVkaXRvcixcbiAgICAgICAgRGF0ZVRpbWVFZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuRGF0ZVRpbWVFZGl0b3IsXG4gICAgICAgIERhdGVUaW1lRmlsdGVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkRhdGVUaW1lRmlsdGVyLFxuICAgICAgICBJbWFnZVJlbmRlcmVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkltYWdlUmVuZGVyZXIsXG4gICAgICAgIFRlbXBsYXRlUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuVGVtcGxhdGVSZW5kZXJlcixcbiAgICAgICAgSFRNTFRvb2x0aXA6IEhUTUxUb29sdGlwLFxuICAgICAgICBTdWdnZXN0aW9uRWRpdG9yOiBTdWdnZXN0aW9uRWRpdG9yLFxuICAgICAgfSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgLi4uZGVlcFBhcnNlZE9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGRvY3VtZW50OiBnd19nZXREb2N1bWVudCgpLFxuICAgICAgICAgIHdpbmRvdzogZ3dfZ2V0V2luZG93KCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH1cblxuICBpZiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGZpbmFsT3B0aW9ucy5jb250ZXh0Lmhhc093blByb3BlcnR5KCduYXZpZ2F0ZVRvTmV4dENlbGwnKSAmJlxuICAgIGZpbmFsT3B0aW9ucy5jb250ZXh0Lm5hdmlnYXRlVG9OZXh0Q2VsbFxuICApIHtcbiAgICBmaW5hbE9wdGlvbnMubmF2aWdhdGVUb05leHRDZWxsID0gcGFyYW1zID0+IHtcbiAgICAgIHJldHVybiBnd19uYXZpZ2F0ZVRvTmV4dFJvdyhpZCwgcGFyYW1zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChnZXREYXRhUGF0aFRlbXBsYXRlICYmIGZpbmFsT3B0aW9ucy50cmVlRGF0YSkge1xuICAgIGNvbnN0IGdldERhdGFQYXRoVGVtcGxhdGVDb21wbGllZCA9IHRlbXBsYXRlKGdldERhdGFQYXRoVGVtcGxhdGUpXG4gICAgZmluYWxPcHRpb25zLmdldERhdGFQYXRoID0gZGF0YSA9PlxuICAgICAgZ2V0RGF0YVBhdGhUZW1wbGF0ZUNvbXBsaWVkKHsgZGF0YTogZGF0YSB9KVxuICB9XG5cbiAgLy8gZXh0ZW5kIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMoZmluYWxPcHRpb25zLmNvbHVtbkRlZnMpXG5cbiAgcmV0dXJuIGZpbmFsT3B0aW9uc1xufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19wYXJzZU5vZGVGcm9tRXZlbnQsIGd3X3NlbmRFdmVudCB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRDb250ZXh0TWVudShncmlkSWQsIHBhcmFtcykge1xuICBjb25zdCBidWlsZENvbnRleHRNZW51QWN0aW9uID0gKHBhcmFtcywgaWQpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChwYXJhbXMpXG4gICAgICBjb25zdCBjb2xJZCA9IHBhcmFtcy5jb2x1bW4uY29sSWRcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zLnZhbHVlXG5cbiAgICAgIGd3X3NlbmRFdmVudChcbiAgICAgICAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdndy5jb250ZXh0bWVudScsXG4gICAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7IHI6IG5vZGUsIGM6IGNvbElkLCB2OiB2YWx1ZSwgaTogaWQgfSksXG4gICAgICAgIH0sXG4gICAgICAgIGlkXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGFyc2VNZW51ID0gbWVudSA9PiB7XG4gICAgbWVudS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaXRlbVsnYWN0aW9uJ10gPSBidWlsZENvbnRleHRNZW51QWN0aW9uKHBhcmFtcywgaXRlbS5pZClcblxuICAgICAgaWYgKGl0ZW1bJ2Nzc0NsYXNzZXMnXSAmJiAhQXJyYXkuaXNBcnJheShpdGVtWydjc3NDbGFzc2VzJ10pKSB7XG4gICAgICAgIGl0ZW1bJ2Nzc0NsYXNzZXMnXSA9IGl0ZW1bJ2Nzc0NsYXNzZXMnXS5zcGxpdCgnICcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWydzdWJNZW51J10pIHtcbiAgICAgICAgaXRlbVsnc3ViTWVudSddID0gcGFyc2VNZW51KGl0ZW1bJ3N1Yk1lbnUnXSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIG1lbnVcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1lbnUoZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuY29udGV4dC5jb250ZXh0TWVudSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25DZWxsQ2xpY2tFdmVudCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG59IGZyb20gJy4vc2VsZWN0aW9ucydcblxuaW1wb3J0IHsgZ3dfb25DZWxsRWRpdGluZ0V2ZW50LCBnd19vblJvd0VkaXRpbmdFdmVudCB9IGZyb20gJy4vZWRpdGluZydcblxuaW1wb3J0IHsgZ3dfb25SZWFkeUV2ZW50IH0gZnJvbSAnLi9yZWFkeSdcblxuaW1wb3J0IHsgZ3dfZGVib3VuY2UgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uQ2VsbENsaWNrRXZlbnQsXG4gIGd3X29uQ2VsbEVkaXRpbmdFdmVudCxcbiAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQsXG4gIGd3X29uUmVhZHlFdmVudCxcbiAgZ3dfZGVib3VuY2UsXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCwgZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19lc2NhcGUsIGd3X2dldEdyaWQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgR1dfRVZFTlRfUk9XX0NMSUNLLFxuICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLLFxuICBHV19FVkVOVF9ST1dfU0VMRUNULFxuICBHV19FVkVOVF9DRUxMX0NMSUNLLFxuICBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyxcbiAgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAgPSB7XG4gIGNlbGxDbGlja2VkOiBHV19FVkVOVF9DRUxMX0NMSUNLLFxuICBjZWxsRG91YmxlQ2xpY2tlZDogR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0ssXG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJvd0RvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgc2VuZCBhIGJiaiBldmVudCB3aXRoIGBHV19OT0RFYCBhcyBwYXlsb2FkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGUgVGhlIGV2ZW50J3MgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dEb3VibGVDbGlja2VkXG4gKiBAZmlyZXMgZ3cucm93RG91YmxlQ2xpY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUm93RG91YmxlQ2xpY2tlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuXG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yb3dEb3VibGVDbGljaycsXG4gICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgazogZ3dfZ2V0R3JpZChjb250ZXh0LmlkKS5rZXlzLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBHV19FVkVOVF9ST1dfRE9VQkxFX0NMSUNLXG4gIClcbn1cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93Q2xpY2tlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93Q2xpY2tlZFxuICogQGZpcmVzIGd3LnJvd0NsaWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0NsaWNrZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcblxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucm93Q2xpY2snLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGs6IGd3X2dldEdyaWQoY29udGV4dC5pZCkua2V5cyxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX0NMSUNLXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBzZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zZWxlY3Rpb25DaGFuZ2VkXG4gKiBAZmlyZXMgZ3cucm93U2VsZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblNlbGVjdGlvbkNoYW5nZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd1NlbGVjdCcsXG4gICAgICBkZXRhaWw6ICcnLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX1NFTEVDVFxuICApXG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcmFuZ2VTZWxlY3Rpb25DaGFuZ2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJhbmdlU2VsZWN0aW9uQ2hhbmdlZFxuICogQGZpcmVzIGd3LnJhbmdlU2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBlLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ3JpZE9wdGlvbnMuY29udGV4dFxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucmFuZ2VTZWxlY3Rpb24nLFxuICAgICAgZGV0YWlsOiAnJyxcbiAgICB9LFxuICAgIEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VEXG4gIClcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBjZWxsQ2xpY2tFdmVudGAgJiBgY2VsbERvdWJsZUNsaWNrZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsQ2xpY2tFdmVudFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxEb3VibGVDbGlja2VkXG4gKlxuICogQGZpcmVzIGd3LmNlbGxDbGlja2VkXG4gKiBAZmlyZXMgZ3cuY2VsbERvdWJsZUNsaWNrZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uQ2VsbENsaWNrRXZlbnQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgY29uc3QgaWQgPSBjb250ZXh0LmlkXG4gIGNvbnN0IHBhcnNlZCA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChlKVxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBjb25zdCB0eXBlID0gZS50eXBlXG4gICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7ZS50eXBlfWAsXG4gICAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHI6IHBhcnNlZCwgLy8gcm93XG4gICAgICAgICAgdjogZ3dfZXNjYXBlKGUudmFsdWUpLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBnd19lc2NhcGUoZS52YWx1ZSksIC8vIG9kbCB2YWx1ZVxuICAgICAgICAgIGM6IGUuY29sdW1uLmNvbElkLCAvLyBjb2x1bW5zXG4gICAgICAgICAgazogZ3dfZ2V0R3JpZChpZCkua2V5cyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgQ0VMTF9DTElDS0lOR19FVkVOVFNfTUFQW3R5cGVdXG4gICAgKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50LCBnd19wYXJzZU5vZGVGcm9tRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X2VzY2FwZSwgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCxcbiAgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUT1BQRUQsXG4gIEdXX0VWRU5UX0NFTExfVkFMVUVfQ0hBTkdFRCxcbiAgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCxcbiAgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RPUFBFRCxcbiAgR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBDRUxMX0VESVRJTkdfRVZFTlRTX01BUCA9IHtcbiAgY2VsbEVkaXRpbmdTdGFydGVkOiBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCxcbiAgY2VsbEVkaXRpbmdTdG9wcGVkOiBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCxcbiAgY2VsbFZhbHVlQ2hhbmdlZDogR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VELFxufVxuXG5jb25zdCBST1dfRURJVElOR19FVkVOVFNfTUFQID0ge1xuICByb3dFZGl0aW5nU3RhcnRlZDogR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCxcbiAgcm93RWRpdGluZ1N0b3BwZWQ6IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQsXG4gIHJvd1ZhbHVlQ2hhbmdlZDogR1dfRVZFTlRfUk9XX1ZBTFVFX0NIQU5HRUQsXG59XG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYGNlbGxFZGl0aW5nU3RhcnRlZGAgLCBgY2VsbEVkaXRpbmdTdG9wcGVkYCBhbmRcbiAqIGBjZWxsVmFsdWVDaGFuZ2VkYCBldmVudHNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxFZGl0aW5nU3RhcnRlZFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxFZGl0aW5nU3RvcHBlZFxuICogQGxpc3RlbnMgYWdHcmlkLmNlbGxWYWx1ZUNoYW5nZWRcbiAqXG4gKiBAZmlyZXMgZ3cuY2VsbEVkaXRpbmdTdGFydGVkXG4gKiBAZmlyZXMgZ3cuY2VsbEVkaXRpbmdTdG9wcGVkXG4gKiBAZmlyZXMgZ3cuY2VsbFZhbHVlQ2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKSB7XG4gIGNvbnN0IHZhbHVlID0gZS5oYXNPd25Qcm9wZXJ0eSgnbmV3VmFsdWUnKVxuICAgID8gZ3dfZXNjYXBlKGUubmV3VmFsdWUpXG4gICAgOiBnd19lc2NhcGUoZS52YWx1ZSlcbiAgY29uc3Qgb2xkVmFsdWUgPSBlLmhhc093blByb3BlcnR5KCdvbGRWYWx1ZScpXG4gICAgPyBnd19lc2NhcGUoZS5vbGRWYWx1ZSlcbiAgICA6IGUuaGFzT3duUHJvcGVydHkoJ25ld1ZhbHVlJylcbiAgICA/IGd3X2VzY2FwZShlLm5ld1ZhbHVlKVxuICAgIDogZ3dfZXNjYXBlKGUudmFsdWUpXG5cbiAgaWYgKHZhbHVlID09IG9sZFZhbHVlICYmIGUudHlwZSA9PT0gJ2NlbGxWYWx1ZUNoYW5nZWQnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSlcbiAgY29uc3QgdHlwZSA9IGUudHlwZVxuICBjb25zdCBjb2xJZCA9IGUuY29sdW1uLmNvbElkXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGd3X3NlbmRFdmVudChcbiAgICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogYGd3LiR7dHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICByOiB7IC4uLnBhcnNlZCwgLi4ueyBjcjogZS5kYXRhIH0gfSwgLy8gcm93ICh3ZSBhbHdheXMgaW5jbHVkZSB0aGUgY2xpZW50IHJvdyBkYXRhKVxuICAgICAgICAgIHY6IHZhbHVlLCAvLyBuZXcgdmFsdWVcbiAgICAgICAgICBvOiBvbGRWYWx1ZSwgLy8gb2xkIHZhbHVlXG4gICAgICAgICAgYzogY29sSWQsIC8vIGNvbHVtblxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBDRUxMX0VESVRJTkdfRVZFTlRTX01BUFt0eXBlXVxuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGByb3dFZGl0aW5nU3RhcnRlZGAgLCBgcm93RWRpdGluZ1N0b3BwZWRgIGFuZCBgcm93VmFsdWVDaGFuZ2VkYCBldmVudHNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0VkaXRpbmdTdGFydGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RWRpdGluZ1N0b3BwZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dWYWx1ZUNoYW5nZWRcbiAqXG4gKiBAZmlyZXMgZ3cucm93RWRpdGluZ1N0YXJ0ZWRcbiAqIEBmaXJlcyBndy5yb3dFZGl0aW5nU3RvcHBlZFxuICogQGZpcmVzIGd3LnJvd1ZhbHVlQ2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25Sb3dFZGl0aW5nRXZlbnQoaWQsIGUpIHtcbiAgY29uc3QgcGFyc2VkID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpXG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IHR5cGUgPSBlLnR5cGVcbiAgICBnd19zZW5kRXZlbnQoXG4gICAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke2UudHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHsgLi4ucGFyc2VkLCAuLi57IGNyOiBlLmRhdGEgfSB9KSwgLy8gcm93ICh3ZSBhbHdheXMgaW5jbHVkZSB0aGUgY2xpZW50IHJvdyBkYXRhKVxuICAgICAgfSxcbiAgICAgIFJPV19FRElUSU5HX0VWRU5UU19NQVBbdHlwZV1cbiAgICApXG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZGVib3VuY2UgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X29uU3RhdGVDaGFuZ2VkIH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IGd3X29uS2V5ZG93biB9IGZyb20gJy4va2V5Ym9hcmQnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBPbiBSZWFkeSBFdmVudFxuICpcbiAqIFRoZSBtZXRob2Qgd2lsbCBpZ25vcmUgZmlyc3QgcmVhZHkgZXZlbnQgYW5kIHRoZW4gcmVnaXN0ZXIgYSBkZWJvdW5jZWQgc3RhdGVcbiAqIGNhbGxiYWNrIHRvIHNlbmQgc3RhdGUgZXZlbnRzIHRvIEJCalxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25SZWFkeUV2ZW50KGlkLCBfZSkge1xuICBjb25zdCBncmlkID0gZ3dfZ2V0R3JpZChpZClcblxuICAvLyByZWdpc3RlciBzdGF0ZSBkZWJvdW5jZSBtb25pdG9yXG4gIGNvbnN0IHN0YXRlRGVib3VuY2UgPSBnd19kZWJvdW5jZShjaGFuZ2VFdmVudCA9PiB7XG4gICAgZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIGNoYW5nZUV2ZW50KVxuICB9LCA1MDApXG5cbiAgO1tcbiAgICAnc29ydENoYW5nZWQnLFxuICAgICdmaWx0ZXJDaGFuZ2VkJyxcbiAgICAnY29sdW1uVmlzaWJsZScsXG4gICAgJ2NvbHVtblBpbm5lZCcsXG4gICAgJ2NvbHVtblJlc2l6ZWQnLFxuICAgICdjb2x1bW5Nb3ZlZCcsXG4gICAgJ25ld0NvbHVtbnNMb2FkZWQnLFxuICAgICdncmlkQ29sdW1uc0NoYW5nZWQnLFxuICAgICdkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ3ZpcnR1YWxDb2x1bW5zQ2hhbmdlZCcsXG4gICAgJ2NvbHVtbkV2ZXJ5dGhpbmdDaGFuZ2VkJyxcbiAgICAvLydncmlkU2l6ZUNoYW5nZWQnLFxuICAgICdleHBhbmRPckNvbGxhcHNlQWxsJyxcbiAgICAvLyd0b29sUGFuZWxWaXNpYmxlQ2hhbmdlZCdcbiAgXS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICBncmlkLm9wdGlvbnMuYXBpLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHN0YXRlRGVib3VuY2UpXG4gIH0pXG5cbiAgLy8gY29sbGVjdCBrZXkgZG93bnMgaW5mb3JtYXRpb24gdG8gYmUgcmVwb3J0ZWQgd2l0aCBvdGhlciBldmVudHNcbiAgZ3JpZC5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25FdmVudCA9PiB7XG4gICAgZ3JpZC5rZXlzID0ge1xuICAgICAgYzoga2V5ZG93bkV2ZW50LmtleSxcbiAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgIGFrOiBrZXlkb3duRXZlbnQuYWx0S2V5LFxuICAgICAgc2s6IGtleWRvd25FdmVudC5zaGlmdEtleSxcbiAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICB9XG4gIH0pXG5cbiAgLy8gY2xlYXIgY29sbGVjdCBrZXlkb3duIGluZm9ybWF0aW9uXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2tleXVwJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBnd19kZWJvdW5jZShfZSA9PiB7XG4gICAgICBncmlkLmtleXMgPSBudWxsXG4gICAgfSwgMjUwKVxuICApXG5cbiAgLy8gcmVnaXN0ZXIga2V5Ym9hcmQgZGVib3VuY2UgbW9uaXRvclxuXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2tleWRvd24nLFxuICAgIGd3X2RlYm91bmNlKGtleWRvd25FdmVudCA9PiB7XG4gICAgICBnd19vbktleWRvd24oaWQsIGtleWRvd25FdmVudClcbiAgICB9LCA1MDApXG4gIClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbi8qKlxuICogQW4gaGFuZGxlciBmb3IgdGhlIGdyaWQgYHN0YXRlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5zdGF0ZUNoYW5nZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RvcHBlZFxuICpcbiAqIEBmaXJlcyBndy5zdGF0ZUNoYW5nZWRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25TdGF0ZUNoYW5nZWQoaWQsIF9lKSB7XG4gIGd3X3NlbmRFdmVudChcbiAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnN0YXRlQ2hhbmdlZCcsXG4gICAgICBkZXRhaWw6IFtdLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfR1JJRF9TVEFURV9DSEFOR0VcbiAgKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IEdXX0VWRU5UX0tFWVBSRVNTIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqXG4gKiBDb21wb3NlIGEgbW9kZWwgb2YgdGhlIGtleWRvd24gZXZlbnQgYW5kIHNlbmQgaXQgdG8gQkJqXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0V2ZW50fSBrZXlkb3duRXZlbnQga2V5ZG93biBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25LZXlkb3duKGlkLCBrZXlkb3duRXZlbnQpIHtcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiBgZ3cua2V5cHJlc3NgLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGM6IGtleWRvd25FdmVudC5rZXksXG4gICAgICAgIGtjOiBrZXlkb3duRXZlbnQud2hpY2ggfHwgTnVtYmVyKGtleWRvd25FdmVudC5rZXlDb2RlKSxcbiAgICAgICAgYWs6IGtleWRvd25FdmVudC5hbHRLZXksXG4gICAgICAgIHNrOiBrZXlkb3duRXZlbnQuc2hpZnRLZXksXG4gICAgICAgIGNrOiBrZXlkb3duRXZlbnQuY3RybEtleSxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfS0VZUFJFU1NcbiAgKVxufVxuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGV4dGVuZFdpdGhcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAqXG4gKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25JbldpdGg7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weU9iamVjdDtcbiIsImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduVmFsdWU7XG4iLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29yZUpzRGF0YSBmcm9tICcuL19jb3JlSnNEYXRhLmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNNYXNrZWQ7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuZXhwb3J0IGRlZmF1bHQgY29yZUpzRGF0YTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Tb3VyY2U7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0VmFsdWU7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsImltcG9ydCBiYXNlU2V0VG9TdHJpbmcgZnJvbSAnLi9fYmFzZVNldFRvU3RyaW5nLmpzJztcbmltcG9ydCBzaG9ydE91dCBmcm9tICcuL19zaG9ydE91dC5qcyc7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvU3RyaW5nO1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2hvcnRPdXQ7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzSW4gZnJvbSAnLi9fbmF0aXZlS2V5c0luLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXNJbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAqIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzXG4gKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIChlcShvYmpWYWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkge1xuICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqVmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbURlZmF1bHRzQXNzaWduSW47XG4iLCIvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciBzdHJpbmdFc2NhcGVzID0ge1xuICAnXFxcXCc6ICdcXFxcJyxcbiAgXCInXCI6IFwiJ1wiLFxuICAnXFxuJzogJ24nLFxuICAnXFxyJzogJ3InLFxuICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICdcXHUyMDI5JzogJ3UyMDI5J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gIHJldHVybiAnXFxcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZVN0cmluZ0NoYXI7XG4iLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuIiwiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsImltcG9ydCBlc2NhcGUgZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHJlRXNjYXBlIGZyb20gJy4vX3JlRXNjYXBlLmpzJztcbmltcG9ydCByZUV2YWx1YXRlIGZyb20gJy4vX3JlRXZhbHVhdGUuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVtcGxhdGVTZXR0aW5ncztcbiIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcbiIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5T2Y7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFc2NhcGUgPSAvPCUtKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFc2NhcGU7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUV2YWx1YXRlO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKipcbiAqIEFuIGltcHJvdmVkIHRvb2x0aXAgY29tcG9uZW50IHdoaWNoIHN1cHBvcnRzIEhUTUwgYW5kIGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aCBHVUkgYW5kIEJVSVxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlclxuICovXG5jbGFzcyBIVE1MVG9vbHRpcCB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIHRoZSB0b29sdGlwIGNvbXBvbmVudCBwYXJhbXNcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgZUd1aSA9ICh0aGlzLmVHdWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICBjb25zdCB0b29sdGlwVmFsdWVHZXR0ZXIgPSBwYXJhbXMuY29sRGVmLnRvb2x0aXBWYWx1ZUdldHRlclxuICAgIGNvbnN0IGlzSGVhZGVyID0gcGFyYW1zLnJvd0luZGV4ID09PSB1bmRlZmluZWRcbiAgICBjb25zdCBpc0dyb3VwZWRIZWFkZXIgPSBpc0hlYWRlciAmJiAhIXBhcmFtcy5jb2xEZWYuY2hpbGRyZW5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAhaXNIZWFkZXIgJiYgIWlzR3JvdXBlZEhlYWRlclxuICAgICAgICA/IHBhcmFtcy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChwYXJhbXMucm93SW5kZXgpLmRhdGFcbiAgICAgICAgOiBudWxsXG4gICAgY29uc3QgdGhlbWUgPSBwYXJhbXMuYXBpLmdyaWRDb3JlLmVHcmlkRGl2LmNsYXNzTmFtZS5lbmRzV2l0aCgnZGFyaycpXG4gICAgICA/ICdndy10b29sdGlwLWRhcmsnXG4gICAgICA6ICdndy10b29sdGlwLWxpZ2h0J1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZCA9IHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkXG4gICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgZGF0YSAmJiBkYXRhLmhhc093blByb3BlcnR5KHBhcmFtcy5jb2xEZWYudG9vbHRpcEZpZWxkKVxuICAgICAgICA/IGRhdGFbcGFyYW1zLmNvbERlZi50b29sdGlwRmllbGRdXG4gICAgICAgIDogbnVsbFxuICAgICAgOiBudWxsXG5cbiAgICBjb25zdCBwYXNzZWRQYXJhbXMgPSB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICAuLi57IGRhdGEgfSxcbiAgICAgIC4uLnsgaXNIZWFkZXIsIGlzR3JvdXBlZEhlYWRlciwgdG9vbHRpcEZpZWxkIH0sXG4gICAgfVxuXG4gICAgZUd1aS5jbGFzc0xpc3QuYWRkKCdndy10b29sdGlwJywgdGhlbWUpXG4gICAgZUd1aS5pbm5lckhUTUwgPVxuICAgICAgaXNIZWFkZXIgfHwgaXNHcm91cGVkSGVhZGVyXG4gICAgICAgID8gcGFyYW1zLnZhbHVlXG4gICAgICAgIDogdG9vbHRpcEZpZWxkXG4gICAgICAgID8gdG9vbHRpcEZpZWxkXG4gICAgICAgIDogdG9vbHRpcFZhbHVlR2V0dGVyXG4gICAgICAgID8gdG9vbHRpcFZhbHVlR2V0dGVyKHBhc3NlZFBhcmFtcylcbiAgICAgICAgOiBwYXJhbXMudmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGd1aSBJbnN0YW5jZVxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5lR3VpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSFRNTFRvb2x0aXBcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IGF1dG9jb21wbGV0ZSBmcm9tICdhdXRvY29tcGxldGVyJ1xuaW1wb3J0IHRlbXBsYXRlIGZyb20gJ2xvZGFzaC1lcy90ZW1wbGF0ZSdcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG4vKipcbiAqIEFuIGF1dG9jb21wbGV0ZSBjZWxsIGVkaXRvciB3cml0dGVuIHNwZWNpZmljYWxseSB0byBCQmpHcmlkRXhXaWRnZXRcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXJcbiAqL1xuY2xhc3MgU3VnZ2VzdGlvbkVkaXRvciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IHBhcmFtcy50ZXh0UGF0dGVybiB8fCBudWxsXG4gICAgY29uc3QgcmVxdWlyZWQgPSBwYXJhbXMudGV4dFJlcXVpcmVkIHx8IGZhbHNlXG4gICAgY29uc3QgdGl0bGUgPSBwYXJhbXMudGV4dFRpdGxlIHx8IG51bGxcbiAgICBjb25zdCBkZWJvdW5jZVdhaXRNcyA9IHBhcmFtcy5kZWJvdW5jZVdhaXRNcyB8fCAyNTBcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgY29uc3Qga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2F1dG9jb21wbGV0ZUlucHV0V3JhcHBlciBhZy1jZWxsLWVkaXQtd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAnMCdcbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gLyogaHRtbCAqLyBgXG4gICAgPGRpdiBjbGFzcz1cImFnLWNlbGwtZWRpdG9yIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tbGVmdCBhZy10ZXh0LWZpZWxkIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXRleHQtZmllbGQtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYFxuXG4gICAgLy8gaW5wdXRcbiAgICB0aGlzLl9pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPVxuICAgICAgJ2F1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQgYWctY2VsbC1lZGl0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXRleHQtZmllbGQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICd0ZXh0J1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gc3RhcnRWYWx1ZVxuICAgIHRoaXMuX2lucHV0LnRhYkluZGV4ID0gMFxuXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAocGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgcGF0dGVybilcbiAgICB9XG5cbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aXRsZSAhPT0gbnVsbCAmJiB0aXRsZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IHRpdGxlXG4gICAgfVxuXG4gICAgdGhpcy5fb25DaGFuZ2UgPSB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuXG4gICAgLy8gc2V0dXAgdGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnRcbiAgICB0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUgPSB0aGlzLl9wYXJhbXMuaXRlbVRlbXBsYXRlXG4gICAgICA/IHRlbXBsYXRlKHRoaXMuX3BhcmFtcy5pdGVtVGVtcGxhdGUpXG4gICAgICA6ICcnXG4gICAgdGhpcy5fcmVuZGVyR3JvdXBUZW1wbGF0ZSA9IHRoaXMuX3BhcmFtcy5ncm91cFRlbXBsYXRlXG4gICAgICA/IHRlbXBsYXRlKHRoaXMuX3BhcmFtcy5ncm91cFRlbXBsYXRlKVxuICAgICAgOiAnJ1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IGF1dG9jb21wbGV0ZSh7XG4gICAgICBpbnB1dDogdGhpcy5faW5wdXQsXG4gICAgICBkZWJvdW5jZVdhaXRNczogZGVib3VuY2VXYWl0TXMsXG4gICAgICAvLyB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQgLCB0aGUgbGlzdCB3b250IGJlIGNsb3NlZCBpbiBHVUlcbiAgICAgIHByZXZlbnRTdWJtaXQ6IHRydWUsXG4gICAgICBmZXRjaDogdGhpcy5fb25BdXRvY29tcGxldGVGZXRjaC5iaW5kKHRoaXMpLFxuICAgICAgb25TZWxlY3Q6IHRoaXMuX29uQXV0b2NvbXBsZXRlU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICByZW5kZXJHcm91cDogdGhpcy5fb25BdXRvY29tcGxldGVSZW5kZXJHcm91cC5iaW5kKHRoaXMpLFxuICAgICAgcmVuZGVyOiB0aGlzLl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0uYmluZCh0aGlzKSxcbiAgICAgIGN1c3RvbWl6ZTogdGhpcy5fb25BdXRvY29tcGxldGVDdXN0b21pemUuYmluZCh0aGlzKSxcbiAgICAgIGVtcHR5TXNnOiB0aGlzLl9wYXJhbXMuZW1wdHlNZXNzYWdlIHx8IG51bGwsXG4gICAgICBtaW5MZW5ndGg6IHRoaXMuX3BhcmFtcy5taW5MZW5ndGggfHwgMixcbiAgICAgIHNob3dPbkZvY3VzOiB0aGlzLl9wYXJhbXMuc2hvd09uRm9jdXMgfHwgZmFsc2UsXG4gICAgICBjbGFzc05hbWU6IHBhcmFtcy5hcGkuZ3JpZENvcmUuZUdyaWREaXYuY2xhc3NOYW1lLmVuZHNXaXRoKCdkYXJrJylcbiAgICAgICAgPyAnZGFyaydcbiAgICAgICAgOiAnbGlnaHQnLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBET00gZWxlbWVudCBvZiB0aGUgY29tcG9uZW50LCB0aGlzIGlzIHdoYXQgdGhlIGdyaWQgcHV0cyBpbnRvIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9ndWlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZWxlY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBUaGUgY29tcG9uZW50IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dC52YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIHdoZW4gZWRpdGluZyBpcyBmaW5pc2hlZCAoZWcgaWYgZW50ZXIgaXMgcHJlc3NlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIHJlc3VsdCBvZiB0aGUgZWRpdCB3aWxsIGJlIGlnbm9yZWQuIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNDYW5jZWxBZnRlckVuZCgpIHtcbiAgICBjb25zdCBhbGxvd0N1c3RvbVZhbHVlcyA9IHRoaXMuX3BhcmFtcy5hbGxvd0N1c3RvbVZhbHVlcyB8fCBmYWxzZVxuICAgIGxldCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChpc1ZhbGlkICYmIGFsbG93Q3VzdG9tVmFsdWVzID09PSBmYWxzZSAmJiB0aGlzLl9sYXN0RmV0Y2hlZERhdGEpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLl9sYXN0RmV0Y2hlZERhdGEuZmlsdGVyKFxuICAgICAgICB4ID0+IHgudmFsdWUgPT09IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgICApXG4gICAgICBpc1ZhbGlkID0gZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDFcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzVmFsaWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKlxuICAgKiBDbGVhciB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMgYW5kIGRlc3Ryb3kgdGhlIGF1dG9jb21wbGV0ZVxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZS5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB0byBwcmVwYXJlIHN1Z2dlc3Rpb25zIGFuZCB0aGVuIHBhc3MgdGhlbSB0byBhdXRvY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IGluIHRoZSBpbnB1dCBmaWVsZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHN1Z2dlc3Rpb25zIGFyZSBwcmVwYXJlZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gZmFsc2Ugd2hlbiB0aGUgcmVxdWVzdCBpcyBpZ25vcmVkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfb25BdXRvY29tcGxldGVGZXRjaCh0ZXh0LCB1cGRhdGUpIHtcbiAgICBjb25zdCBzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCA9XG4gICAgICB0aGlzLl9wYXJhbXMuc3VwcHJlc3NTdWdnZXN0aW9uT25JbnZhbGlkSW5wdXQgfHwgZmFsc2VcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCAmJiAhaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9wYXJhbXMuZXZlbnRJZFxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihpZCwgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5fbGFzdEZldGNoZWREYXRhID0gZXZlbnQuZGV0YWlsXG4gICAgICB1cGRhdGUoZXZlbnQuZGV0YWlsKVxuICAgIH0pXG5cbiAgICB3aW5kb3cuYmFzaXNEaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMuX3BhcmFtcy5lR3JpZENlbGwsIHtcbiAgICAgIHR5cGU6ICdndy5zdWdnZXN0aW9uJyxcbiAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZCxcbiAgICAgICAgdGV4dCxcbiAgICAgICAgY29sdW1uOiB0aGlzLl9wYXJhbXMuY29sRGVmLmZpZWxkLFxuICAgICAgICByb3c6IGd3X3BhcnNlTm9kZShcbiAgICAgICAgICB0aGlzLl9wYXJhbXMubm9kZSxcbiAgICAgICAgICB0aGlzLl9wYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHVzZXIgY2hvb3NlIGFuIGl0ZW0gaW4gYXV0b2NvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBUaGUgc2VsZWN0ZWQgaXRlbVxuICAgKi9cbiAgX29uQXV0b2NvbXBsZXRlU2VsZWN0KGl0ZW0pIHtcbiAgICB0aGlzLl9pbnB1dC52YWx1ZSA9IGl0ZW0udmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIG9mIGF1dG9jb21wbGV0ZSBpdGVtcy5cbiAgICpcbiAgICogSXQgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggc3VnZ2VzdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBzdWdnZXN0aW9uIG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IGlucHV0IGZpZWxkIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0oaXRlbSwgY3VycmVudFZhbHVlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBkaXYuY2xhc3NOYW1lID0gJ3N1Z2dlc3Rpb24taXRlbSdcblxuICAgIGlmICh0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUpIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLl9yZW5kZXJJdGVtVGVtcGxhdGUoe1xuICAgICAgICBpdGVtLFxuICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gaXRlbS5sYWJlbFxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIG9mIGF1dG9jb21wbGV0ZSBncm91cHMuXG4gICAqXG4gICAqIEl0IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBncm91cE5hbWUgVGhlIGdyb3VwIG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IGN1cnJlbnRWYWx1ZSBUaGUgY3VycmVudCBpbnB1dCBmaWVsZCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cChncm91cE5hbWUsIGN1cnJlbnRWYWx1ZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgZGl2LmNsYXNzTmFtZSA9ICdzdWdnZXN0aW9uLWdyb3VwJ1xuXG4gICAgaWYgKHRoaXMuX3JlbmRlckdyb3VwVGVtcGxhdGUpIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSB0aGlzLl9yZW5kZXJHcm91cFRlbXBsYXRlKHsgZ3JvdXBOYW1lLCBjdXJyZW50VmFsdWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZGl2LmlubmVySFRNTCA9IGdyb3VwTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rIG9uIHRoZSBhdXRvY29tcGxldGUgY29udGFpbmVyIHJlbmRlciBhbmQgY2hhbmdlIHRoZSB3aWR0aCBhbmQgdGhlXG4gICAqIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRSZWN0XG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWF4SGVpZ2h0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgX29uQXV0b2NvbXBsZXRlQ3VzdG9taXplKGlucHV0LCBpbnB1dFJlY3QsIGNvbnRhaW5lciwgbWF4SGVpZ2h0KSB7XG4gICAgaWYgKHRoaXMuX3BhcmFtcy53aWR0aCkge1xuICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7dGhpcy5fcGFyYW1zLndpZHRofXB4YFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXJhbXMuaGVpZ2h0KSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5fcGFyYW1zLmhlaWdodH1weGBcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCB0byB0aGUgaW5wdXQgY2hhbmdlcyBhbmQgdmFsaWRhdGUgaXRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gVGhlIGV2ZW50IG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogRG8gdmFsaWRhdGUgdGhlIGdpdmVuIGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB2YWxpZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgX3ZhbGlkYXRlSW5wdXQoaW5wdXQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaW5wdXQuY2hlY2tWYWxpZGl0eSgpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2F1dG9jb21wbGV0ZS1pbnB1dC1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdhdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2F1dG9jb21wbGV0ZS1pbnB1dC1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdhdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdWdnZXN0aW9uRWRpdG9yXG4iLCIgLypcclxuICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmFhZGVuL2F1dG9jb21wbGV0ZVxyXG4gICogQ29weXJpZ2h0IChjKSAyMDE2IERlbnlzIEtyYXNub3NoY2hva1xyXG4gICogTUlUIExpY2Vuc2VcclxuICAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gRXZlbnRUcmlnZ2VyIHtcclxuICAgIEtleWJvYXJkID0gMCxcclxuICAgIEZvY3VzID0gMVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZUl0ZW0ge1xyXG4gICAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTZXR0aW5nczxUIGV4dGVuZHMgQXV0b2NvbXBsZXRlSXRlbT4ge1xyXG4gICAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICByZW5kZXI/OiAoaXRlbTogVCwgY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgcmVuZGVyR3JvdXA/OiAobmFtZTogc3RyaW5nLCBjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgICBlbXB0eU1zZz86IHN0cmluZztcclxuICAgIG9uU2VsZWN0OiAoaXRlbTogVCwgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpID0+IHZvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYXV0b2NvbXBsZXRlIG9uIGZvY3VzIGV2ZW50LiBGb2N1cyBldmVudCB3aWxsIGlnbm9yZSB0aGUgYG1pbkxlbmd0aGAgcHJvcGVydHkgYW5kIHdpbGwgYWx3YXlzIGNhbGwgYGZldGNoYC5cclxuICAgICAqL1xyXG4gICAgc2hvd09uRm9jdXM/OiBib29sZWFuO1xyXG4gICAgZmV0Y2g6ICh0ZXh0OiBzdHJpbmcsIHVwZGF0ZTogKGl0ZW1zOiBUW10gfCBmYWxzZSkgPT4gdm9pZCwgdHJpZ2dlcjogRXZlbnRUcmlnZ2VyKSA9PiB2b2lkO1xyXG4gICAgZGVib3VuY2VXYWl0TXM/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZvciBhZGRpdGlvbmFsIGF1dG9jb21wbGV0ZSBjdXN0b21pemF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IC0gaW5wdXQgYm94IGFzc29jaWF0ZWQgd2l0aCBhdXRvY29tcGxldGVcclxuICAgICAqIEBwYXJhbSB7Q2xpZW50UmVjdCB8IERPTVJlY3R9IGlucHV0UmVjdCAtIHNpemUgb2YgdGhlIGlucHV0IGJveCBhbmQgaXRzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydFxyXG4gICAgICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudH0gY29udGFpbmVyIC0gY29udGFpbmVyIHdpdGggc3VnZ2VzdGlvbnNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhIZWlnaHQgLSBtYXggaGVpZ2h0IHRoYXQgY2FuIGJlIHVzZWQgYnkgYXV0b2NvbXBsZXRlXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbWl6ZT86IChpbnB1dDogSFRNTElucHV0RWxlbWVudCwgaW5wdXRSZWN0OiBDbGllbnRSZWN0IHwgRE9NUmVjdCwgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCwgbWF4SGVpZ2h0OiBudW1iZXIpID0+IHZvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIFByZXZlbnRzIGF1dG9tYXRpYyBmb3JtIHN1Ym1pdCB3aGVuIEVOVEVSIGlzIHByZXNzZWRcclxuICAgICAqL1xyXG4gICAgcHJldmVudFN1Ym1pdD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlUmVzdWx0IHtcclxuICAgIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmNvbnN0IGVudW0gS2V5cyB7XHJcbiAgICBFbnRlciA9IDEzLFxyXG4gICAgRXNjID0gMjcsXHJcbiAgICBVcCA9IDM4LFxyXG4gICAgRG93biA9IDQwLFxyXG4gICAgTGVmdCA9IDM3LFxyXG4gICAgUmlnaHQgPSAzOSxcclxuICAgIFNoaWZ0ID0gMTYsXHJcbiAgICBDdHJsID0gMTcsXHJcbiAgICBBbHQgPSAxOCxcclxuICAgIENhcHNMb2NrID0gMjAsXHJcbiAgICBXaW5kb3dzS2V5ID0gOTEsXHJcbiAgICBUYWIgPSA5LFxyXG4gICAgRjEgPSAxMTIsXHJcbiAgICBGMTIgPSAxMjNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0b2NvbXBsZXRlPFQgZXh0ZW5kcyBBdXRvY29tcGxldGVJdGVtPihzZXR0aW5nczogQXV0b2NvbXBsZXRlU2V0dGluZ3M8VD4pOiBBdXRvY29tcGxldGVSZXN1bHQge1xyXG5cclxuICAgIC8vIGp1c3QgYW4gYWxpYXMgdG8gbWluaW1pemUgSlMgZmlsZSBzaXplXHJcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudDtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IGNvbnRhaW5lci5zdHlsZTtcclxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICBjb25zdCBtb2JpbGVGaXJlZm94ID0gdXNlckFnZW50LmluZGV4T2YoXCJGaXJlZm94XCIpICE9PSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZihcIk1vYmlsZVwiKSAhPT0gLTE7XHJcbiAgICBjb25zdCBkZWJvdW5jZVdhaXRNcyA9IHNldHRpbmdzLmRlYm91bmNlV2FpdE1zIHx8IDA7XHJcbiAgICBjb25zdCBwcmV2ZW50U3VibWl0ID0gc2V0dGluZ3MucHJldmVudFN1Ym1pdCB8fCBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gJ2tleXVwJyBldmVudCB3aWxsIG5vdCBiZSBmaXJlZCBvbiBNb2JpbGUgRmlyZWZveCwgc28gd2UgaGF2ZSB0byB1c2UgJ2lucHV0JyBldmVudCBpbnN0ZWFkXHJcbiAgICBjb25zdCBrZXlVcEV2ZW50TmFtZSA9IG1vYmlsZUZpcmVmb3ggPyBcImlucHV0XCIgOiBcImtleXVwXCI7XHJcbiAgICBcclxuICAgIGxldCBpdGVtczogVFtdID0gW107XHJcbiAgICBsZXQgaW5wdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICBsZXQgbWluTGVuID0gMjtcclxuICAgIGNvbnN0IHNob3dPbkZvY3VzID0gc2V0dGluZ3Muc2hvd09uRm9jdXM7XHJcbiAgICBsZXQgc2VsZWN0ZWQ6IFQgfCB1bmRlZmluZWQ7XHJcbiAgICBsZXQga2V5cHJlc3NDb3VudGVyID0gMDtcclxuICAgIGxldCBkZWJvdW5jZVRpbWVyIDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChzZXR0aW5ncy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIG1pbkxlbiA9IHNldHRpbmdzLm1pbkxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNldHRpbmdzLmlucHV0KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXQgdW5kZWZpbmVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gc2V0dGluZ3MuaW5wdXQ7XHJcblxyXG4gICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiYXV0b2NvbXBsZXRlIFwiICsgKHNldHRpbmdzLmNsYXNzTmFtZSB8fCBcIlwiKTtcclxuXHJcbiAgICAvLyBJT1MgaW1wbGVtZW50YXRpb24gZm9yIGZpeGVkIHBvc2l0aW9uaW5nIGhhcyBtYW55IGJ1Z3MsIHNvIHdlIHdpbGwgdXNlIGFic29sdXRlIHBvc2l0aW9uaW5nXHJcbiAgICBjb250YWluZXJTdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCB0aGUgY29udGFpbmVyIGZyb20gRE9NXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGRldGFjaCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGRlYm91bmNpbmcgdGltZXIgaWYgYXNzaWduZWRcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xlYXJEZWJvdW5jZVRpbWVyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBjb250YWluZXIgdG8gRE9NXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGF0dGFjaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lci5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgY29udGFpbmVyIGZvciBhdXRvY29tcGxldGUgaXMgZGlzcGxheWVkXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGNvbnRhaW5lckRpc3BsYXllZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFjb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFyIGF1dG9jb21wbGV0ZSBzdGF0ZSBhbmQgaGlkZSBjb250YWluZXJcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gcHJldmVudCB0aGUgdXBkYXRlIGNhbGwgaWYgdGhlcmUgYXJlIHBlbmRpbmcgQUpBWCByZXF1ZXN0c1xyXG4gICAgICAgIGtleXByZXNzQ291bnRlcisrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGl0ZW1zID0gW107XHJcbiAgICAgICAgaW5wdXRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYXV0b2NvbXBsZXRlIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyRGlzcGxheWVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyU3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XHJcbiAgICAgICAgY29udGFpbmVyU3R5bGUud2lkdGggPSBpbnB1dC5vZmZzZXRXaWR0aCArIFwicHhcIjtcclxuXHJcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XHJcbiAgICAgICAgbGV0IGlucHV0UmVjdDogQ2xpZW50UmVjdCB8IERPTVJlY3QgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNhbGMoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY0VsID0gZG9jLmRvY3VtZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGRvYy5ib2R5LmNsaWVudFRvcCB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBjbGllbnRMZWZ0ID0gZG9jRWwuY2xpZW50TGVmdCB8fCBkb2MuYm9keS5jbGllbnRMZWZ0IHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2NFbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsTGVmdDtcclxuXHJcbiAgICAgICAgICAgIGlucHV0UmVjdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB0b3AgPSBpbnB1dFJlY3QudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0ICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gaW5wdXRSZWN0LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdDtcclxuICAgIFxyXG4gICAgICAgICAgICBjb250YWluZXJTdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xyXG4gICAgXHJcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIChpbnB1dFJlY3QudG9wICsgaW5wdXQub2Zmc2V0SGVpZ2h0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZiAobWF4SGVpZ2h0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUuYm90dG9tID0gXCJcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLm1heEhlaWdodCA9IG1heEhlaWdodCArIFwicHhcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoZSBjYWxjIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB0d2ljZSwgb3RoZXJ3aXNlIHRoZSBjYWxjdWxhdGlvbiBtYXkgYmUgd3Jvbmcgb24gcmVzaXplIGV2ZW50IChjaHJvbWUgYnJvd3NlcilcclxuICAgICAgICBjYWxjKCk7XHJcbiAgICAgICAgY2FsYygpO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3MuY3VzdG9taXplICYmIGlucHV0UmVjdCkge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5jdXN0b21pemUoaW5wdXQsIGlucHV0UmVjdCwgY29udGFpbmVyLCBtYXhIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZHJhdyB0aGUgYXV0b2NvbXBsZXRlIGRpdiBlbGVtZW50IHdpdGggc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gZnJvbSBhdXRvY29tcGxldGUgRE9NIGNvbnRhaW5lclxyXG4gICAgICAgIHdoaWxlIChjb250YWluZXIuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZnVuY3Rpb24gZm9yIHJlbmRlcmluZyBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnNcclxuICAgICAgICBsZXQgcmVuZGVyID0gZnVuY3Rpb24oaXRlbTogVCwgY3VycmVudFZhbHVlOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50LnRleHRDb250ZW50ID0gaXRlbS5sYWJlbCB8fCBcIlwiO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbUVsZW1lbnQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2V0dGluZ3MucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHJlbmRlciA9IHNldHRpbmdzLnJlbmRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIHJlbmRlciBhdXRvY29tcGxldGUgZ3JvdXBzXHJcbiAgICAgICAgbGV0IHJlbmRlckdyb3VwID0gZnVuY3Rpb24oZ3JvdXBOYW1lOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogc3RyaW5nKTogSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgICAgICBncm91cERpdi50ZXh0Q29udGVudCA9IGdyb3VwTmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwRGl2O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNldHRpbmdzLnJlbmRlckdyb3VwKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckdyb3VwID0gc2V0dGluZ3MucmVuZGVyR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgICAgbGV0IHByZXZHcm91cCA9IFwiIzk/JFwiO1xyXG5cclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW06IFQpOiB2b2lkIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uZ3JvdXAgJiYgaXRlbS5ncm91cCAhPT0gcHJldkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2R3JvdXAgPSBpdGVtLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBEaXYgPSByZW5kZXJHcm91cChpdGVtLmdyb3VwLCBpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cERpdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwRGl2LmNsYXNzTmFtZSArPSBcIiBncm91cFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGdyb3VwRGl2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkaXYgPSByZW5kZXIoaXRlbSwgaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChkaXYpIHtcclxuICAgICAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXY6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5vblNlbGVjdChpdGVtLCBpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lICs9IFwiIHNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuZW1wdHlNc2cpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBlbXB0eS5jbGFzc05hbWUgPSBcImVtcHR5XCI7XHJcbiAgICAgICAgICAgICAgICBlbXB0eS50ZXh0Q29udGVudCA9IHNldHRpbmdzLmVtcHR5TXNnO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVtcHR5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dGFjaCgpO1xyXG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgIHVwZGF0ZVNjcm9sbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlmRGlzcGxheWVkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250YWluZXJEaXNwbGF5ZWQoKSkge1xyXG4gICAgICAgICAgICB1cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVzaXplRXZlbnRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHVwZGF0ZUlmRGlzcGxheWVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2Nyb2xsRXZlbnRIYW5kbGVyKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgdXBkYXRlSWZEaXNwbGF5ZWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGtleXVwRXZlbnRIYW5kbGVyKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2LndoaWNoIHx8IGV2LmtleUNvZGUgfHwgMDtcclxuXHJcbiAgICAgICAgY29uc3QgaWdub3JlID0gW0tleXMuVXAsIEtleXMuRW50ZXIsIEtleXMuRXNjLCBLZXlzLlJpZ2h0LCBLZXlzLkxlZnQsIEtleXMuU2hpZnQsIEtleXMuQ3RybCwgS2V5cy5BbHQsIEtleXMuQ2Fwc0xvY2ssIEtleXMuV2luZG93c0tleSwgS2V5cy5UYWJdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGlnbm9yZSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlDb2RlID49IEtleXMuRjEgJiYga2V5Q29kZSA8PSBLZXlzLkYxMikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGUgZG93biBrZXkgaXMgdXNlZCB0byBvcGVuIGF1dG9jb21wbGV0ZVxyXG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkRvd24gJiYgY29udGFpbmVyRGlzcGxheWVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRGZXRjaChFdmVudFRyaWdnZXIuS2V5Ym9hcmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXV0b21hdGljYWxseSBtb3ZlIHNjcm9sbCBiYXIgaWYgc2VsZWN0ZWQgaXRlbSBpcyBub3QgdmlzaWJsZVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVTY3JvbGwoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBjb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZWxlbWVudHNbMF0gYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBtYWtlIGdyb3VwIHZpc2libGVcclxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy5jbGFzc05hbWUuaW5kZXhPZihcImdyb3VwXCIpICE9PSAtMSAmJiAhcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHByZXZpb3VzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5vZmZzZXRUb3AgPCBjb250YWluZXIuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RCb3R0b20gPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQm90dG9tID0gY29udGFpbmVyLnNjcm9sbFRvcCArIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0Qm90dG9tID4gY29udGFpbmVyQm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCArPSBzZWxlY3RCb3R0b20gLSBjb250YWluZXJCb3R0b207XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWxlY3QgdGhlIHByZXZpb3VzIGl0ZW0gaW4gc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2VsZWN0UHJldigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zW2ldIHx8IGkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBpdGVtc1tpIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCB0aGUgbmV4dCBpdGVtIGluIHN1Z2dlc3Rpb25zXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHNlbGVjdE5leHQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VsZWN0ZWQgfHwgc2VsZWN0ZWQgPT09IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkID0gaXRlbXNbMF07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoaXRlbXMubGVuZ3RoIC0gMSk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IGl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGtleWRvd25FdmVudEhhbmRsZXIoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXYud2hpY2ggfHwgZXYua2V5Q29kZSB8fCAwO1xyXG5cclxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5VcCB8fCBrZXlDb2RlID09PSBLZXlzLkRvd24gfHwga2V5Q29kZSA9PT0gS2V5cy5Fc2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySXNEaXNwbGF5ZWQgPSBjb250YWluZXJEaXNwbGF5ZWQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkVzYykge1xyXG4gICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVyRGlzcGxheWVkIHx8IGl0ZW1zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXlDb2RlID09PSBLZXlzLlVwXHJcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxlY3RQcmV2KClcclxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdE5leHQoKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVySXNEaXNwbGF5ZWQpIHtcclxuICAgICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm9uU2VsZWN0KHNlbGVjdGVkLCBpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHByZXZlbnRTdWJtaXQpIHtcclxuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZm9jdXNFdmVudEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHNob3dPbkZvY3VzKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0RmV0Y2goRXZlbnRUcmlnZ2VyLkZvY3VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnRGZXRjaCh0cmlnZ2VyOiBFdmVudFRyaWdnZXIpIHtcclxuICAgICAgICAvLyBpZiBtdWx0aXBsZSBrZXlzIHdlcmUgcHJlc3NlZCwgYmVmb3JlIHdlIGdldCB1cGRhdGUgZnJvbSBzZXJ2ZXIsXHJcbiAgICAgICAgLy8gdGhpcyBtYXkgY2F1c2UgcmVkcmF3aW5nIG91ciBhdXRvY29tcGxldGUgbXVsdGlwbGUgdGltZXMgYWZ0ZXIgdGhlIGxhc3Qga2V5IHByZXNzLlxyXG4gICAgICAgIC8vIHRvIGF2b2lkIHRoaXMsIHRoZSBudW1iZXIgb2YgdGltZXMga2V5Ym9hcmQgd2FzIHByZXNzZWQgd2lsbCBiZVxyXG4gICAgICAgIC8vIHNhdmVkIGFuZCBjaGVja2VkIGJlZm9yZSByZWRyYXcgb3VyIGF1dG9jb21wbGV0ZSBib3guXHJcbiAgICAgICAgY29uc3Qgc2F2ZWRLZXlwcmVzc0NvdW50ZXIgPSArK2tleXByZXNzQ291bnRlcjtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsID0gaW5wdXQudmFsdWU7XHJcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPj0gbWluTGVuIHx8IHRyaWdnZXIgPT09IEV2ZW50VHJpZ2dlci5Gb2N1cykge1xyXG4gICAgICAgICAgICBjbGVhckRlYm91bmNlVGltZXIoKTtcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuZmV0Y2godmFsLCBmdW5jdGlvbihlbGVtZW50czogVFtdIHwgZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cHJlc3NDb3VudGVyID09PSBzYXZlZEtleXByZXNzQ291bnRlciAmJiBlbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1swXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgRXZlbnRUcmlnZ2VyLktleWJvYXJkKTtcclxuICAgICAgICAgICAgfSwgdHJpZ2dlciA9PT0gRXZlbnRUcmlnZ2VyLktleWJvYXJkID8gZGVib3VuY2VXYWl0TXMgOiAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBibHVyRXZlbnRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZGVsYXkgY2xlYXIsIGJlY2F1c2Ugd2hlbiB3ZSBjbGljayBvbiBhbiBpdGVtLCBibHVyIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBjbGljayBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gRE9NXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAhPT0gaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRml4ZXMgIzI2OiBvbiBsb25nIGNsaWNrcyBmb2N1cyB3aWxsIGJlIGxvc3QgYW5kIG9uU2VsZWN0IG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZXZ0OiBFdmVudCkge1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRml4ZXMgIzMwOiBhdXRvY29tcGxldGUgY2xvc2VzIHdoZW4gc2Nyb2xsYmFyIGlzIGNsaWNrZWQgaW4gSUVcclxuICAgICAqIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzkyMTAyNjcvMTMxNzIzNDlcclxuICAgICAqL1xyXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoKSA9PiBpbnB1dC5mb2N1cygpKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUgRE9NIGVsZW1lbnRzIGFuZCBjbGVhciBldmVudCBoYW5kbGVyc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwga2V5ZG93bkV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihrZXlVcEV2ZW50TmFtZSwga2V5dXBFdmVudEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCk7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgYmx1ckV2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgcmVzaXplRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxFdmVudEhhbmRsZXIsIHRydWUpO1xyXG4gICAgICAgIGNsZWFyRGVib3VuY2VUaW1lcigpO1xyXG4gICAgICAgIGNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dXAgZXZlbnQgaGFuZGxlcnNcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGtleWRvd25FdmVudEhhbmRsZXIpO1xyXG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihrZXlVcEV2ZW50TmFtZSwga2V5dXBFdmVudEhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCk7XHJcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyRXZlbnRIYW5kbGVyKTtcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVFdmVudEhhbmRsZXIpO1xyXG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsRXZlbnRIYW5kbGVyLCB0cnVlKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlc3Ryb3lcclxuICAgIH07XHJcbn1cclxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdGF0ZShpZCwgc3RhdGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICB0cnkge1xuICAgIG9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtblN0YXRlKHN0YXRlLmNvbHVtbnMpXG4gICAgb3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uR3JvdXBTdGF0ZShzdGF0ZS5ncm91cHMpXG4gICAgb3B0aW9ucy5hcGkuc2V0U29ydE1vZGVsKHN0YXRlLnNvcnQpXG4gICAgb3B0aW9ucy5hcGkuc2V0RmlsdGVyTW9kZWwoc3RhdGUuZmlsdGVycylcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIGdyaWQgc3RhdGUgZnJvbSBKU09OJywgZSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0U3RhdGUoaWQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgY29sdW1ucyA9IG9wdGlvbnMuY29sdW1uQXBpLmdldENvbHVtblN0YXRlKClcbiAgY29uc3QgZ3JvdXBzID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0Q29sdW1uR3JvdXBTdGF0ZSgpXG4gIGNvbnN0IHNvcnQgPSBvcHRpb25zLmFwaS5nZXRTb3J0TW9kZWwoKVxuICBjb25zdCBmaWx0ZXJzID0gb3B0aW9ucy5hcGkuZ2V0RmlsdGVyTW9kZWwoKVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBncm91cHMsXG4gICAgICBzb3J0LFxuICAgICAgZmlsdGVycyxcbiAgICB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gY29udmVydCB0aGUgZ3JpZCBzdGF0ZSB0byBqc29uJywgZSlcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTaWRlQmFyVmlzaWJsZShpZCwgdmFsdWUpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2V0U2lkZUJhclZpc2libGUoQm9vbGVhbih2YWx1ZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19vcGVuVG9vbHBhbmVsKGdyaWRJZCwgdG9vbHBhbmVsSWQpIHtcbiAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuYXBpLm9wZW5Ub29sUGFuZWwodG9vbHBhbmVsSWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19jbG9zZVRvb2xwYW5lbChncmlkSWQsIHRvb2xwYW5lbElkKSB7XG4gIGd3X2dldEdyaWQoZ3JpZElkKS5vcHRpb25zLmFwaS5jbG9zZVRvb2xQYW5lbCh0b29scGFuZWxJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldEZ1bmN0aW9uc1JlYWRPbmx5KGlkLCByZWFkb25seSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRGdW5jdGlvbnNSZWFkT25seShCb29sZWFuKHJlYWRvbmx5KSlcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eShpZCwga2V5LCB2aXNpYmlsaXR5KSB7XG4gIGd3X2dldEdyaWQoaWQpXG4gICAgLm9wdGlvbnMuYXBpLmdldFN0YXR1c1BhbmVsKGtleSlcbiAgICAuc2V0VmlzaWJsZShCb29sZWFuKHZpc2liaWxpdHkpKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogU2hvdyBsb2FkaW5nIG92ZXJsYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3Nob3dMb2FkaW5nT3ZlcmxheShpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zaG93TG9hZGluZ092ZXJsYXkoKVxufVxuXG4vKipcbiAqIFNob3cgJ25vIHJvd3MnIG92ZXJsYXlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3Nob3dOb1Jvd3NPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNob3dOb1Jvd3NPdmVybGF5KClcbn1cblxuLyoqXG4gKiBDbGVhciBhbGwgb3ZlcmxheXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2hpZGVPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmhpZGVPdmVybGF5KClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuXG4vKipcbiAqIFVwZGF0ZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGNvbnRleHQncyBrZXkgdG8gdXBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgIFRoZSBuZXcgY29udGV4dCdzIHZhbHVlXG4gKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBnd19sZWdhY3lVcGRhdGVDb250ZXh0KGlkLCBrZXksIHZhbHVlKSB7XG4vLyBcdGd3X2dldEdyaWQoaWQpXG4vLyBcdFx0Lm9wdGlvbnNcbi8vIFx0XHQuY29udGV4dFtrZXldID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4vLyB9XG5cbi8qKlxuICogVXBkYXRlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgVGhlIG5ldyBjb250ZXh0IG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdXBkYXRlQ29udGV4dChpZCwgY29udGV4dCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQgPSBjb250ZXh0XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9qc3MhanNzL2pzcy5qcydcbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogQWRkIG5ldyBzdHlsZVxuICpcbiAqIEFkZCBuZXcgc3R5bGUgdG8gdGhlIGRvY3VtZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGNzcyBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVzIEpzb24gc3RyaW5nIGZvciBhbiBhcnJheSBvZiBydWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U3R5bGUoc2VsZWN0b3IsIHJ1bGVzKSB7XG4gIGpzcy5mb3JEb2N1bWVudChnd19nZXREb2N1bWVudCgpKS5zZXQoc2VsZWN0b3IsIEpTT04ucGFyc2UocnVsZXMpKVxufVxuXG4vKipcbiAqIFJlbW92ZSBzdHlsZVxuICpcbiAqIFJlbW92ZSBhZGRlZCBzdHlsZSBmcm9tIHRoZXMgZG9jdW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgY3NzIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVTdHlsZShzZWxlY3Rvcikge1xuICBqc3MuZm9yRG9jdW1lbnQoZ3dfZ2V0RG9jdW1lbnQoKSkucmVtb3ZlKHNlbGVjdG9yKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxbXCJqc3NcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcanNzLmpzXCIpOyIsIi8qXG4gKiBKU1MgdjAuNiAtIEphdmFTY3JpcHQgU3R5bGVzaGVldHNcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Cb3g5L2pzc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMSwgRGF2aWQgVGFuZ1xuICogTUlUIExpY2Vuc2VkIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcbiAqL1xudmFyIGpzcyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgYWRqU2VsQXR0clJlZ2V4ID0gLygoPzpcXC58IylbXlxcLlxccyNdKykoKD86XFwufCMpW15cXC5cXHMjXSspL2c7XG4gICAgdmFyIGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleCA9IC8oOjopKGJlZm9yZXxhZnRlcnxmaXJzdC1saW5lfGZpcnN0LWxldHRlcnxzZWxlY3Rpb24pLztcbiAgICB2YXIgc2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4ID0gLyhbXjpdKSg6KShiZWZvcmV8YWZ0ZXJ8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8c2VsZWN0aW9uKS87XG4gICAgdmFyIHNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHM7IC8vIGZsYWcgZm9yIG9sZGVyIGJyb3dzZXJzXG5cbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnNBbmRSdWxlcyhzaGVldCkge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gT2xkZXIgYnJvd3NlcnMgYW5kIEZGIHJlcG9ydCBwc2V1ZG8gZWxlbWVudCBzZWxlY3RvcnMgaW4gYW4gb3V0ZGF0ZWQgZm9ybWF0XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHNbc2VsZWN0b3JUZXh0XSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbc2VsZWN0b3JUZXh0XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0c1tzZWxlY3RvclRleHRdLnB1c2goe1xuICAgICAgICAgICAgICAgIHNoZWV0OiBzaGVldCxcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICBzdHlsZTogcnVsZXNbaV0uc3R5bGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJ1bGVzKHNoZWV0LCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgLy8gQnJvd3NlcnMgcmVwb3J0IHNlbGVjdG9ycyBpbiBsb3dlcmNhc2VcbiAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gcnVsZXNbaV0uc2VsZWN0b3JUZXh0O1xuICAgICAgICAgICAgLy8gTm90ZSAtIGNlcnRhaW4gcnVsZXMgKGUuZy4gQHJ1bGVzKSBkb24ndCBoYXZlIHNlbGVjdG9yVGV4dFxuICAgICAgICAgICAgaWYgKHNlbGVjdG9yVGV4dCAmJiAoc2VsZWN0b3JUZXh0ID09IHNlbGVjdG9yIHx8IHNlbGVjdG9yVGV4dCA9PSBzd2FwQWRqU2VsQXR0cihzZWxlY3RvcikgfHwgc2VsZWN0b3JUZXh0ID09IHN3YXBQc2V1ZG9FbFN5bnRheChzZWxlY3RvcikpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2ldLnN0eWxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkUnVsZShzaGVldCwgc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gc2hlZXQuY3NzUnVsZXMgfHwgc2hlZXQucnVsZXMgfHwgW107XG4gICAgICAgIHZhciBpbmRleCA9IHJ1bGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHBzZXVkb0VsZW1lbnRSdWxlID0gYWRkUHNldWRvRWxlbWVudFJ1bGUoc2hlZXQsIHNlbGVjdG9yLCBydWxlcywgaW5kZXgpO1xuXG4gICAgICAgIGlmICghcHNldWRvRWxlbWVudFJ1bGUpIHtcbiAgICAgICAgICAgIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBzZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgc3R5bGU6IHJ1bGVzW2luZGV4XS5zdHlsZVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBhZGRSdWxlVG9TaGVldChzaGVldCwgc2VsZWN0b3IsIGluZGV4KSB7XG4gICAgICAgIGlmIChzaGVldC5pbnNlcnRSdWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9yICsgJyB7IH0nLCBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaGVldC5hZGRSdWxlKHNlbGVjdG9yLCBudWxsLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHNpbmdsZSBjb2xvbiBzeW50YXggZm9yIG9sZGVyIGJyb3dzZXJzIGFuZCBidWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ5NjUxXG4gICAgZnVuY3Rpb24gYWRkUHNldWRvRWxlbWVudFJ1bGUoc2hlZXQsIHNlbGVjdG9yLCBydWxlcywgaW5kZXgpIHtcbiAgICAgICAgdmFyIGRvdWJsZUNvbG9uU2VsZWN0b3I7XG4gICAgICAgIHZhciBzaW5nbGVDb2xvblNlbGVjdG9yO1xuXG4gICAgICAgIGlmIChkb3VibGVDb2xvblBzZXVkb0VsUmVnZXguZXhlYyhzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGRvdWJsZUNvbG9uU2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgICAgIHNpbmdsZUNvbG9uU2VsZWN0b3IgPSB0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMoc2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbmdsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgZG91YmxlQ29sb25TZWxlY3RvciA9IHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgICAgICBzaW5nbGVDb2xvblNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBkZWFsaW5nIHdpdGggYSBwc2V1ZG8gZWxlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgICAvLyBBc3N1bWUgbW9kZXJuIGJyb3dzZXIgYW5kIHRoZW4gY2hlY2sgaWYgc3VjY2Vzc2Z1bFxuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIGRvdWJsZUNvbG9uU2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cykge1xuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIHNpbmdsZUNvbG9uU2VsZWN0b3IsIGluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVwbGFjZShzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgc3VibWF0Y2gxLCBzdWJtYXRjaDIsIHN1Ym1hdGNoMykge1xuICAgICAgICAgICAgcmV0dXJuIHN1Ym1hdGNoMSArICc6OicgKyBzdWJtYXRjaDM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVwbGFjZShkb3VibGVDb2xvblBzZXVkb0VsUmVnZXgsIGZ1bmN0aW9uKG1hdGNoLCBzdWJtYXRjaDEsIHN1Ym1hdGNoMikge1xuICAgICAgICAgICAgcmV0dXJuICc6JyArIHN1Ym1hdGNoMjtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVSdWxlKHJ1bGUpIHtcbiAgICAgICAgdmFyIHNoZWV0ID0gcnVsZS5zaGVldDtcbiAgICAgICAgaWYgKHNoZWV0LmRlbGV0ZVJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0LmRlbGV0ZVJ1bGUocnVsZS5pbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hlZXQucmVtb3ZlUnVsZSkge1xuICAgICAgICAgICAgc2hlZXQucmVtb3ZlUnVsZShydWxlLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICAgICAgaWYgKCFzcmMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGRlc3Rba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZVN0eWxlcyhydWxlcykge1xuICAgICAgICB2YXIgYWdncmVnYXRlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGV4dGVuZChhZ2dyZWdhdGUsIGRlY2xhcmVkUHJvcGVydGllcyhydWxlc1tpXS5zdHlsZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjbGFyZWRQcm9wZXJ0aWVzKHN0eWxlKSB7XG4gICAgICAgIHZhciBkZWNsYXJlZCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWNsYXJlZFtzdHlsZVtpXV0gPSBzdHlsZVt0b0NhbWVsQ2FzZShzdHlsZVtpXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNsYXJlZDtcbiAgICB9XG5cbiAgICAvLyBJRTkgc3RvcmVzIHJ1bGVzIHdpdGggYXR0cmlidXRlcyAoY2xhc3NlcyBvciBJRCdzKSBhZGphY2VudCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIgYXMgZGVmaW5lZFxuICAgIC8vIGNhdXNpbmcgdGhlbSB0byBub3QgYmUgZm91bmQsIHNvIHRoaXMgbWV0aG9kIHN3YXBzIFsjfC5dc2VsMVsjfC5dc2VsMiB0byBiZWNvbWUgWyN8Ll1zZWwyWyN8Ll1zZWwxXG4gICAgZnVuY3Rpb24gc3dhcEFkalNlbEF0dHIoc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIHN3YXAgPSAnJztcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IGFkalNlbEF0dHJSZWdleC5leGVjKHNlbGVjdG9yKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09PSAnJylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHIobWF0Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgsIG1hdGNoWzJdLmxlbmd0aCk7XG4gICAgICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cihtYXRjaC5pbmRleCwgbWF0Y2hbMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyKGxhc3RJbmRleCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gc3dhcDtcbiAgICB9O1xuXG4gICAgLy8gRkYgYW5kIG9sZGVyIGJyb3dzZXJzIHN0b3JlIHJ1bGVzIHdpdGggcHNldWRvIGVsZW1lbnRzIHVzaW5nIHNpbmdsZS1jb2xvbiBzeW50YXhcbiAgICBmdW5jdGlvbiBzd2FwUHNldWRvRWxTeW50YXgoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFN0eWxlUHJvcGVydGllcyhydWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICB2YXIgaW1wb3J0YW50SW5kZXggPSB2YWx1ZS5pbmRleE9mKCcgIWltcG9ydGFudCcpO1xuXG4gICAgICAgICAgICAvLyBNb2Rlcm4gYnJvd3NlcnMgc2VlbSB0byBoYW5kbGUgb3ZlcnJpZGVzIGZpbmUsIGJ1dCBJRTkgZG9lc24ndFxuICAgICAgICAgICAgcnVsZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpOyBcbiAgICAgICAgICAgIGlmIChpbXBvcnRhbnRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBydWxlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUuc3Vic3RyKDAsIGltcG9ydGFudEluZGV4KSwgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBydWxlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24gKG1hdGNoLCBzdWJtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1Ym1hdGNoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUNhbWVsQ2FzZWRQcm9wZXJ0eU5hbWVzKG9sZFByb3BzKSB7XG4gICAgICAgIHZhciBuZXdQcm9wcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgICAgICAgIG5ld1Byb3BzW3VuQ2FtZWxDYXNlKGtleSldID0gb2xkUHJvcHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5DYW1lbENhc2Uoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFtBLVpdKS9nLCBmdW5jdGlvbihtYXRjaCwgc3VibWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiAnLScgKyBzdWJtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgSnNzID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHRoaXMuZG9jID0gZG9jO1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLmRvYy5oZWFkIHx8IHRoaXMuZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgIHRoaXMuc2hlZXRzID0gdGhpcy5kb2Muc3R5bGVTaGVldHMgfHwgW107XG4gICAgfTtcblxuICAgIEpzcy5wcm90b3R5cGUgPSB7XG4gICAgICAgIC8vIFJldHVybnMgSlNTIHJ1bGVzIChzZWxlY3RvciBpcyBvcHRpb25hbClcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVTdHlsZXMoZ2V0UnVsZXModGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRTZWxlY3RvcnNBbmRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCk7XG4gICAgICAgICAgICBmb3IgKHNlbGVjdG9yIGluIHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgcnVsZXNbc2VsZWN0b3JdID0gYWdncmVnYXRlU3R5bGVzKHJ1bGVzW3NlbGVjdG9yXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJldHVybnMgYWxsIHJ1bGVzIChzZWxlY3RvciBpcyByZXF1aXJlZClcbiAgICAgICAgZ2V0QWxsOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBleHRlbmQocHJvcGVydGllcywgYWdncmVnYXRlU3R5bGVzKGdldFJ1bGVzKHRoaXMuc2hlZXRzW2ldLCBzZWxlY3RvcikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBZGRzIEpTUyBydWxlcyBmb3IgdGhlIHNlbGVjdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBwcm9wZXJ0aWVzXG4gICAgICAgIHNldDogZnVuY3Rpb24oc2VsZWN0b3IsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2hlZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTaGVldCA9IHRoaXMuX2NyZWF0ZVNoZWV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gdHJhbnNmb3JtQ2FtZWxDYXNlZFByb3BlcnR5TmFtZXMocHJvcGVydGllcyk7XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgaWYgKCFydWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBydWxlcyA9IFthZGRSdWxlKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3RvcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNldFN0eWxlUHJvcGVydGllcyhydWxlc1tpXSwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJlbW92ZXMgSlNTIHJ1bGVzIChzZWxlY3RvciBpcyBvcHRpb25hbClcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU2hlZXQodGhpcy5kZWZhdWx0U2hlZXQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRlZmF1bHRTaGVldDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGUocnVsZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgX2NyZWF0ZVNoZWV0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZU5vZGUgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgc3R5bGVOb2RlLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgc3R5bGVOb2RlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgICAgIHRoaXMuaGVhZC5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlTm9kZS5zaGVldDtcbiAgICAgICAgfSxcbiAgICAgICAgX3JlbW92ZVNoZWV0OiBmdW5jdGlvbihzaGVldCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBzaGVldC5vd25lck5vZGU7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGV4cG9ydHMgPSBuZXcgSnNzKGRvY3VtZW50KTtcbiAgICBleHBvcnRzLmZvckRvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHJldHVybiBuZXcgSnNzKGRvYyk7XG4gICAgfTtcbiAgICByZXR1cm4gZXhwb3J0cztcbn0pKCk7XG5cbnR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzICYmIChtb2R1bGUuZXhwb3J0cyA9IGpzcyk7IC8vIENvbW1vbkpTIHN1cHBvcnQiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vZmxhdHBpY2tyLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIm1vZHVsZS5leHBvcnRzID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgb3BhY2l0eTogMDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBwYWRkaW5nOiAwO1xcbiAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gIGRpcmVjdGlvbjogbHRyO1xcbiAgYm9yZGVyOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xcbiAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaW5saW5lIHtcXG4gIG9wYWNpdHk6IDE7XFxuICBtYXgtaGVpZ2h0OiA2NDBweDtcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIub3BlbiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB6LWluZGV4OiA5OTk5OTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hbmltYXRlLm9wZW4ge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IGZwRmFkZUluRG93biAzMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XFxuICAgICAgICAgIGFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IDJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5zdGF0aWMge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiBjYWxjKDEwMCUgKyAycHgpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnN0YXRpYy5vcGVuIHtcXG4gIHotaW5kZXg6IDk5OTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMSkgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rNykge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5tdWx0aU1vbnRoIC5mbGF0cGlja3ItZGF5cyAuZGF5Q29udGFpbmVyOm50aC1jaGlsZChuKzIpIC5mbGF0cGlja3ItZGF5LmluUmFuZ2U6bnRoLWNoaWxkKDduKzEpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTJweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzVGltZSAuZGF5Q29udGFpbmVyIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1dlZWtzIC5kYXlDb250YWluZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuaGFzVGltZSAuZmxhdHBpY2tyLXRpbWUge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubm9DYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb250ZW50OiAnJztcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgbGVmdDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dSaWdodDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YWZ0ZXIsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1JpZ2h0OmFmdGVyIHtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogMjJweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjphZnRlciB7XFxuICBsZWZ0OiA1MCU7XFxuICByaWdodDogNTAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmJlZm9yZSB7XFxuICBib3JkZXItd2lkdGg6IDVweDtcXG4gIG1hcmdpbjogMCAtNXB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyOmFmdGVyIHtcXG4gIGJvcmRlci13aWR0aDogNHB4O1xcbiAgbWFyZ2luOiAwIC00cHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xcbiAgYm90dG9tOiAxMDAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmJlZm9yZSB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93VG9wOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YmVmb3JlLFxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YWZ0ZXIge1xcbiAgdG9wOiAxMDAlO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmJlZm9yZSB7XFxuICBib3JkZXItdG9wLWNvbG9yOiAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmZsYXRwaWNrci13cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLmZsYXRwaWNrci1tb250aHMge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbW9udGgge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAtd2Via2l0LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGgge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIHotaW5kZXg6IDM7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIGksXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLXByZXYtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoIHtcXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbiAgbGVmdDogMDtcXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG59XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG4gIHJpZ2h0OiAwO1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbn1cXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoOmhvdmVyIHtcXG4gIGNvbG9yOiAjOTU5ZWE5O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIgc3ZnLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciBzdmcge1xcbiAgZmlsbDogI2Y2NDc0NztcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2ZyxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggc3ZnIHBhdGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2ZyBwYXRoIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgZmlsbDogaW5oZXJpdDtcXG59XFxuLm51bUlucHV0V3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQsXFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LW1zLWNsZWFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgcGFkZGluZzogMCA0cHggMCAycHg7XFxuICBoZWlnaHQ6IDUwJTtcXG4gIGxpbmUtaGVpZ2h0OiA1MCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjE1KTtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcCB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiA0cHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjYpO1xcbiAgdG9wOiAyNiU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd24ge1xcbiAgdG9wOiA1MCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC42KTtcXG4gIHRvcDogNDAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHtcXG4gIHdpZHRoOiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHBhdGgge1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjUpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIgc3BhbiB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGgge1xcbiAgZm9udC1zaXplOiAxMzUlO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNzUlO1xcbiAgbGVmdDogMTIuNSU7XFxuICBwYWRkaW5nOiA3LjQ4cHggMCAwIDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGhlaWdodDogMzRweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWNoO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHdpZHRoOiA2Y2g7XFxuICB3aWR0aDogN2NoXFxcXDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHRleHQ7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcltkaXNhYmxlZF0sXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXTpob3ZlciB7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjUpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMge1xcbiAgYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIG1hcmdpbjogLTFweCAwIDAgMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6Zm9jdXMsXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdlZWtkYXlzIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla2RheXMgLmZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuc3Bhbi5mbGF0cGlja3Itd2Vla2RheSB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmb250LXNpemU6IDkwJTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIG1hcmdpbjogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcbi5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci13ZWVrcyB7XFxuICBwYWRkaW5nOiAxcHggMCAwIDA7XFxufVxcbi5mbGF0cGlja3ItZGF5cyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XFxuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheXM6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmRheUNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgb3V0bGluZTogMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgbWluLXdpZHRoOiAzMDcuODc1cHg7XFxuICBtYXgtd2lkdGg6IDMwNy44NzVweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZGF5Q29udGFpbmVyICsgLmRheUNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5IHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDE1MHB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgd2lkdGg6IDE0LjI4NTcxNDMlO1xcbiAgLXdlYmtpdC1mbGV4LWJhc2lzOiAxNC4yODU3MTQzJTtcXG4gICAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTQuMjg1NzE0MyU7XFxuICAgICAgICAgIGZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xcbiAgbWF4LXdpZHRoOiAzOXB4O1xcbiAgaGVpZ2h0OiAzOXB4O1xcbiAgbGluZS1oZWlnaHQ6IDM5cHg7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5OmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6Zm9jdXMge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIGJhY2tncm91bmQ6ICNlNmU2ZTY7XFxuICBib3JkZXItY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LnRvZGF5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OWVhOTtcXG59XFxuLmZsYXRwaWNrci1kYXkudG9kYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkudG9kYXk6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xcbiAgYmFja2dyb3VuZDogIzk1OWVhOTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZCxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQ6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLm5leHRNb250aERheSB7XFxuICBiYWNrZ3JvdW5kOiAjNTY5ZmY3O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItY29sb3I6ICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweCAwIDAgNTBweDtcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5lbmRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiAwIDUwcHggNTBweCAwO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTEwcHggMCAwICM1NjlmZjc7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xMHB4IDAgMCAjNTY5ZmY3O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwcHg7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQubmV4dE1vbnRoRGF5IHtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMyk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMSk7XFxufVxcbi5mbGF0cGlja3ItZGF5LndlZWsuc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgIzU2OWZmNywgNXB4IDAgMCAjNTY5ZmY3O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjNTY5ZmY3LCA1cHggMCAwICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LmhpZGRlbiB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5yYW5nZU1vZGUgLmZsYXRwaWNrci1kYXkge1xcbiAgbWFyZ2luLXRvcDogMXB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla3Mge1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciAuZmxhdHBpY2tyLXdlZWtkYXkge1xcbiAgZmxvYXQ6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheSxcXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheTpob3ZlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uZmxhdHBpY2tyLXJDb250YWluZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZsYXRwaWNrci10aW1lIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG91dGxpbmU6IDA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgbWF4LWhlaWdodDogNDBweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci10aW1lOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogdGFibGU7XFxuICBjbGVhcjogYm90aDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIHdpZHRoOiA0MCU7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZS5oYXNTZWNvbmRzIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDI2JTtcXG59XFxuLmZsYXRwaWNrci10aW1lLnRpbWUyNGhyIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDQ5JTtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0IHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1ob3VyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLW1pbnV0ZSxcXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLXNlY29uZCB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJvcmRlcjogMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItdGltZS1zZXBhcmF0b3IsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG0ge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB3aWR0aDogMiU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtIHtcXG4gIG91dGxpbmU6IDA7XFxuICB3aWR0aDogMTglO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1cyxcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbn1cXG4uZmxhdHBpY2tyLWlucHV0W3JlYWRvbmx5XSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmcEZhZGVJbkRvd24ge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICB9XFxufVxcblwiIiwiXG4vKipcbiAqIFdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQsIGBzdHlsZS1sb2FkZXJgIHVzZXMgYSBsaW5rIGVsZW1lbnQgd2l0aCBhIGRhdGEtdXJpIHRvXG4gKiBlbWJlZCB0aGUgY3NzIG9uIHRoZSBwYWdlLiBUaGlzIGJyZWFrcyBhbGwgcmVsYXRpdmUgdXJscyBiZWNhdXNlIG5vdyB0aGV5IGFyZSByZWxhdGl2ZSB0byBhXG4gKiBidW5kbGUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBwYWdlLlxuICpcbiAqIE9uZSBzb2x1dGlvbiBpcyB0byBvbmx5IHVzZSBmdWxsIHVybHMsIGJ1dCB0aGF0IG1heSBiZSBpbXBvc3NpYmxlLlxuICpcbiAqIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gXCJmaXhlc1wiIHRoZSByZWxhdGl2ZSB1cmxzIHRvIGJlIGFic29sdXRlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWdlIGxvY2F0aW9uLlxuICpcbiAqIEEgcnVkaW1lbnRhcnkgdGVzdCBzdWl0ZSBpcyBsb2NhdGVkIGF0IGB0ZXN0L2ZpeFVybHMuanNgIGFuZCBjYW4gYmUgcnVuIHZpYSB0aGUgYG5wbSB0ZXN0YCBjb21tYW5kLlxuICpcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb25cbiAgdmFyIGxvY2F0aW9uID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImZpeFVybHMgcmVxdWlyZXMgd2luZG93LmxvY2F0aW9uXCIpO1xuICB9XG5cblx0Ly8gYmxhbmsgb3IgbnVsbD9cblx0aWYgKCFjc3MgfHwgdHlwZW9mIGNzcyAhPT0gXCJzdHJpbmdcIikge1xuXHQgIHJldHVybiBjc3M7XG4gIH1cblxuICB2YXIgYmFzZVVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgdmFyIGN1cnJlbnREaXIgPSBiYXNlVXJsICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXFwvW15cXC9dKiQvLCBcIi9cIik7XG5cblx0Ly8gY29udmVydCBlYWNoIHVybCguLi4pXG5cdC8qXG5cdFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGp1c3QgYSB3YXkgdG8gcmVjdXJzaXZlbHkgbWF0Y2ggYnJhY2tldHMgd2l0aGluXG5cdGEgc3RyaW5nLlxuXG5cdCAvdXJsXFxzKlxcKCAgPSBNYXRjaCBvbiB0aGUgd29yZCBcInVybFwiIHdpdGggYW55IHdoaXRlc3BhY2UgYWZ0ZXIgaXQgYW5kIHRoZW4gYSBwYXJlbnNcblx0ICAgKCAgPSBTdGFydCBhIGNhcHR1cmluZyBncm91cFxuXHQgICAgICg/OiAgPSBTdGFydCBhIG5vbi1jYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAgICAgW14pKF0gID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICg/OiAgPSBTdGFydCBhbm90aGVyIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG5cdCAgICAgICAgICAgICAgICAgW14pKF0rICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIHwgID0gT1Jcblx0ICAgICAgICAgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgICAgICBbXikoXSogID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgXFwpICA9IE1hdGNoIGEgZW5kIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICApICA9IEVuZCBHcm91cFxuICAgICAgICAgICAgICAqXFwpID0gTWF0Y2ggYW55dGhpbmcgYW5kIHRoZW4gYSBjbG9zZSBwYXJlbnNcbiAgICAgICAgICApICA9IENsb3NlIG5vbi1jYXB0dXJpbmcgZ3JvdXBcbiAgICAgICAgICAqICA9IE1hdGNoIGFueXRoaW5nXG4gICAgICAgKSAgPSBDbG9zZSBjYXB0dXJpbmcgZ3JvdXBcblx0IFxcKSAgPSBNYXRjaCBhIGNsb3NlIHBhcmVuc1xuXG5cdCAvZ2kgID0gR2V0IGFsbCBtYXRjaGVzLCBub3QgdGhlIGZpcnN0LiAgQmUgY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICovXG5cdHZhciBmaXhlZENzcyA9IGNzcy5yZXBsYWNlKC91cmxcXHMqXFwoKCg/OlteKShdfFxcKCg/OlteKShdK3xcXChbXikoXSpcXCkpKlxcKSkqKVxcKS9naSwgZnVuY3Rpb24oZnVsbE1hdGNoLCBvcmlnVXJsKSB7XG5cdFx0Ly8gc3RyaXAgcXVvdGVzIChpZiB0aGV5IGV4aXN0KVxuXHRcdHZhciB1bnF1b3RlZE9yaWdVcmwgPSBvcmlnVXJsXG5cdFx0XHQudHJpbSgpXG5cdFx0XHQucmVwbGFjZSgvXlwiKC4qKVwiJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KVxuXHRcdFx0LnJlcGxhY2UoL14nKC4qKSckLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pO1xuXG5cdFx0Ly8gYWxyZWFkeSBhIGZ1bGwgdXJsPyBubyBjaGFuZ2Vcblx0XHRpZiAoL14oI3xkYXRhOnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC98ZmlsZTpcXC9cXC9cXC98XFxzKiQpL2kudGVzdCh1bnF1b3RlZE9yaWdVcmwpKSB7XG5cdFx0ICByZXR1cm4gZnVsbE1hdGNoO1xuXHRcdH1cblxuXHRcdC8vIGNvbnZlcnQgdGhlIHVybCB0byBhIGZ1bGwgdXJsXG5cdFx0dmFyIG5ld1VybDtcblxuXHRcdGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi8vXCIpID09PSAwKSB7XG5cdFx0ICBcdC8vVE9ETzogc2hvdWxkIHdlIGFkZCBwcm90b2NvbD9cblx0XHRcdG5ld1VybCA9IHVucXVvdGVkT3JpZ1VybDtcblx0XHR9IGVsc2UgaWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIGJhc2UgdXJsXG5cdFx0XHRuZXdVcmwgPSBiYXNlVXJsICsgdW5xdW90ZWRPcmlnVXJsOyAvLyBhbHJlYWR5IHN0YXJ0cyB3aXRoICcvJ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeVxuXHRcdFx0bmV3VXJsID0gY3VycmVudERpciArIHVucXVvdGVkT3JpZ1VybC5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIik7IC8vIFN0cmlwIGxlYWRpbmcgJy4vJ1xuXHRcdH1cblxuXHRcdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgdXJsKC4uLilcblx0XHRyZXR1cm4gXCJ1cmwoXCIgKyBKU09OLnN0cmluZ2lmeShuZXdVcmwpICsgXCIpXCI7XG5cdH0pO1xuXG5cdC8vIHNlbmQgYmFjayB0aGUgZml4ZWQgY3NzXG5cdHJldHVybiBmaXhlZENzcztcbn07XG4iLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2NsYXNzZXMuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLypcXG4qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxcbiogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxcbipcXG4qIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXFxuKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cXG4qL1xcblxcbi5ndy1hbGlnbm1lbnQtY2VsbC1yaWdodCxcXG4uZ3ctYWxpZ25tZW50LWNlbGwtcmlnaHQgLmFnLWNlbGwtdmFsdWUsXFxuLmd3LWFsaWdubWVudC1jZWxsLXJpZ2h0IC50ZW1wbGF0ZVJlbmRlcmVyIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XFxuICAgICAgLW1zLWZsZXg6IDE7XFxuICAgICAgICAgIGZsZXg6IDE7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtY2VsbC1jZW50ZXIsXFxuLmd3LWFsaWdubWVudC1jZWxsLWNlbnRlciAuYWctY2VsbC12YWx1ZSxcXG4uZ3ctYWxpZ25tZW50LWNlbGwtY2VudGVyIC50ZW1wbGF0ZVJlbmRlcmVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItcmlnaHQgLmFnLWhlYWRlci1jZWxsLWxhYmVsIHtcXG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLWNlbnRlciAuYWctaGVhZGVyLWNlbGwtbGFiZWwge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1oZWFkZXItY2VsbC10ZXh0IHtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1yaWdodCAuYWctY2VsbC1sYWJlbC1jb250YWluZXIsXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1jZWxsLWxhYmVsLWNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XFxuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcXG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLmd3LXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDFzO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAxcztcXG4gIGJvcmRlci1yYWRpdXM6IDMuMXB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAyNjBtcztcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjYwbXM7XFxufVxcblxcbi5ndy10b29sdGlwLWxpZ2h0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLmd3LXRvb2x0aXAtZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWMxZjIwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICM1YzVjNWM7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggIzVjNWM1YztcXG4gIGNvbG9yOiB3aGl0ZTtcXG59XFxuXCIiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9zdWdnZXN0aW9uLWVkaXRvci5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiLmF1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQge1xcbiAgcGFkZGluZy1sZWZ0OiA2cHg7XFxuICBib3JkZXI6IHRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0MywgMC40KSk7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmFnLXRoZW1lLWFscGluZSAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCxcXG4uYWctdGhlbWUtYmFsaGFtIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1tYXRlcmlhbCAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcXG59XFxuXFxuLmFnLXRoZW1lLWFscGluZS1kYXJrIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1iYWxoYW0tZGFyayAuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTtcXG4gIHotaW5kZXg6IDEwMDA7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXI6IHRoaW4gc29saWQgdmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0MywgMC40KSk7XFxuICBib3JkZXItdG9wOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAzcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAzcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XFxufVxcblxcbi5hdXRvY29tcGxldGUuZGFyayB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KTtcXG4gIGNvbG9yOiB2YXIoLS1hZy1kYXRhLWNvbG9yLCB2YXIoLS1hZy1mb3JlZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XFxufVxcblxcbi5hdXRvY29tcGxldGUgLnN1Z2dlc3Rpb24tZ3JvdXAge1xcbiAgYmFja2dyb3VuZDogI2VlZTtcXG4gIHBhZGRpbmc6IDVweCA2cHg7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS5kYXJrIC5zdWdnZXN0aW9uLWdyb3VwIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMxODFkMWYpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW0ge1xcbiAgcGFkZGluZzogMTBweDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuc3VnZ2VzdGlvbi1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLXJvdy1ob3Zlci1jb2xvciwgcmdiYSgzMywgMTUwLCAyNDQsIDAuMSkpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW0uc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKFxcbiAgICAtLWFnLXNlbGVjdGVkLXJvdy1iYWNrZ3JvdW5kLWNvbG9yLFxcbiAgICByZ2JhKDMzLCAxNTAsIDI0MywgMC4zKVxcbiAgKTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuZW1wdHkge1xcbiAgcGFkZGluZzogOHB4IDZweDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS1pbnB1dC1lcnJvciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgLTJweCAwICNlOTFlNjMgaW5zZXQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCAwICNlOTFlNjMgaW5zZXQ7XFxufVxcblxcbi5hdXRvY29tcGxldGUtaW5wdXQtc3VjY2VzcyB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgLTJweCAwICM0Y2FmNTAgaW5zZXQ7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCAwICM0Y2FmNTAgaW5zZXQ7XFxufVxcblwiIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy91dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RlZXAtcGFyc2UtanNvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvU3RyaW5nTWFzay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXhwcmVzc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL3Jvd3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jaGFydHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9jZWxscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yZUludGVycG9sYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYmotbWFza3MvZGlzdC9iYmotbWFza3MuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL2Rpc3QvYmJqLW1hc2tzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1pbnB1dC1tYXNraW5nL2Rpc3QvYmFzaXMtaW5wdXQtbWFza2luZy5qcy1leHBvc2VkIiwid2VicGFjazovLy8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCBmZDdmNjA0MjE5MmUxMjMyY2Y2NSIsIndlYnBhY2s6Ly8vd2VicGFjazovZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiU3RyaW5nTWFza1wiXX0iLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRJbnB1dC9UZXh0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dElucHV0L3Rvb2xzLmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlcklucHV0L051bWJlcklucHV0LmpzIiwid2VicGFjazovLy93ZWJwYWNrOi9leHRlcm5hbCB7XCJjb21tb25qc1wiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJjb21tb25qczJcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiYW1kXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcInJvb3RcIjpbXCJCQmpcIixcIk1hc2tzXCIsXCJOdW1iZXJNYXNrXCJdfSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrL1N0cmluZ01hc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jiai1tYXNrcy9zcmMvTnVtYmVyTWFzay9OdW1iZXJNYXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYXNpcy1hZ2dyaWQtY29tcG9uZW50cy9kaXN0L2Jhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzLWV4cG9zZWQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L3dlYnBhY2svYm9vdHN0cmFwIDBiYWUwNTllMmI1ZmUyNmM1YjEwIiwid2VicGFjazovLy8vc3JjL0NvbXBvbmVudC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL2F1dG9iaW5kLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvb3ZlcnJpZGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9wcml2YXRlL3V0aWxzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc09iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2VxLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FwcGx5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzTGVuZ3RoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy8od2VicGFjaykvYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Vycm9yLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9yZWFkb25seS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdXRjVG9ab25lZFRpbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0V2ZW50c01peGluL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRWRpdG9yL0Jvb2xlYW5FZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQ29tcG9uZW50L0NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuU3dpdGNoL0Jvb2xlYW5Td2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9sYXp5LWluaXRpYWxpemUuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5Td2l0Y2gvc3R5bGUuc2Nzcz83NmEzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhblJlbmRlcmVyL0Jvb2xlYW5SZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0Jvb2xlYW5GaWx0ZXIvQm9vbGVhbkZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvQm9vbGVhbkZpbHRlci9zdHlsZS5zY3NzPzBkNWUiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL051bWJlckVkaXRvci9OdW1iZXJFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvTnVtYmVyRWRpdG9yL3N0eWxlLnNjc3M/YWEwZSIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL1RleHRFZGl0b3IvVGV4dEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9UZXh0RWRpdG9yL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzPzA5MWIiLCJ3ZWJwYWNrOi8vLy9zcmMvVGVtcGxhdGVSZW5kZXJlci9UZW1wbGF0ZVJlbmRlcmVyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvYXNzaWduSW5XaXRoLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY29weU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFZhbHVlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvc3R1YkZhbHNlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5c0luLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UHJvdG90eXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2N1c3RvbURlZmF1bHRzQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVTdHJpbmdDaGFyLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly8vL3NyYy9JbWFnZVJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovLy8vc3JjL0ltYWdlUmVuZGVyZXIvSW1hZ2VSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9EYXRlVGltZUZpbHRlci5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vX2xpYi90elRva2VuaXplRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL3RvRGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdG9EYXRlL2luZGV4LmpzIiwid2VicGFjazovLy8vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRXZlbnRzTWl4aW4vRXZlbnRzTWl4aW4uanMiLCJ3ZWJwYWNrOi8vLy9zcmMvRGF0ZVRpbWVJbnB1dC9EYXRlVGltZUlucHV0LmpzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lSW5wdXQvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3M/NGY2NyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8vc3JjL0RhdGVUaW1lRmlsdGVyL3N0eWxlLnNjc3M/NzZmYiIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vL3NyYy9EYXRlVGltZUVkaXRvci9EYXRlVGltZUVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcG9seWZpbGxzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9pbml0LmpzIiwid2VicGFjazovLy8uL3NyYy9hcGkvbWVudXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL3NlbGVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9lZGl0aW5nLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvcmVhZHkuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2V2ZW50cy9zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZXZlbnRzL2tleWJvYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy9ldmVudHMvZmlsdGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2Fzc2lnbkluV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3B5T2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Fzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlSXNOYXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzTWFza2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcmVKc0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fdG9Tb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3JlYXRlQXNzaWduZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVW5hcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZVN0cmluZ0NoYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZUh0bWxDaGFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3JlRXZhbHVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSFRNTFRvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvU3VnZ2VzdGlvbkVkaXRvci5qcyIsIndlYnBhY2s6Ly8vYXV0b2NvbXBsZXRlLnRzIiwid2VicGFjazovLy8uL3NyYy9hcGkvc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS90b29scGFuZWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9zdGF0dXNiYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9vdmVybGF5cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBpL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwaS9qc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2pzcy9qc3MuanMtZXhwb3NlZCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanNzL2pzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZmxhdHBpY2tyLmNzcz8wOTQ3Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlL2NsYXNzZXMuY3NzPzA1NTUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlL2NsYXNzZXMuY3NzIiwid2VicGFjazovLy8uL3NyYy9zdHlsZS9zdWdnZXN0aW9uLWVkaXRvci5jc3M/M2YyNCIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGUvc3VnZ2VzdGlvbi1lZGl0b3IuY3NzIl0sIm5hbWVzIjpbImd3X2dldERvY3VtZW50IiwiJGRvYyIsImRvY3VtZW50IiwiZ3dfZ2V0V2luZG93IiwiJHduZCIsIndpbmRvdyIsImd3X2VzY2FwZSIsInZhbHVlIiwidW5kZWZpbmVkIiwiZ3dfdXVpZCIsInJlcGxhY2UiLCJjIiwiciIsIk1hdGgiLCJyYW5kb20iLCJ2IiwidG9TdHJpbmciLCJnd19nZXRHcmlkIiwiaWQiLCJCQmpHcmlkRXhXaWRnZXQiLCJncmlkIiwicmVnaXN0ZXJlZEdyaWRzIiwiSlNPTiIsInN0cmluZ2lmeSIsIk9iamVjdCIsImtleXMiLCJUeXBlRXJyb3IiLCJnd19hZGRHcmlkIiwib3B0aW9ucyIsImd3X2RlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJ0aW1lb3V0IiwiY29udGV4dCIsImFyZ3MiLCJhcmd1bWVudHMiLCJsYXRlciIsImFwcGx5IiwiY2FsbE5vdyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJnd19zZW5kRXZlbnQiLCJwYXlsb2FkIiwiZXZlbnRJZCIsInJlZ2lzdGVyZWRJbnRlcmVzdHMiLCJpbnRlcmVzdHMiLCJpbmNsdWRlcyIsImRpdiIsImdldEVsZW1lbnRCeUlkIiwiYmFzaXNEaXNwYXRjaEN1c3RvbUV2ZW50IiwiZ3dfcGFyc2VOb2RlIiwibm9kZSIsImdyb3VwIiwiZ2V0Um93Tm9kZUlkIiwicm93UGlubmVkIiwiaSIsImhhc093blByb3BlcnR5IiwiZGF0YSIsIngiLCJyb3dJbmRleCIsInAiLCJwYXJlbnQiLCJrZXkiLCJjaGlsZEluZGV4IiwicyIsIkJvb2xlYW4iLCJzZWxlY3RlZCIsImNyIiwicHAiLCJnd19wYXJzZU5vZGVGcm9tRXZlbnQiLCJlIiwiZyIsIkZ1bmN0aW9uIiwibW9kdWxlIiwiZXhwb3J0cyIsIm51bGxUYWciLCJ1bmRlZmluZWRUYWciLCJzeW1Ub1N0cmluZ1RhZyIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0TGlrZSIsIndlYnBhY2tQb2x5ZmlsbCIsImRlcHJlY2F0ZSIsInBhdGhzIiwiY2hpbGRyZW4iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJsIiwiR1dfRVZFTlRfUk9XX1NFTEVDVCIsIkdXX0VWRU5UX1JPV19DTElDSyIsIkdXX0VWRU5UX1JPV19ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0NMSUNLIiwiR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0siLCJHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVEIiwiR1dfRVZFTlRfQ0VMTF9WQUxVRV9DSEFOR0VEIiwiR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCIsIkdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQiLCJHV19FVkVOVF9ST1dfVkFMVUVfQ0hBTkdFRCIsIkdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFIiwiR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQiLCJHV19FVkVOVF9LRVlQUkVTUyIsIkdXX0VWRU5UX0ZJTFRFUl9DSEFOR0VEIiwiZGVlcFBhcnNlSnNvbiIsImpzb25TdHJpbmciLCJwYXJzZSIsImVyciIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInZhbCIsInJlZHVjZSIsIm9iaiIsImlzT2JqZWN0IiwidHlwZSIsInJvb3QiLCJmcmVlU2VsZiIsInNlbGYiLCJmcmVlR2xvYmFsIiwiZXEiLCJvdGhlciIsImlzQXJyYXlMaWtlIiwibGVuZ3RoIiwiU3RyaW5nTWFzayIsIk51bWJlck1hc2siLCJyZXF1aXJlIiwiZ3dfZXh0ZW5kQ29sdW1uRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsImRlZiIsImNoZWNrYm94U2VsZWN0aW9uIiwiZ3dfaXNTaG93U2VsZWN0aW9uQ2hlY2tib3giLCJoZWFkZXJDaGVja2JveFNlbGVjdGlvbiIsImd3X2lzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24iLCJ0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uIiwidG9vbHRpcFZhbHVlR2V0dGVyIiwicGFyYW1zIiwidG9vbHRpcENvbXBvbmVudCIsImVkaXRhYmxlIiwicm93U3BhbiIsImNvbFNwYW4iLCJnd19zZXRDb2x1bW5EZWZpbml0aW9ucyIsImRlZXBQYXJzZWREZWZpbml0aW9ucyIsImFwaSIsInNldENvbHVtbkRlZnMiLCJjb2x1bW5EZWZzIiwiZ3dfc2l6ZUNvbHVtbnNUb0ZpdCIsIndpZHRoIiwiY29sdW1uc0FQSSIsImNvbHVtbkFwaSIsInNpemVDb2x1bW5zVG9GaXQiLCJOdW1iZXIiLCJnd19hdXRvU2l6ZUNvbHVtbnMiLCJza2lwSGVhZGVyIiwiY29sdW1ucyIsImFsbENvbHVtbklkcyIsImdldEFsbENvbHVtbnMiLCJmb3JFYWNoIiwiY29sdW1uIiwicHVzaCIsImNvbElkIiwiYXV0b1NpemVDb2x1bW5zIiwiZ3dfZW5zdXJlQ29sdW1uVmlzaWJsZSIsImNvbHVtbklkIiwiZW5zdXJlQ29sdW1uVmlzaWJsZSIsImd3X3NldENvbHVtbldpZHRoIiwic2V0Q29sdW1uV2lkdGgiLCJnd19waW5Db2x1bW4iLCJwaW4iLCJzZXRDb2x1bW5QaW5uZWQiLCJnd19tb3ZlQ29sdW1uIiwidG9JbmRleCIsIm1vdmVDb2x1bW4iLCJwYXJhbSIsInNob3dTZWxlY3Rpb25DaGVja2JveCIsImdldEFsbEdyaWRDb2x1bW5zIiwiY29sRGVmIiwiZmllbGQiLCJncmlkT3B0aW9uc1dyYXBwZXIiLCJncmlkT3B0aW9ucyIsInNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCIsImd3X2FkZFJvd0dyb3VwQ29sdW1uIiwic2V0Iiwic3BsaXQiLCJ0cmltIiwiZ3dfcmVtb3ZlUm93R3JvdXBDb2x1bW4iLCJyZW1vdmVSb3dHcm91cENvbHVtbnMiLCJnd19nZXRQaXZvdE1vZGUiLCJpc1Bpdm90TW9kZSIsImd3X3NldFBpdm90TW9kZSIsIm1vZGUiLCJzZXRQaXZvdE1vZGUiLCJnd19hZGRQaXZvdENvbHVtbnMiLCJnd19yZW1vdmVQaXZvdENvbHVtbnMiLCJyZW1vdmVQaXZvdENvbHVtbnMiLCJnd19hZGRWYWx1ZUNvbHVtbnMiLCJhZGRWYWx1ZUNvbHVtbnMiLCJnd19yZW1vdmVWYWx1ZUNvbHVtbnMiLCJyZW1vdmVWYWx1ZUNvbHVtbnMiLCJnd19zZXRTb3J0TW9kZWwiLCJtb2RlbCIsImFzQXJyYXkiLCJwYXJzZWRNb2RlbCIsInNvcnQiLCJzZXRTb3J0TW9kZWwiLCJnd19yZWZyZXNoSGVhZGVyIiwicmVkcmF3Um93cyIsImd3X3NldENvbHVtblZpc2libGUiLCJ2aXNpYmxlIiwic2V0Q29sdW1uc1Zpc2libGUiLCJnd19jb21waWxlRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJleHByZXNzaW9uQ2FjaGUiLCJmdW5jdGlvbkJvZHkiLCJpbmRleE9mIiwidGhlRnVuY3Rpb24iLCJnd19leGVjdXRlRXhwcmVzc2lvbiIsImphdmFTY3JpcHRGdW5jdGlvbiIsInJlc3VsdCIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJnZXRWYWx1ZSIsImNvbHVtbkdyb3VwIiwiY29uc29sZSIsImxvZyIsImd3X3NldFF1aWNrRmlsdGVyIiwiZmlsdGVyIiwic2V0UXVpY2tGaWx0ZXIiLCJnd19leHBhbmRBbGwiLCJleHBhbmRBbGwiLCJnd19jb2xsYXBzZUFsbCIsImNvbGxhcHNlQWxsIiwiZ3dfZW5zdXJlSW5kZXhWaXNpYmxlIiwiaW5kZXgiLCJwb3NpdGlvbiIsImdldFJvd05vZGUiLCJlbnN1cmVOb2RlVmlzaWJsZSIsImVuc3VyZUluZGV4VmlzaWJsZSIsImd3X25hdmlnYXRlVG9OZXh0Um93IiwicHJldmlvdXNDZWxsIiwicHJldmlvdXNDZWxsUG9zaXRpb24iLCJzdWdnZXN0ZWROZXh0Q2VsbCIsIm5leHRDZWxsUG9zaXRpb24iLCJLRVlfVVAiLCJLRVlfRE9XTiIsIktFWV9MRUZUIiwiS0VZX1JJR0hUIiwicm93IiwiZ2V0RGlzcGxheWVkUm93QXRJbmRleCIsImdldEZpcnN0RGlzcGxheWVkUm93Iiwic2V0U2VsZWN0ZWQiLCJmb3JFYWNoTm9kZSIsImdldExhc3REaXNwbGF5ZWRSb3ciLCJFcnJvciIsImd3X2dldFJvd05vZGVJZCIsImd3X3NldFJvd0RhdGEiLCJqc29uIiwic2V0Um93RGF0YSIsInJvd0RhdGEiLCJnd191cGRhdGVSb3dEYXRhIiwidHJhbnNhY3Rpb24iLCJiYXRjaFVwZGF0ZSIsInJlbW92ZSIsIml0ZW1zIiwiYXBwbHlUcmFuc2FjdGlvbiIsImFwcGx5VHJhbnNhY3Rpb25Bc3luYyIsImd3X3NldFJvd3NIZWlnaHQiLCJoZWlnaHQiLCJzZXRSb3dIZWlnaHQiLCJvblJvd0hlaWdodENoYW5nZWQiLCJnd19zZXRSb3dIZWlnaHQiLCJ3YXJuIiwiZ3dfcmVzZXRSb3dIZWlnaHRzIiwicmVzZXRSb3dIZWlnaHRzIiwiZ3dfc2V0U2VsZWN0ZWRSb3dzIiwicm93cyIsImZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0IiwiU3RyaW5nIiwiZXhwYW5kZWQiLCJvbkdyb3VwRXhwYW5kZWRPckNvbGxhcHNlZCIsImd3X3NlbGVjdEFsbCIsImZpbHRlcmVkIiwic2VsZWN0QWxsRmlsdGVyZWQiLCJzZWxlY3RBbGwiLCJnd19kZXNlbGVjdEFsbCIsImRlc2VsZWN0QWxsRmlsdGVyZWQiLCJkZXNlbGVjdEFsbCIsImd3X2dldFNlbGVjdGVkUm93cyIsIm5vZGVzIiwiZ2V0U2VsZWN0ZWROb2RlcyIsInBhcnNlZCIsImd3X2dldFNlbGVjdGVkUm93IiwiZ3dfZ2V0Um93IiwiZ3dfZ2V0Um93cyIsInBoYXNlIiwiZmlsdGVyRXhwcmVzc2lvbiIsImNhblByb2Nlc3MiLCJncmlkQXBpIiwiZ3dfcmVkcmF3Um93cyIsImd3X3NldFBpbm5lZFRvcFJvd0RhdGEiLCJzZXRQaW5uZWRUb3BSb3dEYXRhIiwiZ3dfc2V0UGlubmVkQm90dG9tUm93RGF0YSIsInNldFBpbm5lZEJvdHRvbVJvd0RhdGEiLCJnd19nZXRDaGFydFRvb2xiYXJJdGVtcyIsImNoYXJ0VG9vbGJhckl0ZW1zIiwiZ3dfYWRkQ2hhcnRSYW5nZSIsInJhbmdlIiwicHIiLCJjZWxsUmFuZ2UiLCJyZWYiLCJjcmVhdGVSYW5nZUNoYXJ0IiwidXVpZCIsImNyZWF0ZWRfY2hhcnRzIiwiZ3dfZGVzdHJveUNoYXJ0IiwiZGVzdHJveUNoYXJ0IiwiY2hhcnQiLCJnd19zdGFydEVkaXRpbmdDZWxsIiwiY29sS2V5Iiwia2V5UHJlc3MiLCJjaGFyUHJlc3MiLCJzdGFydEVkaXRpbmdDZWxsIiwiZ3dfc3RvcEVkaXRpbmciLCJjYW5jZWwiLCJzdG9wRWRpdGluZyIsImd3X3RhYlRvTmV4dENlbGwiLCJ0YWJUb05leHRDZWxsIiwiZ3dfdGFiVG9QcmV2aW91c0NlbGwiLCJ0YWJUb1ByZXZpb3VzQ2VsbCIsImd3X3NldEZvY3VzZWRDZWxsIiwiZmxvYXRpbmciLCJnZXRFZGl0aW5nQ2VsbHMiLCJmIiwibGFzdEZvY3VzZWRDZWxsIiwiZ2V0Rm9jdXNlZENlbGwiLCJpc0ludGVnZXIiLCJzZXRGb2N1c2VkQ2VsbCIsImd3X2dldFJhbmdlU2VsZWN0aW9ucyIsInJhbmdlcyIsImdldENlbGxSYW5nZXMiLCJnZXRNb2RlbCIsImFjY3VtdWxhdG9yIiwiY3VycmVudCIsInN0YXJJbmRleCIsIm1pbiIsInN0YXJ0Um93IiwiZW5kUm93IiwiZW5kSW5kZXgiLCJtYXgiLCJnZXRSb3ciLCJwYXJzZWROb2RlIiwiZ3dfcGFyc2VBZGRDZWxsUmFuZ2UiLCJzdGFydCIsImVuZCIsInJvd1N0YXJ0SW5kZXgiLCJhYnMiLCJyb3dFbmRJbmRleCIsImd3X2FkZENlbGxSYW5nZSIsImFkZENlbGxSYW5nZSIsImd3X2NsZWFyUmFuZ2VTZWxlY3Rpb24iLCJjbGVhclJhbmdlU2VsZWN0aW9uIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc1RlbXBsYXRlIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJvYmplY3RQcm90byIsInByb3RvdHlwZSIsInRlbXBsYXRlIiwic3RyaW5nIiwiZ3VhcmQiLCJzZXR0aW5ncyIsInRlbXBsYXRlU2V0dGluZ3MiLCJpbXBvcnRzIiwiXyIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJpbXBvcnRzS2V5cyIsImltcG9ydHNWYWx1ZXMiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW50ZXJwb2xhdGUiLCJzb3VyY2UiLCJyZURlbGltaXRlcnMiLCJSZWdFeHAiLCJlc2NhcGUiLCJyZUludGVycG9sYXRlIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJjYWxsIiwibWF0Y2giLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwib2Zmc2V0Iiwic2xpY2UiLCJlc2NhcGVTdHJpbmdDaGFyIiwidmFyaWFibGUiLCJiYXNlQXNzaWduVmFsdWUiLCJvYmplY3QiLCJhc3luY1RhZyIsImZ1bmNUYWciLCJnZW5UYWciLCJwcm94eVRhZyIsImlzRnVuY3Rpb24iLCJ0YWciLCJnbG9iYWwiLCJiYXNlUmVzdCIsImlkZW50aXR5IiwidGhpc0FyZyIsImlzSXRlcmF0ZWVDYWxsIiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwicmVJc1VpbnQiLCJpc0luZGV4IiwidGVzdCIsImFycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJpc1Byb3RvdHlwZSIsIkN0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvIiwiZG9tRXhjVGFnIiwiZXJyb3JUYWciLCJpc0Vycm9yIiwibWVzc2FnZSIsIm5hbWUiLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiYXJnIiwiYXJyYXlNYXAiLCJhcnJheSIsIml0ZXJhdGVlIiwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJmYWN0b3J5IiwiZGVmaW5lIiwibW9kdWxlcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJtIiwiZCIsImdldHRlciIsIm8iLCJjb25maWd1cmFibGUiLCJuIiwiX19lc01vZHVsZSIsImdldERlZmF1bHQiLCJnZXRNb2R1bGVFeHBvcnRzIiwicHJvcGVydHkiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwidG9JbnRlZ2VyIiwiZGlydHlOdW1iZXIiLCJOYU4iLCJudW1iZXIiLCJpc05hTiIsImNlaWwiLCJmbG9vciIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fIiwidHpQYXJzZVRpbWV6b25lIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fIiwiTUlMTElTRUNPTkRTX0lOX0hPVVIiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIiwicGF0dGVybnMiLCJ0aW1lem9uZSIsInRpbWV6b25lWiIsInRpbWV6b25lSEgiLCJ0aW1lem9uZUhITU0iLCJ0aW1lem9uZUlBTkEiLCJ0aW1lem9uZVN0cmluZyIsImRhdGUiLCJ0b2tlbiIsImFic29sdXRlT2Zmc2V0IiwiZXhlYyIsImhvdXJzIiwicGFyc2VJbnQiLCJ2YWxpZGF0ZVRpbWV6b25lIiwibWludXRlcyIsInRva2VucyIsImFzVVRDIiwiRGF0ZSIsIlVUQyIsInRpbWVzdGFtcFdpdGhNc1plcm9lZCIsImdldFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0cmluZ01hc2tfXyIsIlV0aWxzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX18iLCJEYXRlcyIsImdldERheU9mWWVhciIsImdldFdlZWtOdW1iZXIiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSIsIklTX0RBVEVfUkVHRVgiLCJJU19USU1FX1JFR0VYIiwiZml4U2hvcnRJU08iLCJnZXRUaW1lem9uZU9yT2Zmc2V0IiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwid3JpdGFibGUiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJtYXNrIiwiX21hc2siLCJncm91cGluZ1NlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmb3JjZVRyYWlsaW5nWmVyb3MiLCJsb29zZSIsIm1hc2tMZW4iLCJzdHIiLCJtYXNrQmVmb3JlRGVjaW1hbCIsIm1hc2tBZnRlckRlY2ltYWwiLCJmb3VuZERlY2ltYWwiLCJjaGFyQXQiLCJudW0iLCJfcm91bmQiLCJieXRlcyIsIl90b0NoYXJBcnJheSIsImluTGVuIiwibnVtQmVmb3JlRGVjaW1hbCIsIm51bUFmdGVyRGVjaW1hbCIsIl9pIiwiX2kyIiwiZmlsbEJ5dGUiLCJmbG9hdEJ5dGUiLCJpblBvcyIsIm91dFBvcyIsImZsb2F0UG9zIiwiZmlsbEluaXQiLCJpc05lZ2F0aXZlIiwiX2dldFNpZ24iLCJlbWl0RGVjaW1hbCIsImZvdW5kWmVybyIsImZvdW5kRGlnaXQiLCJjdXJyZW5jeSIsInJldCIsIm1hc2tQb3MiLCJfbSIsImpvaW4iLCJfc2hpZnQiLCJwcmVjaXNpb24iLCJyZXZlcnNlU2hpZnQiLCJudW1BcnJheSIsInJvdW5kIiwic2lnbnVtIiwiY2hhcnMiLCJjb25jYXQiLCJzdWJzdHJpbmciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyIsImxvY2FsZSIsImdldEZ1bGxZZWFyIiwiZGlmZiIsImdldFRpbWV6b25lT2Zmc2V0Iiwib25lRGF5IiwiZGF5IiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJwYWQiLCJ3ZWVrU3RhcnQiLCJnZXRNb250aCIsImdldERhdGUiLCJkYXlOdW0iLCJnZXRVVENEYXkiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF0ZSIsInllYXJTdGFydCIsImdldFVUQ0Z1bGxZZWFyIiwiRGF0ZU1hc2siLCJkYXRlT2JqZWN0IiwidHJhbnNsYXRpb24iLCJfYnVpbGRUcmFuc2xhdGlvbiIsInllYXIiLCJtb250aCIsIm1vbnRoU2hvcnQiLCJmb3JtYXQiLCJtb250aExvbmciLCJkYXlTaG9ydCIsIndlZWtkYXkiLCJkYXlMb25nIiwiZ2V0TWludXRlcyIsInNlY29uZHMiLCJnZXRTZWNvbmRzIiwiaG91cnMyNCIsImdldEhvdXJzIiwiaG91cnMxMiIsImRheU9mWWVhciIsImRheU9mV2VlayIsImdldERheSIsIndlZWtOdW1iZXIiLCJrIiwiZGF0ZURldGFpbHMiLCJZeiIsInN1YnN0ciIsIllzIiwiWWwiLCJZcCIsImZyb21DaGFyQ29kZSIsIllkIiwiWSIsIk16IiwiTXMiLCJNbCIsIk1wIiwiTWQiLCJNIiwiRHoiLCJEcyIsIkRsIiwiRHAiLCJEZCIsIkQiLCJIeiIsIkhzIiwiSGwiLCJIcCIsIkhkIiwiSCIsImh6IiwiaHMiLCJobCIsImhwIiwiaGQiLCJoIiwibXoiLCJtcyIsIm1sIiwibXAiLCJtZCIsInN6Iiwic3MiLCJzbCIsInNwIiwic2QiLCJQUCIsIlAiLCJKeiIsIkpzIiwiSmwiLCJKZCIsIkoiLCJXeiIsIldzIiwiV2wiLCJXcCIsIldkIiwiVyIsInd6Iiwid3MiLCJ3bCIsIndwIiwid2QiLCJ3IiwidXRjVG9ab25lZFRpbWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fc3ViTWlsbGlzZWNvbmRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3RvRGF0ZV9fIiwiZGlydHlEYXRlIiwidXRjRGF0ZSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsIm9mZnNldE1pbGxpc2Vjb25kcyIsInR6VG9rZW5pemVEYXRlIiwiZHRmIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwicGFydHNPZmZzZXQiLCJoYWNreU9mZnNldCIsInR5cGVUb1BvcyIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJmb3JtYXR0ZWQiLCJmaWxsZWQiLCJwb3MiLCJkdGZDYWNoZSIsInRlc3REYXRlRm9ybWF0dGVkIiwiaG91cjEyIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwiaG91ckN5Y2xlIiwic3ViTWlsbGlzZWNvbmRzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiZGlydHlBbW91bnQiLCJhbW91bnQiLCJhZGRNaWxsaXNlY29uZHMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvRGF0ZV9pbmRleF9qc19fIiwidGltZXN0YW1wIiwidG9EYXRlIiwiYXJndW1lbnQiLCJhcmdTdHIiLCJzdGFjayIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9saWJfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kc19pbmRleF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX18iLCJERUZBVUxUX0FERElUSU9OQUxfRElHSVRTIiwiZGF0ZVRpbWVEZWxpbWV0ZXIiLCJwbGFpblRpbWUiLCJ0aW1lWm9uZURlbGltZXRlciIsIllZIiwiWVlZIiwiWVlZWSIsIllZWVlZIiwiTU0iLCJEREQiLCJNTUREIiwiV3d3IiwiV3d3RCIsIkhIIiwiSEhNTSIsIkhITU1TUyIsImRpcnR5T3B0aW9ucyIsImFkZGl0aW9uYWxEaWdpdHMiLCJSYW5nZUVycm9yIiwiZGF0ZVN0cmluZ3MiLCJzcGxpdERhdGVTdHJpbmciLCJwYXJzZVllYXJSZXN1bHQiLCJwYXJzZVllYXIiLCJyZXN0RGF0ZVN0cmluZyIsInBhcnNlRGF0ZSIsInRpbWUiLCJwYXJzZVRpbWUiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsInBhdHRlcm5ZWVkiLCJwYXR0ZXJuWVlZWVkiLCJ5ZWFyU3RyaW5nIiwiY2VudHVyeVN0cmluZyIsIndlZWsiLCJzZXRVVENGdWxsWWVhciIsInZhbGlkYXRlRGF0ZSIsInZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSIsInZhbGlkYXRlV2Vla0RhdGUiLCJkYXlPZklTT1dlZWtZZWFyIiwicGFyc2VGbG9hdCIsInZhbGlkYXRlVGltZSIsImlzb1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5RGF5IiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiaXNMZWFwWWVhckluZGV4IiwiaXNMZWFwWWVhciIsImdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMiLCJiYXNlVGltZXpvbmVPZmZzZXQiLCJzZXRTZWNvbmRzIiwibWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQiLCJnZXRXZWVrU3RhcnRCeUxvY2FsZSQxIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcGlfanNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfXyIsImdldFdlZWtTdGFydEJ5UmVnaW9uJDEiLCJyZWdpb25Db2RlIiwiZ2V0V2Vla1N0YXJ0QnlSZWdpb24iLCJyZWdpb25EYXlNYXAiLCJjb2RlIiwidG9VcHBlckNhc2UiLCJsYW5nUmVnaW9uTWFwIiwidG9Mb3dlckNhc2UiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJlbiIsInpoIiwiemhfaGFucyIsImhhbnMiLCJ3dXUiLCJoc24iLCJoYWsiLCJuYW4iLCJnYW4iLCJoaSIsInRlIiwibXIiLCJ0YSIsImd1Iiwia24iLCJvciIsInBhX2d1cnUiLCJiaG8iLCJhd2EiLCJhcyIsIm13ciIsIm1haSIsIm1hZyIsImJnYyIsImhuZSIsImRjYyIsImR6IiwidG4iLCJhbSIsIm9tIiwicXVjIiwianYiLCJzdSIsIm1hZCIsIm1zX2FyYWIiLCJnYSIsImhlIiwiamFtIiwiamEiLCJrbSIsImtvIiwibG8iLCJtaCIsIm15IiwibXQiLCJuZSIsImZpbCIsImNlYiIsImlsbyIsInVyIiwicGEiLCJwYV9hcmFiIiwiYXJhYiIsImxhaCIsInBzIiwic2RfYXJhYiIsInNrciIsImduIiwidGgiLCJ0dHMiLCJhZWIiLCJ6aF9oYW50IiwiaGFudCIsInNtIiwienUiLCJzbiIsImFycSIsImFyIiwiYXJ6IiwiZmEiLCJhel9hcmFiIiwiYXJ5IiwiYm4iLCJya3QiLCJkdiIsIkFHIiwiQVRHIiwiQVIiLCJBUkciLCJBUyIsIkFTTSIsIkFVIiwiQVVTIiwiQlIiLCJCUkEiLCJCUyIsIkJIUyIsIkJUIiwiQlROIiwiQlciLCJCV0EiLCJCWiIsIkJMWiIsIkNBIiwiQ0FOIiwiQ04iLCJDSE4iLCJDTyIsIkNPTCIsIkRNIiwiRE1BIiwiRE8iLCJET00iLCJFVCIsIkVUSCIsIkdUIiwiR1RNIiwiR1UiLCJHVU0iLCJISyIsIkhLRyIsIkhOIiwiSE5EIiwiSUQiLCJJRE4iLCJJRSIsIklSTCIsIklMIiwiSVNSIiwiSU4iLCJJTkQiLCJKTSIsIkpBTSIsIkpQIiwiSlBOIiwiS0UiLCJLRU4iLCJLSCIsIktITSIsIktSIiwiS09SIiwiTEEiLCJMQTAiLCJNSCIsIk1ITCIsIk1NUiIsIk1PIiwiTUFDIiwiTVQiLCJNTFQiLCJNWCIsIk1FWCIsIk1aIiwiTU9aIiwiTkkiLCJOSUMiLCJOUCIsIk5QTCIsIk5aIiwiTlpMIiwiUEEiLCJQQU4iLCJQRSIsIlBFUiIsIlBIIiwiUEhMIiwiUEsiLCJQQUsiLCJQUiIsIlBSSSIsIlBZIiwiUFJZIiwiU0EiLCJTQVUiLCJTRyIsIlNHUCIsIlNWIiwiU0xWIiwiVEgiLCJUSEEiLCJUTiIsIlRVTiIsIlRUIiwiVFRPIiwiVFciLCJUV04iLCJVTSIsIlVNSSIsIlVTIiwiVVNBIiwiVkUiLCJWRU4iLCJWSSIsIlZJUiIsIldTIiwiV1NNIiwiWUUiLCJZRU0iLCJaQSIsIlpBRiIsIlpXIiwiWldFIiwiQUUiLCJBUkUiLCJBRiIsIkFGRyIsIkJIIiwiQkhSIiwiREoiLCJESkkiLCJEWiIsIkRaQSIsIkVHIiwiRUdZIiwiSVEiLCJJUlEiLCJJUiIsIklSTiIsIkpPIiwiSk9SIiwiS1ciLCJLV1QiLCJMWSIsIkxCWSIsIk1BIiwiTUFSIiwiT00iLCJPTU4iLCJRQSIsIlFBVCIsIlNEIiwiU0ROIiwiU1kiLCJTWVIiLCJCRCIsIkJHRCIsIk1WIiwiTURWIiwiaXNOdW1iZXJSZWdleCIsImlzV2hpdGVzcGFjZVJlZ2V4IiwicHVuY3R1YXRpb25MaXN0IiwiaXNMb3dlckNhc2UiLCJpc1VwcGVyQ2FzZSIsInBhc3NPclRocm93RXJyb3IiLCJfY2hhciIsInN0ckxlbiIsIm1hc2tCeXRlIiwiX2J5dGUiLCJfYnl0ZTIiLCJfYnl0ZTMiLCJfYnl0ZTQiLCJfYnl0ZTUiLCJfYnl0ZTYiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1R5cGVzX18iLCJUeXBlcyIsIl9udW1iZXIiLCJfZGF0ZSIsIlRleHRJbnB1dCIsImVsZW1lbnRzIiwiZG9jIiwiY3NzQ2xhc3NFcnJvciIsImNzc0NsYXNzU3VjY2VzcyIsIm9uVXBkYXRlIiwib25JbnZhbGlkIiwiaW5wdXQiLCJwYXJlbnRDbGFzcyIsImlzV3JhcHBlZCIsImlucHV0SWQiLCJpbnB1dE5hbWUiLCJvcmlnaW5hbFBhdHRlcm4iLCJkZWZhdWx0UGF0dGVybiIsImdlbmVyYXRlUGF0dGVybkZyb21NYXNrIiwicGF0dGVybiIsIndyYXAiLCJ1bm1hc2tJbnB1dCIsIm1hc2tJZk5vdE1hc2tlZCIsInVubWFzayIsInRleHRJbnB1dCIsImV2ZW50VHlwZSIsImtleUNvZGUiLCJrZXlDb250ZW50IiwiaW5zZXJ0UG9zaXRpb24iLCJmaW5kQ2FyZXRQb3NpdGlvbiIsIm1hc2tFcnJvciIsInNlbGVjdGlvblN0YXJ0IiwidW5tYXNrZWRWYWx1ZSIsImlzVmFsaWQiLCJ2YWx1ZU1hc2tlZCIsInZhbHVlVW5tYXNrZWQiLCJlcnJvciIsInN0YXRlIiwiU1VQUE9SVEVEX01BU0tTIiwiSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQiLCJldmFsIiwiaXNNYXNrZWRWYWx1ZSIsImNhY2hlS2V5IiwibWFza0FzQXJyeSIsInJlZ2V4IiwibWFza0FzQXJyYXkiLCJtYXNrZWRWYWx1ZUFzQXJyYXkiLCJtYXNrZWRWYWx1ZSIsInVubWFza2VkIiwiZWwiLCJlbEhhc01hc2siLCJOdW1iZXJJbnB1dCIsImNvdW50RGVjaW1hbHMiLCJhY3R1YWxJbnB1dCIsImFjdHVhbElucHV0SWQiLCJhY3R1YWxJbnB1dE5hbWUiLCJhY3R1YWxJbnB1dFN0ZXAiLCJhY3R1YWxJbnB1dE1heCIsImFjdHVhbElucHV0TWluIiwiYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvciIsImFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvciIsImFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zIiwiYWN0dWFsSW5wdXRNYXNrIiwiYWN0dWFsSW5wdXRDbGFzc2VzIiwiYWN0dWFsSW5wdXRSZXF1aXJlZCIsInVubWFza2VkSW5wdXQiLCJkZWNpbWFscyIsInN0ZXAiLCJ3cmFwcGVyIiwicmVzdG9yZSIsImNoYXIiLCJieXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwiX19zcHJlYWRBcnJheXMiLCJpbCIsImEiLCJqIiwiamwiLCJIT09LUyIsImRlZmF1bHRzIiwiX2Rpc2FibGUiLCJfZW5hYmxlIiwiYWxsb3dJbnB1dCIsImFsbG93SW52YWxpZFByZWxvYWQiLCJhbHRGb3JtYXQiLCJhbHRJbnB1dCIsImFsdElucHV0Q2xhc3MiLCJhbmltYXRlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXJpYURhdGVGb3JtYXQiLCJhdXRvRmlsbERlZmF1bHRUaW1lIiwiY2xpY2tPcGVucyIsImNsb3NlT25TZWxlY3QiLCJjb25qdW5jdGlvbiIsImRhdGVGb3JtYXQiLCJkZWZhdWx0SG91ciIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsImRpc2FibGUiLCJkaXNhYmxlTW9iaWxlIiwiZW5hYmxlIiwiZW5hYmxlU2Vjb25kcyIsImVuYWJsZVRpbWUiLCJlcnJvckhhbmRsZXIiLCJnZXRXZWVrIiwiZ2l2ZW5EYXRlIiwic2V0SG91cnMiLCJzZXREYXRlIiwid2VlazEiLCJob3VySW5jcmVtZW50IiwiaWdub3JlZEZvY3VzRWxlbWVudHMiLCJpbmxpbmUiLCJtaW51dGVJbmNyZW1lbnQiLCJtb250aFNlbGVjdG9yVHlwZSIsIm5leHRBcnJvdyIsIm5vQ2FsZW5kYXIiLCJub3ciLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkRheUNyZWF0ZSIsIm9uRGVzdHJveSIsIm9uS2V5RG93biIsIm9uTW9udGhDaGFuZ2UiLCJvbk9wZW4iLCJvblBhcnNlQ29uZmlnIiwib25SZWFkeSIsIm9uVmFsdWVVcGRhdGUiLCJvblllYXJDaGFuZ2UiLCJvblByZUNhbGVuZGFyUG9zaXRpb24iLCJwbHVnaW5zIiwicG9zaXRpb25FbGVtZW50IiwicHJldkFycm93Iiwic2hvcnRoYW5kQ3VycmVudE1vbnRoIiwic2hvd01vbnRocyIsInN0YXRpYyIsInRpbWVfMjRociIsIndlZWtOdW1iZXJzIiwiZW5nbGlzaCIsIndlZWtkYXlzIiwic2hvcnRoYW5kIiwibG9uZ2hhbmQiLCJtb250aHMiLCJkYXlzSW5Nb250aCIsImZpcnN0RGF5T2ZXZWVrIiwib3JkaW5hbCIsIm50aCIsInJhbmdlU2VwYXJhdG9yIiwid2Vla0FiYnJldmlhdGlvbiIsInNjcm9sbFRpdGxlIiwidG9nZ2xlVGl0bGUiLCJhbVBNIiwieWVhckFyaWFMYWJlbCIsIm1vbnRoQXJpYUxhYmVsIiwiaG91ckFyaWFMYWJlbCIsIm1pbnV0ZUFyaWFMYWJlbCIsImludCIsImJvb2wiLCJkZWJvdW5jZSIsImFycmF5aWZ5IiwidG9nZ2xlQ2xhc3MiLCJlbGVtIiwiY2xhc3NOYW1lIiwiY2xhc3NMaXN0IiwiYWRkIiwiY3JlYXRlRWxlbWVudCIsImNvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImNsZWFyTm9kZSIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImZpbmRQYXJlbnQiLCJjb25kaXRpb24iLCJwYXJlbnROb2RlIiwiY3JlYXRlTnVtYmVySW5wdXQiLCJpbnB1dENsYXNzTmFtZSIsIm9wdHMiLCJudW1JbnB1dCIsImFycm93VXAiLCJhcnJvd0Rvd24iLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImdldEV2ZW50VGFyZ2V0IiwiZXZlbnQiLCJjb21wb3NlZFBhdGgiLCJwYXRoIiwiZG9Ob3RoaW5nIiwibW9udGhUb1N0ciIsIm1vbnRoTnVtYmVyIiwicmV2Rm9ybWF0IiwiRiIsImRhdGVPYmoiLCJtb250aE5hbWUiLCJzZXRNb250aCIsIkciLCJLIiwic2hvcnRNb250aCIsIlMiLCJVIiwidW5peFNlY29uZHMiLCJ3ZWVrTnVtIiwic2V0RnVsbFllYXIiLCJaIiwiSVNPRGF0ZSIsInNldE1pbnV0ZXMiLCJ1IiwidW5peE1pbGxTZWNvbmRzIiwieSIsInRva2VuUmVnZXgiLCJmb3JtYXRzIiwidG9JU09TdHJpbmciLCJjcmVhdGVEYXRlRm9ybWF0dGVyIiwiX2EiLCJfYiIsImNvbmZpZyIsIl9jIiwibDEwbiIsIl9kIiwiaXNNb2JpbGUiLCJmcm10Iiwib3ZlcnJpZGVMb2NhbGUiLCJmb3JtYXREYXRlIiwiYXJyIiwiY3JlYXRlRGF0ZVBhcnNlciIsImdpdmVuRm9ybWF0IiwidGltZWxlc3MiLCJjdXN0b21Mb2NhbGUiLCJwYXJzZWREYXRlIiwiZGF0ZU9yaWciLCJ0b0ZpeGVkIiwiZGF0ZXN0ciIsIm1hdGNoZWQiLCJvcHMiLCJtYXRjaEluZGV4IiwicmVnZXhTdHIiLCJ0b2tlbl8xIiwiaXNCYWNrU2xhc2giLCJlc2NhcGVkIiwiZm4iLCJjb21wYXJlRGF0ZXMiLCJkYXRlMSIsImRhdGUyIiwiaXNCZXR3ZWVuIiwidHMiLCJ0czEiLCJ0czIiLCJkdXJhdGlvbiIsIkRBWSIsIl9sb29wXzEiLCJhcmdzXzEiLCJERUJPVU5DRURfQ0hBTkdFX01TIiwiRmxhdHBpY2tySW5zdGFuY2UiLCJlbGVtZW50IiwiaW5zdGFuY2VDb25maWciLCJmbGF0cGlja3IiLCJkZWZhdWx0Q29uZmlnIiwiX2hhbmRsZXJzIiwicGx1Z2luRWxlbWVudHMiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJiaW5kIiwiX3NldEhvdXJzRnJvbURhdGUiLCJzZXRIb3Vyc0Zyb21EYXRlIiwiX3Bvc2l0aW9uQ2FsZW5kYXIiLCJwb3NpdGlvbkNhbGVuZGFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwiY2xlYXIiLCJjbG9zZSIsIl9jcmVhdGVFbGVtZW50IiwiZGVzdHJveSIsImlzRW5hYmxlZCIsImp1bXBUb0RhdGUiLCJvcGVuIiwicmVkcmF3IiwidG9nZ2xlIiwic2V0dXBIZWxwZXJGdW5jdGlvbnMiLCJ1dGlscyIsImdldERheXNJbk1vbnRoIiwieXIiLCJjdXJyZW50TW9udGgiLCJjdXJyZW50WWVhciIsImluaXQiLCJpc09wZW4iLCJwYXJzZUNvbmZpZyIsInNldHVwTG9jYWxlIiwic2V0dXBJbnB1dHMiLCJzZXR1cERhdGVzIiwiYnVpbGQiLCJiaW5kRXZlbnRzIiwic2VsZWN0ZWREYXRlcyIsImxhdGVzdFNlbGVjdGVkRGF0ZU9iaiIsIm1pbkRhdGUiLCJ1cGRhdGVWYWx1ZSIsInNldENhbGVuZGFyV2lkdGgiLCJpc1NhZmFyaSIsInRyaWdnZXJFdmVudCIsImJpbmRUb0luc3RhbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkaXNwbGF5IiwiZGF5c0NvbnRhaW5lciIsImRheXNXaWR0aCIsImRheXMiLCJvZmZzZXRXaWR0aCIsIndlZWtXcmFwcGVyIiwicmVtb3ZlUHJvcGVydHkiLCJ1cGRhdGVUaW1lIiwiZGVmYXVsdERhdGUiLCJnZXREZWZhdWx0SG91cnMiLCJ0aW1lV3JhcHBlciIsInByZXZWYWx1ZSIsIl9pbnB1dCIsInNldEhvdXJzRnJvbUlucHV0cyIsIl9kZWJvdW5jZWRDaGFuZ2UiLCJhbXBtMm1pbGl0YXJ5IiwibWlsaXRhcnkyYW1wbSIsImhvdXJFbGVtZW50IiwibWludXRlRWxlbWVudCIsInNlY29uZEVsZW1lbnQiLCJsaW1pdE1pbkhvdXJzIiwibWluVGltZSIsIm1pbkRhdGVIYXNUaW1lIiwibGltaXRNYXhIb3VycyIsIm1heFRpbWUiLCJtYXhEYXRlIiwibWF4RGF0ZUhhc1RpbWUiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJvblllYXJJbnB1dCIsImV2ZW50VGFyZ2V0IiwiZGVsdGEiLCJoYW5kbGVyIiwiZXYiLCJhZGRFdmVudExpc3RlbmVyIiwidHJpZ2dlckNoYW5nZSIsImV2dCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9uUmVzaXplIiwib25Nb3VzZU92ZXIiLCJib2R5Iiwib250b3VjaHN0YXJ0IiwiZG9jdW1lbnRDbGljayIsImNhcHR1cmUiLCJtb250aE5hdiIsIm9uTW9udGhOYXZDbGljayIsInNlbGVjdERhdGUiLCJ0aW1lQ29udGFpbmVyIiwic2VsVGV4dCIsInNlbGVjdCIsInRpbWVJbmNyZW1lbnQiLCJvbkJsdXIiLCJqdW1wRGF0ZSIsImp1bXBUbyIsIm9sZFllYXIiLCJvbGRNb250aCIsImJ1aWxkTW9udGhTd2l0Y2giLCJpbmNyZW1lbnROdW1JbnB1dCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwidGFiSW5kZXgiLCJidWlsZE1vbnRoTmF2IiwiaW5uZXJDb250YWluZXIiLCJidWlsZFdlZWtzIiwickNvbnRhaW5lciIsImJ1aWxkV2Vla2RheXMiLCJidWlsZERheXMiLCJidWlsZFRpbWUiLCJjdXN0b21BcHBlbmQiLCJhcHBlbmRUbyIsIm5vZGVUeXBlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJjcmVhdGVEYXkiLCJkYXlOdW1iZXIiLCJkYXRlSXNFbmFibGVkIiwiZGF5RWxlbWVudCIsIiRpIiwidG9kYXlEYXRlRWxlbSIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsImdldEZpcnN0QXZhaWxhYmxlRGF5Iiwic3RhcnRNb250aCIsImVuZE1vbnRoIiwic3RhcnRJbmRleCIsImdldE5leHRBdmFpbGFibGVEYXkiLCJnaXZlbk1vbnRoIiwibG9vcERlbHRhIiwibnVtTW9udGhEYXlzIiwiZm9jdXNPbkRheSIsImRheUZvY3VzZWQiLCJpc0luVmlldyIsImFjdGl2ZUVsZW1lbnQiLCJzdGFydEVsZW0iLCJidWlsZE1vbnRoRGF5cyIsImZpcnN0T2ZNb250aCIsInByZXZNb250aERheXMiLCJpc011bHRpTW9udGgiLCJwcmV2TW9udGhEYXlDbGFzcyIsIm5leHRNb250aERheUNsYXNzIiwiZGF5SW5kZXgiLCJkYXlDb250YWluZXIiLCJmcmFnIiwic2hvdWxkQnVpbGRNb250aCIsIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyIiwiaW5uZXJIVE1MIiwiYnVpbGRNb250aCIsImNvbnRhaW5lciIsIm1vbnRoTmF2RnJhZ21lbnQiLCJtb250aEVsZW1lbnQiLCJzZWxlY3RlZE1vbnRoIiwieWVhcklucHV0IiwidGFiaW5kZXgiLCJ5ZWFyRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZGlzYWJsZWQiLCJidWlsZE1vbnRocyIsInByZXZNb250aE5hdiIsInllYXJFbGVtZW50cyIsIm1vbnRoRWxlbWVudHMiLCJuZXh0TW9udGhOYXYiLCJfX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9faGlkZU5leHRNb250aEFycm93IiwiY3VycmVudFllYXJFbGVtZW50IiwidXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCIsInNlcGFyYXRvciIsImhvdXJJbnB1dCIsIm1pbnV0ZUlucHV0Iiwic2Vjb25kSW5wdXQiLCJnZXRBdHRyaWJ1dGUiLCJ0aXRsZSIsIndlZWtkYXlDb250YWluZXIiLCJ1cGRhdGVXZWVrZGF5cyIsInNwbGljZSIsImlzT2Zmc2V0IiwiX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9oaWRlTmV4dE1vbnRoQXJyb3ciLCJ0cmlnZ2VyQ2hhbmdlRXZlbnQiLCJ0b0luaXRpYWwiLCJtb2JpbGVJbnB1dCIsIl9pbml0aWFsRGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsYXN0Q2hpbGQiLCJfdHlwZSIsInJlbW92ZUF0dHJpYnV0ZSIsImlzQ2FsZW5kYXJFbGVtIiwiZXZlbnRUYXJnZXRfMSIsImlzQ2FsZW5kYXJFbGVtZW50IiwiaXNJbnB1dCIsImxvc3RGb2N1cyIsInJlbGF0ZWRUYXJnZXQiLCJpc0lnbm9yZWQiLCJzb21lIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImZyb20iLCJ0byIsImFsbG93S2V5ZG93biIsImFsbG93SW5saW5lS2V5ZG93biIsImJsdXIiLCJpc1RpbWVPYmoiLCJwcmV2ZW50RGVmYXVsdCIsImZvY3VzQW5kQ2xvc2UiLCJkZWx0YV8xIiwiY3RybEtleSIsInN0b3BQcm9wYWdhdGlvbiIsImVsZW1zIiwic2hpZnRLZXkiLCJob3ZlckRhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImluaXRpYWxEYXRlIiwicmFuZ2VTdGFydERhdGUiLCJyYW5nZUVuZERhdGUiLCJjb250YWluc0Rpc2FibGVkIiwibWluUmFuZ2UiLCJtYXhSYW5nZSIsImRheUVsZW0iLCJvdXRPZlJhbmdlIiwiX3Bvc2l0aW9uRWxlbWVudCIsImNsaWNrIiwid2FzT3BlbiIsIm1pbk1heERhdGVTZXR0ZXIiLCJpbnZlcnNlRGF0ZU9iaiIsImJvb2xPcHRzIiwidXNlckNvbmZpZyIsImRhdGFzZXQiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsImdldElucHV0RWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJsMTBucyIsImRlZmF1bHQiLCJjdXN0b21Qb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsImFjYyIsImNoaWxkIiwib2Zmc2V0SGVpZ2h0IiwiY2FsZW5kYXJXaWR0aCIsImNvbmZpZ1BvcyIsImNvbmZpZ1Bvc1ZlcnRpY2FsIiwiY29uZmlnUG9zSG9yaXpvbnRhbCIsImlucHV0Qm91bmRzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzaG93T25Ub3AiLCJ0b3AiLCJwYWdlWU9mZnNldCIsImxlZnQiLCJwYWdlWE9mZnNldCIsImlzQ2VudGVyIiwiaXNSaWdodCIsInJpZ2h0IiwicmlnaHRNb3N0IiwiY2VudGVyTW9zdCIsImdldERvY3VtZW50U3R5bGVTaGVldCIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJCZWZvcmUiLCJjZW50ZXJBZnRlciIsImNlbnRlckluZGV4IiwiY3NzUnVsZXMiLCJjZW50ZXJTdHlsZSIsImluc2VydFJ1bGUiLCJlZGl0YWJsZVNoZWV0Iiwic3R5bGVTaGVldHMiLCJzaGVldCIsImNyZWF0ZVN0eWxlU2hlZXQiLCJoZWFkIiwibXNNYXhUb3VjaFBvaW50cyIsImlzU2VsZWN0YWJsZSIsInNlbGVjdGVkRGF0ZSIsInNob3VsZENoYW5nZU1vbnRoIiwic2VsZWN0ZWRJbmRleCIsImIiLCJzaW5nbGUiLCJDQUxMQkFDS1MiLCJvcHRpb24iLCJzZXRTZWxlY3RlZERhdGUiLCJpbnB1dERhdGUiLCJydWxlIiwicHJlbG9hZGVkRGF0ZSIsIm5vZGVOYW1lIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsImlucHV0VHlwZSIsIm1vYmlsZUZvcm1hdFN0ciIsImRlZmF1bHRWYWx1ZSIsImhvb2tzIiwiaW5pdEV2ZW50IiwiZ2V0RGF0ZVN0ciIsImRPYmoiLCJpc1ByZXZNb250aCIsImlzTmV4dE1vbnRoIiwiaXNLZXlEb3duIiwiY3VyVmFsdWUiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJpc01pbnV0ZUVsZW0iLCJfZmxhdHBpY2tyIiwibm9kZUxpc3QiLCJIVE1MRWxlbWVudCIsImluc3RhbmNlcyIsIkhUTUxDb2xsZWN0aW9uIiwiTm9kZUxpc3QiLCJzZWxlY3RvciIsIk5vZGUiLCJsb2NhbGl6ZSIsInNldERlZmF1bHRzIiwialF1ZXJ5IiwiZnBfaW5jciIsIkNvbXBvbmVudCIsImdldFByb3RvdHlwZU9mIiwibWFwU3RvcmUiLCJzdXBlclN0b3JlIiwiZGVzY3MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwia2xhc3MiLCJnZXRPd25LZXlzIiwiZGVzYyIsImF1dG9iaW5kTWV0aG9kIiwiZ2V0Qm91bmRTdXBlciIsImJvdW5kRm4iLCJjcmVhdGVEZWZhdWx0U2V0dGVyIiwiYXV0b2JpbmRDbGFzcyIsImhhbmRsZSIsIkdFTkVSSUNfRlVOQ1RJT05fRVJST1IiLCJGVU5DVElPTl9SRUdFWFAiLCJTeW50YXhFcnJvclJlcG9ydGVyIiwidG9waWMiLCJwYXJlbnRLbGFzcyIsImNoaWxkS2xhc3MiLCJwYXJlbnREZXNjcmlwdG9yIiwiY2hpbGREZXNjcmlwdG9yIiwibXNnIiwicmVwb3J0ZXIiLCJwYXJlbnRWYWx1ZVR5cGUiLCJjaGlsZFZhbHVlVHlwZSIsImlzRnVuY3Rpb25PdmVyVW5kZWZpbmVkIiwiY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMiLCJwYXJlbnRIYXNHZXR0ZXIiLCJjaGlsZEhhc0dldHRlciIsInBhcmVudEhhc1NldHRlciIsImNoaWxkSGFzU2V0dGVyIiwicGFyZW50VHlwZSIsImdldERlc2NyaXB0b3JUeXBlIiwiY2hpbGRUeXBlIiwiY2hlY2tEYXRhRGVzY3JpcHRvcnMiLCJjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMiLCJzdWdnZXN0aW9uVHJhbnNmb3JtcyIsInN1Z2dlc3Rpb24iLCJzdXBlcktsYXNzIiwic3VwZXJEZXNjcmlwdG9yIiwic3VnZ2VzdGVkS2V5IiwiZmluZFBvc3NpYmxlQWx0ZXJuYXRpdmVzIiwiY2hlY2tEZXNjcmlwdG9ycyIsImRlY29yYXRlIiwibGlzdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJpdGVtIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJjc3NNYXBwaW5nIiwidXNlU291cmNlTWFwIiwic291cmNlTWFwcGluZyIsInRvQ29tbWVudCIsInNvdXJjZVVSTHMiLCJiYXNlNjQiLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpc0Rlc2NyaXB0b3IiLCJlbnRyeUFyZ3MiLCJoYW5kbGVEZXNjcmlwdG9yIiwiTWV0YSIsImxhenlJbml0aWFsaXplIiwiTUVUQV9LRVkiLCJzZWVuRGVwcmVjYXRpb25zIiwiQm9vbGVhblN3aXRjaCIsIlRlbXBsYXRlUmVuZGVyZXIiLCJnZXROYXRpdmUiLCJzZXRUb1N0cmluZyIsIm92ZXJSZXN0IiwiaXNBcmd1bWVudHMiLCJpc0J1ZmZlciIsImlzVHlwZWRBcnJheSIsImJhc2VUaW1lcyIsIm9yaWdpbmFsTW9kdWxlIiwiaXNQbGFpbk9iamVjdCIsImJhc2VUb1N0cmluZyIsIkV2ZW50c01peGluIiwiRGF0ZVRpbWVJbnB1dCIsIkJvb2xlYW5FZGl0b3IiLCJrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlIiwic3dpdGNoZXIiLCJ0cnVlVmFsdWUiLCJmYWxzZVZhbHVlIiwidmFsdWVBc1N0cmluZyIsIl9ndWkiLCJmYWxsYmFjayIsIkFHcmlkQ29tcG9uZW50c01ldGFDb25maWciLCJ3aW4iLCJpbml0aWFsVmFsdWUiLCJsaXN0ZW5lciIsImJvb2xTd2l0Y2giLCJsYWJlbCIsIm92ZXJyaWRlIiwiYXV0b2JpbmQiLCJpbml0aWFsaXplciIsInVwZGF0ZSIsImxvY2F0aW9uIiwiYmFzZVVybCIsImN1cnJlbnREaXIiLCJmaXhlZENzcyIsInVucXVvdGVkT3JpZ1VybCIsIm5ld1VybCIsIkJvb2xlYW5SZW5kZXJlciIsImlzSW5pdCIsImJvb2xlYW5UcnVlUmVuZGVyVmFsdWUiLCJib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSIsImJvb2xlYW5UcnVlVmFsdWUiLCJib29sZWFuRmFsc2VWYWx1ZSIsIkJvb2xlYW5GaWx0ZXIiLCJ0b1RpdGxlQ2FzZSIsIndvcmQiLCJzdHJpcEhUTUwiLCJ0bXAiLCJfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uIiwidHJhbnNsYXRlIiwiaXNDbGVhckZpbHRlciIsImlzUmVzZXRCdXR0b24iLCJpc0FwcGx5QnV0dG9uIiwicmVzZXQiLCJhcHBseUZpbHRlclBhbmVsIiwiZmlsdGVyVHlwZSIsImZpbHRlclRleHRBc1N0cmluZyIsIk51bWJlckVkaXRvciIsInN0YXJ0VmFsdWUiLCJCYXNpcyIsIl9vbk51bWJlcklucHV0SW52YWxpZCIsImNhc3RlZCIsInJldFZhbHVlIiwiX21hc2tlZCIsImlzTmF2aWdhdGlvbktleSIsIlRleHRFZGl0b3IiLCJfb25UZXh0SW5wdXRJbnZhbGlkIiwiYXNzaWduSW5XaXRoIiwiYmFzZVZhbHVlcyIsImF0dGVtcHQiLCJjcmVhdGVBc3NpZ25lciIsImNvcHlPYmplY3QiLCJrZXlzSW4iLCJpc05ldyIsImN1c3RvbWl6ZXIiLCJhc3NpZ25WYWx1ZSIsIm9ialZhbHVlIiwiYmFzZUlzTmF0aXZlIiwicmVSZWdFeHBDaGFyIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwicmVJc05hdGl2ZSIsImlzTWFza2VkIiwidG9Tb3VyY2UiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwibWFza1NyY0tleSIsInVpZCIsImNvcmVKc0RhdGEiLCJzb3VyY2VzIiwiYXNzaWduZXIiLCJuYXRpdmVNYXgiLCJvdGhlckFyZ3MiLCJzaG9ydE91dCIsImJhc2VTZXRUb1N0cmluZyIsImNvbnN0YW50IiwiSE9UX0NPVU5UIiwiSE9UX1NQQU4iLCJuYXRpdmVOb3ciLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsImJhc2VLZXlzSW4iLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImJhc2VJc0FyZ3VtZW50cyIsImFyZ3NUYWciLCJmcmVlRXhwb3J0cyIsImZyZWVNb2R1bGUiLCJtb2R1bGVFeHBvcnRzIiwiQnVmZmVyIiwibmF0aXZlSXNCdWZmZXIiLCJzdHViRmFsc2UiLCJub2RlSXNUeXBlZEFycmF5Iiwibm9kZVV0aWwiLCJiYXNlVW5hcnkiLCJiYXNlSXNUeXBlZEFycmF5IiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsIm9iamVjdFRhZyIsInJlZ2V4cFRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsIndlYWtNYXBUYWciLCJhcnJheUJ1ZmZlclRhZyIsImRhdGFWaWV3VGFnIiwiZmxvYXQzMlRhZyIsImZsb2F0NjRUYWciLCJpbnQ4VGFnIiwiaW50MTZUYWciLCJpbnQzMlRhZyIsInVpbnQ4VGFnIiwidWludDhDbGFtcGVkVGFnIiwidWludDE2VGFnIiwidWludDMyVGFnIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwibmF0aXZlS2V5c0luIiwiaXNQcm90byIsIm9iamVjdEN0b3JTdHJpbmciLCJnZXRQcm90b3R5cGUiLCJzdHJpbmdFc2NhcGVzIiwiYmFzZUtleXMiLCJuYXRpdmVLZXlzIiwicmVFc2NhcGUiLCJyZUV2YWx1YXRlIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwiZXNjYXBlSHRtbENoYXIiLCJodG1sRXNjYXBlcyIsImJhc2VQcm9wZXJ0eU9mIiwiSU5GSU5JVFkiLCJzeW1ib2xQcm90byIsInN5bWJvbFRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUYWciLCJJbWFnZVJlbmRlcmVyIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiaW1hZ2VMaXN0IiwiRGF0ZVRpbWVGaWx0ZXIiLCJUT0tFTlMiLCJUT0tFTl9FUVVBTCIsIlRPS0VOX05PVF9FUVVBTCIsIlRPS0VOX0xFU1MiLCJUT0tFTl9HUkVBVEVSIiwiVE9LRU5fUkFOR0UiLCJUT0tFTl9BTkQiLCJUT0tFTl9PUiIsIkNvbmRpdGlvblBhbmVsIiwid2l0aEV2ZW50c01peGluIiwiX2ZpbHRlclRpbWVJbnB1dCIsIl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQiLCJfZmlsdGVyT3B0aW9ucyIsIl9kZWZhdWx0T3B0aW9uIiwib3B0aW9uc1RyYW5zbGF0aW9ucyIsImd1aSIsImZpbHRlck9wdGlvbnMiLCJzZWxlY3RFbCIsImZpbHRlcklucHV0IiwiZmlsdGVyVG9JbnB1dCIsImZpbHRlckRhdGVUbyIsIk9OX0NPTkRJVElPTl9DSEFOR0VEIiwicmVhZG9ubHkiLCJmaWx0ZXJUbyIsIkpvaW5Db25kaXRpb25QYW5lbCIsIl9maXJzdENvbmRpdGlvblBhbmVsIiwiX3NlY29uZENvbmRpdGlvblBhbmVsIiwiX29wZXJhdG9yUGFuZWwiLCJfcGFyYW1zIiwiaWRPbmUiLCJpZFR3byIsInN1cHByZXNzQW5kT3JDb25kaXRpb24iLCJzZWNvbmRDb25kaXRpb25HdWkiLCJvcGVyYXRvclBhbmVsR3VpIiwiT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCIsImNvbmRpdGlvbjEiLCJjb25kaXRpb24yIiwib3BlcmF0b3IiLCJfSm9pbkNvbmRpdGlvblBhbmVsIiwiX3N0YXRlIiwiX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucyIsImluUmFuZ2VJbmNsdXNpdmUiLCJ2YWx1ZUdldHRlciIsImRvZXNQYXNzRmlyc3RDb25kaXRpb24iLCJkb2VzUGFzc1NlY29uZENvbmRpdGlvbiIsImNsb25lIiwiZGF0ZVRpbWVNYXNrIiwiQkJqIiwiZmlyc3RDb25kaXRpb25Bc1N0cmluZyIsInNlY29uZENvbmRpdGlvbkFzU3RyaW5nIiwib3BlcmF0b3JBc1N0cmluZyIsInBhc3NlZCIsImlzQXBwbHlCdXR0b25BY3RpdmUiLCJyZXF1aXJlZEFyZ3MiLCJoYXNOZWdhdGl2ZVVUQ09mZnNldCIsImdldERhdGVNaWxsaXNlY29uZHNQYXJ0IiwiaGFuZGxlcnMiLCJpc0VkaXRvciIsInBpY2tlciIsImRhdGVUaW1lRm9ybWF0dGVyIiwid2Vla0RheXNTaG9ydCIsIndlZWtEYXlzTG9uZyIsIm1vbnRoc1Nob3J0IiwibW9udGhzTG9uZyIsIk9OX0RBVEVfQ0hBTkdFRCIsIkRhdGVUaW1lRWRpdG9yIiwiX3ZhbHVlIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRldGFpbCIsImluaXRDdXN0b21FdmVudCIsIkV2ZW50IiwiZ3dfaW5pdCIsImxpY2Vuc2UiLCJhZ0dyaWQiLCJMaWNlbnNlTWFuYWdlciIsInNldExpY2Vuc2VLZXkiLCJwYXJzZWRPcHRpb25zIiwiZ3dfcGFyc2VPcHRpb25zIiwiR3JpZCIsImRlZXBQYXJzZWRPcHRpb25zIiwiZ2V0RGF0YVBhdGhUZW1wbGF0ZSIsImdldERhdGFQYXRoIiwiZGVib3VuY2VEdXJhdGlvbiIsImZpbmFsT3B0aW9ucyIsImdldERvY3VtZW50Iiwib25DZWxsRWRpdGluZ1N0YXJ0ZWQiLCJvbkNlbGxFZGl0aW5nU3RvcHBlZCIsIm9uQ2VsbFZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0YXJ0ZWQiLCJvblJvd1ZhbHVlQ2hhbmdlZCIsIm9uUm93RWRpdGluZ1N0b3BwZWQiLCJvbkdyaWRSZWFkeSIsIm9uRmlsdGVyQ2hhbmdlZCIsImdldENvbnRleHRNZW51SXRlbXMiLCJnZXRDaGFydFRvb2xiYXJJdGVtcyIsInBvcHVwUGFyZW50Iiwib25Sb3dEb3VibGVDbGlja2VkIiwiZ3dfb25Sb3dEb3VibGVDbGlja2VkIiwib25Sb3dDbGlja2VkIiwiZ3dfb25Sb3dDbGlja2VkIiwib25DZWxsQ2xpY2tlZCIsImd3X29uQ2VsbENsaWNrRXZlbnQiLCJvbkNlbGxEb3VibGVDbGlja2VkIiwib25TZWxlY3Rpb25DaGFuZ2VkIiwiZ3dfb25TZWxlY3Rpb25DaGFuZ2VkIiwib25SYW5nZVNlbGVjdGlvbkNoYW5nZWQiLCJnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCIsImNvbXBvbmVudHMiLCJBZ0dyaWRDb21wb25lbnRzIiwiSFRNTFRvb2x0aXAiLCJTdWdnZXN0aW9uRWRpdG9yIiwibmF2aWdhdGVUb05leHRDZWxsIiwidHJlZURhdGEiLCJnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQiLCJnd19nZXRDb250ZXh0TWVudSIsImdyaWRJZCIsImJ1aWxkQ29udGV4dE1lbnVBY3Rpb24iLCJwYXJzZU1lbnUiLCJtZW51IiwiY29udGV4dE1lbnUiLCJDRUxMX0NMSUNLSU5HX0VWRU5UU19NQVAiLCJjZWxsQ2xpY2tlZCIsImNlbGxEb3VibGVDbGlja2VkIiwiQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAiLCJjZWxsRWRpdGluZ1N0YXJ0ZWQiLCJjZWxsRWRpdGluZ1N0b3BwZWQiLCJjZWxsVmFsdWVDaGFuZ2VkIiwiUk9XX0VESVRJTkdfRVZFTlRTX01BUCIsInJvd0VkaXRpbmdTdGFydGVkIiwicm93RWRpdGluZ1N0b3BwZWQiLCJyb3dWYWx1ZUNoYW5nZWQiLCJnd19vbkNlbGxFZGl0aW5nRXZlbnQiLCJnd19vblJvd0VkaXRpbmdFdmVudCIsImd3X29uUmVhZHlFdmVudCIsIl9lIiwic3RhdGVEZWJvdW5jZSIsImNoYW5nZUV2ZW50Iiwia2V5ZG93bkV2ZW50Iiwia2MiLCJhayIsImFsdEtleSIsInNrIiwiY2siLCJnd19vblN0YXRlQ2hhbmdlZCIsImd3X29uS2V5ZG93biIsImd3X29uRmlsdGVyQ2hhbmdlZCIsInNyY0luZGV4IiwiSUVfUFJPVE8iLCJwcm9jZXNzIiwiYmluZGluZyIsInNyY1ZhbHVlIiwiY2hyIiwiZUd1aSIsImlzSGVhZGVyIiwiaXNHcm91cGVkSGVhZGVyIiwidGhlbWUiLCJncmlkQ29yZSIsImVHcmlkRGl2IiwiZW5kc1dpdGgiLCJ0b29sdGlwRmllbGQiLCJwYXNzZWRQYXJhbXMiLCJ0ZXh0UGF0dGVybiIsInRleHRSZXF1aXJlZCIsInRleHRUaXRsZSIsImRlYm91bmNlV2FpdE1zIiwiX2ZvY3VzQWZ0ZXJBdHRhY2hlZCIsImNlbGxTdGFydGVkRWRpdCIsIl9oaWdobGlnaHRBbGxPbkZvY3VzIiwiX29uQ2hhbmdlIiwiX3JlbmRlckl0ZW1UZW1wbGF0ZSIsIml0ZW1UZW1wbGF0ZSIsIl9yZW5kZXJHcm91cFRlbXBsYXRlIiwiZ3JvdXBUZW1wbGF0ZSIsIl9hdXRvY29tcGxldGUiLCJwcmV2ZW50U3VibWl0IiwiZmV0Y2giLCJfb25BdXRvY29tcGxldGVGZXRjaCIsIm9uU2VsZWN0IiwiX29uQXV0b2NvbXBsZXRlU2VsZWN0IiwicmVuZGVyR3JvdXAiLCJfb25BdXRvY29tcGxldGVSZW5kZXJHcm91cCIsInJlbmRlciIsIl9vbkF1dG9jb21wbGV0ZVJlbmRlckl0ZW0iLCJjdXN0b21pemUiLCJfb25BdXRvY29tcGxldGVDdXN0b21pemUiLCJlbXB0eU1zZyIsImVtcHR5TWVzc2FnZSIsIm1pbkxlbmd0aCIsInNob3dPbkZvY3VzIiwiZm9jdXNJbiIsImFsbG93Q3VzdG9tVmFsdWVzIiwiX3ZhbGlkYXRlSW5wdXQiLCJfbGFzdEZldGNoZWREYXRhIiwiZmlsdGVyZWRJdGVtcyIsInRleHQiLCJzdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCIsImVHcmlkQ2VsbCIsImN1cnJlbnRWYWx1ZSIsImdyb3VwTmFtZSIsImlucHV0UmVjdCIsIm1heEhlaWdodCIsImNoZWNrVmFsaWRpdHkiLCJnd19zZXRTdGF0ZSIsInNldENvbHVtblN0YXRlIiwic2V0Q29sdW1uR3JvdXBTdGF0ZSIsImdyb3VwcyIsInNldEZpbHRlck1vZGVsIiwiZmlsdGVycyIsImd3X2dldFN0YXRlIiwiZ2V0Q29sdW1uU3RhdGUiLCJnZXRDb2x1bW5Hcm91cFN0YXRlIiwiZ2V0U29ydE1vZGVsIiwiZ2V0RmlsdGVyTW9kZWwiLCJnd19zZXRTaWRlQmFyVmlzaWJsZSIsInNldFNpZGVCYXJWaXNpYmxlIiwiZ3dfb3BlblRvb2xwYW5lbCIsInRvb2xwYW5lbElkIiwib3BlblRvb2xQYW5lbCIsImd3X2Nsb3NlVG9vbHBhbmVsIiwiY2xvc2VUb29sUGFuZWwiLCJnd19zZXRGdW5jdGlvbnNSZWFkT25seSIsInNldEZ1bmN0aW9uc1JlYWRPbmx5IiwiZ3dfc2V0U3RhdHVzYmFyQ29tcG9uZW50VmlzaWJpbGl0eSIsImdldFN0YXR1c1BhbmVsIiwic2V0VmlzaWJsZSIsImd3X3Nob3dMb2FkaW5nT3ZlcmxheSIsInNob3dMb2FkaW5nT3ZlcmxheSIsImd3X3Nob3dOb1Jvd3NPdmVybGF5Iiwic2hvd05vUm93c092ZXJsYXkiLCJnd19oaWRlT3ZlcmxheSIsImhpZGVPdmVybGF5IiwiZ3dfdXBkYXRlQ29udGV4dCIsImd3X3NldFN0eWxlIiwicnVsZXMiLCJqc3MiLCJmb3JEb2N1bWVudCIsImd3X3JlbW92ZVN0eWxlIiwiYWRqU2VsQXR0clJlZ2V4IiwiZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4Iiwic2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50cyIsImdldFNlbGVjdG9yc0FuZFJ1bGVzIiwicmVzdWx0cyIsInNlbGVjdG9yVGV4dCIsInRvRG91YmxlQ29sb25Qc2V1ZG9FbGVtZW50cyIsImdldFJ1bGVzIiwic3dhcEFkalNlbEF0dHIiLCJzd2FwUHNldWRvRWxTeW50YXgiLCJhZGRSdWxlIiwicHNldWRvRWxlbWVudFJ1bGUiLCJhZGRQc2V1ZG9FbGVtZW50UnVsZSIsImFkZFJ1bGVUb1NoZWV0IiwiZG91YmxlQ29sb25TZWxlY3RvciIsInNpbmdsZUNvbG9uU2VsZWN0b3IiLCJ0b1NpbmdsZUNvbG9uUHNldWRvRWxlbWVudHMiLCJzdWJtYXRjaDEiLCJzdWJtYXRjaDIiLCJzdWJtYXRjaDMiLCJyZW1vdmVSdWxlIiwiZGVsZXRlUnVsZSIsImV4dGVuZCIsImRlc3QiLCJzcmMiLCJhZ2dyZWdhdGVTdHlsZXMiLCJhZ2dyZWdhdGUiLCJkZWNsYXJlZFByb3BlcnRpZXMiLCJkZWNsYXJlZCIsInRvQ2FtZWxDYXNlIiwic3dhcCIsImxhc3RJbmRleCIsInNldFN0eWxlUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJpbXBvcnRhbnRJbmRleCIsInNldFByb3BlcnR5Iiwic3VibWF0Y2giLCJ0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyIsIm9sZFByb3BzIiwibmV3UHJvcHMiLCJ1bkNhbWVsQ2FzZSIsIkpzcyIsInNoZWV0cyIsImRlZmF1bHRTaGVldCIsImdldEFsbCIsIl9jcmVhdGVTaGVldCIsIl9yZW1vdmVTaGVldCIsInN0eWxlTm9kZSIsInJlbCIsIm93bmVyTm9kZSIsImNzcyIsInByb3RvY29sIiwiaG9zdCIsInBhdGhuYW1lIiwiZnVsbE1hdGNoIiwib3JpZ1VybCIsIiQxIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7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QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEsNkJBQTZCLG1CQUFtQjs7QUFFaEQ7O0FBRUE7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O0FDL1dBOzs7O0FBUkE7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0FBMEMsb0RBQW9ELEdBQUcsb0NBQW9DLGtCQUFrQixvQkFBb0IsR0FBRywwQ0FBMEMseUVBQXlFLEdBQUcsNkNBQTZDLHNHQUFzRyxHQUFHLDBCQUEwQixxQkFBcUIsR0FBRywrQkFBK0IsK0NBQStDLCtDQUErQyxHQUFHLGlDQUFpQywrQ0FBK0MsK0NBQStDLEdBQUcsRyIsImZpbGUiOiJiYmotZ3JpZC13aWRnZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNDApO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogR2V0IGRvY3VtZW50XG4gKlxuICogR2V0IHRoZSBkb2N1bWVudCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgQkJqIGVudlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gRG9jdW1lbnQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldERvY3VtZW50KCkge1xuICByZXR1cm4gdHlwZW9mICRkb2MgIT09ICd1bmRlZmluZWQnID8gJGRvYyA6IGRvY3VtZW50XG59XG5cbi8qKlxuICogR2V0IHdpbmRvd1xuICpcbiAqIEdldCB0aGUgd2luZG93IGluc3RhbmNlIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBCQmogZW52XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBXaW5kb3cgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFdpbmRvdygpIHtcbiAgcmV0dXJuIHR5cGVvZiAkd25kICE9PSAndW5kZWZpbmVkJyA/ICR3bmQgOiB3aW5kb3dcbn1cblxuLyoqXG4gKiBFc2NhcGUgVmFsdWVcbiAqXG4gKiBDaGFuZ2UgbnVsbCBhbmQgdW5kZWZpbmVkIHRvIGVtcHR5IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGVzY2FwZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2VzY2FwZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJydcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSB1dWlkXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9jcmVhdGUtZ3VpZC11dWlkLWluLWphdmFzY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3V1aWQoKSB7XG4gIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcbiAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDhcbiAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgR3JpZFxuICpcbiAqIFJldHJpZXZlIHRoZSBncmlkIGluc3RhbmNlIGZyb20gYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8bnVsbH0gVGhlIGdyaWQncyBpbnN0YW5jZSBvZnIgbnVsbFxuICogQHRocm93cyBUeXBlRXJyb3Igd2hlbiB0aGUgZ3JpZCBpbnN0YW5jZSBpcyBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldEdyaWQoaWQpIHtcbiAgd2luZG93LkJCakdyaWRFeFdpZGdldCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgfHwge31cbiAgY29uc3QgZ3JpZCA9IHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdIHx8IG51bGxcblxuICBpZiAoIWdyaWQpIHtcbiAgICBjb25zdCByZWdpc3RlcmVkR3JpZHMgPSBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0KSlcbiAgICAvL2dldEZ1bmNBcmdzKGZ1bmMpLmZvckVhY2goKGtleSwgaSkgPT4gYXJnc09ialtrZXldID0gYXJnc1tpXSk7XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFxcblxcbltHcmlkIE5vdCBGb3VuZF0gVGhlIG1ldGhvZCBhc2tlZCBmb3Igbm9uLWV4aXN0ZW50IGdyaWQgaW5zdGFuY2UuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5SZXF1aXJlZCBHcmlkIElkIDogJHtpZH0gICBcblJlZ2lzdGVyZWQgR3JpZHMgOiAke3JlZ2lzdGVyZWRHcmlkc31cbmBcbiAgICApXG4gIH1cblxuICByZXR1cm4gZ3JpZFxufVxuXG4vKipcbiAqIEFkZCBHcmlkXG4gKlxuICogU3RvcmUgYSBuZXcgZ3JpZCBpbnN0YW5jZSBieSBpbiB0aGUgYHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRgIGFycmF5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBUaGUgZ3JpZCdzIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IFN0b3JlZCBncmlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRHcmlkKGlkLCBvcHRpb25zKSB7XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXQgPSB3aW5kb3cuQkJqR3JpZEV4V2lkZ2V0IHx8IHt9XG4gIHdpbmRvdy5CQmpHcmlkRXhXaWRnZXRbaWRdID0gb3B0aW9uc1xuXG4gIHJldHVybiBnd19nZXRHcmlkKGlkKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldERvY3VtZW50IH0gZnJvbSAnYXBpL3V0aWxpdGllcydcblxuLyoqIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19kZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgdmFyIHRpbWVvdXRcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb250ZXh0ID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHNcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsXG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpXG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZW5kIGFuIGV2ZW50IHRvIEJCaiBzaWRlXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY29udGV4dCB0aGUgZ3JpZCdzIGNvbnRleHRcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCB0aGUgZXZlbnQgcGF5bG9hZFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50SWQgdGhlIGV2ZW50J3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NlbmRFdmVudChjb250ZXh0LCBwYXlsb2FkID0ge30sIGV2ZW50SWQgPSBbXSkge1xuICBjb25zdCByZWdpc3RlcmVkSW50ZXJlc3RzID0gY29udGV4dC5pbnRlcmVzdHMgfHwgW11cblxuICBpZiAocmVnaXN0ZXJlZEludGVyZXN0cy5pbmNsdWRlcyhldmVudElkKSkge1xuICAgIGNvbnN0IGRpdiA9IGd3X2dldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoYCR7Y29udGV4dC5pZH1gKVxuICAgIHdpbmRvdy5iYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQoZGl2LCBwYXlsb2FkKVxuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5kZXhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYXJlbnRLZXlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjaGlsZEluZGV4XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBhIG5vZGUgYXMgQkJqR3JpZEV4V2lkZ2V0Um93XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5vZGUgYWcgZ3JpZCBub2RlXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAgYWcgZ3JpZCBjb250ZXh0XG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd3xCb29sZWFufSBvYmplY3QgZm9ybWF0dGVkIGFzIEJCakdyaWRFeFdpZGdldFJvdy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgaWYgdGhlIG5vZGUgaXMgZm9yIGdyb3VwIG5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZShub2RlLCBjb250ZXh0KSB7XG4gIGlmICh0cnVlID09PSBub2RlLmdyb3VwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gLy8gd2UgZG8gbm90IG1hbmFnZSBncm91cHNcblxuICBjb25zdCBnZXRSb3dOb2RlSWQgPSBub2RlLnJvd1Bpbm5lZCA/ICdfX1JPV19JTkRFWCcgOiBjb250ZXh0LmdldFJvd05vZGVJZFxuXG4gIHJldHVybiB7XG4gICAgaTpcbiAgICAgIGNvbnRleHQuaGFzT3duUHJvcGVydHkoJ2dldFJvd05vZGVJZCcpICYmIG5vZGUuZGF0YVtnZXRSb3dOb2RlSWRdXG4gICAgICAgID8gbm9kZS5kYXRhW2dldFJvd05vZGVJZF1cbiAgICAgICAgOiBub2RlLmlkLCAvLyBpZFxuICAgIHg6IG5vZGUucm93SW5kZXgsIC8vIGluZGV4XG4gICAgcDpcbiAgICAgIG5vZGUuaGFzT3duUHJvcGVydHkoJ3BhcmVudCcpICYmIG5vZGUucGFyZW50Lmhhc093blByb3BlcnR5KCdrZXknKVxuICAgICAgICA/IG5vZGUucGFyZW50LmtleVxuICAgICAgICA6ICcnLCAvLyBwYXJlbnQga2V5XG4gICAgYzogbm9kZS5yb3dQaW5uZWQgPyAtMSA6IG5vZGUuY2hpbGRJbmRleCwgLy9jaGlsZEluZGV4XG4gICAgczogQm9vbGVhbihub2RlLnNlbGVjdGVkKSwgLy8gc2VsZWN0ZWRcbiAgICAvLyBjbGllbnQgcm93XG4gICAgY3I6XG4gICAgICBjb250ZXh0Lmhhc093blByb3BlcnR5KCdpbmNsdWRlQ2xpZW50Um93RGF0YScpICYmXG4gICAgICBjb250ZXh0WydpbmNsdWRlQ2xpZW50Um93RGF0YSddID09PSB0cnVlXG4gICAgICAgID8gbm9kZS5kYXRhXG4gICAgICAgIDogbnVsbCxcbiAgICBwcDogbm9kZS5yb3dQaW5uZWQsIC8vIHBpbiBwb3NpdGlvblxuICB9XG59XG5cbi8qKlxuICogUGFyc2Ugbm9kZSBmcm9tIGV2ZW50XG4gKlxuICogUGFyc2Ugbm9kZSBpbiB0aGUgcGFTc2VkIGV2ZW50IGFzIEJCakdyaWRFeFdpZGdldFJvd1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKlxuICogQHJldHVybnMge0JCakdyaWRFeFdpZGdldFJvd31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlTm9kZUZyb21FdmVudChlKSB7XG4gIHJldHVybiBnd19wYXJzZU5vZGUoZS5ub2RlLCBlLmNvbnRleHQpXG59XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgZ2V0UmF3VGFnIGZyb20gJy4vX2dldFJhd1RhZy5qcyc7XG5pbXBvcnQgb2JqZWN0VG9TdHJpbmcgZnJvbSAnLi9fb2JqZWN0VG9TdHJpbmcuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8vIHNlbGVjdGlvbiBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfU0VMRUNUID0gNjlcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfQ0xJQ0sgPSA1MDExXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDSyA9IDUyXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfQ0VMTF9DTElDSyA9IDUwMDFcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0RPVUJMRV9DTElDSyA9IDUwMDJcblxuLy8gZWRpdGluZyBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RBUlRFRCA9IDUwMDNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX0VESVRJTkdfU1RPUFBFRCA9IDUwMDRcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQgPSA1MDA1XG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUk9XX0VESVRJTkdfU1RBUlRFRCA9IDUwMDZcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVEID0gNTAwN1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VEID0gNTAxMlxuXG4vLyBzdGF0ZSBjb25zdGFudHNcbmV4cG9ydCBjb25zdCBHV19FVkVOVF9HUklEX1NUQVRFX0NIQU5HRSA9IDUwMDhcblxuLy8gcmFuZ2Ugc2VsZWN0aW9uXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfUkFOR0VfU0VMRUNUSU9OX0NIQU5HRUQgPSA1MDA5XG5cbi8vIGtleWJvYXJkIGV2ZW50c1xuZXhwb3J0IGNvbnN0IEdXX0VWRU5UX0tFWVBSRVNTID0gNTAxMFxuXG4vLyBmaWx0ZXJzXG5leHBvcnQgY29uc3QgR1dfRVZFTlRfRklMVEVSX0NIQU5HRUQgPSA1MDEzXG4iLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIFtSZWN1cnNpdmVseSBwYXJzZXMgYSBzdHJpbmdpZmllZCBKU09OXVxuICogQHBhcmFtICB7W3R5cGVdfSBqc29uU3RyaW5nIFtzdHJpbmdpZmllZCBqc29uIHRvIHBhcnNlXVxuICogQHJldHVybiB7W3R5cGVdfSAgICAgICAgICAgIFtub3JtYWxpemVkIEphdmFzY3JpcHQgb2JqZWN0XVxuICovXG5mdW5jdGlvbiBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmcpIHtcbiAgLy8gaWYgbm90IHN0cmluZ2lmaWVkIGpzb24gcmF0aGVyIGEgc2ltcGxlIHN0cmluZyB2YWx1ZSB0aGVuIEpTT04ucGFyc2Ugd2lsbCB0aHJvdyBlcnJvclxuICAvLyBvdGhlcndpc2UgY29udGludWUgcmVjdXJzaW9uXG4gIGlmICh0eXBlb2YganNvblN0cmluZyA9PT0gJ3N0cmluZycpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZShqc29uU3RyaW5nKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ganNvblN0cmluZztcbiAgICB9XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqc29uU3RyaW5nKSkge1xuICAgIC8vIGlmIGFuIGFycmF5IGlzIHJlY2VpdmVkLCBtYXAgb3ZlciB0aGUgYXJyYXkgYW5kIGRlZXBQYXJzZSBlYWNoIHZhbHVlXG4gICAgcmV0dXJuIGpzb25TdHJpbmcubWFwKHZhbCA9PiBkZWVwUGFyc2VKc29uKHZhbCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09PSAnb2JqZWN0JyAmJiBqc29uU3RyaW5nICE9PSBudWxsKSB7XG4gICAgLy8gaWYgYW4gb2JqZWN0IGlzIHJlY2VpdmVkIHRoZW4gZGVlcFBhcnNlIGVhY2ggZWxlbWVudCBpbiB0aGUgb2JqZWN0XG4gICAgLy8gdHlwZW9mIG51bGwgcmV0dXJucyAnb2JqZWN0JyB0b28sIHNvIHdlIGhhdmUgdG8gZWxpbWluYXRlIHRoYXRcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvblN0cmluZykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2tleV0gPSBkZWVwUGFyc2VKc29uKGpzb25TdHJpbmdba2V5XSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIHdhcyByZWNlaXZlZFxuICAgIHJldHVybiBqc29uU3RyaW5nO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZWVwUGFyc2VKc29uIH07XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3Q7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG4iLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2U7XG4iLCIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7fTtcblxudmFyXHRtZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHR5cGVvZiBtZW1vID09PSBcInVuZGVmaW5lZFwiKSBtZW1vID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gbWVtbztcblx0fTtcbn07XG5cbnZhciBpc09sZElFID0gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XG5cdC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG5cdC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcblx0Ly8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuXHQvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcblx0Ly8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG5cdHJldHVybiB3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYjtcbn0pO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHBhc3NpbmcgZnVuY3Rpb24gaW4gb3B0aW9ucywgdGhlbiB1c2UgaXQgZm9yIHJlc29sdmUgXCJoZWFkXCIgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAvLyBVc2VmdWwgZm9yIFNoYWRvdyBSb290IHN0eWxlIGkuZVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAvLyAgIGluc2VydEludG86IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZm9vXCIpLnNoYWRvd1Jvb3QgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dmFyIHN0eWxlVGFyZ2V0ID0gZ2V0VGFyZ2V0LmNhbGwodGhpcywgdGFyZ2V0KTtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cdFx0XHRpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcblx0XHRcdFx0XHQvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuXHRcdFx0XHRcdHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG5cdFx0XHRcdH0gY2F0Y2goZSkge1xuXHRcdFx0XHRcdHN0eWxlVGFyZ2V0ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG5cdFx0fVxuXHRcdHJldHVybiBtZW1vW3RhcmdldF1cblx0fTtcbn0pKCk7XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyXHRzaW5nbGV0b25Db3VudGVyID0gMDtcbnZhclx0c3R5bGVzSW5zZXJ0ZWRBdFRvcCA9IFtdO1xuXG52YXJcdGZpeFVybHMgPSByZXF1aXJlKFwiLi91cmxzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBERUJVRyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBERUJVRykge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuYXR0cnMgPSB0eXBlb2Ygb3B0aW9ucy5hdHRycyA9PT0gXCJvYmplY3RcIiA/IG9wdGlvbnMuYXR0cnMgOiB7fTtcblxuXHQvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cblx0Ly8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXHRpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gXCJib29sZWFuXCIpIG9wdGlvbnMuc2luZ2xldG9uID0gaXNPbGRJRSgpO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIDxoZWFkPiBlbGVtZW50XG4gICAgICAgIGlmICghb3B0aW9ucy5pbnNlcnRJbnRvKSBvcHRpb25zLmluc2VydEludG8gPSBcImhlYWRcIjtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSBib3R0b20gb2YgdGhlIHRhcmdldFxuXHRpZiAoIW9wdGlvbnMuaW5zZXJ0QXQpIG9wdGlvbnMuaW5zZXJ0QXQgPSBcImJvdHRvbVwiO1xuXG5cdHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMobGlzdCwgb3B0aW9ucyk7XG5cblx0YWRkU3R5bGVzVG9Eb20oc3R5bGVzLCBvcHRpb25zKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG5cdFx0dmFyIG1heVJlbW92ZSA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdFx0dmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG5cblx0XHRcdGRvbVN0eWxlLnJlZnMtLTtcblx0XHRcdG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKTtcblx0XHR9XG5cblx0XHRpZihuZXdMaXN0KSB7XG5cdFx0XHR2YXIgbmV3U3R5bGVzID0gbGlzdFRvU3R5bGVzKG5ld0xpc3QsIG9wdGlvbnMpO1xuXHRcdFx0YWRkU3R5bGVzVG9Eb20obmV3U3R5bGVzLCBvcHRpb25zKTtcblx0XHR9XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldO1xuXG5cdFx0XHRpZihkb21TdHlsZS5yZWZzID09PSAwKSB7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIGRvbVN0eWxlLnBhcnRzW2pdKCk7XG5cblx0XHRcdFx0ZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59O1xuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzLCBvcHRpb25zKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0dmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF07XG5cblx0XHRpZihkb21TdHlsZSkge1xuXHRcdFx0ZG9tU3R5bGUucmVmcysrO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvcig7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcGFydHMgPSBbXTtcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0cGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cblx0XHRcdHN0eWxlc0luRG9tW2l0ZW0uaWRdID0ge2lkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHN9O1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBsaXN0VG9TdHlsZXMgKGxpc3QsIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlcyA9IFtdO1xuXHR2YXIgbmV3U3R5bGVzID0ge307XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBsaXN0W2ldO1xuXHRcdHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuXHRcdHZhciBjc3MgPSBpdGVtWzFdO1xuXHRcdHZhciBtZWRpYSA9IGl0ZW1bMl07XG5cdFx0dmFyIHNvdXJjZU1hcCA9IGl0ZW1bM107XG5cdFx0dmFyIHBhcnQgPSB7Y3NzOiBjc3MsIG1lZGlhOiBtZWRpYSwgc291cmNlTWFwOiBzb3VyY2VNYXB9O1xuXG5cdFx0aWYoIW5ld1N0eWxlc1tpZF0pIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7aWQ6IGlkLCBwYXJ0czogW3BhcnRdfSk7XG5cdFx0ZWxzZSBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydCk7XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQgKG9wdGlvbnMsIHN0eWxlKSB7XG5cdHZhciB0YXJnZXQgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50bylcblxuXHRpZiAoIXRhcmdldCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0SW50bycgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuXHR9XG5cblx0dmFyIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcFtzdHlsZXNJbnNlcnRlZEF0VG9wLmxlbmd0aCAtIDFdO1xuXG5cdGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcInRvcFwiKSB7XG5cdFx0aWYgKCFsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCkge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgdGFyZ2V0LmZpcnN0Q2hpbGQpO1xuXHRcdH0gZWxzZSBpZiAobGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcblx0XHR9XG5cdFx0c3R5bGVzSW5zZXJ0ZWRBdFRvcC5wdXNoKHN0eWxlKTtcblx0fSBlbHNlIGlmIChvcHRpb25zLmluc2VydEF0ID09PSBcImJvdHRvbVwiKSB7XG5cdFx0dGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zLmluc2VydEF0LmJlZm9yZSkge1xuXHRcdHZhciBuZXh0U2libGluZyA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvICsgXCIgXCIgKyBvcHRpb25zLmluc2VydEF0LmJlZm9yZSk7XG5cdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbmV4dFNpYmxpbmcpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIltTdHlsZSBMb2FkZXJdXFxuXFxuIEludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAnaW5zZXJ0QXQnICgnb3B0aW9ucy5pbnNlcnRBdCcpIGZvdW5kLlxcbiBNdXN0IGJlICd0b3AnLCAnYm90dG9tJywgb3IgT2JqZWN0LlxcbiAoaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIjaW5zZXJ0YXQpXFxuXCIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudCAoc3R5bGUpIHtcblx0aWYgKHN0eWxlLnBhcmVudE5vZGUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0c3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG5cblx0dmFyIGlkeCA9IHN0eWxlc0luc2VydGVkQXRUb3AuaW5kZXhPZihzdHlsZSk7XG5cdGlmKGlkeCA+PSAwKSB7XG5cdFx0c3R5bGVzSW5zZXJ0ZWRBdFRvcC5zcGxpY2UoaWR4LCAxKTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXG5cdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblxuXHRhZGRBdHRycyhzdHlsZSwgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBzdHlsZSk7XG5cblx0cmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMaW5rRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG5cdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0b3B0aW9ucy5hdHRycy5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblxuXHRhZGRBdHRycyhsaW5rLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIGxpbmspO1xuXG5cdHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRycyAoZWwsIGF0dHJzKSB7XG5cdE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcyk7XG5cblx0ICAgIGlmIChyZXN1bHQpIHtcblx0ICAgIFx0Ly8gSWYgdHJhbnNmb3JtIHJldHVybnMgYSB2YWx1ZSwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBydW5uaW5nIHJ1bnRpbWUgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBjc3MuXG5cdCAgICBcdG9iai5jc3MgPSByZXN1bHQ7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHQvLyBJZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgZG9uJ3QgYWRkIHRoaXMgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBjb25kaXRpb25hbCBsb2FkaW5nIG9mIGNzc1xuXHQgICAgXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICBcdFx0Ly8gbm9vcFxuXHQgICAgXHR9O1xuXHQgICAgfVxuXHR9XG5cblx0aWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG5cblx0XHRzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcblxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG5cblx0fSBlbHNlIGlmIChcblx0XHRvYmouc291cmNlTWFwICYmXG5cdFx0dHlwZW9mIFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRzdHlsZSA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IHVwZGF0ZUxpbmsuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblxuXHRcdFx0aWYoc3R5bGUuaHJlZikgVVJMLnJldm9rZU9iamVjdFVSTChzdHlsZS5ocmVmKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlKG9iaik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmopIHtcblx0XHRpZiAobmV3T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcblx0XHRcdFx0bmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcblx0XHRcdFx0bmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKG9iaiA9IG5ld09iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZSgpO1xuXHRcdH1cblx0fTtcbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cdH07XG59KSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG5cdHZhciBjc3MgPSByZW1vdmUgPyBcIlwiIDogb2JqLmNzcztcblxuXHRpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cblx0XHRpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcblxuXHRcdGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcblxuXHRpZihtZWRpYSkge1xuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIG1lZGlhKVxuXHR9XG5cblx0aWYoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0fSBlbHNlIHtcblx0XHR3aGlsZShzdHlsZS5maXJzdENoaWxkKSB7XG5cdFx0XHRzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcblx0XHR9XG5cblx0XHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5rIChsaW5rLCBvcHRpb25zLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG5cdC8qXG5cdFx0SWYgY29udmVydFRvQWJzb2x1dGVVcmxzIGlzbid0IGRlZmluZWQsIGJ1dCBzb3VyY2VtYXBzIGFyZSBlbmFibGVkXG5cdFx0YW5kIHRoZXJlIGlzIG5vIHB1YmxpY1BhdGggZGVmaW5lZCB0aGVuIGxldHMgdHVybiBjb252ZXJ0VG9BYnNvbHV0ZVVybHNcblx0XHRvbiBieSBkZWZhdWx0LiAgT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGNvbnZlcnRUb0Fic29sdXRlVXJscyBvcHRpb25cblx0XHRkaXJlY3RseVxuXHQqL1xuXHR2YXIgYXV0b0ZpeFVybHMgPSBvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyA9PT0gdW5kZWZpbmVkICYmIHNvdXJjZU1hcDtcblxuXHRpZiAob3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgfHwgYXV0b0ZpeFVybHMpIHtcblx0XHRjc3MgPSBmaXhVcmxzKGNzcyk7XG5cdH1cblxuXHRpZiAoc291cmNlTWFwKSB7XG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcblx0XHRjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArIFwiICovXCI7XG5cdH1cblxuXHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3NdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblxuXHR2YXIgb2xkU3JjID0gbGluay5ocmVmO1xuXG5cdGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cblx0aWYob2xkU3JjKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9sZFNyYyk7XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IFN0cmluZ01hc2sgZnJvbSAnLi9TdHJpbmdNYXNrJ1xuXG5leHBvcnQgZGVmYXVsdCBTdHJpbmdNYXNrXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IE51bWJlck1hc2sgZnJvbSAnLi9OdW1iZXJNYXNrJ1xuXG5leHBvcnQgZGVmYXVsdCBOdW1iZXJNYXNrXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXhlY3V0ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9leHByZXNzaW9uJ1xuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIEV4dGVuZCB0aGUgY29sdW1uIGRlZmluaXRpb25zXG4gKlxuICogRXh0ZW5kIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgd2l0aCBvcHRpb25zIHdoaWNoIGNhbiBub3QgYmUgaGFuZGxlZCBpbiBCQmpcbiAqIChleDogYXR0YWNoaW5nIGNhbGxiYWNrcylcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkZWZpbml0aW9ucyBhcnJheSBvZiBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2V4dGVuZENvbHVtbkRlZmluaXRpb25zKGRlZmluaXRpb25zKSB7XG4gIGZvciAobGV0IGkgaW4gZGVmaW5pdGlvbnMpIHtcbiAgICBjb25zdCBkZWYgPSBkZWZpbml0aW9uc1tpXVxuXG4gICAgZGVmLmNoZWNrYm94U2VsZWN0aW9uID0gZGVmLmNoZWNrYm94U2VsZWN0aW9uIHx8IGd3X2lzU2hvd1NlbGVjdGlvbkNoZWNrYm94XG4gICAgZGVmLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uID1cbiAgICAgIGRlZi5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiB8fCBnd19pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uXG5cbiAgICBjb25zdCB0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uID0gZGVmLnRvb2x0aXBWYWx1ZUdldHRlclxuICAgIGlmICh0b29sdGlwVmFsdWVHZXR0ZXJFeHByZXNzaW9uKSB7XG4gICAgICBkZWYudG9vbHRpcFZhbHVlR2V0dGVyID0gcGFyYW1zID0+XG4gICAgICAgIGd3X2V4ZWN1dGVFeHByZXNzaW9uKHRvb2x0aXBWYWx1ZUdldHRlckV4cHJlc3Npb24sIHBhcmFtcylcbiAgICB9XG5cbiAgICBkZWYudG9vbHRpcENvbXBvbmVudCA9ICdIVE1MVG9vbHRpcCdcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoZGVmLmhhc093blByb3BlcnR5KCdlZGl0YWJsZScpICYmIHR5cGVvZiBkZWYuZWRpdGFibGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlZGl0YWJsZSA9IGRlZi5lZGl0YWJsZVxuICAgICAgZGVmLmVkaXRhYmxlID0gcGFyYW1zID0+IGd3X2V4ZWN1dGVFeHByZXNzaW9uKGVkaXRhYmxlLCBwYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmIChkZWYuaGFzT3duUHJvcGVydHkoJ3Jvd1NwYW4nKSAmJiB0eXBlb2YgZGVmLnJvd1NwYW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCByb3dTcGFuID0gZGVmLnJvd1NwYW5cbiAgICAgIGRlZi5yb3dTcGFuID0gcGFyYW1zID0+IGd3X2V4ZWN1dGVFeHByZXNzaW9uKHJvd1NwYW4sIHBhcmFtcylcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKGRlZi5oYXNPd25Qcm9wZXJ0eSgnY29sU3BhbicpICYmIHR5cGVvZiBkZWYuY29sU3BhbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGNvbFNwYW4gPSBkZWYuY29sU3BhblxuICAgICAgZGVmLmNvbFNwYW4gPSBwYXJhbXMgPT4gZ3dfZXhlY3V0ZUV4cHJlc3Npb24oY29sU3BhbiwgcGFyYW1zKVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoZGVmLmhhc093blByb3BlcnR5KCdjaGlsZHJlbicpKSB7XG4gICAgICBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhkZWYuY2hpbGRyZW4pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7QXJyYXl9IGRlZmluaXRpb25zIGFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uRGVmaW5pdGlvbnMoaWQsIGRlZmluaXRpb25zKSB7XG4gIGNvbnN0IGdyaWQgPSBnd19nZXRHcmlkKGlkKVxuICBjb25zdCBkZWVwUGFyc2VkRGVmaW5pdGlvbnMgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KGRlZmluaXRpb25zKSlcblxuICBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhkZWVwUGFyc2VkRGVmaW5pdGlvbnMpXG5cbiAgZ3JpZC5vcHRpb25zLmFwaS5zZXRDb2x1bW5EZWZzKGRlZXBQYXJzZWREZWZpbml0aW9ucylcbiAgZ3JpZC5vcHRpb25zLmNvbHVtbkRlZnMgPSBkZWVwUGFyc2VkRGVmaW5pdGlvbnNcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zIGZpdCB0aGUgc2NyZWVuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfSB0aGUgd2lkdGggdG8gdXNlIHRvIGZpdCBhbGwgY29sdW1ucyBpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2l6ZUNvbHVtbnNUb0ZpdChpZCwgd2lkdGgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcbiAgY29uc3QgY29sdW1uc0FQSSA9IG9wdGlvbnMuY29sdW1uQXBpXG4gIGlmICh3aWR0aCkge1xuICAgIGNvbHVtbnNBUEkuc2l6ZUNvbHVtbnNUb0ZpdChOdW1iZXIod2lkdGgpKVxuICB9IGVsc2Uge1xuICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KClcbiAgfVxufVxuXG4vKipcbiAqIFdvcmsgb3V0IHRoZSBiZXN0IHdpZHRoIHRvIGZpdCB0aGUgY29udGVudHMgb2YgdGhlIGNlbGxzIGluIHRoZSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NraXBIZWFkZXI9ZmFsc2VdIHdoZW4gdHJ1ZSBpbmRpY2F0ZSB0aGF0IHRoZSBoZWFkZXIgY29udGVudCAoaGVhZGVyTmFtZSkgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHdoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGluZyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtblxuICogQHBhcmFtIHtBcnJheXxudWxsfSBbY29sdW1ucz1udWxsXSBhbiBhcnJheSBvZiBjb2x1bW5zIGlkcyB0byBhdXRvIHNpemUgb3IgbnVsbCB0byBhdXRvIHNpemUgYWxsIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2F1dG9TaXplQ29sdW1ucyhpZCwgc2tpcEhlYWRlciA9IGZhbHNlLCBjb2x1bW5zID0gbnVsbCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb2x1bW5zQVBJID0gb3B0aW9ucy5jb2x1bW5BcGlcblxuICBpZiAoIShjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoKSkge1xuICAgIGNvbnN0IGFsbENvbHVtbklkcyA9IFtdXG5cbiAgICBjb2x1bW5zQVBJLmdldEFsbENvbHVtbnMoKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBhbGxDb2x1bW5JZHMucHVzaChjb2x1bW4uY29sSWQpXG4gICAgfSlcblxuICAgIGNvbHVtbnNBUEkuYXV0b1NpemVDb2x1bW5zKGFsbENvbHVtbklkcywgQm9vbGVhbihza2lwSGVhZGVyKSlcbiAgfSBlbHNlIHtcbiAgICBjb2x1bW5zQVBJLmF1dG9TaXplQ29sdW1ucyhjb2x1bW5zLCBCb29sZWFuKHNraXBIZWFkZXIpKVxuICB9XG59XG4vKipcbiAqIEVuc3VyZXMgdGhlIGNvbHVtbiBpcyB2aXNpYmxlLCBzY3JvbGxpbmcgdGhlIHRhYmxlIGlmIG5lZWRlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5JZCAgdGhlIGNvbHVtbiBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZW5zdXJlQ29sdW1uVmlzaWJsZShpZCwgY29sdW1uSWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuZW5zdXJlQ29sdW1uVmlzaWJsZShjb2x1bW5JZClcbn1cblxuLyoqXG4gKiBTZXQgQ29sdW1uIFdpZHRoXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgVGhlIGNvbHVtbiBpZFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSB3aWR0aCBUaGUgbmV3IGNvbHVtbiB3aWR0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Q29sdW1uV2lkdGgoaWQsIGNvbHVtbklkLCB3aWR0aCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5XaWR0aChjb2x1bW5JZCwgTnVtYmVyKHdpZHRoKSlcbn1cblxuLyoqXG4gKiBQaW4gQ29sdW1uXG4gKlxuICogUGluIGEgY29sdW1uIHRvIGEgc3BlY2lmaWMgZGlyZWN0aW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uSWQgVGhlIGNvbHVtbiBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHBpbiBUaGUgcGluIGRpcmVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcGluQ29sdW1uKGlkLCBjb2x1bW5JZCwgcGluKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtblBpbm5lZChjb2x1bW5JZCwgcGluKVxufVxuXG4vKipcbiAqIE1vdmUgQ29sdW1uXG4gKlxuICogTW92ZSBjb2x1bW4gdG8gYSBzcGVjaWZpYyBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbklkIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gdG9JbmRleCBUaGUgbmV3IGNvbHVtbiBpbmRleFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfbW92ZUNvbHVtbihpZCwgY29sdW1uSWQsIHRvSW5kZXgpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkubW92ZUNvbHVtbihjb2x1bW5JZCwgdG9JbmRleClcbn1cblxuLyoqXG4gKiBTaG93IC8gSGlkZSBzZWxlY3Rpb24gY2hlY2tib3ggYmFzZWQgb24gdGhlIGZpcnN0IGNvbHVtblxuICpcbiAqIFRoZSBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCB0aGUgc2VsZWN0aW9uIGNoZWNrYm94IGlzIGFsd2F5cyBzaG93biBvbiB0aGVcbiAqIGZpcnN0IGNvbHVtblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbVxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBmaXJzdCBjb2x1bW4gLCBmYWxzZSBpZiBub3QgdGhlIGZpcnN0IGNvbHVtbiBvciBpZiB0aGVcbiAqICAgICAgICAgICAgICAgICAgIGdyaWQncyBgQ29udGV4dC5zaG93U2VsZWN0aW9uQ2hlY2tib3hgIGlzIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19pc1Nob3dTZWxlY3Rpb25DaGVja2JveChwYXJhbSkge1xuICBpZiAoIXBhcmFtLmNvbnRleHQuc2hvd1NlbGVjdGlvbkNoZWNrYm94KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjb2x1bW5zID0gcGFyYW0uY29sdW1uQXBpLmdldEFsbEdyaWRDb2x1bW5zKClcblxuICByZXR1cm4gY29sdW1uc1swXS5jb2xEZWYuZmllbGQgPT09IHBhcmFtLmNvbERlZi5maWVsZFxufVxuXG4vKipcbiAqIFNob3cgLyBIaWRlIGhlYWRlciBzZWxlY3Rpb24gY2hlY2tib3ggYmFzZWQgb24gdGhlIGZpcnN0IGNvbHVtblxuICpcbiAqIFRoZSBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCB0aGUgaGVhZGVyIHNlbGVjdGlvbiBjaGVja2JveCBpcyBhbHdheXMgc2hvd24gb24gdGhlXG4gKiBmaXJzdCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1cbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gZmlyc3QgY29sdW1uICwgZmFsc2UgaWYgbm90IHRoZSBmaXJzdCBjb2x1bW4gb3IgaWYgdGhlXG4gKiAgICAgICAgICAgICAgICAgICBncmlkJ3MgYENvbnRleHQuc2hvd0hlYWRlclNlbGVjdGlvbkNoZWNrYm94YCBpcyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbihwYXJhbSkge1xuICBjb25zdCBjb250ZXh0ID0gcGFyYW0uYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG5cbiAgaWYgKCFjb250ZXh0LnNob3dIZWFkZXJTZWxlY3Rpb25DaGVja2JveCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IHBhcmFtLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpXG5cbiAgcmV0dXJuIGNvbHVtbnNbMF0uY29sRGVmLmZpZWxkID09PSBwYXJhbS5jb2xEZWYuZmllbGRcbn1cblxuLyoqXG4gKiBFbmFibGUgcm93IGdyb3VwaW5nIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2V0ICBXaGVuIHRydWUgLCBgc2V0Um93R3JvdXBDb2x1bW5zYCB3aWxsIGJlIHVzZWQgLCBgYWRkUm93R3JvdXBDb2x1bW5zYCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZFJvd0dyb3VwQ29sdW1uKGlkLCBjb2x1bW5zLCBzZXQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGlbXG4gICAgc2V0ID8gJ3NldFJvd0dyb3VwQ29sdW1ucycgOiAnYWRkUm93R3JvdXBDb2x1bW5zJ1xuICBdKGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSkpXG59XG5cbi8qKlxuICogRGlzYWJsZSByb3cgZ3JvdXBpbmcgZm9yIGNvbHVtbnNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2x1bW5zICBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVtb3ZlUm93R3JvdXBDb2x1bW4oaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlUm93R3JvdXBDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0UGl2b3RNb2RlKGlkKSB7XG4gIHJldHVybiBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5pc1Bpdm90TW9kZSgpXG59XG5cbi8qKlxuICogRW5hYmxlIC8gZGlzYmFsZSBwaXZvdCBtb2RlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1vZGUgd2hlbiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRQaXZvdE1vZGUoaWQsIG1vZGUpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkuc2V0UGl2b3RNb2RlKCEhTnVtYmVyKG1vZGUpKVxufVxuXG4vKipcbiAqIEVuYWJsZSBwaXZvdCBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHNldCAgV2hlbiB0cnVlICwgYGFkZFBpdm90Q29sdW1uc2Agd2lsbCBiZSB1c2VkICwgYHNldFBpdm90Q29sdW1uc2Agb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRQaXZvdENvbHVtbnMoaWQsIGNvbHVtbnMsIHNldCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaVtzZXQgPyAnc2V0UGl2b3RDb2x1bW5zJyA6ICdhZGRQaXZvdENvbHVtbnMnXShcbiAgICBjb2x1bW5zLnNwbGl0KCcsJykubWFwKGkgPT4gaS50cmltKCkpXG4gIClcbn1cblxuLyoqXG4gKiBEaXNhYmxlIHBpdm90IGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVBpdm90Q29sdW1ucyhpZCwgY29sdW1ucykge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5yZW1vdmVQaXZvdENvbHVtbnMoXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRW5hYmxlIHZhbHVlIGZvciBjb2x1bW5zXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2FkZFZhbHVlQ29sdW1ucyhpZCwgY29sdW1ucykge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbHVtbkFwaS5hZGRWYWx1ZUNvbHVtbnMoXG4gICAgY29sdW1ucy5zcGxpdCgnLCcpLm1hcChpID0+IGkudHJpbSgpKVxuICApXG59XG5cbi8qKlxuICogRGlzYWJsZSB2YWx1ZSBmb3IgY29sdW1uc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbHVtbnMgIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZW1vdmVWYWx1ZUNvbHVtbnMoaWQsIGNvbHVtbnMpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb2x1bW5BcGkucmVtb3ZlVmFsdWVDb2x1bW5zKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKS5tYXAoaSA9PiBpLnRyaW0oKSlcbiAgKVxufVxuXG4vKipcbiAqIFNldCB0aGUgY29sdW1uIHNvcnRpbmcgbW9kZWxcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBtb2RlbCBtb2RlbCBhcyBqc29uIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTb3J0TW9kZWwoaWQsIG1vZGVsKSB7XG4gIGNvbnN0IGFzQXJyYXkgPSBKU09OLnBhcnNlKG1vZGVsKVxuICBjb25zdCBwYXJzZWRNb2RlbCA9IFtdXG4gIGFzQXJyYXkuZm9yRWFjaChpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpKSB7XG4gICAgICBwYXJzZWRNb2RlbC5wdXNoKHtcbiAgICAgICAgY29sSWQ6IGtleSxcbiAgICAgICAgc29ydDogaVtrZXldLFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2V0U29ydE1vZGVsKHBhcnNlZE1vZGVsKVxufVxuXG4vKipcbiAqIFJlZHJhd3MgdGhlIGhlYWRlci4gVXNlZnVsIGlmIGEgY29sdW1uIG5hbWUgY2hhbmdlcyxcbiAqIG9yIHNvbWV0aGluZyBlbHNlIHRoYXQgY2hhbmdlcyBob3cgdGhlIGNvbHVtbiBoZWFkZXIgaXMgZGlzcGxheWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlZnJlc2hIZWFkZXIoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVkcmF3Um93cygpXG59XG5cbi8qKlxuICogVXBkYXRlIGNvbHVtbiB2aWFiaWxpdHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1ucyAgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjb2x1bW4gaWRzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHZpc2libGUgdHJ1ZSB0byBtYWtlIHRoZSBjb2x1bW5zIHZpc2libGUgLCBmYWxzZSB0byBoaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRDb2x1bW5WaXNpYmxlKGlkLCBjb2x1bW5zLCB2aXNpYmxlKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29sdW1uQXBpLnNldENvbHVtbnNWaXNpYmxlKFxuICAgIGNvbHVtbnMuc3BsaXQoJywnKSxcbiAgICBCb29sZWFuKHZpc2libGUpXG4gIClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuLyoqXG4gKiBCdWlsZCBhIGpzIGZ1bmN0aW9uIGZyb20gdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhwcmVzc2lvblxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGV4cHJlc3Npb24gY2FjaGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgaWYgKHR5cGVvZiBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGUgPSBbXVxuICB9XG5cbiAgLy8gY2hlY2sgY2FjaGUgZmlyc3RcbiAgaWYgKGd3X2NvbXBpbGVFeHByZXNzaW9uLmV4cHJlc3Npb25DYWNoZVtleHByZXNzaW9uXSkge1xuICAgIHJldHVybiBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl1cbiAgfVxuXG4gIC8vIGlmIG5vdCBmb3VuZCBpbiBjYWNoZSwgcmV0dXJuIHRoZSBmdW5jdGlvblxuICBsZXQgZnVuY3Rpb25Cb2R5ID0gbnVsbFxuICAvLyBpZiB0aGUgZXhwcmVzc2lvbiBoYXMgdGhlICdyZXR1cm4nIHdvcmQgaW4gaXQsIHRoZW4gdXNlIGFzIGlzLFxuICAvLyBpZiBub3QsIHRoZW4gd3JhcCBpdCB3aXRoIHJldHVybiBhbmQgJzsnIHRvIG1ha2UgYSBmdW5jdGlvblxuICBpZiAoZXhwcmVzc2lvbi5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSB7XG4gICAgZnVuY3Rpb25Cb2R5ID0gZXhwcmVzc2lvblxuICB9IGVsc2Uge1xuICAgIGZ1bmN0aW9uQm9keSA9ICdyZXR1cm4gJyArIGV4cHJlc3Npb24gKyAnOydcbiAgfVxuXG4gIGNvbnN0IHRoZUZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKFxuICAgICd4LCBjdHgsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdmFsdWUsIG5vZGUsIGRhdGEsIGNvbERlZiwgcm93SW5kZXgsIGFwaSwgY29sdW1uQXBpLCBnZXRWYWx1ZSwgY29sdW1uLCBjb2x1bW5Hcm91cCcsXG4gICAgZnVuY3Rpb25Cb2R5XG4gIClcblxuICAvLyBzdG9yZSBpbiBjYWNoZVxuICBnd19jb21waWxlRXhwcmVzc2lvbi5leHByZXNzaW9uQ2FjaGVbZXhwcmVzc2lvbl0gPSB0aGVGdW5jdGlvblxuXG4gIHJldHVybiB0aGVGdW5jdGlvblxufVxuXG4vKipcbiAqIEJ1aWxkIGFuZCBleGVjdXRlZCBhbiBleHByZXNzaW9uIHdpdGggdGhlIHBhc3NlZCBwYXJhbXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhwcmVzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqIEByZXR1cm4gbWl4ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2V4ZWN1dGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHBhcmFtcykge1xuICB0cnkge1xuICAgIGNvbnN0IGphdmFTY3JpcHRGdW5jdGlvbiA9IGd3X2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pXG4gICAgLy8gdGhlIHBhcmFtcyBkb24ndCBoYXZlIGFsbCB0aGVzZSB2YWx1ZXMsIHJhdGhlciB3ZSBhZGQgZXZlcnkgcG9zc2libGVcbiAgICAvLyB2YWx1ZSBhIHBhcmFtcyBjYW4gaGF2ZSwgd2hpY2ggbWFrZXMgd2hhdGV2ZXIgaXMgaW4gdGhlIHBhcmFtcyBhdmFpbGFibGUuXG4gICAgY29uc3QgcmVzdWx0ID0gamF2YVNjcmlwdEZ1bmN0aW9uKFxuICAgICAgcGFyYW1zLnZhbHVlLFxuICAgICAgcGFyYW1zLmNvbnRleHQsXG4gICAgICBwYXJhbXMub2xkVmFsdWUsXG4gICAgICBwYXJhbXMubmV3VmFsdWUsXG4gICAgICBwYXJhbXMudmFsdWUsXG4gICAgICBwYXJhbXMubm9kZSxcbiAgICAgIHBhcmFtcy5kYXRhLFxuICAgICAgcGFyYW1zLmNvbERlZixcbiAgICAgIHBhcmFtcy5yb3dJbmRleCxcbiAgICAgIHBhcmFtcy5hcGksXG4gICAgICBwYXJhbXMuY29sdW1uQXBpLFxuICAgICAgcGFyYW1zLmdldFZhbHVlLFxuICAgICAgcGFyYW1zLmNvbHVtbixcbiAgICAgIHBhcmFtcy5jb2x1bW5Hcm91cFxuICAgIClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyB0aGUgZXhwcmVzc2lvbiBmYWlsZWQsIHdoaWNoIGNhbiBoYXBwZW4sIGFzIGl0J3MgdGhlIGNsaWVudCB0aGF0XG4gICAgLy8gcHJvdmlkZXMgdGhlIGV4cHJlc3Npb24uIHNvIHByaW50IGEgbmljZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coJ1Byb2Nlc3Npbmcgb2YgdGhlIGV4cHJlc3Npb24gZmFpbGVkJylcbiAgICBjb25zb2xlLmxvZygnRXhwcmVzc2lvbiA9ICcgKyBleHByZXNzaW9uKVxuICAgIGNvbnNvbGUubG9nKCdQYXJhbXMgPScsIHBhcmFtcylcbiAgICBjb25zb2xlLmxvZygnRXhjZXB0aW9uID0gJyArIGUpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZSB9IGZyb20gJ2V2ZW50cy91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19leGVjdXRlRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb24nXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRRdWlja0ZpbHRlcihpZCwgZmlsdGVyKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFF1aWNrRmlsdGVyKGZpbHRlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2V4cGFuZEFsbChpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5leHBhbmRBbGwoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfY29sbGFwc2VBbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuY29sbGFwc2VBbGwoKVxufVxuLyoqXG4gKiBFbnN1cmVzIHRoZSByb3cgaW5kZXggaXMgdmlzaWJsZSBieSB2ZXJ0aWNhbGx5IHNjcm9sbGluZyB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBpbmRleCB0aGUgcm93IGluZGV4IG9yIGtleVxuICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIHsndG9wJywgJ21pZGRsZScsICdib3R0b20nLCB1bmRlZmluZWQvbnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2Vuc3VyZUluZGV4VmlzaWJsZShpZCwgaW5kZXgsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGFwaSA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpXG4gIGNvbnN0IG5vZGUgPSBhcGkuZ2V0Um93Tm9kZShpbmRleClcblxuICBpZiAobm9kZSkge1xuICAgIGFwaS5lbnN1cmVOb2RlVmlzaWJsZShub2RlLCBwb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICBhcGkuZW5zdXJlSW5kZXhWaXNpYmxlKE51bWJlcihpbmRleCksIHBvc2l0aW9uKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19uYXZpZ2F0ZVRvTmV4dFJvdyhpZCwgcGFyYW1zKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGxldCBwcmV2aW91c0NlbGwgPSBwYXJhbXMucHJldmlvdXNDZWxsUG9zaXRpb25cbiAgbGV0IHN1Z2dlc3RlZE5leHRDZWxsID0gcGFyYW1zLm5leHRDZWxsUG9zaXRpb25cblxuICBjb25zdCBLRVlfVVAgPSAzOFxuICBjb25zdCBLRVlfRE9XTiA9IDQwXG4gIGNvbnN0IEtFWV9MRUZUID0gMzdcbiAgY29uc3QgS0VZX1JJR0hUID0gMzlcblxuICBzd2l0Y2ggKHBhcmFtcy5rZXkpIHtcbiAgICBjYXNlIEtFWV9ET1dOOlxuICAgICAgLy8gc2V0IHNlbGVjdGVkIGNlbGwgb24gY3VycmVudCBjZWxsICsgMVxuICAgICAgaWYgKHN1Z2dlc3RlZE5leHRDZWxsICYmICFzdWdnZXN0ZWROZXh0Q2VsbC5yb3dQaW5uZWQpIHtcbiAgICAgICAgaWYgKHByZXZpb3VzQ2VsbC5yb3dQaW5uZWQpIHtcbiAgICAgICAgICBjb25zdCByb3cgPSBvcHRpb25zLmFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KFxuICAgICAgICAgICAgb3B0aW9ucy5hcGkuZ2V0Rmlyc3REaXNwbGF5ZWRSb3coKVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuc2V0U2VsZWN0ZWQodHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5hcGkuZm9yRWFjaE5vZGUobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd0luZGV4ICsgMSA9PT0gbm9kZS5yb3dJbmRleCkge1xuICAgICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VnZ2VzdGVkTmV4dENlbGxcbiAgICBjYXNlIEtFWV9VUDpcbiAgICAgIC8vIHNldCBzZWxlY3RlZCBjZWxsIG9uIGN1cnJlbnQgY2VsbCAtIDFcbiAgICAgIGlmIChzdWdnZXN0ZWROZXh0Q2VsbCAmJiAhc3VnZ2VzdGVkTmV4dENlbGwucm93UGlubmVkKSB7XG4gICAgICAgIGlmIChwcmV2aW91c0NlbGwucm93UGlubmVkKSB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gb3B0aW9ucy5hcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChcbiAgICAgICAgICAgIG9wdGlvbnMuYXBpLmdldExhc3REaXNwbGF5ZWRSb3coKVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuc2V0U2VsZWN0ZWQodHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5hcGkuZm9yRWFjaE5vZGUobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNDZWxsLnJvd0luZGV4IC0gMSA9PT0gbm9kZS5yb3dJbmRleCkge1xuICAgICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Z2dlc3RlZE5leHRDZWxsXG4gICAgY2FzZSBLRVlfTEVGVDpcbiAgICBjYXNlIEtFWV9SSUdIVDpcbiAgICAgIHJldHVybiBzdWdnZXN0ZWROZXh0Q2VsbFxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHN1cGVyIHN0cmFuZ2Uga2V5Ym9hcmQnKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJvdyBiYXNlZCBvbiBgZ2V0Um93Tm9kZUlkYCBjb25maWcgZGVmaW5lZCBpbiB0aGUgZ3JpZCBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhICB0aGUgZGF0YSByb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvd05vZGVJZChpZCwgZGF0YSkge1xuICByZXR1cm4gZGF0YVtnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQuZ2V0Um93Tm9kZUlkXVxufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgZ3JpZCdzIGRhdGEgc2V0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIGpzb24gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBuZXcgZGF0YXNldCB0byB1cGRhdGUgdGhlIGdyaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd0RhdGEoaWQsIGpzb24pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcblxuICBvcHRpb25zLmFwaS5zZXRSb3dEYXRhKGpzb24pXG4gIG9wdGlvbnMucm93RGF0YSA9IGpzb25cbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGdyaWQgd2l0aCBhIHRyYW5zYWN0aW9uIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdXBkYXRlUm93RGF0YShpZCwgdHJhbnNhY3Rpb24sIGJhdGNoVXBkYXRlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgaWYgKHRyYW5zYWN0aW9uLnJlbW92ZS5sZW5ndGgpIHtcbiAgICBsZXQgaXRlbXMgPSBbXVxuXG4gICAgdHJhbnNhY3Rpb24ucmVtb3ZlLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgaXRlbXMucHVzaChvcHRpb25zLmFwaS5nZXRSb3dOb2RlKGluZGV4KS5kYXRhKVxuICAgIH0pXG5cbiAgICB0cmFuc2FjdGlvbi5yZW1vdmUgPSBpdGVtc1xuICB9XG5cbiAgaWYgKCFiYXRjaFVwZGF0ZSkge1xuICAgIG9wdGlvbnMuYXBpLmFwcGx5VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pXG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy5hcGkuYXBwbHlUcmFuc2FjdGlvbkFzeW5jKHRyYW5zYWN0aW9uKVxuICB9XG59XG5cbi8qKlxuICogU2V0IHRoZSBoZWlnaHQgb2YgYWxsIHJvd3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQgaWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgdGhlIHJvdyBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFJvd3NIZWlnaHQoaWQsIGhlaWdodCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBhcGkgPSBvcHRpb25zLmFwaVxuXG4gIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgIHJvdy5zZXRSb3dIZWlnaHQoaGVpZ2h0KVxuICB9KVxuXG4gIGFwaS5vblJvd0hlaWdodENoYW5nZWQoKVxufVxuXG4vKipcbiAqIFNldCB0aGUgZ2l2ZW4gcm93IGhlaWdodFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBpbmRleCB0aGUgcm93IGluZGV4IG9yIGtleVxuICogQHBhcmFtIHtOdW1iZXJ9IGhlaWdodCB0aGUgbmV3IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0Um93SGVpZ2h0KGlkLCBpbmRleCwgaGVpZ2h0KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG4gIGNvbnN0IHJvdyA9IGFwaS5nZXRSb3dOb2RlKGluZGV4KSB8fCBhcGkuZ2V0RGlzcGxheWVkUm93QXRJbmRleChpbmRleClcblxuICBpZiAocm93KSB7XG4gICAgcm93LnNldFJvd0hlaWdodChoZWlnaHQpXG4gICAgb3B0aW9ucy5hcGkub25Sb3dIZWlnaHRDaGFuZ2VkKClcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBzZXQgaGVpZ2h0IGZvciByb3cgJHtpbmRleH0uIFJvdyBjYW5ub3QgYmUgZm91bmRgKVxuICB9XG59XG5cbi8qKlxuICogUmVzZXQgdGhlIHJvdyBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgIHRoZSBncmlkIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19yZXNldFJvd0hlaWdodHMoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkucmVzZXRSb3dIZWlnaHRzKClcbn1cblxuLyoqXG4gKiBTZWxlY3Qgcm93IG9yIG1vcmUgYmFzZWQgb24gdGhlIHJvdyBpZCBvciBpbmRleFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge0FycmF5fSByb3dzIGFuIGFycmF5IG9mIHJvdyBrZXlzIGFuZCBpbmRleGVzIHRvIHNlbGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0U2VsZWN0ZWRSb3dzKGlkLCByb3dzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGFwaSA9IG9wdGlvbnMuYXBpXG5cbiAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KG5vZGUgPT4ge1xuICAgIGlmIChcbiAgICAgIHJvd3MuaW5kZXhPZihTdHJpbmcobm9kZS5yb3dJbmRleCkpID4gLTEgfHxcbiAgICAgIHJvd3MuaW5kZXhPZihTdHJpbmcobm9kZS5pZCkpID4gLTFcbiAgICApIHtcbiAgICAgIG5vZGUuc2V0U2VsZWN0ZWQodHJ1ZSlcbiAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlXG4gICAgfVxuICB9KVxuXG4gIGFwaS5vbkdyb3VwRXhwYW5kZWRPckNvbGxhcHNlZCgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZWxlY3RBbGwoaWQsIGZpbHRlcmVkKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG5cbiAgaWYgKDEgPT09IGZpbHRlcmVkKSB7XG4gICAgb3B0aW9ucy5hcGkuc2VsZWN0QWxsRmlsdGVyZWQoKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLnNlbGVjdEFsbCgpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2Rlc2VsZWN0QWxsKGlkLCBmaWx0ZXJlZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIGlmICgxID09PSBmaWx0ZXJlZCkge1xuICAgIG9wdGlvbnMuYXBpLmRlc2VsZWN0QWxsRmlsdGVyZWQoKVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuYXBpLmRlc2VsZWN0QWxsKClcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBzZWxlY3RlZCByb3dzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIGdyaWQncyBpZFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBzZWxlY3RlZCByb3dzIGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFNlbGVjdGVkUm93cyhpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBub2RlcyA9IG9wdGlvbnMuYXBpLmdldFNlbGVjdGVkTm9kZXMoKVxuICBsZXQgcGFyc2VkID0gW11cblxuICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgIHBhcnNlZC5wdXNoKGd3X3BhcnNlTm9kZShub2RlLCBvcHRpb25zLmNvbnRleHQpKVxuICB9KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXJzZWQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBsYXN0IHNlbGVjdGVkIHJvd1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzZWxlY3RlZCByb3cgYXMgSlNPTlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0U2VsZWN0ZWRSb3coaWQpIHtcbiAgY29uc3Qgcm93cyA9IEpTT04ucGFyc2UoZ3dfZ2V0U2VsZWN0ZWRSb3dzKGlkKSlcblxuICBpZiAocm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocm93c1tyb3dzLmxlbmd0aCAtIDFdKVxuICB9XG5cbiAgcmV0dXJuICcnXG59XG5cbi8qKlxuICogR2V0IHRoZSByb3cgYnkgaXRzIGlkIG9yIGluZGV4XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBpbmRleFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcm93IGFzIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldFJvdyhpZCwgaW5kZXgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgIGd3X3BhcnNlTm9kZShvcHRpb25zLmFwaS5nZXRSb3dOb2RlKGluZGV4KSwgb3B0aW9ucy5jb250ZXh0KVxuICApXG59XG5cbi8qKlxuICogR2V0IHJvd3MgZnJvbSB0aGUgZ3JpZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gcGhhc2UgVGhlIHJvd3MgcGhhc2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWx0ZXJFeHByZXNzaW9uIEEgZmlsdGVyIGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IEpzb24gc3RyaW5naWZpZWQgYXJyYXkgb2Ygcm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0Um93cyhpZCwgcGhhc2UsIGZpbHRlckV4cHJlc3Npb24pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgcGFyc2VkID0gW11cblxuICBvcHRpb25zLmFwaVtwaGFzZV0obm9kZSA9PiB7XG4gICAgaWYgKCFub2RlLmdyb3VwKSB7XG4gICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbikge1xuICAgICAgICBjb25zdCBjYW5Qcm9jZXNzID0gZ3dfZXhlY3V0ZUV4cHJlc3Npb24oZmlsdGVyRXhwcmVzc2lvbiwge1xuICAgICAgICAgIHZhbHVlOiBub2RlLmRhdGEsXG4gICAgICAgICAgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LFxuICAgICAgICAgIG9sZFZhbHVlOiBudWxsLFxuICAgICAgICAgIG5ld1ZhbHVlOiBudWxsLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgZGF0YTogbm9kZS5kYXRhLFxuICAgICAgICAgIGNvbERlZjogbnVsbCxcbiAgICAgICAgICByb3dJbmRleDogbm9kZS5yb3dJbmRleCxcbiAgICAgICAgICBhcGk6IG5vZGUuZ3JpZEFwaSxcbiAgICAgICAgICBjb2x1bW5BcGk6IG5vZGUuY29sdW1uQXBpLFxuICAgICAgICAgIGdldFZhbHVlOiAoKSA9PiBub2RlLmRhdGEsXG4gICAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICAgIGNvbHVtbkdyb3VwOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgbm9kZS5oYXNPd25Qcm9wZXJ0eSgncGFyZW50JykgJiYgbm9kZS5wYXJlbnQuaGFzT3duUHJvcGVydHkoJ2tleScpXG4gICAgICAgICAgICAgID8gbm9kZS5wYXJlbnQua2V5XG4gICAgICAgICAgICAgIDogJycsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGNhblByb2Nlc3MpIHtcbiAgICAgICAgICBwYXJzZWQucHVzaChnd19wYXJzZU5vZGUobm9kZSwgb3B0aW9ucy5jb250ZXh0KSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkLnB1c2goZ3dfcGFyc2VOb2RlKG5vZGUsIG9wdGlvbnMuY29udGV4dCkpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXJzZWQpXG59XG5cbi8qKlxuICogR2V0cyB0aGUgZ3JpZCB0byByZW1vdmUgYSByb3cgZnJvbSB0aGUgRE9NIGFuZCByZWNyZWF0ZSBpdCBhZ2FpbiBmcm9tIHNjcmF0Y2guXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfcmVkcmF3Um93cyhpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5yZWRyYXdSb3dzKClcbn1cblxuLyoqXG4gKiBQaW4gYW4gYXJyYXkgb2YgdG93IHRvIHRoZSB0b3Agb2YgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBhcnJheSBvZiByb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRQaW5uZWRUb3BSb3dEYXRhKGlkLCBkYXRhKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFBpbm5lZFRvcFJvd0RhdGEoZGF0YSlcbn1cblxuLyoqXG4gKiBQaW4gYW4gYXJyYXkgb2YgdG93IHRvIHRoZSBib3R0b20gb2YgdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBhcnJheSBvZiByb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRQaW5uZWRCb3R0b21Sb3dEYXRhKGlkLCBkYXRhKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldFBpbm5lZEJvdHRvbVJvd0RhdGEoZGF0YSlcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkLCBnd191dWlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlQWRkQ2VsbFJhbmdlIH0gZnJvbSAnYXBpL2NlbGxzJ1xuXG5jb25zdCB7IGRlZXBQYXJzZUpzb24gfSA9IHJlcXVpcmUoJ2RlZXAtcGFyc2UtanNvbicpXG5cbi8qKlxuICogVGhlIGFycmF5IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gY3JlYXRlZCBjaGFydHMgZnJvbSBCQmouXG4gKiBFdmVyeSByZWZlcmVuY2UgaXMgYSBDaGFydFJlZiBvYmplY3Qgd2hpY2ggcHJvdmlkZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlXG4gKiBkZXN0cm95Q2hhcnQoKSBtZXRob2QgdGhhdCBpcyByZXF1aXJlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBkaXNwb3NlIHRoZSBjaGFydC5cbiAqL1xuXG4vKipcbiAqIFJldHVybiB0aGUgY2hhcnQgdG9vbGJhciBpdGVtcyBkZWZpbmVkIGluIHRoZSBncmlkJ3MgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkgb2Ygc3VwcG9ydGVkIGNoYXJ0IGl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIChcbiAgICBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0LmNoYXJ0VG9vbGJhckl0ZW1zIHx8IFtdXG4gIClcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGNoYXJ0IHJhbmdlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IHJhbmdlICBib3VuZGVkIG9yIHVuYm91bmRlZCByYW5nZSBtb2RlbFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gYSB1bmlxdWUgaWQgZm9yIHRoZSBnZW5lcmF0ZSBjaGFydFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfYWRkQ2hhcnRSYW5nZShpZCwgcmFuZ2UpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG4gIGNvbnN0IG9wdGlvbnMgPSBncmlkLm9wdGlvbnNcbiAgY29uc3QgcHIgPSBkZWVwUGFyc2VKc29uKEpTT04uc3RyaW5naWZ5KHJhbmdlKSlcblxuICBwci5jZWxsUmFuZ2UgPSBnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCBwci5jZWxsUmFuZ2UpXG5cbiAgY29uc3QgcmVmID0gb3B0aW9ucy5hcGkuY3JlYXRlUmFuZ2VDaGFydChwcilcbiAgY29uc3QgdXVpZCA9IGd3X3V1aWQoKVxuXG4gIGdyaWQuY3JlYXRlZF9jaGFydHMgPSBncmlkLmNyZWF0ZWRfY2hhcnRzIHx8IHt9XG4gIGdyaWQuY3JlYXRlZF9jaGFydHNbdXVpZF0gPSByZWZcblxuICByZXR1cm4gdXVpZFxufVxuXG4vKipcbiAqIERlc3Ryb3kgY3JlYXRlZCBjaGFydHNcbiAqXG4gKiBEZXN0cm95IGFscmVhZHkgY3JlYXRlZCBjaGFydCBieSBpZCBvciBhbGwgY3JlYXRlZCBjaGFydHNcbiAqIHdoZW4gdGhlIGB1dWlkYCBpcyBvbWl0dGVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB1dWlkIFRoZSBjaGFydCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19kZXN0cm95Q2hhcnQoaWQsIHV1aWQpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG5cbiAgaWYgKHV1aWQpIHtcbiAgICBpZiAoXG4gICAgICBncmlkLmhhc093blByb3BlcnR5KCdjcmVhdGVkX2NoYXJ0cycpICYmXG4gICAgICBncmlkLmNyZWF0ZWRfY2hhcnRzLmhhc093blByb3BlcnR5KHV1aWQpXG4gICAgKSB7XG4gICAgICBncmlkLmNyZWF0ZWRfY2hhcnRzW3V1aWRdLmRlc3Ryb3lDaGFydCgpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncmlkLmhhc093blByb3BlcnR5KCdjcmVhdGVkX2NoYXJ0cycpKSB7XG4gICAgICBmb3IgKGNvbnN0IGkgaW4gZ3JpZC5jcmVhdGVkX2NoYXJ0cykge1xuICAgICAgICBpZiAoZ3JpZC5jcmVhdGVkX2NoYXJ0cy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gZ3JpZC5jcmVhdGVkX2NoYXJ0c1tpXVxuICAgICAgICAgIGNoYXJ0LmRlc3Ryb3lDaGFydCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfcGFyc2VOb2RlIH0gZnJvbSAnZXZlbnRzL3V0aWxpdGllcydcblxuY29uc3QgeyBkZWVwUGFyc2VKc29uIH0gPSByZXF1aXJlKCdkZWVwLXBhcnNlLWpzb24nKVxuXG4vKipcbiAqIFN0YXJ0IGNlbGwgZWRpdGluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge1N0cmluZ3xudW1iZXJ9IHJvdyBUaGUgcm93IGluZGV4IG9yIGtleVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbEtleSBUaGUgY29sdW1uJ3Mga2V5XG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVByZXNzICBLZXkgcHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBjaGFyUHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSByb3dQaW5uZWQgU2V0IHRvICd0b3AnIG9yICdib3R0b20nIHRvIHN0YXJ0ZWQgZWRpdGluZyBhIHBpbm5lZCByb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3N0YXJ0RWRpdGluZ0NlbGwoXG4gIGlkLFxuICByb3csXG4gIGNvbEtleSxcbiAga2V5UHJlc3MsXG4gIGNoYXJQcmVzcyxcbiAgcm93UGlubmVkXG4pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGd3X2dldEdyaWQoaWQpLm9wdGlvbnNcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcbiAgY29uc3Qgbm9kZSA9IGFwaS5nZXRSb3dOb2RlKHJvdykgfHwgYXBpLmdldERpc3BsYXllZFJvd0F0SW5kZXgocm93KVxuXG4gIG9wdGlvbnMuYXBpLnN0YXJ0RWRpdGluZ0NlbGwoe1xuICAgIHJvd0luZGV4OiBub2RlLnJvd0luZGV4LFxuICAgIGtleVByZXNzOiBOdW1iZXIoa2V5UHJlc3MpLFxuICAgIGNvbEtleSxcbiAgICBjaGFyUHJlc3MsXG4gICAgcm93UGlubmVkLFxuICB9KVxufVxuXG4vKipcbiAqIFN0b3AgY2VsbCBlZGl0aW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2FuY2VsIHdoZW4gdHJ1ZSBjYW5jZWwgZWRpdHMgLCBzYXZlIGVkaXRzIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc3RvcEVkaXRpbmcoaWQsIGNhbmNlbCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zdG9wRWRpdGluZyhjYW5jZWwpXG59XG5cbi8qKlxuICogTmF2aWdhdGVzIHRoZSBncmlkIGZvY3VzIHRvIHRoZSBuZXh0IGNlbGwsIGFzIGlmIHRhYmJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdGFiVG9OZXh0Q2VsbChpZCkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS50YWJUb05leHRDZWxsKClcbn1cblxuLyoqXG4gKiBOYXZpZ2F0ZXMgdGhlIGdyaWQgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGNlbGwsIGFzIGlmIHNoaWZ0LXRhYmJpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkICB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfdGFiVG9QcmV2aW91c0NlbGwoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkudGFiVG9QcmV2aW91c0NlbGwoKVxufVxuXG4vKipcbiAqIFNldCBGb2N1cyBvbiB0aGUgZ2l2ZW4gcm93IGFuZCBjb2x1bW5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSByb3cgVGhlIHJvdydzIGluZGV4L2lkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uIFRoZSBjb2x1bW4gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbG9hdGluZyBudWxsLCAndG9wJywgb3IgJ2JvdHRvbScuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRGb2N1c2VkQ2VsbChpZCwgcm93LCBjb2x1bW4sIGZsb2F0aW5nID0gbnVsbCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIC8vIGlnbm9yZSBmb2N1cyBjYWxscyBpZiBlZGl0aW5nXG4gIGlmIChvcHRpb25zLmFwaS5nZXRFZGl0aW5nQ2VsbHMoKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgciwgYywgZlxuICBpZiAocm93ID09IC0xKSB7XG4gICAgLy8gdHJ5IHRvIHJldGFpbiB0aGUgZm9jdXNcbiAgICBjb25zdCBsYXN0Rm9jdXNlZENlbGwgPSBvcHRpb25zLmFwaS5nZXRGb2N1c2VkQ2VsbCgpXG5cbiAgICBpZiAobGFzdEZvY3VzZWRDZWxsKSB7XG4gICAgICByID0gbGFzdEZvY3VzZWRDZWxsLnJvd0luZGV4XG4gICAgICBjID0gbGFzdEZvY3VzZWRDZWxsLmNvbHVtbi5jb2xJZFxuICAgICAgZiA9IGxhc3RGb2N1c2VkQ2VsbC5yb3dQaW5uZWRcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IDBcbiAgICAgIGMgPSBvcHRpb25zLmNvbHVtbkFwaS5nZXRBbGxHcmlkQ29sdW1ucygpWzBdLmNvbElkXG4gICAgICBmID0gZmxvYXRpbmdcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgciA9ICFyb3dcbiAgICAgID8gMFxuICAgICAgOiBOdW1iZXIuaXNJbnRlZ2VyKCtyb3cpXG4gICAgICA/ICtyb3dcbiAgICAgIDogb3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShyb3cpLnJvd0luZGV4XG4gICAgYyA9IGNvbHVtbiA/IGNvbHVtbiA6IG9wdGlvbnMuY29sdW1uQXBpLmdldEFsbEdyaWRDb2x1bW5zKClbMF0uY29sSWRcbiAgICBmID0gZmxvYXRpbmdcbiAgfVxuXG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldEZvY3VzZWRDZWxsKHIsIGMsIGYpXG59XG5cbi8qKlxuICogR2V0IFJhbmdlIFNlbGVjdGlvbnNcbiAqXG4gKiBUaGUgbWV0aG9kIHdpbGwgY3JlYXRlIGEgcmFuZ2UganNvbiBtb2RlbCBmb3IgZWFjaCByYW5nZSB3aGljaCBjYW4gYmUgcGFyc2VkIGluIEJCaiBzaWRlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBncmlkJ3MgaWRcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzZWxlY3RlZCByYW5nZXMgYXMgSlNPTlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfZ2V0UmFuZ2VTZWxlY3Rpb25zKGlkKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHRcbiAgY29uc3QgYXBpID0gb3B0aW9ucy5hcGlcbiAgY29uc3QgcmFuZ2VzID0gYXBpLmdldENlbGxSYW5nZXMoKVxuICBjb25zdCBtb2RlbCA9IGFwaS5nZXRNb2RlbCgpXG4gIGxldCByZXN1bHQgPSBbXVxuXG4gIHJhbmdlcy5mb3JFYWNoKHJhbmdlID0+IHtcbiAgICAvLyBjb25zdCBzdGFydCA9IGd3X3BhcnNlTm9kZShtb2RlbC5nZXRSb3cocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgpLCBvcHRpb25zLmNvbnRleHQpO1xuICAgIC8vIGNvbnN0IGVuZCA9IGd3X3BhcnNlTm9kZShtb2RlbC5nZXRSb3cocmFuZ2UuZW5kUm93LnJvd0luZGV4KSwgb3B0aW9ucy5jb250ZXh0KTtcblxuICAgIC8vaWYgKHN0YXJ0ICE9PSBmYWxzZSAmJiBlbmQgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHJhbmdlLmNvbHVtbnNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiB7XG4gICAgICAgIGlmICgnYWctR3JpZC1BdXRvQ29sdW1uJyAhPT0gY3VycmVudC5jb2xJZCkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yLnB1c2goY3VycmVudC5jb2xJZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvclxuICAgICAgfSwgW10pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICBjb25zdCBzdGFySW5kZXggPSBNYXRoLm1pbihyYW5nZS5zdGFydFJvdy5yb3dJbmRleCwgcmFuZ2UuZW5kUm93LnJvd0luZGV4KVxuICAgIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5tYXgocmFuZ2Uuc3RhcnRSb3cucm93SW5kZXgsIHJhbmdlLmVuZFJvdy5yb3dJbmRleClcbiAgICBjb25zdCByb3dzID0gW11cblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhckluZGV4OyByb3dJbmRleCA8PSBlbmRJbmRleDsgcm93SW5kZXgrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG1vZGVsLmdldFJvdyhyb3dJbmRleClcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZE5vZGUgPSBnd19wYXJzZU5vZGUobm9kZSwgY29udGV4dClcbiAgICAgICAgaWYgKHBhcnNlZE5vZGUpIHtcbiAgICAgICAgICByb3dzLnB1c2gocGFyc2VkTm9kZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyb3dzLmxlbmd0aCAmJiBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goeyByOiByb3dzLCBjOiBjb2x1bW5zIH0pXG4gICAgfVxuICAgIC8vfVxuICB9KVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXN1bHQpXG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGNlbGxzIHJhbmdlIGluIGEgZm9ybWF0IHRoZSBncmlkIGNhbiB1bmRlcnN0YW5kIHdoZW4gaXQgaXMgcGFzc2VkXG4gKiB0byBgYXBpLmFkZENlbGxSYW5nZWBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgZ3JpZCdzIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSAgYm91bmRlZCBvciB1bmJvdW5kZWQgcmFuZ2UgbW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3BhcnNlQWRkQ2VsbFJhbmdlKG9wdGlvbnMsIHJhbmdlKSB7XG4gIGNvbnN0IHByID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShyYW5nZSkpXG4gIGNvbnN0IHN0YXJ0ID0gIShwci5zdGFydCB8fCBudWxsKVxuICAgID8gMFxuICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcHIuc3RhcnQpXG4gICAgPyArcHIuc3RhcnRcbiAgICA6IG9wdGlvbnMuYXBpLmdldFJvd05vZGUocHIuc3RhcnQpLnJvd0luZGV4XG4gIGNvbnN0IGVuZCA9ICEocHIuZW5kIHx8IG51bGwpXG4gICAgPyBvcHRpb25zLnJvd0RhdGEubGVuZ3RoIC0gMVxuICAgIDogTnVtYmVyLmlzSW50ZWdlcigrcHIuZW5kKVxuICAgID8gK3ByLmVuZFxuICAgIDogb3B0aW9ucy5hcGkuZ2V0Um93Tm9kZShwci5lbmQpLnJvd0luZGV4XG5cbiAgcmV0dXJuIHtcbiAgICByb3dTdGFydEluZGV4OiBNYXRoLmFicyhzdGFydCksXG4gICAgcm93RW5kSW5kZXg6IE1hdGguYWJzKGVuZCksXG4gICAgY29sdW1uczogcHIuY29sdW1ucyxcbiAgfVxufVxuLyoqXG4gKiBBZGQgbmV3IGNlbGwgcmFuZ2VcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHJhbmdlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19hZGRDZWxsUmFuZ2UoaWQsIHJhbmdlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnd19nZXRHcmlkKGlkKS5vcHRpb25zXG4gIG9wdGlvbnMuYXBpLmFkZENlbGxSYW5nZShnd19wYXJzZUFkZENlbGxSYW5nZShvcHRpb25zLCByYW5nZSkpXG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBzZWxlY3RlZCByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgZ3JpZCdzIGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19jbGVhclJhbmdlU2VsZWN0aW9uKGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLmNsZWFyUmFuZ2VTZWxlY3Rpb24oKVxufVxuIiwiaW1wb3J0IGFzc2lnbkluV2l0aCBmcm9tICcuL2Fzc2lnbkluV2l0aC5qcyc7XG5pbXBvcnQgYXR0ZW1wdCBmcm9tICcuL2F0dGVtcHQuanMnO1xuaW1wb3J0IGJhc2VWYWx1ZXMgZnJvbSAnLi9fYmFzZVZhbHVlcy5qcyc7XG5pbXBvcnQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiBmcm9tICcuL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzJztcbmltcG9ydCBlc2NhcGVTdHJpbmdDaGFyIGZyb20gJy4vX2VzY2FwZVN0cmluZ0NoYXIuanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5pbXBvcnQgdGVtcGxhdGVTZXR0aW5ncyBmcm9tICcuL3RlbXBsYXRlU2V0dGluZ3MuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xudmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xcYl9fcCBcXCs9ICcnOy9nLFxuICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2hcbiAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gKi9cbnZhciByZUVzVGVtcGxhdGUgPSAvXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7XG5cbi8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICogXCJlc2NhcGVcIiBkZWxpbWl0ZXJzLCBhbmQgZXhlY3V0ZSBKYXZhU2NyaXB0IGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLiBEYXRhXG4gKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICpcbiAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYF8udGVtcGxhdGVgIHV0aWxpemVzXG4gKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAqIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gKiBbbG9kYXNoJ3MgY3VzdG9tIGJ1aWxkcyBkb2N1bWVudGF0aW9uXShodHRwczovL2xvZGFzaC5jb20vY3VzdG9tLWJ1aWxkcykuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gKiBbQ2hyb21lJ3MgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2V4dGVuc2lvbnMvc2FuZGJveGluZ0V2YWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gKiAgVGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmV2YWx1YXRlXVxuICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmltcG9ydHM9Xy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNdXG4gKiAgQW4gb2JqZWN0IHRvIGltcG9ydCBpbnRvIHRoZSB0ZW1wbGF0ZSBhcyBmcmVlIHZhcmlhYmxlcy5cbiAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gKiAgVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSd0ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICogIFRoZSBzb3VyY2VVUkwgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAqXG4gKiAvLyBVc2UgdGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIgdG8gZXNjYXBlIGRhdGEgcHJvcGVydHkgdmFsdWVzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICogLy8gPT4gJzxiPiZsdDtzY3JpcHQmZ3Q7PC9iPidcbiAqXG4gKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgXy5mb3JFYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gKlxuICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICpcbiAqIC8vIFVzZSB0aGUgRVMgdGVtcGxhdGUgbGl0ZXJhbCBkZWxpbWl0ZXIgYXMgYW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICpcbiAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHQuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAqIC8vID0+ICc8JS0gdmFsdWUgJT4nXG4gKlxuICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7XG4gKiBjb21waWxlZChkYXRhKTtcbiAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gKlxuICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gKiBjb21waWxlZC5zb3VyY2U7XG4gKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICogLy8gICBfX3AgKz0gJ2hpICcgKyAoKF9fdCA9ICggZGF0YS51c2VyICkpID09IG51bGwgPyAnJyA6IF9fdCkgKyAnISc7XG4gKiAvLyAgIHJldHVybiBfX3A7XG4gKiAvLyB9XG4gKlxuICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIHt7IHVzZXIgfX0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gKlxuICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdqc3QuanMnKSwgJ1xcXG4gKiAgIHZhciBKU1QgPSB7XFxcbiAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICogICB9O1xcXG4gKiAnKTtcbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkge1xuICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uXG4gIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgLy8gYW5kIExhdXJhIERva3Rvcm92YSdzIGRvVC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL29sYWRvL2RvVCkuXG4gIHZhciBzZXR0aW5ncyA9IHRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0cy5fLnRlbXBsYXRlU2V0dGluZ3MgfHwgdGVtcGxhdGVTZXR0aW5ncztcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5ncy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxcbiAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSxcbiAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICB2YXIgaXNFc2NhcGluZyxcbiAgICAgIGlzRXZhbHVhdGluZyxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIGludGVycG9sYXRlID0gb3B0aW9ucy5pbnRlcnBvbGF0ZSB8fCByZU5vTWF0Y2gsXG4gICAgICBzb3VyY2UgPSBcIl9fcCArPSAnXCI7XG5cbiAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICB2YXIgcmVEZWxpbWl0ZXJzID0gUmVnRXhwKFxuICAgIChvcHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAoaW50ZXJwb2xhdGUgPT09IHJlSW50ZXJwb2xhdGUgPyByZUVzVGVtcGxhdGUgOiByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgKG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnXG4gICwgJ2cnKTtcblxuICAvLyBVc2UgYSBzb3VyY2VVUkwgZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gIC8vIFRoZSBzb3VyY2VVUkwgZ2V0cyBpbmplY3RlZCBpbnRvIHRoZSBzb3VyY2UgdGhhdCdzIGV2YWwtZWQsIHNvIGJlIGNhcmVmdWxcbiAgLy8gd2l0aCBsb29rdXAgKGluIGNhc2Ugb2YgZS5nLiBwcm90b3R5cGUgcG9sbHV0aW9uKSwgYW5kIHN0cmlwIG5ld2xpbmVzIGlmIGFueS5cbiAgLy8gQSBuZXdsaW5lIHdvdWxkbid0IGJlIGEgdmFsaWQgc291cmNlVVJMIGFueXdheSwgYW5kIGl0J2QgZW5hYmxlIGNvZGUgaW5qZWN0aW9uLlxuICB2YXIgc291cmNlVVJMID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc291cmNlVVJMJylcbiAgICA/ICgnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvW1xcclxcbl0vZywgJyAnKSArXG4gICAgICAgJ1xcbicpXG4gICAgOiAnJztcblxuICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICBpZiAoZXNjYXBlVmFsdWUpIHtcbiAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICB9XG4gICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGVWYWx1ZSArIFwiO1xcbl9fcCArPSAnXCI7XG4gICAgfVxuICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICBzb3VyY2UgKz0gXCInICtcXG4oKF9fdCA9IChcIiArIGludGVycG9sYXRlVmFsdWUgKyBcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIjtcbiAgICB9XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAvLyBUaGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW5cbiAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgIHJldHVybiBtYXRjaDtcbiAgfSk7XG5cbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gIC8vIGNvZGUgdG8gYWRkIHRoZSBkYXRhIG9iamVjdCB0byB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbi5cbiAgLy8gTGlrZSB3aXRoIHNvdXJjZVVSTCwgd2UgdGFrZSBjYXJlIHRvIG5vdCBjaGVjayB0aGUgb3B0aW9uJ3MgcHJvdG90eXBlLFxuICAvLyBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBjb2RlIGluamVjdGlvbiB2ZWN0b3IuXG4gIHZhciB2YXJpYWJsZSA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3ZhcmlhYmxlJykgJiYgb3B0aW9ucy52YXJpYWJsZTtcbiAgaWYgKCF2YXJpYWJsZSkge1xuICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICB9XG4gIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgKHZhcmlhYmxlXG4gICAgICA/ICcnXG4gICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgKSArXG4gICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAoaXNFc2NhcGluZ1xuICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgOiAnJ1xuICAgICkgK1xuICAgIChpc0V2YWx1YXRpbmdcbiAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgIDogJztcXG4nXG4gICAgKSArXG4gICAgc291cmNlICtcbiAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKVxuICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gIH0pO1xuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgdGhyb3cgcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlO1xuIiwiaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnblZhbHVlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lUHJvcGVydHk7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgb3ZlclJlc3QgZnJvbSAnLi9fb3ZlclJlc3QuanMnO1xuaW1wb3J0IHNldFRvU3RyaW5nIGZyb20gJy4vX3NldFRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZXN0O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1Byb3RvdHlwZTtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFcnJvcihFcnJvcik7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Vycm9yO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheU1hcDtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUludGVycG9sYXRlO1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvU3RyaW5nO1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/QkJqLk1hc2tzIWJiai1tYXNrcy9kaXN0L2Jiai1tYXNrcy5qcydcbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9CYXNpcy5JbnB1dE1hc2tpbmchYmFzaXMtaW5wdXQtbWFza2luZy9kaXN0L2Jhc2lzLWlucHV0LW1hc2tpbmcuanMnXG5pbXBvcnQgJ2V4cG9zZS1sb2FkZXI/ZmxhdHBpY2tyIWZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5qcydcbmltcG9ydCAnZXhwb3NlLWxvYWRlcj9CYXNpcy5BZ0dyaWRDb21wb25lbnRzIWJhc2lzLWFnZ3JpZC1jb21wb25lbnRzL2Rpc3QvYmFzaXMtYWdncmlkLWNvbXBvbmVudHMuanMnXG5cbnJlcXVpcmUoJ2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3MnKVxucmVxdWlyZSgnLi9zdHlsZS9jbGFzc2VzLmNzcycpXG5yZXF1aXJlKCcuL3N0eWxlL3N1Z2dlc3Rpb24tZWRpdG9yLmNzcycpXG5cbmV4cG9ydCAqIGZyb20gJy4vcG9seWZpbGxzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9hcGknXG4iLCJpZighZ2xvYmFsW1wiQkJqXCJdKSBnbG9iYWxbXCJCQmpcIl0gPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiQkJqXCJdW1wiTWFza3NcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcYmJqLW1hc2tzLmpzXCIpOyIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIk1hc2tzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkJCalwiXSA9IHJvb3RbXCJCQmpcIl0gfHwge30sIHJvb3RbXCJCQmpcIl1bXCJNYXNrc1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0b0ludGVnZXI7XG5mdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cblxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufVxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10pO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJlXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImdcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJnXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJoXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJiXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJkXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGVNYXNrX19bXCJmXCJdOyB9KTtcbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImNcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRlTWFza19fW1wiY1wiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB0elBhcnNlVGltZXpvbmU7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX190elRva2VuaXplRGF0ZV9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgdGltZXpvbmU6IC8oW1orLV0uKikkLyxcbiAgdGltZXpvbmVaOiAvXihaKSQvLFxuICB0aW1lem9uZUhIOiAvXihbKy1dKShcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSEhNTTogL14oWystXSkoXFxkezJ9KTo/KFxcZHsyfSkkLyxcbiAgdGltZXpvbmVJQU5BOiAvKFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vLyBQYXJzZSB2YXJpb3VzIHRpbWUgem9uZSBvZmZzZXQgZm9ybWF0cyB0byBhbiBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG5mdW5jdGlvbiB0elBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcsIGRhdGUpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBhYnNvbHV0ZU9mZnNldFxuXG4gIC8vIFpcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZVouZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHZhciBob3Vyc1xuXG4gIC8vIMKxaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhILmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID0gaG91cnMgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIMKxaGg6bW0gb3IgwrFoaG1tXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISE1NLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bM10sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID1cbiAgICAgIGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIElBTkEgdGltZSB6b25lXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVJQU5BLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIC8vIHZhciBbZlllYXIsIGZNb250aCwgZkRheSwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZXpvbmVTdHJpbmcpXG4gICAgdmFyIHRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3R6VG9rZW5pemVEYXRlX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciBhc1VUQyA9IERhdGUuVVRDKFxuICAgICAgdG9rZW5zWzBdLFxuICAgICAgdG9rZW5zWzFdIC0gMSxcbiAgICAgIHRva2Vuc1syXSxcbiAgICAgIHRva2Vuc1szXSxcbiAgICAgIHRva2Vuc1s0XSxcbiAgICAgIHRva2Vuc1s1XVxuICAgIClcbiAgICB2YXIgdGltZXN0YW1wV2l0aE1zWmVyb2VkID0gZGF0ZS5nZXRUaW1lKCkgLSAoZGF0ZS5nZXRUaW1lKCkgJSAxMDAwKVxuICAgIHJldHVybiAtKGFzVVRDIC0gdGltZXN0YW1wV2l0aE1zWmVyb2VkKVxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykge1xuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5cbi8qKiovIH0pLFxuLyogNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0cmluZ01hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdHJpbmdNYXNrX19bXCJhXCIgLyogZGVmYXVsdCAqL10pO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVXRpbHNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVdGlsczsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19OdW1iZXJNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19TdHJpbmdNYXNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVHlwZXNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk51bWJlck1hc2tcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfX1tcImFcIl07IH0pO1xuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRGF0ZU1hc2tcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJjXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlN0cmluZ01hc2tcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1N0cmluZ01hc2tfX1tcImFcIl07IH0pO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cblxuXG5cbnZhciBVdGlscyA9IHtcbiAgRGF0ZXM6IHtcbiAgICBnZXREYXlPZlllYXI6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImVcIiAvKiBnZXREYXlPZlllYXIgKi9dLFxuICAgIGdldFdlZWtOdW1iZXI6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImdcIiAvKiBnZXRXZWVrTnVtYmVyICovXSxcbiAgICBnZXRXZWVrU3RhcnRCeUxvY2FsZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiaFwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSxcbiAgICBJU19EQVRFX1JFR0VYOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJhXCIgLyogSVNfREFURV9SRUdFWCAqL10sXG4gICAgSVNfVElNRV9SRUdFWDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fW1wiYlwiIC8qIElTX1RJTUVfUkVHRVggKi9dLFxuICAgIGZpeFNob3J0SVNPOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0RhdGVNYXNrX19bXCJkXCIgLyogZml4U2hvcnRJU08gKi9dLFxuICAgIGdldFRpbWV6b25lT3JPZmZzZXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImZcIiAvKiBnZXRUaW1lem9uZU9yT2Zmc2V0ICovXVxuICB9XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1R5cGVzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pO1xuXG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogTnVtYmVyTWFza1xuICpcbiAqIEEgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQkJqIG51bWJlcnMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbnZhciBOdW1iZXJNYXNrID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTnVtYmVyTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTnVtYmVyTWFzayk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTnVtYmVyTWFzaywgbnVsbCwgW3tcbiAgICBrZXk6IFwibWFza1wiLFxuXG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gbnVtYmVyIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIHRoZSBtYXNrIHRvIHVzZSBmb3IgZm9ybWF0dGluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZ3JvdXBpbmdTZXBhcmF0b3I9LF0gLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcgc2VwYXJhdG9yXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWNpbWFsU2VwYXJhdG9yPS5dICAtIGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlVHJhaWxpbmdaZXJvcz1mYWxzZV0gLSBBZmZlY3RzIHRoZSBvdXRwdXQgYnkgc3dpdGNoaW5nIHRoZSB3YXkgYSBtYXNrIHdpdGggXCIjXCIgY2hhcmFjdGVycyBpbiB0aGUgdHJhaWxpbmcgcG9zaXRpb25zIGlzIGZpbGxlZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGBOdW1iZXJNYXNrLm1hc2soLjEwOlwiIy4jI1wiKWAgcmV0dXJucyBgIC4xMGAgaW5zdGVhZCBvZiBgIC4xIGBcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICogXG4gICAgICogQHRocm93cyB7TWFza0Vycm9yfSBvbmx5IGlmIGxvb3NlIGlzIGRpc2FibGVkXG4gICAgICogXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBudW1iZXJcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFzayhudW1iZXIsIF9tYXNrKSB7XG4gICAgICB2YXIgZ3JvdXBpbmdTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcsJztcbiAgICAgIHZhciBkZWNpbWFsU2VwYXJhdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnLic7XG4gICAgICB2YXIgZm9yY2VUcmFpbGluZ1plcm9zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICAgIHZhciBtYXNrTGVuID0gX21hc2subGVuZ3RoO1xuXG4gICAgICBpZiAoMCA9PT0gbWFza0xlbikge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBzdHI7IC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICAgIGVsc2UgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tFcnJvcjogTWFzayBpcyBlbXB0eVwiXG4gICAgICAgICAgfTtcbiAgICAgIH0gLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE1BU0tcblxuXG4gICAgICB2YXIgbWFza0JlZm9yZURlY2ltYWwgPSAwO1xuICAgICAgdmFyIG1hc2tBZnRlckRlY2ltYWwgPSAwO1xuICAgICAgdmFyIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hc2tMZW47ICsraSkge1xuICAgICAgICB2YXIgbSA9IF9tYXNrLmNoYXJBdChpKTtcblxuICAgICAgICBpZiAobSA9PSAnMCcgfHwgbSA9PSAnIycpIHtcbiAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK21hc2tBZnRlckRlY2ltYWw7ZWxzZSArK21hc2tCZWZvcmVEZWNpbWFsO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbnVtID0gTnVtYmVyTWFzay5fcm91bmQobnVtYmVyLCBtYXNrQWZ0ZXJEZWNpbWFsKTtcblxuICAgICAgdmFyIGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKTsgLy8gR2V0IG1hZ25pdHVkZSBhbmQgcHJlY2lzaW9uIG9mIE5VTUJFUlxuXG5cbiAgICAgIHZhciBpbkxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgIHZhciBudW1CZWZvcmVEZWNpbWFsID0gMDtcbiAgICAgIHZhciBudW1BZnRlckRlY2ltYWwgPSAwO1xuICAgICAgZm91bmREZWNpbWFsID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbkxlbjsgKytfaSkge1xuICAgICAgICBpZiAoYnl0ZXNbX2ldID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtlbHNlIHtcbiAgICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK251bUFmdGVyRGVjaW1hbDtlbHNlICsrbnVtQmVmb3JlRGVjaW1hbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcblxuXG4gICAgICBpZiAobnVtQmVmb3JlRGVjaW1hbCA+IG1hc2tCZWZvcmVEZWNpbWFsKSB7XG4gICAgICAgIGlmIChsb29zZSkgcmV0dXJuIG51bWJlci50b1N0cmluZygpOyAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogXCJNYXNrRXJyb3I6IE51bWJlciBpcyB0b28gbGFyZ2UgZm9yIG1hc2tcIlxuICAgICAgICAgIH07XG4gICAgICB9IC8vIHJvdW5kIGlmIG1hc2sgaXMgZm9yIGEgbG93ZXIgcHJlY2lzaW9uIG51bWJlclxuXG5cbiAgICAgIGlmIChudW1BZnRlckRlY2ltYWwgPiBtYXNrQWZ0ZXJEZWNpbWFsKSB7XG4gICAgICAgIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bSwgbWFza0FmdGVyRGVjaW1hbCk7XG4gICAgICAgIGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKTtcbiAgICAgICAgaW5MZW4gPSBieXRlcy5sZW5ndGg7IC8vIEdldCBuZXcgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG5cbiAgICAgICAgbnVtQmVmb3JlRGVjaW1hbCA9IDA7XG4gICAgICAgIG51bUFmdGVyRGVjaW1hbCA9IDA7XG4gICAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGluTGVuOyArK19pMikge1xuICAgICAgICAgIGlmIChieXRlc1tfaTJdID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZTtlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsO2Vsc2UgKytudW1CZWZvcmVEZWNpbWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBhbHdheXMgaWdub3JlIG1hc2sgb3ZlcmZsb3dcblxuXG4gICAgICAgIGlmIChudW1CZWZvcmVEZWNpbWFsID4gbWFza0JlZm9yZURlY2ltYWwpIHtcbiAgICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKTsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgICBlbHNlIHRocm93IHtcbiAgICAgICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZpbGxCeXRlID0gJyAnLFxuICAgICAgICAgIGZsb2F0Qnl0ZSA9ICcgJztcbiAgICAgIHZhciBpblBvcyA9IDAsXG4gICAgICAgICAgb3V0UG9zID0gMCxcbiAgICAgICAgICBmbG9hdFBvcyA9IDA7XG4gICAgICBpZiAoX21hc2suY2hhckF0KDApID09ICcqJykgZmlsbEJ5dGUgPSAnKic7XG4gICAgICB2YXIgZmlsbEluaXQgPSBmaWxsQnl0ZTtcbiAgICAgIHZhciBpc05lZ2F0aXZlID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW0pIDwgMDtcbiAgICAgIHZhciBlbWl0RGVjaW1hbCA9IGluTGVuID4gMCB8fCBfbWFzay5pbmRleE9mKCcwJykgPj0gMDtcbiAgICAgIHZhciBmb3VuZFplcm8gPSBmYWxzZTtcbiAgICAgIHZhciBmb3VuZERpZ2l0ID0gZmFsc2U7XG4gICAgICB2YXIgY3VycmVuY3kgPSBmYWxzZTtcbiAgICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlO1xuICAgICAgdmFyIHJldCA9IG5ldyBBcnJheShtYXNrTGVuKTtcblxuICAgICAgZm9yICh2YXIgbWFza1BvcyA9IDA7IG1hc2tQb3MgPCBtYXNrTGVuOyArK21hc2tQb3MpIHtcbiAgICAgICAgdmFyIF9tID0gX21hc2suY2hhckF0KG1hc2tQb3MpO1xuXG4gICAgICAgIHN3aXRjaCAoX20pIHtcbiAgICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWw7XG5cbiAgICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGJ5dGVzW2luUG9zXTtcbiAgICAgICAgICAgICAgKytpblBvcztcbiAgICAgICAgICAgICAgZm91bmREaWdpdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcwJztcbiAgICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgLS1tYXNrQmVmb3JlRGVjaW1hbDtcblxuICAgICAgICAgICAgaWYgKG1hc2tCZWZvcmVEZWNpbWFsIDwgbnVtQmVmb3JlRGVjaW1hbCAmJiBpblBvcyA8IGluTGVuKSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdO1xuICAgICAgICAgICAgICArK2luUG9zO1xuICAgICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsICYmIGZvcmNlVHJhaWxpbmdaZXJvcyAmJiBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgIT0gMCA/ICcwJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBpZiAoIWZvdW5kRGVjaW1hbCkgZmxvYXRQb3MgPSBtYXNrUG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgICBpZiAoZm91bmRaZXJvIHx8IGluUG9zID4gMCkgcmV0W291dFBvc10gPSBncm91cGluZ1NlcGFyYXRvcjtlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1BvcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSBmbG9hdEJ5dGUgPSAnLSc7XG4gICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtvdXRQb3NdID0gaXNOZWdhdGl2ZSA/ICctJyA6IGZpbGxCeXRlO1xuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgICBmbG9hdEJ5dGUgPSBpc05lZ2F0aXZlID8gJy0nIDogJysnO1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlO1xuICAgICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1BvcztcbiAgICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiAnKyc7XG5cbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICAgIGZsb2F0Qnl0ZSA9ICckJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICckJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAvLyBjYXNlICcmJzpcbiAgICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAvLyAgICAgZmxvYXRCeXRlID0gJyYnXG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJyYnXG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICArK291dFBvc1xuICAgICAgICAgIC8vICAgYnJlYWtcbiAgICAgICAgICAvLyBjYXNlICdAJzpcbiAgICAgICAgICAvLyAgIGN1cnJlbmN5ID0gdHJ1ZVxuICAgICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAvLyAgICAgZmxvYXRCeXRlID0gJ0AnXG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gICAgIHJldFtvdXRQb3NdID0gJ0AnXG4gICAgICAgICAgLy8gICB9XG4gICAgICAgICAgLy8gICArK291dFBvc1xuICAgICAgICAgIC8vICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIGZsb2F0Qnl0ZSA9ICcoJztcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZTtcbiAgICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJygnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnKSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZvdW5kRGVjaW1hbCA/ICcgJyA6IGZpbGxCeXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIF9tYXNrLmNoYXJBdChtYXNrUG9zICsgMSkgPT0gJ1InKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyAnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICcgJztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG91dFBvcyArPSAyO1xuICAgICAgICAgICAgICArK21hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdDJztcbiAgICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBpZiAobWFza1BvcyA8IG1hc2tMZW4gLSAxICYmIF9tYXNrLmNoYXJBdChtYXNrUG9zICsgMSkgPT0gJ1InKSB7XG4gICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQyc7XG4gICAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJ0QnO1xuICAgICAgICAgICAgICAgIHJldFtvdXRQb3MgKyAxXSA9ICdSJztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG91dFBvcyArPSAyO1xuICAgICAgICAgICAgICArK21hc2tQb3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJztcbiAgICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcqJztcbiAgICAgICAgICAgICsrb3V0UG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZW1pdERlY2ltYWwgPyBkZWNpbWFsU2VwYXJhdG9yIDogZmlsbEJ5dGU7XG4gICAgICAgICAgICBmaWxsQnl0ZSA9ICcgJztcbiAgICAgICAgICAgIGZvdW5kRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICArK2luUG9zO1xuICAgICAgICAgICAgKytvdXRQb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnICc7XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gX207XG4gICAgICAgICAgICArK291dFBvcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmbG9hdEJ5dGUgIT0gJyAnKSB7XG4gICAgICAgIGlmIChmbG9hdFBvcyA8IDApIGZsb2F0UG9zID0gb3V0UG9zO1xuXG4gICAgICAgIHdoaWxlIChmbG9hdFBvcyA+PSBtYXNrTGVuKSB7XG4gICAgICAgICAgLS1mbG9hdFBvcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXRbZmxvYXRQb3NdID09IGZpbGxJbml0KSByZXRbZmxvYXRQb3NdID0gZmxvYXRCeXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0LmpvaW4oJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfc2hpZnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3NoaWZ0KG51bWJlciwgcHJlY2lzaW9uLCByZXZlcnNlU2hpZnQpIHtcbiAgICAgIGlmIChyZXZlcnNlU2hpZnQpIHByZWNpc2lvbiA9IC1wcmVjaXNpb247XG4gICAgICB2YXIgbnVtQXJyYXkgPSAoJycgKyBudW1iZXIpLnNwbGl0KCdlJyk7XG4gICAgICByZXR1cm4gKyhudW1BcnJheVswXSArICdlJyArIChudW1BcnJheVsxXSA/ICtudW1BcnJheVsxXSArIHByZWNpc2lvbiA6IHByZWNpc2lvbikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfcm91bmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JvdW5kKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgICByZXR1cm4gTnVtYmVyTWFzay5fc2hpZnQoTWF0aC5yb3VuZChOdW1iZXJNYXNrLl9zaGlmdChudW1iZXIsIHByZWNpc2lvbiwgZmFsc2UpKSwgcHJlY2lzaW9uLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3RvQ2hhckFycmF5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF90b0NoYXJBcnJheShudW1iZXIpIHtcbiAgICAgIHZhciBzaWdudW0gPSBOdW1iZXJNYXNrLl9nZXRTaWduKG51bWJlcik7XG5cbiAgICAgIHZhciBjaGFycyA9IFtdO1xuXG4gICAgICBpZiAoc2lnbnVtICE9PSAwKSB7XG4gICAgICAgIHZhciBzdHJpbmcgPSBzaWdudW0gPCAwID8gXCJcIi5jb25jYXQoLTEgKiBudW1iZXIudG9TdHJpbmcoKSkgOiBudW1iZXIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJzAnKSBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDEpOyAvLyBUaGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgWzAtOV0gYW5kICcuJ1xuXG4gICAgICAgIGNoYXJzID0gc3RyaW5nLnNwbGl0KCcnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIGEgbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0geCBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfSBBIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHNpZ24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50LlxuICAgICAqICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIHBvc2l0aXZlIG51bWJlciwgbmVnYXRpdmUgbnVtYmVyLCBwb3NpdGl2ZSB6ZXJvXG4gICAgICogICAgICAgICAgICAgICAgICAgb3IgbmVnYXRpdmUgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDEsIC0xLCAwIG9yIC0wIHJlc3BlY3RpdmVseS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIE5hTiBpcyByZXR1cm5lZC5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRTaWduXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRTaWduKHgpIHtcbiAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTnVtYmVyTWFzaztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChOdW1iZXJNYXNrKTtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJU19USU1FX1JFR0VYOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSVNfREFURV9SRUdFWDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiaFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5TG9jYWxlOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJlXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0RGF5T2ZZZWFyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZml4U2hvcnRJU087IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRUaW1lem9uZU9yT2Zmc2V0OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0V2Vla051bWJlcjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2RhdGVfZm5zX3R6X3V0Y1RvWm9uZWRUaW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV93ZWVrc3RhcnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuXG52YXIgSVNfVElNRV9SRUdFWCA9IC9eKDJbMC0zXXxbMDFdWzAtOV0pOj8oWzAtNV1bMC05XSk6PyhbMC01XVswLTldKShafFsrLV0oPzoyWzAtM118WzAxXVswLTldKSg/Ojo/KD86WzAtNV1bMC05XSkpPykkLztcbnZhciBJU19EQVRFX1JFR0VYID0gL14oKFsxMl1cXGR7M30pLSgwWzEtOV18MVswLTJdKS0oMFsxLTldfFsxMl1cXGR8M1swMV0pKFp8WystXSg/OjJbMC0zXXxbMDFdWzAtOV0pKD86Oj8oPzpbMC01XVswLTldKSk/KSkkLztcbi8qKlxuICogRmluZCBvdXQgd2hlbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBwYXNzZWQgbG9jYWxlXG4gKlxuICogQHBhcmFtIHtsb2NhbGV9IGxvY2FsZVxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gYSBudW1iZXIgMCA9IHN1bmRheSAsIDEgPSBtb25kYXkgLCAuLi4uXG4gKi9cblxudmFyIGdldFdlZWtTdGFydEJ5TG9jYWxlID0gZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUobG9jYWxlKSB7XG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3dlZWtzdGFydF9fW1wiYVwiIC8qIGdldFdlZWtTdGFydEJ5TG9jYWxlICovXSkobG9jYWxlKTtcbn07XG4vKipcbiAqICBHZXQgZGF5IG51bWJlciBpbiB0aGUgeWVhciBvZiB0aGUgcGFzc2VkIGRhdGVcbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGVcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRheSBudW1iZXJcbiAqL1xuXG52YXIgZ2V0RGF5T2ZZZWFyID0gZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAwKTtcbiAgdmFyIGRpZmYgPSBkYXRlIC0gc3RhcnQgKyAoc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2MCAqIDEwMDA7XG4gIHZhciBvbmVEYXkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuICB2YXIgZGF5ID0gTWF0aC5mbG9vcihkaWZmIC8gb25lRGF5KTtcbiAgcmV0dXJuIGRheTtcbn07XG4vKipcbiAqIFRha2VzIGluY29tcGxldGUgaXNvIHN0cmluZyBhbmQgcmV0dXJuIGEgY29tcGxldGUgb25lXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgaW5jb21wbGV0ZSBpc28gc3RyaW5nXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSBjb21wbGV0ZSBpc28gc3RyaW5nXG4gKi9cblxudmFyIGZpeFNob3J0SVNPID0gZnVuY3Rpb24gZml4U2hvcnRJU08oZGF0ZSkge1xuICB2YXIgdmFsdWUgPSBkYXRlO1xuICB2YXIgb2Zmc2V0ID0gKHZhbHVlLm1hdGNoKC96JHxbK1xcLV1cXGRcXGQ6XFxkXFxkJC9pKSB8fCBbXSlbMF07XG5cbiAgaWYgKCFvZmZzZXQpIHtcbiAgICBvZmZzZXQgPSAnWic7XG4gICAgdmFsdWUgKz0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKElTX1RJTUVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiMTk3MC0wMS0wMVRcIi5jb25jYXQodmFsdWUpO1xuICB9IGVsc2UgaWYgKElTX0RBVEVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiXCIuY29uY2F0KHZhbHVlLnNwbGl0KG9mZnNldClbMF0sIFwiVDAwOjAwOjAwXCIpLmNvbmNhdChvZmZzZXQpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbi8qKlxuICogR2V0IHRoZSBicm93c2VyIHRpbWV6b25lIG5hbWUgLCBpZiBub3Qgc3VwcG9ydGVkIHRoZW4gdGhlIGJyb3dzZXJcbiAqIHRpbWV6b25lIG9mZnNldCBmb3JtYXR0ZWRcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRpbWV6b25lIG9mIG9mZnNldFxuICovXG5cbnZhciBnZXRUaW1lem9uZU9yT2Zmc2V0ID0gZnVuY3Rpb24gZ2V0VGltZXpvbmVPck9mZnNldCgpIHtcbiAgdmFyIHRpbWV6b25lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuXG4gIGlmICghdGltZXpvbmUpIHtcbiAgICB2YXIgcGFkID0gZnVuY3Rpb24gcGFkKG51bWJlciwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc3RyID0gJycgKyBudW1iZXI7XG5cbiAgICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICAgIHN0ciA9ICcwJyArIHN0cjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgdmFyIG9mZnNldCA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBvZmZzZXQgPSAob2Zmc2V0IDwgMCA/ICcrJyA6ICctJykgKyAvLyBOb3RlIHRoZSByZXZlcnNlZCBzaWduIVxuICAgIHBhZChwYXJzZUludChNYXRoLmFicyhvZmZzZXQgLyA2MCkpLCAyKSArIHBhZChNYXRoLmFicyhvZmZzZXQgJSA2MCksIDIpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICByZXR1cm4gdGltZXpvbmU7XG59O1xuLyoqXG4gKiBHZXQgdGhlIFdlZWsgTnVtYmVyIGluIHRoZSBwYXNzZWQgZGF0ZVxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIERhdGUgb2JqZWN0XG4gKiBAcGFyYW0ge051bWJlcn0gd2Vla1N0YXJ0IEEgbnVtYmVyIHdoaWNoIGRlZmluZXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAgPSBzdW5kYXkgLCAxID0gbW9uZGF5ICwgLi4uKVxuICpcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSB3ZWVrIG51bWJlclxuICovXG5cbnZhciBnZXRXZWVrTnVtYmVyID0gZnVuY3Rpb24gZ2V0V2Vla051bWJlcihkYXRlLCB3ZWVrU3RhcnQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTtcbiAgdmFyIGRheU51bSA9IGQuZ2V0VVRDRGF5KCkgLSAod2Vla1N0YXJ0IC0gMSkgfHwgNztcbiAgZC5zZXRVVENEYXRlKGQuZ2V0VVRDRGF0ZSgpICsgNCAtIGRheU51bSk7XG4gIHZhciB5ZWFyU3RhcnQgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKTtcbiAgcmV0dXJuIE1hdGguY2VpbCgoKGQgLSB5ZWFyU3RhcnQpIC8gODY0MDAwMDAgKyAxKSAvIDcpO1xufTtcbi8qKlxuICogRGF0ZU1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBkYXRlcyBtYXNraW5nXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG52YXIgRGF0ZU1hc2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBEYXRlTWFzaygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0ZU1hc2spO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERhdGVNYXNrLCBudWxsLCBbe1xuICAgIGtleTogXCJtYXNrXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIGRhdGVcbiAgICAgKlxuICAgICAqIE1hc2sgdGhlIHBhc3NlZCBkYXRlIHdpdGggdGhlIHBhc3NlZCBtYXNrXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgbWFzayBhcyBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbbG9jYWxlPUJyb3dzZXIncyBsb2NhbGVdIHRoZSBsYW5ndWFnZSB0byB1c2UgZXgoZW4tVVMpLiBkZWZhdWx0IGlzIHRvIHRoZSBzeXN0ZW0gbGFuZ3VhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3RpbWV6b25lPVN5c3RlbSB0aW1lem9uZV0gdGhlIHRpbWUgem9uZSBkZXNjcmlwdG9yIChlLmcuIEFtZXJpY2EvTG9zX0FuZ2VsZXMpLiBkZWZhdWx0IHRvIHRoZSBzeXN0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gYSBkYXRlIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1hc2soZGF0ZSwgX21hc2ssIGxvY2FsZSwgdGltZXpvbmUpIHtcbiAgICAgIGlmICghZGF0ZSkgcmV0dXJuICcnO1xuICAgICAgaWYgKCFfbWFzaykgcmV0dXJuIGRhdGU7XG4gICAgICB0aW1lem9uZSA9IHRpbWV6b25lIHx8IGdldFRpbWV6b25lT3JPZmZzZXQoKTtcbiAgICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUyc7IC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY29tcGxldGUgaXNvIHN0cmluZ1xuXG4gICAgICBkYXRlID0gZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlIDogZml4U2hvcnRJU08oZGF0ZSk7XG4gICAgICB2YXIgZGF0ZU9iamVjdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZGF0ZV9mbnNfdHpfdXRjVG9ab25lZFRpbWVfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGF0ZSwgdGltZXpvbmUpO1xuXG4gICAgICB2YXIgdHJhbnNsYXRpb24gPSBEYXRlTWFzay5fYnVpbGRUcmFuc2xhdGlvbih7XG4gICAgICAgIHllYXI6IGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgbW9udGg6IGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgIG1vbnRoU2hvcnQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFtsb2NhbGVdLCB7XG4gICAgICAgICAgbW9udGg6ICdzaG9ydCdcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBtb250aExvbmc6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFtsb2NhbGVdLCB7XG4gICAgICAgICAgbW9udGg6ICdsb25nJ1xuICAgICAgICB9KS5mb3JtYXQoZGF0ZU9iamVjdCksXG4gICAgICAgIGRheTogZGF0ZU9iamVjdC5nZXREYXRlKCksXG4gICAgICAgIGRheVNob3J0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIHdlZWtkYXk6ICdzaG9ydCdcbiAgICAgICAgfSkuZm9ybWF0KGRhdGVPYmplY3QpLFxuICAgICAgICBkYXlMb25nOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbbG9jYWxlXSwge1xuICAgICAgICAgIHdlZWtkYXk6ICdsb25nJ1xuICAgICAgICB9KS5mb3JtYXQoZGF0ZU9iamVjdCksXG4gICAgICAgIG1pbnV0ZXM6IGRhdGVPYmplY3QuZ2V0TWludXRlcygpLFxuICAgICAgICBzZWNvbmRzOiBkYXRlT2JqZWN0LmdldFNlY29uZHMoKSxcblxuICAgICAgICBnZXQgaG91cnMyNCgpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZU9iamVjdC5nZXRIb3VycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldCBob3VyczEyKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhvdXJzMjQgJSAxMiB8fCAxMjtcbiAgICAgICAgfSxcblxuICAgICAgICBkYXlPZlllYXI6IGdldERheU9mWWVhcihkYXRlT2JqZWN0KSxcbiAgICAgICAgZGF5T2ZXZWVrOiBkYXRlT2JqZWN0LmdldERheSgpICsgMSxcbiAgICAgICAgLy8gU3VuZGF5ID0gMSBpbiBCQmogYnV0IFN1bmRheSA9IDAgaW4gSlNcbiAgICAgICAgd2Vla051bWJlcjogZ2V0V2Vla051bWJlcihkYXRlT2JqZWN0LCBnZXRXZWVrU3RhcnRCeUxvY2FsZShsb2NhbGUpKSxcbiAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgIHRpbWV6b25lOiB0aW1lem9uZVxuICAgICAgfSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBfbWFzaztcblxuICAgICAgZm9yICh2YXIgayBpbiB0cmFuc2xhdGlvbikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKCcoJScgKyBrICsgJyknLCAnZycpLCB0cmFuc2xhdGlvbltrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIG1hcCBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIHBvc3NpYmxlIGZvcm1zIG9mIG1hc2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0ZURldGFpbHMgZGF0ZVxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBmb3JtcyBtYXNrc1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiX2J1aWxkVHJhbnNsYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2J1aWxkVHJhbnNsYXRpb24oZGF0ZURldGFpbHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIHllYXJcbiAgICAgICAgWXo6IGRhdGVEZXRhaWxzLnllYXIudG9TdHJpbmcoKS5zdWJzdHIoLTIpLFxuICAgICAgICBZczogZGF0ZURldGFpbHMueWVhcixcbiAgICAgICAgWWw6IGRhdGVEZXRhaWxzLnllYXIsXG4gICAgICAgIFlwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLnllYXIpLFxuICAgICAgICBZZDogZGF0ZURldGFpbHMueWVhcixcbiAgICAgICAgWTogZGF0ZURldGFpbHMueWVhcixcbiAgICAgICAgLy8gbW9udGhcbiAgICAgICAgTXo6IFN0cmluZyhkYXRlRGV0YWlscy5tb250aCkubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5tb250aCA6IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICBNczogZGF0ZURldGFpbHMubW9udGhTaG9ydCxcbiAgICAgICAgTWw6IGRhdGVEZXRhaWxzLm1vbnRoTG9uZyxcbiAgICAgICAgTXA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMubW9udGgpLFxuICAgICAgICBNZDogZGF0ZURldGFpbHMubW9udGgsXG4gICAgICAgIE06IGRhdGVEZXRhaWxzLm1vbnRoLFxuICAgICAgICAvLyBkYXlcbiAgICAgICAgRHo6IFN0cmluZyhkYXRlRGV0YWlscy5kYXkpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5IDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICBEczogZGF0ZURldGFpbHMuZGF5U2hvcnQsXG4gICAgICAgIERsOiBkYXRlRGV0YWlscy5kYXlMb25nLFxuICAgICAgICBEcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5kYXkpLFxuICAgICAgICBEZDogZGF0ZURldGFpbHMuZGF5LFxuICAgICAgICBEOiBkYXRlRGV0YWlscy5kYXksXG4gICAgICAgIC8vIGhvdXIgMjRcbiAgICAgICAgSHo6IFN0cmluZyhkYXRlRGV0YWlscy5ob3VyczI0KS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLmhvdXJzMjQgOiBkYXRlRGV0YWlscy5ob3VyczI0LFxuICAgICAgICBIczogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSGw6IGRhdGVEZXRhaWxzLmhvdXJzMjQsXG4gICAgICAgIEhwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLmhvdXJzMjQpLFxuICAgICAgICBIZDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgSDogZGF0ZURldGFpbHMuaG91cnMyNCxcbiAgICAgICAgLy8gaG91ciAxMlxuICAgICAgICBoejogU3RyaW5nKGRhdGVEZXRhaWxzLmhvdXJzMTIpLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuaG91cnMxMiA6IGRhdGVEZXRhaWxzLmhvdXJzMTIsXG4gICAgICAgIGhzOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBobDogZGF0ZURldGFpbHMuaG91cnMxMixcbiAgICAgICAgaHA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0ZURldGFpbHMuaG91cnMxMiksXG4gICAgICAgIGhkOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICBoOiBkYXRlRGV0YWlscy5ob3VyczEyLFxuICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgIG16OiBTdHJpbmcoZGF0ZURldGFpbHMubWludXRlcykubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5taW51dGVzIDogZGF0ZURldGFpbHMubWludXRlcyxcbiAgICAgICAgbXM6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG1sOiBkYXRlRGV0YWlscy5taW51dGVzLFxuICAgICAgICBtcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5taW51dGVzKSxcbiAgICAgICAgbWQ6IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIG06IGRhdGVEZXRhaWxzLm1pbnV0ZXMsXG4gICAgICAgIC8vIHNlY29uZHNcbiAgICAgICAgc3o6IFN0cmluZyhkYXRlRGV0YWlscy5zZWNvbmRzKS5sZW5ndGggPT0gMSA/ICcwJyArIGRhdGVEZXRhaWxzLnNlY29uZHMgOiBkYXRlRGV0YWlscy5zZWNvbmRzLFxuICAgICAgICBzczogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgc2w6IGRhdGVEZXRhaWxzLnNlY29uZHMsXG4gICAgICAgIHNwOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRhdGVEZXRhaWxzLnNlY29uZHMpLFxuICAgICAgICBzZDogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgczogZGF0ZURldGFpbHMuc2Vjb25kcyxcbiAgICAgICAgLy8gQU0gLCBQTVxuICAgICAgICBQUDogZGF0ZURldGFpbHMuaG91cnMyNCA+IDEyID8gJ1BNJyA6ICdQTScsXG4gICAgICAgIFA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdQTScgOiAnQU0nLFxuICAgICAgICBwcDogZGF0ZURldGFpbHMuaG91cnMyNCA+IDEyID8gJ3BtJyA6ICdhbScsXG4gICAgICAgIHA6IGRhdGVEZXRhaWxzLmhvdXJzMjQgPiAxMiA/ICdwbScgOiAnYW0nLFxuICAgICAgICAvLyBEYXkgb2YgWWVhclxuICAgICAgICBKejogU3RyaW5nKGRhdGVEZXRhaWxzLmRheU9mWWVhcikubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy5kYXlPZlllYXIgOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEpzOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEpsOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEpkOiBkYXRlRGV0YWlscy5kYXlPZlllYXIsXG4gICAgICAgIEo6IGRhdGVEZXRhaWxzLmRheU9mWWVhcixcbiAgICAgICAgLy8gRGF5IE9mIFdlZWtcbiAgICAgICAgV3o6IFN0cmluZyhkYXRlRGV0YWlscy5kYXlPZldlZWspLmxlbmd0aCA9PSAxID8gJzAnICsgZGF0ZURldGFpbHMuZGF5T2ZXZWVrIDogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXczogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXbDogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXcDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy5kYXlPZldlZWspLFxuICAgICAgICBXZDogZGF0ZURldGFpbHMuZGF5T2ZXZWVrLFxuICAgICAgICBXOiBkYXRlRGV0YWlscy5kYXlPZldlZWssXG4gICAgICAgIC8vIHdlZWsgbnVtYmVyXG4gICAgICAgIHd6OiBTdHJpbmcoZGF0ZURldGFpbHMud2Vla051bWJlcikubGVuZ3RoID09IDEgPyAnMCcgKyBkYXRlRGV0YWlscy53ZWVrTnVtYmVyIDogZGF0ZURldGFpbHMud2Vla051bWJlcixcbiAgICAgICAgd3M6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHdsOiBkYXRlRGV0YWlscy53ZWVrTnVtYmVyLFxuICAgICAgICB3cDogU3RyaW5nLmZyb21DaGFyQ29kZShkYXRlRGV0YWlscy53ZWVrTnVtYmVyKSxcbiAgICAgICAgd2Q6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXIsXG4gICAgICAgIHc6IGRhdGVEZXRhaWxzLndlZWtOdW1iZXJcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERhdGVNYXNrO1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJjXCJdID0gKERhdGVNYXNrKTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSB1dGNUb1pvbmVkVGltZTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90elBhcnNlVGltZXpvbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9zdWJNaWxsaXNlY29uZHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdG9EYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblxuXG5cblxuLyoqXG4gKiBAbmFtZSB1dGNUb1pvbmVkVGltZVxuICogQGNhdGVnb3J5IFRpbWUgWm9uZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgYSBkYXRlL3RpbWUgcmVwcmVzZW50aW5nIGxvY2FsIHRpbWUgaW4gYSBnaXZlbiB0aW1lIHpvbmUgZnJvbSB0aGUgVVRDIGRhdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgYSBkYXRlIGluc3RhbmNlIHdpdGggdmFsdWVzIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBzcGVjaWZpZWQgb2YgdGhlIFVUQyB0aW1lIGZyb20gdGhlIGRhdGUgcHJvdmlkZWQuIEluIG90aGVyIHdvcmRzLCB3aGVuIHRoZSBuZXcgZGF0ZVxuICogaXMgZm9ybWF0dGVkIGl0IHdpbGwgc2hvdyB0aGUgZXF1aXZhbGVudCBob3VycyBpbiB0aGUgdGFyZ2V0IHRpbWUgem9uZSByZWdhcmRsZXNzXG4gKiBvZiB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSB6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgd2l0aCB0aGUgcmVsZXZhbnQgVVRDIHRpbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lWm9uZSAtIHRoZSB0aW1lIHpvbmUgdG8gZ2V0IGxvY2FsIHRpbWUgZm9yLCBjYW4gYmUgYW4gb2Zmc2V0IG9yIElBTkEgdGltZSB6b25lXG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSBwYXNzZWQgdG8gYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgZXF1aXZhbGVudCB0aW1lIGluIHRoZSB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEluIEp1bmUgMTBhbSBVVEMgaXMgNmFtIGluIE5ldyBZb3JrICgtMDQ6MDApXG4gKiBjb25zdCByZXN1bHQgPSB1dGNUb1pvbmVkVGltZSgnMjAxNC0wNi0yNVQxMDowMDowMC4wMDBaJywgJ0FtZXJpY2EvTmV3X1lvcmsnKVxuICogLy89PiBKdW4gMjUgMjAxNCAwNjowMDowMFxuICovXG5mdW5jdGlvbiB1dGNUb1pvbmVkVGltZShkaXJ0eURhdGUsIHRpbWVab25lLCBvcHRpb25zKSB7XG4gIHZhciBkYXRlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdG9EYXRlX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5RGF0ZSwgb3B0aW9ucylcblxuICAvLyBUaGlzIGRhdGUgaGFzIHRoZSBVVEMgdGltZSB2YWx1ZXMgb2YgdGhlIGlucHV0IGRhdGUgYXQgdGhlIHN5c3RlbSB0aW1lIHpvbmVcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgZGF0ZS5nZXRVVENNb250aCgpLFxuICAgIGRhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgIGRhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICBkYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBkYXRlLmdldFVUQ1NlY29uZHMoKSxcbiAgICBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpXG4gIClcbiAgLy8gV2UganVzdCBuZWVkIHRvIGFwcGx5IHRoZSBvZmZzZXQgaW5kaWNhdGVkIGJ5IHRoZSB0aW1lIHpvbmUgdG8gdGhpcyBsb2NhbGl6ZWQgZGF0ZVxuICB2YXIgb2Zmc2V0TWlsbGlzZWNvbmRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGliX3R6UGFyc2VUaW1lem9uZV9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKSh0aW1lWm9uZSwgZGF0ZSlcblxuICByZXR1cm4gb2Zmc2V0TWlsbGlzZWNvbmRzXG4gICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2RhdGVfZm5zX2VzbV9zdWJNaWxsaXNlY29uZHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodXRjRGF0ZSwgb2Zmc2V0TWlsbGlzZWNvbmRzKVxuICAgIDogdXRjRGF0ZVxufVxuXG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdHpUb2tlbml6ZURhdGU7XG4vKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5mdW5jdGlvbiB0elRva2VuaXplRGF0ZShkYXRlLCB0aW1lWm9uZSkge1xuICB2YXIgZHRmID0gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpXG4gIHJldHVybiBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpXG59XG5cbnZhciB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGhvdXI6IDMsXG4gIG1pbnV0ZTogNCxcbiAgc2Vjb25kOiA1XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSlcbiAgdmFyIGZpbGxlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBvcyA9IHR5cGVUb1Bvc1tmb3JtYXR0ZWRbaV0udHlwZV1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludChmb3JtYXR0ZWRbaV0udmFsdWUsIDEwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsbGVkXG59XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cXHUyMDBFL2csICcnKVxuICB2YXIgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZClcbiAgLy8gdmFyIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZFxuICAvLyByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXVxuICByZXR1cm4gW3BhcnNlZFszXSwgcGFyc2VkWzFdLCBwYXJzZWRbMl0sIHBhcnNlZFs0XSwgcGFyc2VkWzVdLCBwYXJzZWRbNl1dXG59XG5cbi8vIEdldCBhIGNhY2hlZCBJbnRsLkRhdGVUaW1lRm9ybWF0IGluc3RhbmNlIGZvciB0aGUgSUFOQSBgdGltZVpvbmVgLiBUaGlzIGNhbiBiZSB1c2VkXG4vLyB0byBnZXQgZGV0ZXJtaW5pc3RpYyBsb2NhbCBkYXRlL3RpbWUgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgYGVuLVVTYCBsb2NhbGUgd2hpY2hcbi8vIGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgbG9jYWwgdGltZSBwYXJ0cyBhcyBuZWNlc3NhcnkuXG52YXIgZHRmQ2FjaGUgPSB7fVxuZnVuY3Rpb24gZ2V0RGF0ZVRpbWVGb3JtYXQodGltZVpvbmUpIHtcbiAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAvLyBOZXcgYnJvd3NlcnMgdXNlIGBob3VyQ3ljbGVgLCBJRSBhbmQgQ2hyb21lIDw3MyBkb2VzIG5vdCBzdXBwb3J0IGl0IGFuZCB1c2VzIGBob3VyMTJgXG4gICAgdmFyIHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgIHRpbWVab25lOiAnQW1lcmljYS9OZXdfWW9yaycsXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgfSkuZm9ybWF0KG5ldyBEYXRlKCcyMDE0LTA2LTI1VDA0OjAwOjAwLjEyM1onKSlcbiAgICB2YXIgaG91ckN5Y2xlU3VwcG9ydGVkID1cbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgICB0ZXN0RGF0ZUZvcm1hdHRlZCA9PT0gJ+KAjjA24oCOL+KAjjI14oCOL+KAjjIwMTTigI4g4oCOMDDigI464oCOMDDigI464oCOMDAnXG5cbiAgICBkdGZDYWNoZVt0aW1lWm9uZV0gPSBob3VyQ3ljbGVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgdGltZVpvbmU6IHRpbWVab25lLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0J1xuICAgICAgICB9KVxuICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gIH1cbiAgcmV0dXJuIGR0ZkNhY2hlW3RpbWVab25lXVxufVxuXG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHN1Yk1pbGxpc2Vjb25kcztcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpYl90b0ludGVnZXJfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hZGRNaWxsaXNlY29uZHNfaW5kZXhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xuXG5cbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiAjIyMgdjIuMC4wIGJyZWFraW5nIGNoYW5nZXM6XG4gKlxuICogLSBbQ2hhbmdlcyB0aGF0IGFyZSBjb21tb24gZm9yIHRoZSB3aG9sZSBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjQ29tbW9uLUNoYW5nZXMpLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgc3VidHJhY3RlZFxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgc3VidHJhY3RlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTdWJ0cmFjdCA3NTAgbWlsbGlzZWNvbmRzIGZyb20gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuXG5mdW5jdGlvbiBzdWJNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxuXG4gIHZhciBhbW91bnQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FkZE1pbGxpc2Vjb25kc19pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShkaXJ0eURhdGUsIC1hbW91bnQpO1xufVxuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSBhZGRNaWxsaXNlY29uZHM7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9EYXRlX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxuXG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBhZGRlZFxuICogQHJldHVybnMge0RhdGV9IHRoZSBuZXcgZGF0ZSB3aXRoIHRoZSBtaWxsaXNlY29uZHMgYWRkZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQWRkIDc1MCBtaWxsaXNlY29uZHMgdG8gMTAgSnVseSAyMDE0IDEyOjQ1OjMwLjAwMDpcbiAqIHZhciByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuXG5mdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGlydHlEYXRlLCBkaXJ0eUFtb3VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxuXG4gIHZhciB0aW1lc3RhbXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b0RhdGVfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saWJfdG9JbnRlZ2VyX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IHRvRGF0ZTtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5mdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxuXG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpOyAvLyBDbG9uZSB0aGUgZGF0ZVxuXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGFyZ3VtZW50cy4gUGxlYXNlIHVzZSBgcGFyc2VJU09gIHRvIHBhcnNlIHN0cmluZ3MuIFNlZTogaHR0cHM6Ly9naXQuaW8vZmp1bGVcIik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gdG9EYXRlO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpYl90elBhcnNlVGltZXpvbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cblxuXG5cbnZhciBNSUxMSVNFQ09ORFNfSU5fSE9VUiA9IDM2MDAwMDBcbnZhciBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFID0gNjAwMDBcbnZhciBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTID0gMlxuXG52YXIgcGF0dGVybnMgPSB7XG4gIGRhdGVUaW1lRGVsaW1ldGVyOiAvW1QgXS8sXG4gIHBsYWluVGltZTogLzovLFxuICB0aW1lWm9uZURlbGltZXRlcjogL1taIF0vaSxcblxuICAvLyB5ZWFyIHRva2Vuc1xuICBZWTogL14oXFxkezJ9KSQvLFxuICBZWVk6IFtcbiAgICAvXihbKy1dXFxkezJ9KSQvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgL14oWystXVxcZHszfSkkLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgL14oWystXVxcZHs0fSkkLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG4gIFlZWVk6IC9eKFxcZHs0fSkvLFxuICBZWVlZWTogW1xuICAgIC9eKFsrLV1cXGR7NH0pLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7NX0pLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgL14oWystXVxcZHs2fSkvIC8vIDIgYWRkaXRpb25hbCBkaWdpdHNcbiAgXSxcblxuICAvLyBkYXRlIHRva2Vuc1xuICBNTTogL14tKFxcZHsyfSkkLyxcbiAgREREOiAvXi0/KFxcZHszfSkkLyxcbiAgTU1ERDogL14tPyhcXGR7Mn0pLT8oXFxkezJ9KSQvLFxuICBXd3c6IC9eLT9XKFxcZHsyfSkkLyxcbiAgV3d3RDogL14tP1coXFxkezJ9KS0/KFxcZHsxfSkkLyxcblxuICBISDogL14oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU06IC9eKFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgSEhNTVNTOiAvXihcXGR7Mn0pOj8oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuXG4gIC8vIHRpbWV6b25lIHRva2VucyAodG8gaWRlbnRpZnkgdGhlIHByZXNlbmNlIG9mIGEgdHopXG4gIHRpbWV6b25lOiAvKFtaKy1dLip8IFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiBhbiBhcmd1bWVudCBpcyBhIHN0cmluZywgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHBhcnNlIGl0LlxuICogRnVuY3Rpb24gYWNjZXB0cyBjb21wbGV0ZSBJU08gODYwMSBmb3JtYXRzIGFzIHdlbGwgYXMgcGFydGlhbCBpbXBsZW1lbnRhdGlvbnMuXG4gKiBJU08gODYwMTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMVxuICogSWYgdGhlIGZ1bmN0aW9uIGNhbm5vdCBwYXJzZSB0aGUgc3RyaW5nIG9yIHRoZSB2YWx1ZXMgYXJlIGludmFsaWQsIGl0IHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICogQWxsICpkYXRlLWZucyogZnVuY3Rpb25zIHdpbGwgdGhyb3cgYFJhbmdlRXJyb3JgIGlmIGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIGlzIG5vdCAwLCAxLCAyIG9yIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gYXJndW1lbnQgLSB0aGUgdmFsdWUgdG8gY29udmVydFxuICogQHBhcmFtIHtPcHRpb25zV2l0aFRafSBbb3B0aW9uc10gLSB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy50aW1lWm9uZT0nJ10gLSB1c2VkIHRvIHNwZWNpZnkgdGhlIElBTkEgdGltZSB6b25lIG9mZnNldCBvZiBhIGRhdGUgU3RyaW5nLlxuICogQHJldHVybnMge0RhdGV9IHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogdmFyIHJlc3VsdCA9IHRvRGF0ZSgnMjAxNC0wMi0xMVQxMTozMDozMCcpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnKzAyMDE0MTAxJyB0byBkYXRlLFxuICogLy8gaWYgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXQgaXMgMTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJyswMjAxNDEwMScsIHthZGRpdGlvbmFsRGlnaXRzOiAxfSlcbiAqIC8vPT4gRnJpIEFwciAxMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCwgZGlydHlPcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnXG4gICAgKVxuICB9XG5cbiAgaWYgKGFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxuXG4gIHZhciBvcHRpb25zID0gZGlydHlPcHRpb25zIHx8IHt9XG5cbiAgdmFyIGFkZGl0aW9uYWxEaWdpdHMgPVxuICAgIG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cyA9PSBudWxsXG4gICAgICA/IERFRkFVTFRfQURESVRJT05BTF9ESUdJVFNcbiAgICAgIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9kYXRlX2Zuc19lc21fbGliX3RvSW50ZWdlcl9pbmRleF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMpXG4gIGlmIChcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAyICYmXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMSAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2FkZGl0aW9uYWxEaWdpdHMgbXVzdCBiZSAwLCAxIG9yIDInKVxuICB9XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKFxuICAgIGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICh0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBEYXRlXScpXG4gICkge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpXG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICkge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudClcbiAgfSBlbHNlIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSdcbiAgICApXG4gICkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpXG5cbiAgdmFyIHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKVxuICB2YXIgeWVhciA9IHBhcnNlWWVhclJlc3VsdC55ZWFyXG4gIHZhciByZXN0RGF0ZVN0cmluZyA9IHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZ1xuXG4gIHZhciBkYXRlID0gcGFyc2VEYXRlKHJlc3REYXRlU3RyaW5nLCB5ZWFyKVxuXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICBpZiAoZGF0ZSkge1xuICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKVxuICAgIHZhciB0aW1lID0gMFxuICAgIHZhciBvZmZzZXRcblxuICAgIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpXG5cbiAgICAgIGlmIChpc05hTih0aW1lKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICBvZmZzZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saWJfdHpQYXJzZVRpbWV6b25lX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lKVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IG9mZnNldCBhY2N1cmF0ZSB0byBob3VyIGluIHRpbWV6b25lcyB0aGF0IGNoYW5nZSBvZmZzZXRcbiAgICAgIG9mZnNldCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfZGF0ZV9mbnNfZXNtX2xpYl9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzX2luZGV4X2pzX19bXCJhXCIgLyogZGVmYXVsdCAqL10pKG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKVxuICAgICAgb2Zmc2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9kYXRlX2Zuc19lc21fbGliX2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHNfaW5kZXhfanNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gICAgICAgIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgfVxufVxuXG5mdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICB2YXIgZGF0ZVN0cmluZ3MgPSB7fVxuICB2YXIgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1ldGVyKVxuICB2YXIgdGltZVN0cmluZ1xuXG4gIGlmIChwYXR0ZXJucy5wbGFpblRpbWUudGVzdChhcnJheVswXSkpIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gbnVsbFxuICAgIHRpbWVTdHJpbmcgPSBhcnJheVswXVxuICB9IGVsc2Uge1xuICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXVxuICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXVxuICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lID0gYXJyYXlbMl1cbiAgICBpZiAocGF0dGVybnMudGltZVpvbmVEZWxpbWV0ZXIudGVzdChkYXRlU3RyaW5ncy5kYXRlKSkge1xuICAgICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IGRhdGVTdHJpbmcuc3BsaXQocGF0dGVybnMudGltZVpvbmVEZWxpbWV0ZXIpWzBdXG4gICAgICB0aW1lU3RyaW5nID0gZGF0ZVN0cmluZy5zdWJzdHIoZGF0ZVN0cmluZ3MuZGF0ZS5sZW5ndGgsIGRhdGVTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aW1lU3RyaW5nKSB7XG4gICAgdmFyIHRva2VuID0gcGF0dGVybnMudGltZXpvbmUuZXhlYyh0aW1lU3RyaW5nKVxuICAgIGlmICh0b2tlbikge1xuICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgJycpXG4gICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGVTdHJpbmdzXG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkYXRlU3RyaW5nLCBhZGRpdGlvbmFsRGlnaXRzKSB7XG4gIHZhciBwYXR0ZXJuWVlZID0gcGF0dGVybnMuWVlZW2FkZGl0aW9uYWxEaWdpdHNdXG4gIHZhciBwYXR0ZXJuWVlZWVkgPSBwYXR0ZXJucy5ZWVlZWVthZGRpdGlvbmFsRGlnaXRzXVxuXG4gIHZhciB0b2tlblxuXG4gIC8vIFlZWVkgb3IgwrFZWVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZWVkuZXhlYyhkYXRlU3RyaW5nKSB8fCBwYXR0ZXJuWVlZWVkuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB2YXIgeWVhclN0cmluZyA9IHRva2VuWzFdXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXI6IHBhcnNlSW50KHllYXJTdHJpbmcsIDEwKSxcbiAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKHllYXJTdHJpbmcubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFlZIG9yIMKxWVlZXG4gIHRva2VuID0gcGF0dGVybnMuWVkuZXhlYyhkYXRlU3RyaW5nKSB8fCBwYXR0ZXJuWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIGNlbnR1cnlTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludChjZW50dXJ5U3RyaW5nLCAxMCkgKiAxMDAsXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZShjZW50dXJ5U3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICByZXR1cm4ge1xuICAgIHllYXI6IG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikge1xuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICBpZiAoeWVhciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB2YXIgdG9rZW5cbiAgdmFyIGRhdGVcbiAgdmFyIG1vbnRoXG4gIHZhciB3ZWVrXG5cbiAgLy8gWVlZWVxuICBpZiAoZGF0ZVN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktTU1cbiAgdG9rZW4gPSBwYXR0ZXJucy5NTS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcblxuICAgIGlmICghdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLURERCBvciBZWVlZREREXG4gIHRva2VuID0gcGF0dGVybnMuRERELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgdmFyIGRheU9mWWVhciA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcblxuICAgIGlmICghdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBkYXlPZlllYXIpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIHl5eXktTU0tZGQgb3IgWVlZWU1NRERcbiAgdG9rZW4gPSBwYXR0ZXJucy5NTURELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMVxuICAgIHZhciBkYXkgPSBwYXJzZUludCh0b2tlblsyXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkpXG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIC8vIFlZWVktV3d3IG9yIFlZWVlXd3dcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3cuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB3ZWVrID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcblxuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrKVxuICB9XG5cbiAgLy8gWVlZWS1Xd3ctRCBvciBZWVlZV3d3RFxuICB0b2tlbiA9IHBhdHRlcm5zLld3d0QuZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICB3ZWVrID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5T2ZXZWVrID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKSAtIDFcblxuICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2VlaylcbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCBkYXRlXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVGltZSh0aW1lU3RyaW5nKSB7XG4gIHZhciB0b2tlblxuICB2YXIgaG91cnNcbiAgdmFyIG1pbnV0ZXNcblxuICAvLyBoaFxuICB0b2tlbiA9IHBhdHRlcm5zLkhILmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUZsb2F0KHRva2VuWzFdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSXG4gIH1cblxuICAvLyBoaDptbSBvciBoaG1tXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTS5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKVxuICAgIG1pbnV0ZXMgPSBwYXJzZUZsb2F0KHRva2VuWzJdLnJlcGxhY2UoJywnLCAnLicpKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMpKSB7XG4gICAgICByZXR1cm4gTmFOXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEVcbiAgICApXG4gIH1cblxuICAvLyBoaDptbTpzcyBvciBoaG1tc3NcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NU1MuZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuICAgIHZhciBzZWNvbmRzID0gcGFyc2VGbG9hdCh0b2tlblszXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArXG4gICAgICBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURSArXG4gICAgICBzZWNvbmRzICogMTAwMFxuICAgIClcbiAgfVxuXG4gIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB0aW1lXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICB3ZWVrID0gd2VlayB8fCAwXG4gIGRheSA9IGRheSB8fCAwXG4gIHZhciBkYXRlID0gbmV3IERhdGUoMClcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihpc29XZWVrWWVhciwgMCwgNClcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeURheSA9IGRhdGUuZ2V0VVRDRGF5KCkgfHwgN1xuICB2YXIgZGlmZiA9IHdlZWsgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheVxuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKVxuICByZXR1cm4gZGF0ZVxufVxuXG4vLyBWYWxpZGF0aW9uIGZ1bmN0aW9uc1xuXG52YXIgREFZU19JTl9NT05USCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxudmFyIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSID0gWzMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG5cbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8ICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRhdGUpIHtcbiAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoZGF0ZSAhPSBudWxsKSB7XG4gICAgaWYgKGRhdGUgPCAxKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB2YXIgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKVxuICAgIGlmIChpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUlttb250aF0pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAoIWlzTGVhcFllYXIgJiYgZGF0ZSA+IERBWVNfSU5fTU9OVEhbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURheU9mWWVhckRhdGUoeWVhciwgZGF5T2ZZZWFyKSB7XG4gIGlmIChkYXlPZlllYXIgPCAxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKVxuICBpZiAoaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjYpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoIWlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY1KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKHllYXIsIHdlZWssIGRheSkge1xuICBpZiAod2VlayA8IDAgfHwgd2VlayA+IDUyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoZGF5ICE9IG51bGwgJiYgKGRheSA8IDAgfHwgZGF5ID4gNikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICBpZiAoaG91cnMgIT0gbnVsbCAmJiAoaG91cnMgPCAwIHx8IGhvdXJzID49IDI1KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1pbnV0ZXMgIT0gbnVsbCAmJiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+PSA2MCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChzZWNvbmRzICE9IG51bGwgJiYgKHNlY29uZHMgPCAwIHx8IHNlY29uZHMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHM7XG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwO1xuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5cbmZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGlydHlEYXRlKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoZGlydHlEYXRlLmdldFRpbWUoKSk7XG4gIHZhciBiYXNlVGltZXpvbmVPZmZzZXQgPSBNYXRoLmNlaWwoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgZGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xuICB2YXIgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWUoKSAlIE1JTExJU0VDT05EU19JTl9NSU5VVEU7XG4gIHJldHVybiBiYXNlVGltZXpvbmVPZmZzZXQgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQ7XG59XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZ2V0V2Vla1N0YXJ0QnlSZWdpb24gKi9cbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUkMTsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcGlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19yZWdpb25EYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xuXG5cblxuXG5mdW5jdGlvbiBnZXRXZWVrU3RhcnRCeVJlZ2lvbiQxKHJlZ2lvbkNvZGUpIHtcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX19bXCJiXCIgLyogZ2V0V2Vla1N0YXJ0QnlSZWdpb24gKi9dKShyZWdpb25Db2RlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3JlZ2lvbkRheU1hcF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlMb2NhbGUkMShsb2NhbGUpIHtcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBpX2pzX19bXCJhXCIgLyogZ2V0V2Vla1N0YXJ0QnlMb2NhbGUgKi9dKShsb2NhbGUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGFuZ1JlZ2lvbk1hcF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3JlZ2lvbkRheU1hcF9qc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcbn1cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldFdlZWtTdGFydEJ5UmVnaW9uOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0V2Vla1N0YXJ0QnlMb2NhbGU7IH0pO1xuZnVuY3Rpb24gZ2V0V2Vla1N0YXJ0QnlSZWdpb24ocmVnaW9uQ29kZSwgcmVnaW9uRGF5TWFwKSB7XG4gICAgdmFyIGNvZGUgPSByZWdpb25EYXlNYXBbdHlwZW9mIHJlZ2lvbkNvZGUgPT09ICdzdHJpbmcnID8gcmVnaW9uQ29kZS50b1VwcGVyQ2FzZSgpIDogcmVnaW9uQ29kZV07XG4gICAgcmV0dXJuIHR5cGVvZiBjb2RlID09PSAnbnVtYmVyJyA/IGNvZGUgOiAxO1xufVxuXG5mdW5jdGlvbiBnZXRXZWVrU3RhcnRCeUxvY2FsZShsb2NhbGUsIGxhbmdSZWdpb25NYXAsIHJlZ2lvbkRheU1hcCkge1xuICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBsb2NhbGUudG9Mb3dlckNhc2UoKS5zcGxpdCgvWy1fXS8pO1xuICAgICAgICB2YXIgbGFuZ3VhZ2UgPSBkYXRhWzBdO1xuICAgICAgICB2YXIgY291bnRyeTtcbiAgICAgICAgaWYgKGRhdGFbMV0gJiYgZGF0YVsxXS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlICs9IFwiX1wiICsgKGRhdGFbMV0pO1xuICAgICAgICAgICAgY291bnRyeSA9IGRhdGFbMl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3VudHJ5ID0gZGF0YVsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvdW50cnkpIHtcbiAgICAgICAgICAgIGNvdW50cnkgPSBsYW5nUmVnaW9uTWFwW2xhbmd1YWdlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFdlZWtTdGFydEJ5UmVnaW9uKGNvdW50cnkubWF0Y2goL15cXGQrJC8pID8gTnVtYmVyKGNvdW50cnkpIDogY291bnRyeSwgcmVnaW9uRGF5TWFwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMTtcbn1cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcGkuanMubWFwXG5cblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBsYW5nUmVnaW9uTWFwID0ge1xuICAgIGVuOiAnVVMnLFxuICAgIHpoOiAnQ04nLFxuICAgIHpoX2hhbnM6ICdDTicsXG4gICAgaGFuczogJ0NOJyxcbiAgICB3dXU6ICdDTicsXG4gICAgaHNuOiAnQ04nLFxuICAgIGhhazogJ0NOJyxcbiAgICBuYW46ICdDTicsXG4gICAgZ2FuOiAnQ04nLFxuICAgIGhpOiAnSU4nLFxuICAgIHRlOiAnSU4nLFxuICAgIG1yOiAnSU4nLFxuICAgIHRhOiAnSU4nLFxuICAgIGd1OiAnSU4nLFxuICAgIGtuOiAnSU4nLFxuICAgIG9yOiAnSU4nLFxuICAgIG1sOiAnSU4nLFxuICAgIHBhX2d1cnU6ICdJTicsXG4gICAgYmhvOiAnSU4nLFxuICAgIGF3YTogJ0lOJyxcbiAgICBhczogJ0lOJyxcbiAgICBtd3I6ICdJTicsXG4gICAgbWFpOiAnSU4nLFxuICAgIG1hZzogJ0lOJyxcbiAgICBiZ2M6ICdJTicsXG4gICAgaG5lOiAnSU4nLFxuICAgIGRjYzogJ0lOJyxcbiAgICBkejogJ0JUJyxcbiAgICB0bjogJ0JXJyxcbiAgICBhbTogJ0VUJyxcbiAgICBvbTogJ0VUJyxcbiAgICBxdWM6ICdHVCcsXG4gICAgaWQ6ICdJRCcsXG4gICAganY6ICdJRCcsXG4gICAgc3U6ICdJRCcsXG4gICAgbWFkOiAnSUQnLFxuICAgIG1zX2FyYWI6ICdJRCcsXG4gICAgZ2E6ICdJRScsXG4gICAgaGU6ICdJTCcsXG4gICAgamFtOiAnSk0nLFxuICAgIGphOiAnSlAnLFxuICAgIGttOiAnS0gnLFxuICAgIGtvOiAnS1InLFxuICAgIGxvOiAnTEEnLFxuICAgIG1oOiAnTUgnLFxuICAgIG15OiAnTU0nLFxuICAgIG10OiAnTVQnLFxuICAgIG5lOiAnTlAnLFxuICAgIGZpbDogJ1BIJyxcbiAgICBjZWI6ICdQSCcsXG4gICAgaWxvOiAnUEgnLFxuICAgIHVyOiAnUEsnLFxuICAgIHBhOiAnUEsnLFxuICAgIHBhX2FyYWI6ICdQSycsXG4gICAgYXJhYjogJ1BLJyxcbiAgICBsYWg6ICdQSycsXG4gICAgcHM6ICdQSycsXG4gICAgc2Q6ICdQSycsXG4gICAgc2RfYXJhYjogJ1BLJyxcbiAgICBza3I6ICdQSycsXG4gICAgZ246ICdQWScsXG4gICAgdGg6ICdUSCcsXG4gICAgdHRzOiAnVEgnLFxuICAgIGFlYjogJ1ROJyxcbiAgICB6aF9oYW50OiAnVFcnLFxuICAgIGhhbnQ6ICdUVycsXG4gICAgc206ICdXUycsXG4gICAgenU6ICdaQScsXG4gICAgc246ICdaVycsXG4gICAgYXJxOiAnRFonLFxuICAgIGFyOiAnRUcnLFxuICAgIGFyejogJ0VHJyxcbiAgICBmYTogJ0lSJyxcbiAgICBhel9hcmFiOiAnSVInLFxuICAgIGFyeTogJ01BJyxcbiAgICBibjogJ0JEJyxcbiAgICBya3Q6ICdCRCcsXG4gICAgZHY6ICdNVidcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAobGFuZ1JlZ2lvbk1hcCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sYW5nUmVnaW9uTWFwLmpzLm1hcFxuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcmVnaW9uRGF5TWFwID0ge1xuICAgIEFHOiAwLFxuICAgIEFURzogMCxcbiAgICAyODogMCxcbiAgICBBUjogMCxcbiAgICBBUkc6IDAsXG4gICAgMzI6IDAsXG4gICAgQVM6IDAsXG4gICAgQVNNOiAwLFxuICAgIDE2OiAwLFxuICAgIEFVOiAwLFxuICAgIEFVUzogMCxcbiAgICAzNjogMCxcbiAgICBCUjogMCxcbiAgICBCUkE6IDAsXG4gICAgNzY6IDAsXG4gICAgQlM6IDAsXG4gICAgQkhTOiAwLFxuICAgIDQ0OiAwLFxuICAgIEJUOiAwLFxuICAgIEJUTjogMCxcbiAgICA2NDogMCxcbiAgICBCVzogMCxcbiAgICBCV0E6IDAsXG4gICAgNzI6IDAsXG4gICAgQlo6IDAsXG4gICAgQkxaOiAwLFxuICAgIDg0OiAwLFxuICAgIENBOiAwLFxuICAgIENBTjogMCxcbiAgICAxMjQ6IDAsXG4gICAgQ046IDAsXG4gICAgQ0hOOiAwLFxuICAgIDE1NjogMCxcbiAgICBDTzogMCxcbiAgICBDT0w6IDAsXG4gICAgMTcwOiAwLFxuICAgIERNOiAwLFxuICAgIERNQTogMCxcbiAgICAyMTI6IDAsXG4gICAgRE86IDAsXG4gICAgRE9NOiAwLFxuICAgIDIxNDogMCxcbiAgICBFVDogMCxcbiAgICBFVEg6IDAsXG4gICAgMjMxOiAwLFxuICAgIEdUOiAwLFxuICAgIEdUTTogMCxcbiAgICAzMjA6IDAsXG4gICAgR1U6IDAsXG4gICAgR1VNOiAwLFxuICAgIDMxNjogMCxcbiAgICBISzogMCxcbiAgICBIS0c6IDAsXG4gICAgMzQ0OiAwLFxuICAgIEhOOiAwLFxuICAgIEhORDogMCxcbiAgICAzNDA6IDAsXG4gICAgSUQ6IDAsXG4gICAgSUROOiAwLFxuICAgIDM2MDogMCxcbiAgICBJRTogMCxcbiAgICBJUkw6IDAsXG4gICAgMzcyOiAwLFxuICAgIElMOiAwLFxuICAgIElTUjogMCxcbiAgICAzNzY6IDAsXG4gICAgSU46IDAsXG4gICAgSU5EOiAwLFxuICAgIDM1NjogMCxcbiAgICBKTTogMCxcbiAgICBKQU06IDAsXG4gICAgMzg4OiAwLFxuICAgIEpQOiAwLFxuICAgIEpQTjogMCxcbiAgICAzOTI6IDAsXG4gICAgS0U6IDAsXG4gICAgS0VOOiAwLFxuICAgIDQwNDogMCxcbiAgICBLSDogMCxcbiAgICBLSE06IDAsXG4gICAgMTE2OiAwLFxuICAgIEtSOiAwLFxuICAgIEtPUjogMCxcbiAgICA0MTA6IDAsXG4gICAgTEE6IDAsXG4gICAgTEEwOiAwLFxuICAgIDQxODogMCxcbiAgICBNSDogMCxcbiAgICBNSEw6IDAsXG4gICAgNTg0OiAwLFxuICAgIE1NOiAwLFxuICAgIE1NUjogMCxcbiAgICAxMDQ6IDAsXG4gICAgTU86IDAsXG4gICAgTUFDOiAwLFxuICAgIDQ0NjogMCxcbiAgICBNVDogMCxcbiAgICBNTFQ6IDAsXG4gICAgNDcwOiAwLFxuICAgIE1YOiAwLFxuICAgIE1FWDogMCxcbiAgICA0ODQ6IDAsXG4gICAgTVo6IDAsXG4gICAgTU9aOiAwLFxuICAgIDUwODogMCxcbiAgICBOSTogMCxcbiAgICBOSUM6IDAsXG4gICAgNTU4OiAwLFxuICAgIE5QOiAwLFxuICAgIE5QTDogMCxcbiAgICA1MjQ6IDAsXG4gICAgTlo6IDAsXG4gICAgTlpMOiAwLFxuICAgIDU1NDogMCxcbiAgICBQQTogMCxcbiAgICBQQU46IDAsXG4gICAgNTkxOiAwLFxuICAgIFBFOiAwLFxuICAgIFBFUjogMCxcbiAgICA2MDQ6IDAsXG4gICAgUEg6IDAsXG4gICAgUEhMOiAwLFxuICAgIDYwODogMCxcbiAgICBQSzogMCxcbiAgICBQQUs6IDAsXG4gICAgNTg2OiAwLFxuICAgIFBSOiAwLFxuICAgIFBSSTogMCxcbiAgICA2MzA6IDAsXG4gICAgUFk6IDAsXG4gICAgUFJZOiAwLFxuICAgIDYwMDogMCxcbiAgICBTQTogMCxcbiAgICBTQVU6IDAsXG4gICAgNjgyOiAwLFxuICAgIFNHOiAwLFxuICAgIFNHUDogMCxcbiAgICA3MDI6IDAsXG4gICAgU1Y6IDAsXG4gICAgU0xWOiAwLFxuICAgIDIyMjogMCxcbiAgICBUSDogMCxcbiAgICBUSEE6IDAsXG4gICAgNzY0OiAwLFxuICAgIFROOiAwLFxuICAgIFRVTjogMCxcbiAgICA3ODg6IDAsXG4gICAgVFQ6IDAsXG4gICAgVFRPOiAwLFxuICAgIDc4MDogMCxcbiAgICBUVzogMCxcbiAgICBUV046IDAsXG4gICAgMTU4OiAwLFxuICAgIFVNOiAwLFxuICAgIFVNSTogMCxcbiAgICA1ODE6IDAsXG4gICAgVVM6IDAsXG4gICAgVVNBOiAwLFxuICAgIDg0MDogMCxcbiAgICBWRTogMCxcbiAgICBWRU46IDAsXG4gICAgODYyOiAwLFxuICAgIFZJOiAwLFxuICAgIFZJUjogMCxcbiAgICA4NTA6IDAsXG4gICAgV1M6IDAsXG4gICAgV1NNOiAwLFxuICAgIDg4MjogMCxcbiAgICBZRTogMCxcbiAgICBZRU06IDAsXG4gICAgODg3OiAwLFxuICAgIFpBOiAwLFxuICAgIFpBRjogMCxcbiAgICA3MTA6IDAsXG4gICAgWlc6IDAsXG4gICAgWldFOiAwLFxuICAgIDcxNjogMCxcbiAgICBBRTogNixcbiAgICBBUkU6IDYsXG4gICAgNzg0OiA2LFxuICAgIEFGOiA2LFxuICAgIEFGRzogNixcbiAgICA0OiA2LFxuICAgIEJIOiA2LFxuICAgIEJIUjogNixcbiAgICA0ODogNixcbiAgICBESjogNixcbiAgICBESkk6IDYsXG4gICAgMjYyOiA2LFxuICAgIERaOiA2LFxuICAgIERaQTogNixcbiAgICAxMjogNixcbiAgICBFRzogNixcbiAgICBFR1k6IDYsXG4gICAgODE4OiA2LFxuICAgIElROiA2LFxuICAgIElSUTogNixcbiAgICAzNjg6IDYsXG4gICAgSVI6IDYsXG4gICAgSVJOOiA2LFxuICAgIDM2NDogNixcbiAgICBKTzogNixcbiAgICBKT1I6IDYsXG4gICAgNDAwOiA2LFxuICAgIEtXOiA2LFxuICAgIEtXVDogNixcbiAgICA0MTQ6IDYsXG4gICAgTFk6IDYsXG4gICAgTEJZOiA2LFxuICAgIDQzNDogNixcbiAgICBNQTogNixcbiAgICBNQVI6IDYsXG4gICAgNTA0OiA2LFxuICAgIE9NOiA2LFxuICAgIE9NTjogNixcbiAgICA1MTI6IDYsXG4gICAgUUE6IDYsXG4gICAgUUFUOiA2LFxuICAgIDYzNDogNixcbiAgICBTRDogNixcbiAgICBTRE46IDYsXG4gICAgNzI5OiA2LFxuICAgIFNZOiA2LFxuICAgIFNZUjogNixcbiAgICA3NjA6IDYsXG4gICAgQkQ6IDUsXG4gICAgQkdEOiA1LFxuICAgIDUwOiA1LFxuICAgIE1WOiA1LFxuICAgIE1EVjogNSxcbiAgICA0NjI6IDVcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAocmVnaW9uRGF5TWFwKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZ2lvbkRheU1hcC5qcy5tYXBcblxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmJqLW1hc2tzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cbnZhciBpc051bWJlclJlZ2V4ID0gL15cXGQrJC87XG52YXIgaXNXaGl0ZXNwYWNlUmVnZXggPSAvXFxzLztcbnZhciBwdW5jdHVhdGlvbkxpc3QgPSAnIVwiIyQlJlxcJygpKissLS4vOjs8PT4/QFtdXl9ge3x9fic7XG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgaW4gbG93ZXIgY2FzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqL1xuXG52YXIgaXNMb3dlckNhc2UgPSBmdW5jdGlvbiBpc0xvd2VyQ2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvVXBwZXJDYXNlKCk7XG59O1xuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGluIHVwcGVyIGNhc2VcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cblxuXG52YXIgaXNVcHBlckNhc2UgPSBmdW5jdGlvbiBpc1VwcGVyQ2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiBzdHIgIT0gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgcGFzc09yVGhyb3dFcnJvciA9IGZ1bmN0aW9uIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKSB7XG4gIGlmICghbG9vc2UpIHtcbiAgICB2YXIgX2NoYXIgPSBzdHIuY2hhckF0KGkpO1xuXG4gICAgdmFyIHBvcyA9IGkgKyAxO1xuICAgIHRocm93IHtcbiAgICAgIG5hbWU6ICdTdHJpbmdNYXNrRXJyb3InLFxuICAgICAgbWVzc2FnZTogXCJTdHJpbmdNYXNrRXJyb3I6IGVycm9yIGFwcGx5aW5nIG1hc2sgYXQgcG9zaXRpb24gXFxcIlwiLmNvbmNhdChwb3MsIFwiXFxcIiAsIGNoYXIgXFxcIlwiKS5jb25jYXQoX2NoYXIsIFwiXFxcIlwiKSxcbiAgICAgIHBvczogcG9zLFxuICAgICAgXCJjaGFyXCI6IF9jaGFyXG4gICAgfTtcbiAgfSBlbHNlIHJldFtpXSA9ICcgJztcbn07XG4vKipcbiAqIE51bWJlck1hc2tcbiAqXG4gKiBBIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gZm9yIEJCaiBudW1iZXJzIG1hc2tpbmdcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5cblxudmFyIFN0cmluZ01hc2sgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHJpbmdNYXNrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdHJpbmdNYXNrKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTdHJpbmdNYXNrLCBudWxsLCBbe1xuICAgIGtleTogXCJtYXNrXCIsXG5cbiAgICAvKipcbiAgICAgKiBNYXNrIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCB0aGUgZ2l2ZW4gbWFzayBhY2NvcmRpbmcgdG8gQkJqIHJ1bGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gbWFza1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIHRoZSBtYXNrIHRvIHVzZSBmb3IgZm9ybWF0dGluZ1xuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICAgKiBcbiAgICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgICAqIEB0aHJvd3Mge1N0cmluZ01hc2tFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtNYXNrRXJyb3J9XG4gICAgICogXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gbWFzayhzdHIsIF9tYXNrKSB7XG4gICAgICB2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgIF9tYXNrID0gU3RyaW5nKF9tYXNrKTtcbiAgICAgIHZhciBtYXNrTGVuID0gX21hc2subGVuZ3RoO1xuICAgICAgdmFyIHN0ckxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgICAgIGlmIChzdHJMZW4gPiBtYXNrTGVuKSB7XG4gICAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0cjsgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgICAgZWxzZSB0aHJvdyB7XG4gICAgICAgICAgICBuYW1lOiAnTWFza0lzVG9vU2hvcnRFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBcIk1hc2tJc1Rvb1Nob3J0RXJyb3I6IE1hc2sgaXMgc2hvcnRlciB0aGFuIHRoZSBwYXNzZWQgc3RyaW5nXCJcbiAgICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pO1xuICAgICAgdmFyIHBvcyA9IDA7IC8vIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0clxuXG4gICAgICB2YXIgbWFza0J5dGUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrTGVuOyBpKyspIHtcbiAgICAgICAgbWFza0J5dGUgPSBfbWFzay5jaGFyQXQoaSk7XG5cbiAgICAgICAgc3dpdGNoIChtYXNrQnl0ZSkge1xuICAgICAgICAgIGNhc2UgJ1gnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggYW55IGNoYXJhY3RlclxuICAgICAgICAgICAgcmV0W2ldID0gcG9zIDwgc3RyTGVuID8gc3RyLmNoYXJBdChwb3MpIDogJyAnO1xuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyOyBmb3JjZSB1cHBlciBjYXNlXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZSA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGUpKSByZXRbaV0gPSBfYnl0ZTtlbHNlIGlmIChpc0xvd2VyQ2FzZShfYnl0ZSkpIHJldFtpXSA9IF9ieXRlLnRvVXBwZXJDYXNlKCk7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAvLyBtYXRjaCBsZXR0ZXJcbiAgICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgICAgdmFyIF9ieXRlMiA9IHN0ci5jaGFyQXQocG9zKTtcblxuICAgICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoX2J5dGUyKSB8fCBpc0xvd2VyQ2FzZShfYnl0ZTIpKSByZXRbaV0gPSBfYnl0ZTI7ZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cik7XG4gICAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnO1xuXG4gICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAvLyBtYXRjaCBkaWdpdFxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGUzID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc051bWJlclJlZ2V4LnRlc3QoX2J5dGUzKSkgcmV0W2ldID0gX2J5dGUzO2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1onOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyIG9yIGRpZ2l0OyBmb3JjZSB1cHBlciBjYXNlXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTQgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKF9ieXRlNCkgfHwgaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlNCkpIHJldFtpXSA9IF9ieXRlNDtlbHNlIGlmIChpc0xvd2VyQ2FzZShfYnl0ZTQpKSByZXRbaV0gPSBfYnl0ZTQudG9VcHBlckNhc2UoKTtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICd6JzpcbiAgICAgICAgICAgIC8vIG1hdGNoIGxldHRlciBvciBkaWdpdFxuICAgICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgICB2YXIgX2J5dGU1ID0gc3RyLmNoYXJBdChwb3MpO1xuXG4gICAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShfYnl0ZTUpIHx8IGlzTG93ZXJDYXNlKF9ieXRlNSkgfHwgaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlNSkpIHJldFtpXSA9IF9ieXRlNTtlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICc7XG5cbiAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1UnOlxuICAgICAgICAgICAgLy8gbWF0Y2ggbGV0dGVyIChmb3JjZSB1cHBlciBjYXNlKSwgZGlnaXQsIHdoaXRlc3BhY2Ugb3IgcHVuY3R1YXRpb24uXG4gICAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICAgIHZhciBfYnl0ZTYgPSBzdHIuY2hhckF0KHBvcyk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzTG93ZXJDYXNlKF9ieXRlNikpIHJldFtpXSA9IF9ieXRlNi50b1VwcGVyQ2FzZSgpO2Vsc2UgaWYgKGlzVXBwZXJDYXNlKF9ieXRlNikgfHwgaXNOdW1iZXJSZWdleC50ZXN0KF9ieXRlNikgfHwgaXNXaGl0ZXNwYWNlUmVnZXgudGVzdChfYnl0ZTYpIHx8IHB1bmN0dWF0aW9uTGlzdC5pbmRleE9mKF9ieXRlNikgPiAtMSkgcmV0W2ldID0gX2J5dGU2O2Vsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJztcblxuICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXRbaV0gPSBtYXNrQnl0ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgaWYgKCFsb29zZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICdNYXNrRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogJ01hc2sgY2Fubm90IGJlIGFwcGxpZWQnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0LmpvaW4oJycpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdHJpbmdNYXNrO1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKFN0cmluZ01hc2spO1xuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19UeXBlc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKTtcblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX051bWJlck1hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19EYXRlTWFza19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1N0cmluZ01hc2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5cblxuLyoqXG4gKiBUeXBlc1xuICpcbiAqIEJCaiBtYXNrcyBmYWN0b3J5XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuXG52YXIgVHlwZXMgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUeXBlcygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHlwZXMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFR5cGVzLCBudWxsLCBbe1xuICAgIGtleTogXCJudW1iZXJcIixcblxuICAgIC8qKlxuICAgICAqIE1hc2sgdGhlIGdpdmVuIG51bWJlciB3aXRoIHRoZSBnaXZlbiBtYXNrIGFjY29yZGluZyB0byBCQmogcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVjaW1hbFNlcGFyYXRvcj0uXSAgLSBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZVRyYWlsaW5nWmVyb3M9ZmFsc2VdIC0gQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgICAqICAgICAgICAgICAgICAgIGFueXdheSAsIG90aGVyd2lzZSBpdCB3aWxsIHN0b3AgYXQgZmlyc3QgZXJyb3IgYW5kIHRocm93IGl0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBudW1iZXJcbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gbnVtYmVyKF9udW1iZXIsIG1hc2spIHtcbiAgICAgIHZhciBncm91cGluZ1NlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJywnO1xuICAgICAgdmFyIGRlY2ltYWxTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcuJztcbiAgICAgIHZhciBmb3JjZVRyYWlsaW5nWmVyb3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuICAgICAgdmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB0cnVlO1xuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTnVtYmVyTWFza19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLm1hc2soX251bWJlciwgbWFzaywgZ3JvdXBpbmdTZXBhcmF0b3IsIGRlY2ltYWxTZXBhcmF0b3IsIGZvcmNlVHJhaWxpbmdaZXJvcywgbG9vc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYXNrIGEgZGF0ZSBhY2NvcmRpbmcgdG8gYmJqIG1hc2tpbmcgcnVsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRlIGRhdGUgYXMgYSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayBtYXNrIGFzIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtsb2NhbGU9QnJvd3NlcidzIGxvY2FsZV0gdGhlIGxhbmd1YWdlIHRvIHVzZSBleChlbi1VUykuIGRlZmF1bHQgaXMgdG8gdGhlIHN5c3RlbSBsYW5ndWFnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbdGltZXpvbmU9U3lzdGVtIHRpbWV6b25lXSB0aGUgdGltZSB6b25lIGRlc2NyaXB0b3IgKGUuZy4gQW1lcmljYS9Mb3NfQW5nZWxlcykuIGRlZmF1bHQgdG8gdGhlIHN5c3RlbVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZVxuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBudW1iZXIgbWFza2VkIHdpdGggdGhlIGdpdmVuIG1hc2tcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGF0ZShfZGF0ZSwgbWFzaywgbG9jYWxlLCB0aW1lem9uZSkge1xuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fRGF0ZU1hc2tfX1tcImNcIiAvKiBkZWZhdWx0ICovXS5tYXNrKF9kYXRlLCBtYXNrLCBsb2NhbGUsIHRpbWV6b25lKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIG1hc2tcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtsb29zZT10cnVlXSB3aGVuIHRydWUgLCBlcnJvcnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgdHJ5IGF0IGFwcGx5IHRoZSBtYXNrXG4gICAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtNYXNrSXNUb29TaG9ydEVycm9yfVxuICAgICAqIEB0aHJvd3Mge1N0cmluZ01hc2tFcnJvcn1cbiAgICAgKiBAdGhyb3dzIHtNYXNrRXJyb3J9XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgbWFza2VkIHN0cmluZ1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwic3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHN0cmluZyhzdHIsIG1hc2spIHtcbiAgICAgIHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1N0cmluZ01hc2tfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5tYXNrKHN0ciwgbWFzaywgbG9vc2UpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUeXBlcztcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChUeXBlcyk7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmJqLW1hc2tzLmpzLm1hcCIsImlmKCFnbG9iYWxbXCJCYXNpc1wiXSkgZ2xvYmFsW1wiQmFzaXNcIl0gPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiQmFzaXNcIl1bXCJJbnB1dE1hc2tpbmdcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcYmFzaXMtaW5wdXQtbWFza2luZy5qc1wiKTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJBZ0dyaWRDb21wb25lbnRzXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkJhc2lzXCJdID0gcm9vdFtcIkJhc2lzXCJdIHx8IHt9LCByb290W1wiQmFzaXNcIl1bXCJBZ0dyaWRDb21wb25lbnRzXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmZDdmNjA0MjE5MmUxMjMyY2Y2NSIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wiY29tbW9uanNcIjpcImJiai1tYXNrcy9zcmMvU3RyaW5nTWFza1wiLFwiY29tbW9uanMyXCI6XCJiYmotbWFza3Mvc3JjL1N0cmluZ01hc2tcIixcImFtZFwiOlwiYmJqLW1hc2tzL3NyYy9TdHJpbmdNYXNrXCIsXCJyb290XCI6W1wiQkJqXCIsXCJNYXNrc1wiLFwiU3RyaW5nTWFza1wiXX1cbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgVGV4dElucHV0IGZyb20gJy4vVGV4dElucHV0J1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0SW5wdXQvaW5kZXguanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgU3RyaW5nTWFzayBmcm9tICdiYmotbWFza3Mvc3JjL1N0cmluZ01hc2snXHJcbmltcG9ydCB7XHJcbiAgbWFza0lmTm90TWFza2VkLFxyXG4gIHVubWFzayxcclxuICBmaW5kQ2FyZXRQb3NpdGlvbixcclxuICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzayxcclxufSBmcm9tICcuL3Rvb2xzLmpzJ1xyXG5cclxuLyoqXHJcbiAqIFRoZSBgVGV4dElucHV0YCB3aWxsIHdyYXAgdGV4dCBpbnB1dHMgYW5kIGFwcGx5IHRoZSBnaXZlbiBbYmJqIHN0cmluZyBtYXNrXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI3N0cmluZy1tYXNrcylcclxuICpcclxuICogKipPcHRpb25zKipcclxuICpcclxuICogX09wdGlvbnMgY2FuIGJlIHBhc3NlZCB2aWEgZGF0YSBhdHRyaWJ1dGVzIC4gRm9yIGRhdGEgYXR0cmlidXRlcywgYXBwZW5kIHRoZSBvcHRpb24gbmFtZSB0byBkYXRhLSwgYXMgaW4gZGF0YS1tYXNrX1xyXG4gKlxyXG4gKiB8IE9wdGlvbiAgICB8IERlZmF1bHQgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XHJcbiAqIHwgbWFzayB8ICAgICAgICAgfCBUaGUgYmJqIHN0cmluZyBtYXNrIEBzZWUgW0JCaiBTdHJpbmcgTWFza3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9CYXNpc0h1Yi9iYmotbWFza3Mjc3RyaW5nLW1hc2tzKSB8XHJcbiAqXHJcbiAqICA8YnI+XHJcbiAqXHJcbiAqICoqRXhhbXBsZSA6KipcclxuICogYGBgaHRtbFxyXG4gKiAgPGlucHV0IGNsYXNzPVwiYmJqLXRleHQtbWFza2VkXCIgbmFtZT1cInRlc3RcIiBpZD1cInRlc3RcIiB2YWx1ZT1cImVkMjNcIiBkYXRhLW1hc2s9XCJBQS0wMFwiPlxyXG4gKlxyXG4gKiAgPHNjcmlwdD5cclxuICogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAqICAgICAgbmV3IEJhc2lzLklucHV0TWFza2luZy5UZXh0SW5wdXQoe1xyXG4gKiAgICAgICAgIG9uVXBkYXRlOiAobWFza2VkVmFsdWUgLCByYXdWYWx1ZSAsIGlucHV0KSA9PiB7XHJcbiAqICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nXHJcbiAqICAgICAgICAgfSxcclxuICogICAgICAgICBvbkludmFsaWQ6IChlcnIgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH1cclxuICogICAgICB9KVxyXG4gKiAgICB9KVxyXG4gKiAgPC9zY3JpcHQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxyXG4gKi9cclxuY2xhc3MgVGV4dElucHV0IHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3QgbmV3IFRleHRJbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBvcHRpb25zIC0gVGhlIGlucHV0IG9wdGlvbnMuXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd9IFtvcHRpb25zLmVsZW1lbnRzPVwiLmJiai10ZXh0LW1hc2tlZFwiXSAtIFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBub2RlIHRvIHVzZVxyXG4gICAqIEBwYXJhbSB7SFRNTERvY3VtZW50fSBbb3B0aW9ucy5kb2N1bWVudD1kb2N1bWVudF0gLSBEb2N1bWVudCBpbnN0YW5jZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NFcnJvcj1cImJiai1tYXNrLWVycm9yXCJdIC0gQSBjc3MgY2xhc3MgdG8gYXR0YWNoIHRvIHRoZSBpbnB1dCB3aGVuIGl0IGlzIGludmFsaWRcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzPVwiYmJqLW1hc2stc3VjY2Vzc1wiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyB2YWxpZCBhZnRlciB0aGUgdXNlciBpbnRlcmFjdGlvblxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uVXBkYXRlPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIG5ldyBtYXNrZWQgdmFsdWUgaXMgc2V0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25JbnZhbGlkPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIGlucHV0IG9yIHRoZSBtYXNrIGlzIGludmFsaWRcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgLi4ue1xyXG4gICAgICAgIGVsZW1lbnRzOiAnLmJiai10ZXh0LW1hc2tlZCcsXHJcbiAgICAgICAgZG9jOiBkb2N1bWVudCxcclxuICAgICAgICBjc3NDbGFzc0Vycm9yOiAnYmJqLW1hc2stZXJyb3InLFxyXG4gICAgICAgIGNzc0NsYXNzU3VjY2VzczogJ2Jiai1tYXNrLXN1Y2Nlc3MnLFxyXG4gICAgICAgIG9uVXBkYXRlOiBudWxsLFxyXG4gICAgICAgIG9uSW52YWxpZDogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH1cclxuICAgIHRoaXMuX29uS2V5c3Ryb2tlID0gdGhpcy5fb25LZXlzdHJva2UuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5fb25Gb2N1cyA9IHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKVxyXG4gICAgdGhpcy5yZWZyZXNoKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudCBhbmQgd3JhcCB0aGUgaW5wdXQgZWxlbWVudHMgZm9yIG1hc2tpbmcgaW4gY2FzZVxyXG4gICAqIHRoZXkgYXJlIG5vdCB3cmFwcGVkIHlldFxyXG4gICAqL1xyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9XHJcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWxlbWVudHMgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5vcHRpb25zLmVsZW1lbnRzKVxyXG4gICAgICAgIDogdGhpcy5vcHRpb25zLmVsZW1lbnRzXHJcbiAgICBsZXQgaW5wdXQsIHBhcmVudENsYXNzXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpbnB1dCA9IGVsZW1lbnRzW2ldXHJcbiAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICBwYXJlbnRDbGFzcyA9IGlucHV0LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpXHJcblxyXG4gICAgICAgIGlmICghaW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIGBCQmpNYXNraW5nOiBJbnB1dCBoYXMgbm8gSUQuIFdpdGhvdXQgYW4gSUQgdGhlIGlucHV0IGNhbm5vdCBiZSBtYXNrZWRgLFxyXG4gICAgICAgICAgICBpbnB1dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdlIGRvbid0IGluaXRpYWxpemUgdGhlIGlucHV0J3Mgd3JhcCB0d2ljZVxyXG4gICAgICAgIGNvbnN0IGlzV3JhcHBlZCA9XHJcbiAgICAgICAgICBwYXJlbnRDbGFzcyAmJiBwYXJlbnRDbGFzcy5pbmRleE9mKCd0ZXh0SW5wdXRNYXNrX193cmFwJykgPiAtMVxyXG4gICAgICAgIHRoaXMuX3dyYXAoaW5wdXQsIGlzV3JhcHBlZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgQkJqTWFza2luZzogSW52YWxpZCBpbnB1dCBlbGVtZW50LiBUaGUgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWRgLFxyXG4gICAgICAgICAgaW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgaW5wdXQgZWxlbWVudHMgYW5kIHJlbW92ZSBhdHRhY2hlZCBsaXN0ZW5lcnNcclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG5cclxuICAgIGxldCBpbnB1dCwgcGFyZW50LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBwYXJlbnQgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHBhcmVudENsYXNzID0gcGFyZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgaWYgKHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ3RleHRJbnB1dE1hc2tfX3dyYXAnKSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW53cmFwKHBhcmVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSB0ZXh0IG1hc2tpbmcgaW5wdXQgd3JhcHBlclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgaW5wdXQgZWxlbWVudFxyXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNXcmFwcGVkIHdoZW4gdHJ1ZSB0aGUgaW5wdXQgaXMgYWxyZWFkeSB3cmFwcGVkIGFuZCB3ZSBuZWVkIHRvIGFkZCB3aGF0IGlzXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyBvbmx5XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7SFRNTFNwYW5FbGVtZW50fSB0aGUgd3JhcCBlbGVtZW50XHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3dyYXAoaW5wdXQsIGlzV3JhcHBlZCkge1xyXG4gICAgY29uc3QgaW5wdXRJZCA9IGlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSxcclxuICAgICAgaW5wdXROYW1lID0gaW5wdXQuZ2V0QXR0cmlidXRlKCduYW1lJyksXHJcbiAgICAgIG1hc2sgPSBpbnB1dC5kYXRhc2V0Lm1hc2sgfHwgJycsXHJcbiAgICAgIG9yaWdpbmFsUGF0dGVybiA9IGlucHV0LnBhdHRlcm4sXHJcbiAgICAgIGRlZmF1bHRQYXR0ZXJuID0gZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2sobWFzayksXHJcbiAgICAgIHBhdHRlcm4gPSBvcmlnaW5hbFBhdHRlcm4gfHwgZGVmYXVsdFBhdHRlcm5cclxuXHJcbiAgICBsZXQgd3JhcCA9IG51bGwsXHJcbiAgICAgIHVubWFza0lucHV0ID0gbnVsbFxyXG5cclxuICAgIGlmICghaXNXcmFwcGVkKSB7XHJcbiAgICAgIHdyYXAgPSB0aGlzLm9wdGlvbnMuZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gICAgICB1bm1hc2tJbnB1dCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSAvLyBoaWRkZW4gaW5wdXQgd2l0aCB0aGUgdW5tYXNrZWQgdmFsdWVzIGZvciBmb3Jtc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd3JhcCA9IGlucHV0LnBhcmVudE5vZGVcclxuICAgICAgdW5tYXNrSW5wdXQgPSB3cmFwLnF1ZXJ5U2VsZWN0b3IoJy50ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25maWd1cmUgdGhlIGFjdHVhbCBpbnB1dFxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlucHV0LnZhbHVlID0gbWFza0lmTm90TWFza2VkKGlucHV0LnZhbHVlLCBtYXNrKVxyXG4gICAgaW5wdXQucGF0dGVybiA9IHBhdHRlcm5cclxuICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ3RleHRJbnB1dE1hc2tfX3RleHRJbnB1dCcpXHJcbiAgICBpbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXHJcbiAgICBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2soaW5wdXQudmFsdWUsIG1hc2spXHJcbiAgICBpZiAob3JpZ2luYWxQYXR0ZXJuICYmIG9yaWdpbmFsUGF0dGVybiAhPT0gZGVmYXVsdFBhdHRlcm4pIHtcclxuICAgICAgaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm4gPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgaWYgKCEoaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpIHx8IGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZScpKSkge1xyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9vbkZvY3VzKVxyXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25Gb2N1cylcclxuICAgICAgfVxyXG4gICAgICBpbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwLCBpbnB1dCkgLy8gbW92ZSB0aGUgaW5wdXQgb3V0c2lkZSB0aGUgd3JhcHBlclxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl92YWxpZGF0ZUlucHV0KGlucHV0KSkge1xyXG4gICAgICB0aGlzLl9fZmlyZU9uVXBkYXRlKGlucHV0LnZhbHVlLCBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgdW5tYXNrZWQgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHVubWFza0lucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpXHJcbiAgICB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuICAgIHVubWFza0lucHV0LmNsYXNzTGlzdC5hZGQoJ3RleHRJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgdW5tYXNrSW5wdXQudmFsdWUgPSBpbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIGlmIChpbnB1dElkKSB1bm1hc2tJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgYCR7aW5wdXRJZH0tdW5tYXNrZWRgKVxyXG4gICAgaWYgKGlucHV0TmFtZSkgdW5tYXNrSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7aW5wdXROYW1lfS11bm1hc2tlZGApXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgLy8gY29uZmlndXJlIHRoZSB3cmFwcGVyXHJcbiAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdjbGFzcycsICd0ZXh0SW5wdXRNYXNrX193cmFwJylcclxuICAgICAgd3JhcC5hcHBlbmRDaGlsZCh1bm1hc2tJbnB1dClcclxuICAgICAgd3JhcC5hcHBlbmRDaGlsZChpbnB1dClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd3JhcFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW53cmFwIHRoZSBtYXNrZWQgaW5wdXQgYW5kIHJlbW92ZSB0aGUgdmFsdWUgY2hhbmdlZCBsaXN0ZW5lclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MU3BhbkVsZW1lbnR9IHRleHRJbnB1dCB0aGUgd3JhcHBlciBzcGFuIGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3Vud3JhcCh0ZXh0SW5wdXQpIHtcclxuICAgIHRleHRJbnB1dC5yZW1vdmVDaGlsZChcclxuICAgICAgdGV4dElucHV0LnF1ZXJ5U2VsZWN0b3IoJy50ZXh0SW5wdXRNYXNrX191bm1hc2tlZElucHV0JylcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHRleHRJbnB1dC5xdWVyeVNlbGVjdG9yKCcudGV4dElucHV0TWFza19fdGV4dElucHV0JylcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25LZXlzdHJva2UpXHJcbiAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX29uS2V5c3Ryb2tlKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLl9vbktleXN0cm9rZSlcclxuICAgIGlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCB0aGlzLl9vbkZvY3VzKVxyXG4gICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkZvY3VzKVxyXG4gICAgZGVsZXRlIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG4gICAgaWYgKCFpbnB1dC5kYXRhc2V0LmlzQ3VzdG9tUGF0dGVybikge1xyXG4gICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3BhdHRlcm4nKVxyXG4gICAgICBkZWxldGUgaW5wdXQuZGF0YXNldC5pc0N1c3RvbVBhdHRlcm5cclxuICAgIH1cclxuXHJcbiAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG5cclxuICAgIHRleHRJbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnB1dCwgdGV4dElucHV0KVxyXG4gICAgdGV4dElucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dElucHV0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGV2ZXJ5IGtleXN0cm9rZSBvbiB0aGUgaW5wdXQgYW5kIHVwZGF0ZSB0aGUgbWFza2VkIGFuZCB0aGUgdW5tYXNrZWQgdmFsdWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfb25LZXlzdHJva2UoZSkge1xyXG4gICAgaWYgKGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5IHx8IGUubWV0YUtleSkgcmV0dXJuXHJcbiAgICBpZihlLmtleUNvZGUgIT09IDEzKSBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIFxyXG4gICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCxcclxuICAgICAgbWFzayA9IGlucHV0LmRhdGFzZXQubWFzayB8fCB0aGlzLm9wdGlvbnMubWFzayxcclxuICAgICAgZXZlbnRUeXBlID0gZS50eXBlXHJcblxyXG4gICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcclxuXHJcbiAgICBsZXQgdmFsdWUgPSBpbnB1dC52YWx1ZSxcclxuICAgICAga2V5Q29kZSA9IGUua2V5Q29kZSxcclxuICAgICAga2V5Q29udGVudCA9IGUua2V5IHx8IGUuY29kZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpLFxyXG4gICAgICBrZXkgPSBrZXlDb250ZW50ID8gKGtleUNvbnRlbnQubGVuZ3RoID4gMSA/ICcnIDoga2V5Q29udGVudCkgOiAnJyxcclxuICAgICAgaW5zZXJ0UG9zaXRpb24gPSBmaW5kQ2FyZXRQb3NpdGlvbih2YWx1ZSwgbWFzayksXHJcbiAgICAgIG5ld1ZhbHVlLFxyXG4gICAgICB1bm1hc2tlZFZhbHVlLFxyXG4gICAgICBtYXNrRXJyb3IgPSBmYWxzZVxyXG5cclxuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3Bhc3RlJzpcclxuICAgICAgICBuZXdWYWx1ZSA9IG1hc2tJZk5vdE1hc2tlZChcclxuICAgICAgICAgIChlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBib2FyZERhdGEpLmdldERhdGEoJ1RleHQnKSxcclxuICAgICAgICAgIG1hc2tcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAna2V5dXAnOlxyXG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWVcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdrZXlwcmVzcyc6XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydFxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCAhPT0gaW5zZXJ0UG9zaXRpb24pIGluc2VydFBvc2l0aW9uID0gc2VsZWN0aW9uU3RhcnRcclxuXHJcbiAgICAgICAgbmV3VmFsdWUgPVxyXG4gICAgICAgICAgdmFsdWUuc3Vic3RyKDAsIGluc2VydFBvc2l0aW9uKSArIGtleSArIHZhbHVlLnN1YnN0cihpbnNlcnRQb3NpdGlvbilcclxuICAgICAgICBicmVha1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXNrZWRWYWx1ZSA9IHVubWFzayhuZXdWYWx1ZSwgbWFzaylcclxuXHJcbiAgICBpZiAoWzM1LCAzNiwgMzcsIDM4LCAzOSwgNDBdLmluZGV4T2Yoa2V5Q29kZSkgPT09IC0xKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaW5wdXQudmFsdWUgPSBTdHJpbmdNYXNrLm1hc2sodW5tYXNrZWRWYWx1ZSwgbWFzaywgZmFsc2UpXHJcbiAgICAgICAgaWYodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcclxuICAgICAgICAgIGlucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCA9IHVubWFza2VkVmFsdWVcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5kb2MucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgYCMke2lucHV0LmdldEF0dHJpYnV0ZSgnaWQnKX0tdW5tYXNrZWRgXHJcbiAgICAgICAgICApLnZhbHVlID0gdW5tYXNrZWRWYWx1ZVxyXG4gICAgICAgICAgdGhpcy5fX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgJ3N1Y2Nlc3MnKVxyXG4gICAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShpbnB1dC52YWx1ZSwgaW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkLCBpbnB1dClcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFza0Vycm9yID0gZmFsc2VcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnZXJyb3InKVxyXG4gICAgICAgIHRoaXMuX19maXJlT25JbnZhbGlkKGVycm9yLCBpbnB1dClcclxuICAgICAgICBtYXNrRXJyb3IgPSB0cnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3VwZGF0ZUNhcmV0UG9zaXRpb24oaW5wdXQsIG1hc2spXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFtYXNrRXJyb3IpIHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gZm9jdXMgZXZlbnRzIG9uIHRoZSBpbnB1dCBhbmQgdXBkYXRlIHRoZSBjYXJldCBwb3NpdGlvblxyXG4gICAqIHdoZXJlIHRoZSBuZXh0IGNoYXIgc2hvdWxkIGJlIGluc2VydGVkIGFjY29yZGluZyB0byB0aGUgbWFza1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGb2N1c0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX29uRm9jdXMoZSkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldFxyXG4gICAgY29uc3QgbWFzayA9IGlucHV0LmRhdGFzZXQubWFzayB8fCB0aGlzLm9wdGlvbnMubWFza1xyXG4gICAgdGhpcy5fdXBkYXRlQ2FyZXRQb3NpdGlvbihpbnB1dCwgbWFzaylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY2FyZXQgcG9zaXRpb24gb24gdGhlIGlucHV0IGJhc2VkIG9uIHRoZSBnaXZlbiBtYXNrXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGluc3RhbmNlXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIGJiaiBzdHJpbmdcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdXBkYXRlQ2FyZXRQb3NpdGlvbihpbnB1dCwgbWFzaykge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZmluZENhcmV0UG9zaXRpb24oaW5wdXQudmFsdWUsIG1hc2spXHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbilcclxuICAgIH0sIDApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGBjaGVja1ZhbGlkaXR5YCBvbiB0aGUgaW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdmFsaWQgLCBmYWxzZSBvdGhlcndpc2VcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IGlucHV0LmNoZWNrVmFsaWRpdHkoKVxyXG5cclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUoaW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9fYXBwbHlDc3NDbGFzc1N0YXRlKGlucHV0LCAnZXJyb3InKVxyXG4gICAgICB0aGlzLl9fZmlyZU9uSW52YWxpZChpbnB1dC52YWxpZGF0aW9uTWVzc2FnZSwgaW5wdXQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzVmFsaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19maXJlT25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uVXBkYXRlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZSh2YWx1ZU1hc2tlZCwgdmFsdWVVbm1hc2tlZCwgaW5wdXQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uSW52YWxpZChlcnJvciwgaW5wdXQpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5vbkludmFsaWQoZXJyb3IsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfX2FwcGx5Q3NzQ2xhc3NTdGF0ZShpbnB1dCwgc3RhdGUpIHtcclxuICAgIGlmIChpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHwgaW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XHJcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXRcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRJbnB1dC9UZXh0SW5wdXQuanMiLCIvKlxyXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1pbnB1dC1tYXNraW5nIGxpYi5cclxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxyXG4gKlxyXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxyXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cclxuICovXHJcblxyXG5pbXBvcnQgU3RyaW5nTWFzayBmcm9tICdiYmotbWFza3Mvc3JjL1N0cmluZ01hc2snXHJcblxyXG5jb25zdCBTVVBQT1JURURfTUFTS1MgPSBbJ1gnLCAnYScsICdBJywgJzAnLCAneicsICdaJywgJ1UnXVxyXG4vKipcclxuICogV2hlbiB0cnVlICwgdGhlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyBVbmljb2RlIFByb3BlcnR5IEVzY2FwZXNcclxuICogb3RoZXJ3aXNlIGl0IGlzIGZhbHNlIFxyXG4gKiBcclxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXJlZ2V4cC11bmljb2RlLXByb3BlcnR5LWVzY2FwZXN9XHJcbiAqL1xyXG5sZXQgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSBmYWxzZVxyXG50cnkge1xyXG4gIGV2YWwoJy9cXFxccHtMfS91JylcclxuICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA9IHRydWVcclxufSBjYXRjaCAoZXJyKSB7XHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQgPSBmYWxzZVxyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG1hc2tlZCB3aXRoIHRoZSBnaXZlbiBtYXNrIG9yIG5vdFxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgbWFza2VkIG9yIHVubWFza2VkIHZhbHVlXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBhIGJiaiBtYXNrXHJcbiAqXHJcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiB0aGUgdmFsdWUgaXMgbWFza2VkIHdpdGggZ2l2ZW4gbWFzayAsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuY29uc3QgaXNNYXNrZWRWYWx1ZSA9ICh2YWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgaXNNYXNrZWRWYWx1ZS5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke3ZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIWlzTWFza2VkVmFsdWUuX19DQUNIRV9fW2NhY2hlS2V5XSkge1xyXG4gICAgY29uc3QgdW5tYXNrZWRWYWx1ZSA9IHVubWFzayh2YWx1ZSwgbWFzaylcclxuICAgIGlzTWFza2VkVmFsdWUuX19DQUNIRV9fW2NhY2hlS2V5XSA9XHJcbiAgICAgIHZhbHVlID09PSBTdHJpbmdNYXNrLm1hc2sodW5tYXNrZWRWYWx1ZSwgbWFzaylcclxuICB9XHJcblxyXG4gIHJldHVybiBpc01hc2tlZFZhbHVlLl9fQ0FDSEVfX1tjYWNoZUtleV1cclxufVxyXG5cclxuLyoqXHJcbiAqIE1hc2sgdGhlIGdpdmVuIHZhbHVlIHdpdGggdGhlIGdpdmVuIG1hc2sgaW4gY2FzZSB0aGUgdmFsdWUgaXMgbm90IGFscmVhZHkgbWFza2VkIHdpdGggdGhlXHJcbiAqIGdpdmVuIG1hc2tcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIG1hc2tlZCBvciB1bm1hc2tlZCB2YWx1ZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgYSBiYmogbWFza1xyXG4gKlxyXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGEgbWFza2VkIHZhbHVlXHJcbiAqL1xyXG5jb25zdCBtYXNrSWZOb3RNYXNrZWQgPSAodmFsdWUsIG1hc2spID0+IHtcclxuICBpZiAodHlwZW9mIG1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX18gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fID0ge31cclxuICB9XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7dmFsdWV9LSR7bWFza31gXHJcblxyXG4gIGlmICghbWFza0lmTm90TWFza2VkLl9fQ0FDSEVfX1tjYWNoZUtleV0pIHtcclxuICAgIGlmIChpc01hc2tlZFZhbHVlKHZhbHVlLCBtYXNrKSkge1xyXG4gICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IHZhbHVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIG1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldID0gU3RyaW5nTWFzay5tYXNrKFxyXG4gICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICBtYXNrLFxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgICApXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBtYXNrSWZOb3RNYXNrZWQuX19DQUNIRV9fW2NhY2hlS2V5XSA9IFN0cmluZ01hc2subWFzaygnJywgbWFzaylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1hc2tJZk5vdE1hc2tlZC5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBhIHJlZ2V4IHBhdHRlciBiYXNlZCBvbiB0aGUgZ2l2ZSB0YXNrXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrICBiYmogc3RyaW5nIG1hc2tcclxuICpcclxuICogQHJldHVybiB7U3RyaW5nfSByZWdleCBmb3IgdGhlIGdpdmUgbWFza1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2sgPSBtYXNrID0+IHtcclxuICBpZiAodHlwZW9mIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IG1hc2tcclxuXHJcbiAgaWYgKCFnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzay5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBjb25zdCBtYXNrQXNBcnJ5ID0gbWFzay5zcGxpdCgnJylcclxuICAgIGxldCByZWdleCA9ICcnXHJcbiAgICBtYXNrQXNBcnJ5LmZvckVhY2goYyA9PiB7XHJcbiAgICAgIHN3aXRjaCAoYykge1xyXG4gICAgICAgIGNhc2UgJ1gnOlxyXG4gICAgICAgICAgcmVnZXggKz0gJyhbXiAtfl0pJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdhJzpcclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIC8vIGh0dHBzOi8vbW90aGVyZWZmLmluL3JlZ2V4cHUjaW5wdXQ9dmFyK3JlZ2V4KyUzRCsvJTVDcCU3QkwlN0QvdSUzQiZ1bmljb2RlUHJvcGVydHlFc2NhcGU9MVxyXG4gICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTUwMDMzL3JlZ3VsYXItZXhwcmVzc2lvbi10by1tYXRjaC1ub24tYXNjaWktY2hhcmFjdGVycyNhbnN3ZXItNDg5MDI3NjVcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJ1xcXFxwe0x9J1xyXG4gICAgICAgICAgICA6ICcoKD86W0EtWmEtelxceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEJEXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1NC1cXHUwRDU2XFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4Ni1cXHUwRThBXFx1MEU4Qy1cXHUwRUEzXFx1MEVBNVxcdTBFQTctXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4ODRcXHUxODg3LVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZFRlxcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0JGXFx1QTdDMi1cXHVBN0M2XFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2N1xcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0MFxcdURGNDItXFx1REY0OVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRl18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURGMDAtXFx1REYxQ1xcdURGMjdcXHVERjMwLVxcdURGNDVcXHVERkUwLVxcdURGRjZdfFxcdUQ4MDRbXFx1REMwMy1cXHVEQzM3XFx1REM4My1cXHVEQ0FGXFx1RENEMC1cXHVEQ0U4XFx1REQwMy1cXHVERDI2XFx1REQ0NFxcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1RlxcdURDODAtXFx1RENBRlxcdURDQzRcXHVEQ0M1XFx1RENDN1xcdUREODAtXFx1RERBRVxcdURERDgtXFx1REREQlxcdURFMDAtXFx1REUyRlxcdURFNDRcXHVERTgwLVxcdURFQUFcXHVERUI4XFx1REYwMC1cXHVERjFBXXxcXHVEODA2W1xcdURDMDAtXFx1REMyQlxcdURDQTAtXFx1RENERlxcdURDRkZcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMl18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REM4MC1cXHVERDQzXXxbXFx1RDgwQ1xcdUQ4MUMtXFx1RDgyMFxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OV1bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REVEMC1cXHVERUVEXFx1REYwMC1cXHVERjJGXFx1REY0MC1cXHVERjQzXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3RlxcdURGMDAtXFx1REY0QVxcdURGNTBcXHVERjkzLVxcdURGOUZcXHVERkUwXFx1REZFMVxcdURGRTNdfFxcdUQ4MjFbXFx1REMwMC1cXHVERkY3XXxcXHVEODIyW1xcdURDMDAtXFx1REVGMl18XFx1RDgyQ1tcXHVEQzAwLVxcdUREMUVcXHVERDUwLVxcdURENTJcXHVERDY0LVxcdURENjdcXHVERDcwLVxcdURFRkJdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4MzhbXFx1REQwMC1cXHVERDJDXFx1REQzNy1cXHVERDNEXFx1REQ0RVxcdURFQzAtXFx1REVFQl18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVERDAwLVxcdURENDNcXHVERDRCXXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERUQ2XFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzNFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURcXHVEQzIwLVxcdURGRkZdfFxcdUQ4NzNbXFx1REMwMC1cXHVERUExXFx1REVCMC1cXHVERkZGXXxcXHVEODdBW1xcdURDMDAtXFx1REZFMF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdKSknXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgcmVnZXggKz0gJyhbMC05XSknXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3onOlxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgcmVnZXggKz0gSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURURcclxuICAgICAgICAgICAgPyAnKFswLTldfFxcXFxwe0x9KSdcclxuICAgICAgICAgICAgOiAnKFswLTldfCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdVJzpcclxuICAgICAgICAgIHJlZ2V4ICs9IElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEXHJcbiAgICAgICAgICAgID8gJygoWzAtOV0pfChcXFxccyl8KFsuLC8jISQlXiYqOzp7fT0tX2B+KCldKXwoXFxcXHB7TH0pKSdcclxuICAgICAgICAgICAgOiAnKChbMC05XSl8KFxcXFxzKXwoWy4sLyMhJCVeJio7Ont9PS1fYH4oKV0pfCg/OltBLVphLXpcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDODAtXFx1MUM4OFxcdTFDOTAtXFx1MUNCQVxcdTFDQkQtXFx1MUNCRlxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGM1xcdTFDRjVcXHUxQ0Y2XFx1MUNGQVxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUZcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDNlxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QThGRVxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNjdcXHVBQjcwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERjAwLVxcdURGMUZcXHVERjJELVxcdURGNDBcXHVERjQyLVxcdURGNDlcXHVERjUwLVxcdURGNzVcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzNVxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJcXHVERDAwLVxcdUREMjNcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDNUZcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0EwLVxcdURDREZcXHVEQ0ZGXFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQwXFx1RERFMVxcdURERTNcXHVERTAwXFx1REUwQi1cXHVERTMyXFx1REUzQVxcdURFNTBcXHVERTVDLVxcdURFODlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMyRVxcdURDNDBcXHVEQzcyLVxcdURDOEZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzMFxcdURENDZcXHVERDYwLVxcdURENjVcXHVERDY3XFx1REQ2OFxcdURENkEtXFx1REQ4OVxcdUREOThcXHVERUUwLVxcdURFRjJdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzldW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNDAtXFx1REY0M1xcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERTQwLVxcdURFN0ZcXHVERjAwLVxcdURGNEFcXHVERjUwXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERUMwLVxcdURFRUJdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXSkpJ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmVnZXggKz0gYy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfX1tjYWNoZUtleV0gPSByZWdleFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGdlbmVyYXRlUGF0dGVybkZyb21NYXNrLl9fQ0FDSEVfX1tjYWNoZUtleV1cclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWFzayB0aGUgZ2l2ZW4gdmFsdWVcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2tlZFZhbHVlIG1hc2tlZCBzdHJpbmdcclxuICogQHBhcmFtIHtTdHJpbmd9IG1hc2sgIHRoZSB1c2VkIG1hc2sgdG8gcHJvZHVjZSB0aGUgbWFza2VkIHN0cmluZ1xyXG4gKi9cclxuY29uc3QgdW5tYXNrID0gKG1hc2tlZFZhbHVlLCBtYXNrKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiB1bm1hc2suX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgdW5tYXNrLl9fQ0FDSEVfXyA9IHt9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWNoZUtleSA9IGAke21hc2tlZFZhbHVlfS0ke21hc2t9YFxyXG5cclxuICBpZiAoIXVubWFzay5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBjb25zdCBtYXNrQXNBcnJheSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBjb25zdCBtYXNrZWRWYWx1ZUFzQXJyYXkgPSBtYXNrZWRWYWx1ZS5zcGxpdCgnJylcclxuXHJcbiAgICBsZXQgdW5tYXNrZWQgPSAnJ1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gbWFza2VkVmFsdWVBc0FycmF5W2luZGV4XVxyXG4gICAgICBjb25zdCBtYXNrID0gbWFza0FzQXJyYXlbaW5kZXhdXHJcbiAgICAgIGNvbnN0IGVsSGFzTWFzayA9IFNVUFBPUlRFRF9NQVNLUy5pbmRleE9mKG1hc2spID4gLTFcclxuICAgICAgaWYgKGVsSGFzTWFzaykge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2sobWFzayksXHJcbiAgICAgICAgICBJU19VTklDT0RFX1BST1BFUlRZX1NVUFBPUlRFRCA/ICd1JyA6ICcnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGlmIChwYXR0ZXJuLnRlc3QoZWwpKSB1bm1hc2tlZCArPSBlbFxyXG4gICAgICAgIGVsc2UgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVubWFzay5fX0NBQ0hFX19bY2FjaGVLZXldID0gdW5tYXNrZWQudG9Mb2NhbGVMb3dlckNhc2UoKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVubWFzay5fX0NBQ0hFX19bY2FjaGVLZXldXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiB0aGUgbWFza2VkIHN0cmluZyAsIGZpbmQgdGhlIG5leHQgY2FyZXQgcG9zaXRpb24gZGVwZW5kaW5nIG9uXHJcbiAqIHdoYXQgaXMgbWlzc2luZyB0byBjb21wbGV0ZSB0aGUgbWFza1xyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFza2VkVmFsdWUgbWFza2VkIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gbWFzayAgdGhlIHVzZWQgbWFzayB0byBwcm9kdWNlIHRoZSBtYXNrZWQgc3RyaW5nXHJcbiAqL1xyXG5jb25zdCBmaW5kQ2FyZXRQb3NpdGlvbiA9IChtYXNrZWRWYWx1ZSwgbWFzaykgPT4ge1xyXG4gIGlmICh0eXBlb2YgZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fID0ge31cclxuICB9XHJcblxyXG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7bWFza2VkVmFsdWV9LSR7bWFza31gXHJcbiAgaWYgKCFmaW5kQ2FyZXRQb3NpdGlvbi5fX0NBQ0hFX19bY2FjaGVLZXldKSB7XHJcbiAgICBjb25zdCBtYXNrQXNBcnJheSA9IG1hc2suc3BsaXQoJycpXHJcbiAgICBsZXQgbWFza2VkVmFsdWVBc0FycmF5ID0gbWFza2VkVmFsdWUuc3BsaXQoJycpXHJcbiAgICBpZiAobWFza2VkVmFsdWVBc0FycmF5Lmxlbmd0aCA8IG1hc2tBc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICBtYXNrZWRWYWx1ZUFzQXJyYXkgPSBtYXNrZWRWYWx1ZUFzQXJyYXkuY29uY2F0KFxyXG4gICAgICAgIG5ldyBBcnJheShtYXNrQXNBcnJheS5sZW5ndGggLSBtYXNrZWRWYWx1ZUFzQXJyYXkubGVuZ3RoKS5qb2luKCcgJykuc3BsaXQoJycpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9zaXRpb24gPSAtMVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hc2tBc0FycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbCA9IG1hc2tBc0FycmF5W2luZGV4XVxyXG4gICAgICBpZiAoZWwgIT09IG1hc2tlZFZhbHVlQXNBcnJheVtpbmRleF0pIHtcclxuICAgICAgICAvLyBpZiAobWFza2VkVmFsdWVBc0FycmF5W2luZGV4XSA9PT0gJyAnKSByZXR1cm4gaW5kZXhcclxuICAgICAgICBpZiAoU1VQUE9SVEVEX01BU0tTLmluZGV4T2YoZWwpID4gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5Gcm9tTWFzayhlbCksXHJcbiAgICAgICAgICAgIElTX1VOSUNPREVfUFJPUEVSVFlfU1VQUE9SVEVEID8gJ3UnIDogJydcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICBpZiAoIXBhdHRlcm4udGVzdChtYXNrZWRWYWx1ZUFzQXJyYXlbaW5kZXhdKSkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IGluZGV4XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmluZENhcmV0UG9zaXRpb24uX19DQUNIRV9fW2NhY2hlS2V5XSA9XHJcbiAgICAgIHBvc2l0aW9uIDwgMCA/IG1hc2tlZFZhbHVlQXNBcnJheS5sZW5ndGggOiBwb3NpdGlvblxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbmRDYXJldFBvc2l0aW9uLl9fQ0FDSEVfX1tjYWNoZUtleV1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBpc01hc2tlZFZhbHVlLFxyXG4gIG1hc2tJZk5vdE1hc2tlZCxcclxuICB1bm1hc2ssXHJcbiAgZmluZENhcmV0UG9zaXRpb24sXHJcbiAgZ2VuZXJhdGVQYXR0ZXJuRnJvbU1hc2ssXHJcbiAgSVNfVU5JQ09ERV9QUk9QRVJUWV9TVVBQT1JURUQsXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRJbnB1dC90b29scy5qcyIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWlucHV0LW1hc2tpbmcgbGliLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCBOdW1iZXJJbnB1dCBmcm9tICcuL051bWJlcklucHV0J1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTnVtYmVySW5wdXRcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlcklucHV0L2luZGV4LmpzIiwiLypcclxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtaW5wdXQtbWFza2luZyBsaWIuXHJcbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cclxuICpcclxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcclxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE51bWJlck1hc2sgZnJvbSAnYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrJ1xyXG5cclxuY29uc3QgY291bnREZWNpbWFscyA9IHZhbHVlID0+IHtcclxuICBpZiAodmFsdWUgJSAxICE9IDApIHtcclxuICAgIGNvbnN0IHNwbGl0ID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpXHJcbiAgICBpZiAoc3BsaXQubGVuZ3RoID09PSAyKSByZXR1cm4gc3BsaXRbMV0ubGVuZ3RoXHJcbiAgfVxyXG4gIHJldHVybiAwXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgYE51bWJlcklucHV0YCB3aWxsIHdyYXAgdGV4dCBpbnB1dHMgYW5kIGFwcGx5IHRoZSBnaXZlbiBbYmJqIE51bWJlciBtYXNrXShodHRwczovL2dpdGh1Yi5jb20vQmFzaXNIdWIvYmJqLW1hc2tzI251bWJlci1tYXNrcylcclxuICpcclxuICogKipPcHRpb25zKipcclxuICpcclxuICogX09wdGlvbnMgY2FuIGJlIHBhc3NlZCB2aWEgZGF0YSBhdHRyaWJ1dGVzIC4gRm9yIGRhdGEgYXR0cmlidXRlcywgYXBwZW5kIHRoZSBvcHRpb24gbmFtZSB0byBkYXRhLSwgYXMgaW4gZGF0YS1tYXNrX1xyXG4gKlxyXG4gKiB8IE9wdGlvbiAgICB8IERlZmF1bHQgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XHJcbiAqIHwgbWFzayB8ICAgICAgICAgfCBUaGUgYmJqIG51bWJlciBtYXNrIEBzZWUgW0JCaiBOdW1iZXIgTWFza3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9CYXNpc0h1Yi9iYmotbWFza3MjbnVtYmVyLW1hc2tzKSB8XHJcbiAqIHwgbWluIHwgICAgICAgICB8IFRoZSBtYXhpbXVtIHZhbHVlIHRvIGFjY2VwdCBmb3IgdGhpcyBpbnB1dHxcclxuICogfCBtYXggfCAgICAgICAgIHwgVGhlIG1pbmltdW0gdmFsdWUgdG8gYWNjZXB0IGZvciB0aGlzIGlucHV0fFxyXG4gKiB8IHN0ZXAgfCAgICAgICAgIHwgQSBzdGVwcGluZyBpbnRlcnZhbCB0byB1c2Ugd2hlbiB1c2luZyB1cCBhbmQgZG93biBhcnJvd3MgdG8gYWRqdXN0IHRoZSB2YWx1ZSwgYXMgd2VsbCBhcyBmb3IgdmFsaWRhdGlvbnxcclxuICogfGdyb3VwaW5nLXNlcGFyYXRvciB8ICwgfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcgc2VwYXJhdG9yIHxcclxuICogfGRlY2ltYWwtc2VwYXJhdG9yIHwgLiB8IGEgY2hhciB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSBkZWNpbWFsIHNlcGFyYXRvciB8XHJcbiAqIHxmb3JjZS10cmFpbGluZy16ZXJvcyB8IGZhbHNlIHwgQWZmZWN0cyB0aGUgb3V0cHV0IGJ5IHN3aXRjaGluZyB0aGUgd2F5IGEgbWFzayB3aXRoIFwiI1wiIGNoYXJhY3RlcnMgaW4gdGhlIHRyYWlsaW5nIHBvc2l0aW9ucyBpcyBmaWxsZWQuIGZvciBleGFtcGxlLCB0aGUgZnVuY3Rpb24gTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIikgcmV0dXJucyAuMTAgaW5zdGVhZCBvZiAuMXxcclxuICpcclxuICogIDxicj5cclxuICpcclxuICogKipFeGFtcGxlIDoqKlxyXG4gKiBgYGBodG1sXHJcbiAqICA8aW5wdXQgY2xhc3M9XCJiYmotbnVtYmVyLW1hc2tlZFwiIG5hbWU9XCJ0ZXN0XCIgaWQ9XCJ0ZXN0XCIgdmFsdWU9XCIxMjM0XCIgZGF0YS1tYXNrPVwiIyMsIyMwXCI+XHJcbiAqXHJcbiAqICA8c2NyaXB0PlxyXG4gKiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKGUpIHtcclxuICogICAgICBuZXcgQmFzaXMuSW5wdXRNYXNraW5nLk51bWJlcklucHV0KHtcclxuICpcclxuICogICAgICAgICAvLyBAcGFyYW0ge1N0cmluZ30gdmFsdWVNYXNrZWQgIG1hc2tlZCB2YWx1ZVxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVVubWFza2VkICBvcmlnaW5hbCB2YWx1ZVxyXG4gKiAgICAgICAgIC8vIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgdGhlIGFjdHVhbCBpbnB1dCBpbnN0YW5jZVxyXG4gKiAgICAgICAgIG9uVXBkYXRlOiAodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0LCBpc0FwcGxpZWQsIGlzSW5pdGlhbCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH0sXHJcbiAqXHJcbiAqICAgICAgICAgLy8gQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBlcnJvciBsYXN0IG9jY3VycmVkIGVycm9yLiBjb3VsZCBiZSBtYXNrIGVycm9yIG9yIHZhbGlkYXRpb24gZXJyb3JcclxuICogICAgICAgICAvLyBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICogICAgICAgICBvbkludmFsaWQ6IChlcnIgLCBpbnB1dCkgPT4ge1xyXG4gKiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gKiAgICAgICAgIH1cclxuICogICAgICB9KVxyXG4gKiAgICB9KVxyXG4gKiAgPC9zY3JpcHQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxyXG4gKi9cclxuY2xhc3MgTnVtYmVySW5wdXQge1xyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdCBuZXcgTnVtYmVySW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7P09iamVjdH0gb3B0aW9ucyAtIFRoZSBpbnB1dCBvcHRpb25zLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5lbGVtZW50cz1cIi5iYmotbnVtYmVyLW1hc2tlZFwiXSAtIFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBub2RlIHRvIHVzZVxyXG4gICAqIEBwYXJhbSB7SFRNTERvY3VtZW50fSBbb3B0aW9ucy5kb2N1bWVudD1kb2N1bWVudF0gLSBEb2N1bWVudCBpbnN0YW5jZSB0byB1c2VcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NFcnJvcj1cImJiai1tYXNrLWVycm9yXCJdIC0gQSBjc3MgY2xhc3MgdG8gYXR0YWNoIHRvIHRoZSBpbnB1dCB3aGVuIGl0IGlzIGludmFsaWRcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzPVwiYmJqLW1hc2stc3VjY2Vzc1wiXSAtIEEgY3NzIGNsYXNzIHRvIGF0dGFjaCB0byB0aGUgaW5wdXQgd2hlbiBpdCBpcyB2YWxpZCBhZnRlciB0aGUgdXNlciBpbnRlcmFjdGlvblxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uVXBkYXRlPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIG5ldyBtYXNrZWQgdmFsdWUgaXMgc2V0XHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25JbnZhbGlkPW51bGxdIC0gQSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gdGhlIGlucHV0IG9yIHRoZSBtYXNrIGlzIGludmFsaWRcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgLi4ue1xyXG4gICAgICAgIGVsZW1lbnRzOiAnLmJiai1udW1iZXItbWFza2VkJyxcclxuICAgICAgICBkb2M6IGRvY3VtZW50LFxyXG4gICAgICAgIGNzc0NsYXNzRXJyb3I6ICdiYmotbWFzay1lcnJvcicsXHJcbiAgICAgICAgY3NzQ2xhc3NTdWNjZXNzOiAnYmJqLW1hc2stc3VjY2VzcycsXHJcbiAgICAgICAgb25VcGRhdGU6IG51bGwsXHJcbiAgICAgICAgb25JbnZhbGlkOiBudWxsLFxyXG4gICAgICB9LFxyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlciA9IHRoaXMuX2FjdHVhbElucHV0SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlciA9IHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyLmJpbmQodGhpcylcclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBjb21wb25lbnQgYW5kIHdyYXAgdGhlIGlucHV0IGVsZW1lbnRzIGZvciBtYXNraW5nIGluIGNhc2VcclxuICAgKiB0aGV5IGFyZSBub3Qgd3JhcHBlZCB5ZXRcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG4gICAgbGV0IGlucHV0LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgcGFyZW50Q2xhc3MgPSBpbnB1dC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgICBpZiAoIWlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBgQkJqTWFza2luZzogSW5wdXQgaGFzIG5vIElELiBXaXRob3V0IGFuIElEIHRoZSBpbnB1dCBjYW5ub3QgYmUgbWFza2VkYCxcclxuICAgICAgICAgICAgaW5wdXRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSBkb24ndCBpbml0aWFsaXplIHRoZSBpbnB1dCdzIHdyYXAgdHdpY2VcclxuICAgICAgICBjb25zdCBpc1dyYXBwZWQgPVxyXG4gICAgICAgICAgcGFyZW50Q2xhc3MgJiYgcGFyZW50Q2xhc3MuaW5kZXhPZignbnVtYmVySW5wdXRNYXNrX193cmFwJykgPiAtMVxyXG4gICAgICAgIHRoaXMuX3dyYXAoaW5wdXQsIGlzV3JhcHBlZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgQkJqTWFza2luZzogSW52YWxpZCBpbnB1dCBlbGVtZW50LiBUaGUgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWRgLFxyXG4gICAgICAgICAgaW5wdXRcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVud3JhcCB0aGUgaW5wdXQgZWxlbWVudHMgYW5kIHJlbW92ZSBhdHRhY2hlZCBsaXN0ZW5lcnNcclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVsZW1lbnRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMub3B0aW9ucy5lbGVtZW50cylcclxuICAgICAgICA6IHRoaXMub3B0aW9ucy5lbGVtZW50c1xyXG5cclxuICAgIGxldCBpbnB1dCwgcGFyZW50LCBwYXJlbnRDbGFzc1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW5wdXQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBwYXJlbnQgPSBpbnB1dC5wYXJlbnROb2RlXHJcbiAgICAgIHBhcmVudENsYXNzID0gcGFyZW50LmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxyXG5cclxuICAgICAgaWYgKHBhcmVudENsYXNzICYmIHBhcmVudENsYXNzLmluZGV4T2YoJ251bWJlcklucHV0TWFza19fd3JhcCcpID4gLTEpIHtcclxuICAgICAgICB0aGlzLl91bndyYXAocGFyZW50KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgdGhlIG51bWJlciBtYXNraW5nIGlucHV0IHdyYXBwZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gYWN0dWFsSW5wdXQgdGhlIGlucHV0IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzV3JhcHBlZCB3aGVuIHRydWUgdGhlIGlucHV0IGlzIGFscmVhZHkgd3JhcHBlZCBhbmQgd2UgbmVlZCB0byBhZGQgd2hhdCBpc1xyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb25seVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0hUTUxTcGFuRWxlbWVudH0gd3JhcHBlciBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF93cmFwKGFjdHVhbElucHV0LCBpc1dyYXBwZWQpIHtcclxuICAgIGNvbnN0IGFjdHVhbElucHV0SWQgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgIGFjdHVhbElucHV0TmFtZSA9IGFjdHVhbElucHV0LmdldEF0dHJpYnV0ZSgnbmFtZScpLFxyXG4gICAgICBhY3R1YWxJbnB1dFN0ZXAgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnN0ZXAgfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNYXggPSBhY3R1YWxJbnB1dC5kYXRhc2V0Lm1heCB8fCBudWxsLFxyXG4gICAgICBhY3R1YWxJbnB1dE1pbiA9IGFjdHVhbElucHV0LmRhdGFzZXQubWluIHx8IG51bGwsXHJcbiAgICAgIGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3IgPVxyXG4gICAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZ3JvdXBpbmdTZXBhcmF0b3IgfHwgJywnLFxyXG4gICAgICBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJy4nLFxyXG4gICAgICBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvcyA9XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgfHwgbnVsbCxcclxuICAgICAgYWN0dWFsSW5wdXRNYXNrID0gYWN0dWFsSW5wdXQuZGF0YXNldC5tYXNrIHx8ICcnLFxyXG4gICAgICBhY3R1YWxJbnB1dENsYXNzZXMgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyksXHJcbiAgICAgIGFjdHVhbElucHV0UmVxdWlyZWQgPSBhY3R1YWxJbnB1dC5nZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJykgfHwgbnVsbFxyXG5cclxuICAgIGxldCB3cmFwID0gbnVsbCxcclxuICAgICAgdW5tYXNrZWRJbnB1dCA9IG51bGxcclxuXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICB3cmFwID0gdGhpcy5vcHRpb25zLmRvYy5jcmVhdGVFbGVtZW50KCdzcGFuJylcclxuICAgICAgdW5tYXNrZWRJbnB1dCA9IHRoaXMub3B0aW9ucy5kb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSAvLyBoaWRkZW4gaW5wdXQgd2l0aCB0aGUgdW5tYXNrZWQgdmFsdWVzIGZvciBmb3Jtc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd3JhcCA9IGFjdHVhbElucHV0LnBhcmVudE5vZGVcclxuICAgICAgdW5tYXNrZWRJbnB1dCA9IHdyYXAucXVlcnlTZWxlY3RvcignLm51bWJlcklucHV0TWFza19fdW5tYXNrZWRJbnB1dCcpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uZmlndXJlIHRoZSBhY3R1YWwgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoIWlzV3JhcHBlZCkge1xyXG4gICAgICBhY3R1YWxJbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwLCBhY3R1YWxJbnB1dCkgLy8gbW92ZSB0aGUgaW5wdXQgb3V0c2lkZSB0aGUgd3JhcHBlclxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIShcclxuICAgICAgICAgIGFjdHVhbElucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSB8fFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBhY3R1YWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgICAgICBhY3R1YWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgdGhpcy5fYWN0dWFsSW5wdXRIYW5kbGVyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkID0gYWN0dWFsSW5wdXQudmFsdWUgfHwgMFxyXG4gICAgYWN0dWFsSW5wdXQuZGF0YXNldC5ncm91cGluZ1NlcGFyYXRvciA9IGFjdHVhbElucHV0R3JvdXBpbmdTZXBhcmF0b3JcclxuICAgIGFjdHVhbElucHV0LmRhdGFzZXQuZGVjaW1hbFNlcGFyYXRvciA9IGFjdHVhbElucHV0RGVjaW1hbFNlcGFyYXRvclxyXG4gICAgYWN0dWFsSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MgPSBhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvc1xyXG4gICAgYWN0dWFsSW5wdXQudmFsdWUgPSBOdW1iZXJNYXNrLm1hc2soXHJcbiAgICAgIGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZCxcclxuICAgICAgYWN0dWFsSW5wdXRNYXNrLFxyXG4gICAgICBhY3R1YWxJbnB1dEdyb3VwaW5nU2VwYXJhdG9yLFxyXG4gICAgICBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3IsXHJcbiAgICAgIGFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zXHJcbiAgICApLnRyaW0oKVxyXG4gICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZChcclxuICAgICAgJ251bWJlcklucHV0TWFza19fdGV4dElucHV0JyxcclxuICAgICAgdGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2Vzc1xyXG4gICAgKVxyXG5cclxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgdW5tYXNrZWQgaW5wdXRcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHVubWFza2VkSW5wdXQudmFsdWUgPSBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWRcclxuICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBhY3R1YWxJbnB1dENsYXNzZXMpXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRJZClcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgYCR7YWN0dWFsSW5wdXRJZH0tdW5tYXNrZWRgKVxyXG4gICAgaWYgKGFjdHVhbElucHV0TmFtZSlcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBgJHthY3R1YWxJbnB1dE5hbWV9LXVubWFza2VkYClcclxuICAgIGlmIChhY3R1YWxJbnB1dFJlcXVpcmVkKSB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxyXG5cclxuICAgIGlmIChhY3R1YWxJbnB1dFN0ZXApIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdzdGVwJywgYWN0dWFsSW5wdXRTdGVwKVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRlY2ltYWxzID0gY291bnREZWNpbWFscyh1bm1hc2tlZElucHV0LnZhbHVlKVxyXG4gICAgICBsZXQgc3RlcCA9ICcxJ1xyXG4gICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XHJcbiAgICAgICAgc3RlcCA9IGAuJHtBcnJheShkZWNpbWFscykuam9pbignMCcpfTFgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdzdGVwJywgc3RlcClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0dWFsSW5wdXRNaW4pIHVubWFza2VkSW5wdXQuc2V0QXR0cmlidXRlKCdtaW4nLCBhY3R1YWxJbnB1dE1pbilcclxuICAgIGlmIChhY3R1YWxJbnB1dE1heCkgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ21heCcsIGFjdHVhbElucHV0TWF4KVxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmlucHV0SWQgPSBhY3R1YWxJbnB1dElkXHJcbiAgICB1bm1hc2tlZElucHV0LmRhdGFzZXQubWFzayA9IGFjdHVhbElucHV0TWFza1xyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yID0gYWN0dWFsSW5wdXRHcm91cGluZ1NlcGFyYXRvclxyXG4gICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IgPSBhY3R1YWxJbnB1dERlY2ltYWxTZXBhcmF0b3JcclxuICAgIGlmIChhY3R1YWxJbnB1dEZvcmNlVHJhaWxpbmdaZXJvcylcclxuICAgICAgdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmZvcmNlVHJhaWxpbmdaZXJvcyA9IGFjdHVhbElucHV0Rm9yY2VUcmFpbGluZ1plcm9zXHJcblxyXG4gICAgaWYgKCFpc1dyYXBwZWQpIHtcclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QuYWRkKCdudW1iZXJJbnB1dE1hc2tfX3VubWFza2VkSW5wdXQnKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl91bm1hc2tlZElucHV0SGFuZGxlcilcclxuICAgICAgdW5tYXNrZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3VubWFza2VkSW5wdXRIYW5kbGVyKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcblxyXG4gICAgICAvLyBjb25maWd1cmUgdGhlIHdyYXBwZXJcclxuICAgICAgd3JhcC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ251bWJlcklucHV0TWFza19fd3JhcCcpXHJcbiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQodW5tYXNrZWRJbnB1dClcclxuICAgICAgd3JhcC5hcHBlbmRDaGlsZChhY3R1YWxJbnB1dClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTmFOKE51bWJlcihhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQpKSkge1xyXG4gICAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dCh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dCkpIHtcclxuICAgICAgICB0aGlzLl9fZmlyZU9uVXBkYXRlKFxyXG4gICAgICAgICAgYWN0dWFsSW5wdXQudmFsdWUsXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQsXHJcbiAgICAgICAgICBhY3R1YWxJbnB1dFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd3JhcFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW53cmFwIHRoZSBtYXNrZWQgaW5wdXQgYW5kIHJlbW92ZSB0aGUgdmFsdWUgY2hhbmdlZCBsaXN0ZW5lclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIVE1MU3BhbkVsZW1lbnR9IHdyYXBwZXIgdGhlIHdyYXBwZXIgc3BhbiBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqL1xyXG4gIF91bndyYXAod3JhcHBlcikge1xyXG4gICAgY29uc3QgYWN0dWFsSW5wdXQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5udW1iZXJJbnB1dE1hc2tfX3RleHRJbnB1dCcpLFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuaWQsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoYCMke2FjdHVhbElucHV0SWR9LXVubWFza2VkYClcclxuXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcbiAgICB1bm1hc2tlZElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5fdW5tYXNrZWRJbnB1dEhhbmRsZXIpXHJcblxyXG4gICAgd3JhcHBlci5yZW1vdmVDaGlsZCh1bm1hc2tlZElucHV0KVxyXG5cclxuICAgIGFjdHVhbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fYWN0dWFsSW5wdXRIYW5kbGVyKVxyXG4gICAgYWN0dWFsSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIHRoaXMuX2FjdHVhbElucHV0SGFuZGxlcilcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ251bWJlcklucHV0TWFza19fdGV4dElucHV0JylcclxuICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcbiAgICBkZWxldGUgYWN0dWFsSW5wdXQuZGF0YXNldC52YWx1ZVVubWFza2VkXHJcblxyXG4gICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhY3R1YWxJbnB1dCwgd3JhcHBlcilcclxuICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGNsaWNrIGFuZCBmb2N1c2luIGV2ZW50IG9uIHRoZSBhY3R1YWwgaW5wdXQgYW5kIHRvZ2dsZSB0aGUgbnVtYmVyIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX2FjdHVhbElucHV0SGFuZGxlcihlKSB7XHJcbiAgICBjb25zdCBhY3R1YWxJbnB1dCA9IGUudGFyZ2V0LFxyXG4gICAgICBhY3R1YWxJbnB1dElkID0gYWN0dWFsSW5wdXQuaWQsXHJcbiAgICAgIHVubWFza2VkSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgYCMke2FjdHVhbElucHV0SWR9LXVubWFza2VkYFxyXG4gICAgICApXHJcblxyXG4gICAgYWN0dWFsSW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG5cclxuICAgIHVubWFza2VkSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXHJcbiAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdudW1iZXInKVxyXG4gICAgdGhpcy5fdmFsaWRhdGVJbnB1dCh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dClcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB1bm1hc2tlZElucHV0LmZvY3VzKClcclxuICAgICAgY29uc3QgbGVuZ3RoID0gU3RyaW5nKHVubWFza2VkSW5wdXQudmFsdWUpLmxlbmd0aFxyXG4gICAgICB1bm1hc2tlZElucHV0LnR5cGUgPSAndGV4dCdcclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsZW5ndGgsIGxlbmd0aClcclxuICAgICAgdW5tYXNrZWRJbnB1dC50eXBlID0gJ251bWJlcidcclxuICAgIH0sIDApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gdGhlIHVubWFza2VkIGlucHV0IGtleWRvd24gYW5kIGZvY3Vzb3V0IGV2ZW50cyBhbmQgY2hlY2tcclxuICAgKiBpZiB0aGUgaW5wdXQgdmFsdWUgY2FuIGJlIG1hc2tlZCBvciBub3RcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKi9cclxuICBfdW5tYXNrZWRJbnB1dEhhbmRsZXIoZSkge1xyXG4gICAgY29uc3QgdW5tYXNrZWRJbnB1dCA9IGUudGFyZ2V0LFxyXG4gICAgICBrZXlDb2RlID0gZS5rZXlDb2RlLFxyXG4gICAgICBtYXNrID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lm1hc2ssXHJcbiAgICAgIGdyb3VwaW5nU2VwYXJhdG9yID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yLFxyXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yID0gdW5tYXNrZWRJbnB1dC5kYXRhc2V0LmRlY2ltYWxTZXBhcmF0b3IsXHJcbiAgICAgIGZvcmNlVHJhaWxpbmdaZXJvcyA9IHVubWFza2VkSW5wdXQuZGF0YXNldC5mb3JjZVRyYWlsaW5nWmVyb3MsXHJcbiAgICAgIGFjdHVhbElucHV0SWQgPSB1bm1hc2tlZElucHV0LmRhdGFzZXQuaW5wdXRJZCxcclxuICAgICAgYWN0dWFsSW5wdXQgPSB0aGlzLm9wdGlvbnMuZG9jLnF1ZXJ5U2VsZWN0b3IoYCMke2FjdHVhbElucHV0SWR9YClcclxuXHJcbiAgICBsZXQgcmVzdG9yZSA9IGZhbHNlLFxyXG4gICAgICBhcHBseSA9IGZhbHNlLFxyXG4gICAgICBtYXNrZWRWYWx1ZSA9IGZhbHNlLFxyXG4gICAgICBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dCh1bm1hc2tlZElucHV0LCBhY3R1YWxJbnB1dClcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBtYXNrZWRWYWx1ZSA9IE51bWJlck1hc2subWFzayhcclxuICAgICAgICB1bm1hc2tlZElucHV0LnZhbHVlIHx8IDAsXHJcbiAgICAgICAgbWFzayxcclxuICAgICAgICBncm91cGluZ1NlcGFyYXRvcixcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yLFxyXG4gICAgICAgIGZvcmNlVHJhaWxpbmdaZXJvcyxcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApLnRyaW0oKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBtYXNrZWRWYWx1ZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdlcnJvcicpXHJcbiAgICAgIHRoaXMuX19maXJlT25JbnZhbGlkKGUsIGFjdHVhbElucHV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJlc3RvcmUgPSBbMTMsIDI3XS5pbmRleE9mKGtleUNvZGUpID4gLTEgfHwgZS50eXBlID09PSAnZm9jdXNvdXQnXHJcbiAgICBhcHBseSA9IG1hc2tlZFZhbHVlICYmIGlzVmFsaWRcclxuXHJcbiAgICBpZiAocmVzdG9yZSkge1xyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzRXJyb3IpXHJcbiAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgdW5tYXNrZWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKVxyXG4gICAgICB1bm1hc2tlZElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKVxyXG5cclxuICAgICAgYWN0dWFsSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXHJcbiAgICAgIGFjdHVhbElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0JylcclxuXHJcbiAgICAgIGFjdHVhbElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuXHJcbiAgICAgIGlmIChhcHBseSkge1xyXG4gICAgICAgIGFjdHVhbElucHV0LnZhbHVlID0gbWFza2VkVmFsdWVcclxuICAgICAgICBhY3R1YWxJbnB1dC5kYXRhc2V0LnZhbHVlVW5tYXNrZWQgPSB1bm1hc2tlZElucHV0LnZhbHVlXHJcbiAgICAgICAgdGhpcy5fX2ZpcmVPblVwZGF0ZShtYXNrZWRWYWx1ZSwgdW5tYXNrZWRJbnB1dC52YWx1ZSwgYWN0dWFsSW5wdXQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5tYXNrZWRJbnB1dC52YWx1ZSA9IGFjdHVhbElucHV0LmRhdGFzZXQudmFsdWVVbm1hc2tlZFxyXG4gICAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdzdWNjZXNzJylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBgY2hlY2tWYWxpZGl0eWAgb24gdGhlIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IHVubWFza2VkSW5wdXRcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGFjdHVhbElucHV0XHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiBAcHJvdGVjdGVkXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5wdXQodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQpIHtcclxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxyXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIodW5tYXNrZWRJbnB1dC52YWx1ZSlcclxuICAgIGlmICh1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJyAmJiAhaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgIGNvbnN0IG1heCA9IHVubWFza2VkSW5wdXQuZ2V0QXR0cmlidXRlKCdtYXgnKVxyXG4gICAgICBjb25zdCBtaW4gPSB1bm1hc2tlZElucHV0LmdldEF0dHJpYnV0ZSgnbWluJylcclxuICAgICAgY29uc3Qgc3RlcCA9IHVubWFza2VkSW5wdXQuZ2V0QXR0cmlidXRlKCdzdGVwJylcclxuXHJcbiAgICAgIGlmIChtaW4pIGlzVmFsaWQgPSBpc1ZhbGlkICYmIHZhbHVlID49IE51bWJlcihtaW4pXHJcbiAgICAgIGlmIChtYXgpIGlzVmFsaWQgPSBpc1ZhbGlkICYmIHZhbHVlIDw9IE51bWJlcihtYXgpXHJcblxyXG4gICAgICBpZiAoc3RlcClcclxuICAgICAgICBpc1ZhbGlkID1cclxuICAgICAgICAgIGlzVmFsaWQgJiYgY291bnREZWNpbWFscyhzdGVwKSA9PT0gY291bnREZWNpbWFscyh1bm1hc2tlZElucHV0LnZhbHVlKVxyXG4gICAgfSBlbHNlIGlzVmFsaWQgPSB1bm1hc2tlZElucHV0LmNoZWNrVmFsaWRpdHkoKVxyXG5cclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdzdWNjZXNzJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX19hcHBseUNzc0NsYXNzU3RhdGUodW5tYXNrZWRJbnB1dCwgYWN0dWFsSW5wdXQsICdlcnJvcicpXHJcbiAgICAgIHRoaXMuX19maXJlT25JbnZhbGlkKFxyXG4gICAgICAgIHVubWFza2VkSW5wdXQudmFsaWRhdGlvbk1lc3NhZ2UgfHwgJ1ZhbGlkaXR5IGNoZWNrIGZhaWxzJyxcclxuICAgICAgICBhY3R1YWxJbnB1dFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzVmFsaWRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZU1hc2tlZCAgbWFza2VkIHZhbHVlXHJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlVW5tYXNrZWQgIG9yaWdpbmFsIHZhbHVlXHJcbiAgICogQHBhcmFtIHtIVE1MSW5wdXRFbGVtZW50fSBpbnB1dCB0aGUgYWN0dWFsIGlucHV0IGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fZmlyZU9uVXBkYXRlKHZhbHVlTWFza2VkLCB2YWx1ZVVubWFza2VkLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblVwZGF0ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodmFsdWVNYXNrZWQsIHZhbHVlVW5tYXNrZWQsIGlucHV0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBlcnJvciBsYXN0IG9jY3VycmVkIGVycm9yLiBjb3VsZCBiZSBtYXNrIGVycm9yIG9yIHZhbGlkYXRpb24gZXJyb3JcclxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IHRoZSBhY3R1YWwgaW5wdXQgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX19maXJlT25JbnZhbGlkKGVycm9yLCBpbnB1dCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkludmFsaWQpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLm9uSW52YWxpZChlcnJvciwgaW5wdXQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9fYXBwbHlDc3NDbGFzc1N0YXRlKHVubWFza2VkSW5wdXQsIGFjdHVhbElucHV0LCBzdGF0ZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBhY3R1YWxJbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHxcclxuICAgICAgYWN0dWFsSW5wdXQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpXHJcbiAgICApIHtcclxuICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NTdWNjZXNzKVxyXG5cclxuICAgICAgdW5tYXNrZWRJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc0Vycm9yKVxyXG4gICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdGF0ZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgYWN0dWFsSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICBhY3R1YWxJbnB1dC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3B0aW9ucy5jc3NDbGFzc1N1Y2Nlc3MpXHJcblxyXG4gICAgICAgIHVubWFza2VkSW5wdXQuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbnMuY3NzQ2xhc3NFcnJvcilcclxuICAgICAgICB1bm1hc2tlZElucHV0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5vcHRpb25zLmNzc0NsYXNzU3VjY2VzcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTnVtYmVySW5wdXRcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL051bWJlcklucHV0L051bWJlcklucHV0LmpzIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzdfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJjb21tb25qc1wiOlwiYmJqLW1hc2tzL3NyYy9OdW1iZXJNYXNrXCIsXCJjb21tb25qczJcIjpcImJiai1tYXNrcy9zcmMvTnVtYmVyTWFza1wiLFwiYW1kXCI6XCJiYmotbWFza3Mvc3JjL051bWJlck1hc2tcIixcInJvb3RcIjpbXCJCQmpcIixcIk1hc2tzXCIsXCJOdW1iZXJNYXNrXCJdfVxuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYmotbWFza3MgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5jb25zdCBpc051bWJlclJlZ2V4ID0gL15cXGQrJC9cbmNvbnN0IGlzV2hpdGVzcGFjZVJlZ2V4ID0gL1xccy9cbmNvbnN0IHB1bmN0dWF0aW9uTGlzdCA9ICchXCIjJCUmXFwnKCkqKywtLi86Ozw9Pj9AW11eX2B7fH1+J1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgaW4gbG93ZXIgY2FzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqL1xuY29uc3QgaXNMb3dlckNhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyID09IHN0ci50b0xvd2VyQ2FzZSgpICYmIHN0ciAhPSBzdHIudG9VcHBlckNhc2UoKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgaW4gdXBwZXIgY2FzZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqL1xuY29uc3QgaXNVcHBlckNhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyID09IHN0ci50b1VwcGVyQ2FzZSgpICYmIHN0ciAhPSBzdHIudG9Mb3dlckNhc2UoKVxufVxuXG5jb25zdCBwYXNzT3JUaHJvd0Vycm9yID0gKGxvb3NlLCByZXQsIGksIHN0cikgPT4ge1xuICBpZiAoIWxvb3NlKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQXQoaSlcbiAgICBjb25zdCBwb3MgPSBpICsgMVxuICAgIHRocm93IHtcbiAgICAgIG5hbWU6ICdTdHJpbmdNYXNrRXJyb3InLFxuICAgICAgbWVzc2FnZTogYFN0cmluZ01hc2tFcnJvcjogZXJyb3IgYXBwbHlpbmcgbWFzayBhdCBwb3NpdGlvbiBcIiR7cG9zfVwiICwgY2hhciBcIiR7Y2hhcn1cImAsXG4gICAgICBwb3MsXG4gICAgICBjaGFyXG4gICAgfVxuICB9IGVsc2UgcmV0W2ldID0gJyAnXG59XG5cbi8qKlxuICogTnVtYmVyTWFza1xuICpcbiAqIEEgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQkJqIG51bWJlcnMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIFN0cmluZ01hc2sge1xuICAvKipcbiAgICogTWFzayB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gbWFza1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbWFzayB0aGUgbWFzayB0byB1c2UgZm9yIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtCb29sZWFufSBbbG9vc2U9dHJ1ZV0gd2hlbiB0cnVlICwgZXJyb3JzIHdpbGwgYmUgaWdub3JlZCBhbmQgdGhlIG1ldGhvZCB3aWxsIHRyeSBhdCBhcHBseSB0aGUgbWFza1xuICAgKiAgICAgICAgICAgICAgICBhbnl3YXkgLCBvdGhlcndpc2UgaXQgd2lsbCBzdG9wIGF0IGZpcnN0IGVycm9yIGFuZCB0aHJvdyBpdC5cbiAgICogXG4gICAqIEB0aHJvd3Mge01hc2tJc1Rvb1Nob3J0RXJyb3J9XG4gICAqIEB0aHJvd3Mge1N0cmluZ01hc2tFcnJvcn1cbiAgICogQHRocm93cyB7TWFza0Vycm9yfVxuICAgKiBcbiAgICogQHJldHVybnMge1N0cmluZ30gdGhlIG1hc2tlZCBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBtYXNrKHN0ciwgbWFzaywgbG9vc2UgPSB0cnVlKSB7XG4gICAgc3RyID0gU3RyaW5nKHN0cilcbiAgICBtYXNrID0gU3RyaW5nKG1hc2spXG4gICAgY29uc3QgbWFza0xlbiA9IG1hc2subGVuZ3RoXG4gICAgY29uc3Qgc3RyTGVuID0gc3RyLmxlbmd0aFxuXG4gICAgaWYgKHN0ckxlbiA+IG1hc2tMZW4pIHtcbiAgICAgIGlmIChsb29zZSkgcmV0dXJuIHN0clxuICAgICAgLy8gZnJpZW5kbHkgc2lsZW50IGZhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIG5hbWU6ICdNYXNrSXNUb29TaG9ydEVycm9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgTWFza0lzVG9vU2hvcnRFcnJvcjogTWFzayBpcyBzaG9ydGVyIHRoYW4gdGhlIHBhc3NlZCBzdHJpbmdgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXkobWFza0xlbilcbiAgICBsZXQgcG9zID0gMCAvLyB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJcbiAgICBsZXQgbWFza0J5dGUgPSAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrTGVuOyBpKyspIHtcbiAgICAgIG1hc2tCeXRlID0gbWFzay5jaGFyQXQoaSlcbiAgICAgIHN3aXRjaCAobWFza0J5dGUpIHtcbiAgICAgICAgY2FzZSAnWCc6IC8vIG1hdGNoIGFueSBjaGFyYWN0ZXJcbiAgICAgICAgICByZXRbaV0gPSBwb3MgPCBzdHJMZW4gPyBzdHIuY2hhckF0KHBvcykgOiAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnQSc6IC8vIG1hdGNoIGxldHRlcjsgZm9yY2UgdXBwZXIgY2FzZVxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc1VwcGVyQ2FzZShieXRlKSkgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ2EnOiAvLyBtYXRjaCBsZXR0ZXJcbiAgICAgICAgICBpZiAocG9zIDwgc3RyTGVuKSB7XG4gICAgICAgICAgICBjb25zdCBieXRlID0gc3RyLmNoYXJBdChwb3MpXG4gICAgICAgICAgICBpZiAoaXNVcHBlckNhc2UoYnl0ZSkgfHwgaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGVcbiAgICAgICAgICAgIGVsc2UgcGFzc09yVGhyb3dFcnJvcihsb29zZSwgcmV0LCBpLCBzdHIpXG4gICAgICAgICAgfSBlbHNlIHJldFtpXSA9ICcgJ1xuICAgICAgICAgICsrcG9zXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnMCc6IC8vIG1hdGNoIGRpZ2l0XG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSkgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdaJzogLy8gbWF0Y2ggbGV0dGVyIG9yIGRpZ2l0OyBmb3JjZSB1cHBlciBjYXNlXG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKGlzVXBwZXJDYXNlKGJ5dGUpIHx8IGlzTnVtYmVyUmVnZXgudGVzdChieXRlKSkgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNMb3dlckNhc2UoYnl0ZSkpIHJldFtpXSA9IGJ5dGUudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd6JzogLy8gbWF0Y2ggbGV0dGVyIG9yIGRpZ2l0XG4gICAgICAgICAgaWYgKHBvcyA8IHN0ckxlbikge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IHN0ci5jaGFyQXQocG9zKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc1VwcGVyQ2FzZShieXRlKSB8fFxuICAgICAgICAgICAgICBpc0xvd2VyQ2FzZShieXRlKSB8fFxuICAgICAgICAgICAgICBpc051bWJlclJlZ2V4LnRlc3QoYnl0ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0W2ldID0gYnl0ZVxuICAgICAgICAgICAgZWxzZSBwYXNzT3JUaHJvd0Vycm9yKGxvb3NlLCByZXQsIGksIHN0cilcbiAgICAgICAgICB9IGVsc2UgcmV0W2ldID0gJyAnXG4gICAgICAgICAgKytwb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnVSc6IC8vIG1hdGNoIGxldHRlciAoZm9yY2UgdXBwZXIgY2FzZSksIGRpZ2l0LCB3aGl0ZXNwYWNlIG9yIHB1bmN0dWF0aW9uLlxuICAgICAgICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBzdHIuY2hhckF0KHBvcylcbiAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShieXRlKSkgcmV0W2ldID0gYnl0ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNVcHBlckNhc2UoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgaXNOdW1iZXJSZWdleC50ZXN0KGJ5dGUpIHx8XG4gICAgICAgICAgICAgIGlzV2hpdGVzcGFjZVJlZ2V4LnRlc3QoYnl0ZSkgfHxcbiAgICAgICAgICAgICAgcHVuY3R1YXRpb25MaXN0LmluZGV4T2YoYnl0ZSkgPiAtMVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXRbaV0gPSBieXRlXG4gICAgICAgICAgICBlbHNlIHBhc3NPclRocm93RXJyb3IobG9vc2UsIHJldCwgaSwgc3RyKVxuICAgICAgICAgIH0gZWxzZSByZXRbaV0gPSAnICdcbiAgICAgICAgICArK3Bvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0W2ldID0gbWFza0J5dGVcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3MgPCBzdHJMZW4pIHtcbiAgICAgIGlmICghbG9vc2UpIHtcbiAgICAgICAgdGhyb3cgeyBuYW1lOiAnTWFza0Vycm9yJywgbWVzc2FnZTogJ01hc2sgY2Fubm90IGJlIGFwcGxpZWQnIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmpvaW4oJycpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RyaW5nTWFza1xuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJiai1tYXNrcyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogTnVtYmVyTWFza1xuICpcbiAqIEEgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQkJqIG51bWJlcnMgbWFza2luZ1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIE51bWJlck1hc2sge1xuICAvKipcbiAgICogTWFzayB0aGUgZ2l2ZW4gbnVtYmVyIHdpdGggdGhlIGdpdmVuIG1hc2sgYWNjb3JkaW5nIHRvIEJCaiBydWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXNrIHRoZSBtYXNrIHRvIHVzZSBmb3IgZm9ybWF0dGluZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gW2dyb3VwaW5nU2VwYXJhdG9yPSxdIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlY2ltYWxTZXBhcmF0b3I9Ll0gIC0gYSBjaGFyIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyBhIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2ZvcmNlVHJhaWxpbmdaZXJvcz1mYWxzZV0gLSBBZmZlY3RzIHRoZSBvdXRwdXQgYnkgc3dpdGNoaW5nIHRoZSB3YXkgYSBtYXNrIHdpdGggXCIjXCIgY2hhcmFjdGVycyBpbiB0aGUgdHJhaWxpbmcgcG9zaXRpb25zIGlzIGZpbGxlZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgTnVtYmVyTWFzay5tYXNrKC4xMDpcIiMuIyNcIilgIHJldHVybnMgYCAuMTBgIGluc3RlYWQgb2YgYCAuMSBgXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2xvb3NlPXRydWVdIHdoZW4gdHJ1ZSAsIGVycm9ycyB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBtZXRob2Qgd2lsbCB0cnkgYXQgYXBwbHkgdGhlIG1hc2tcbiAgICogICAgICAgICAgICAgICAgYW55d2F5ICwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RvcCBhdCBmaXJzdCBlcnJvciBhbmQgdGhyb3cgaXQuXG4gICAqIFxuICAgKiBAdGhyb3dzIHtNYXNrRXJyb3J9IG9ubHkgaWYgbG9vc2UgaXMgZGlzYWJsZWRcbiAgICogXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBtYXNrZWQgbnVtYmVyXG4gICAqL1xuICBzdGF0aWMgbWFzayhcbiAgICBudW1iZXIsXG4gICAgbWFzayxcbiAgICBncm91cGluZ1NlcGFyYXRvciA9ICcsJyxcbiAgICBkZWNpbWFsU2VwYXJhdG9yID0gJy4nLFxuICAgIGZvcmNlVHJhaWxpbmdaZXJvcyA9IGZhbHNlLFxuICAgIGxvb3NlID0gdHJ1ZVxuICApIHtcbiAgICBjb25zdCBtYXNrTGVuID0gbWFzay5sZW5ndGhcbiAgICBpZiAoMCA9PT0gbWFza0xlbikge1xuICAgICAgaWYgKGxvb3NlKSByZXR1cm4gc3RyXG4gICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogYE1hc2tFcnJvcjogTWFzayBpcyBlbXB0eWBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBNQVNLXG4gICAgbGV0IG1hc2tCZWZvcmVEZWNpbWFsID0gMFxuICAgIGxldCBtYXNrQWZ0ZXJEZWNpbWFsID0gMFxuICAgIGxldCBmb3VuZERlY2ltYWwgPSBmYWxzZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza0xlbjsgKytpKSB7XG4gICAgICBjb25zdCBtID0gbWFzay5jaGFyQXQoaSlcbiAgICAgIGlmIChtID09ICcwJyB8fCBtID09ICcjJykge1xuICAgICAgICBpZiAoZm91bmREZWNpbWFsKSArK21hc2tBZnRlckRlY2ltYWxcbiAgICAgICAgZWxzZSArK21hc2tCZWZvcmVEZWNpbWFsXG4gICAgICB9IGVsc2UgaWYgKG0gPT0gJy4nKSBmb3VuZERlY2ltYWwgPSB0cnVlXG4gICAgfVxuXG4gICAgbGV0IG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bWJlciwgbWFza0FmdGVyRGVjaW1hbClcbiAgICBsZXQgYnl0ZXMgPSBOdW1iZXJNYXNrLl90b0NoYXJBcnJheShudW0pXG5cbiAgICAvLyBHZXQgbWFnbml0dWRlIGFuZCBwcmVjaXNpb24gb2YgTlVNQkVSXG4gICAgbGV0IGluTGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgbGV0IG51bUJlZm9yZURlY2ltYWwgPSAwXG4gICAgbGV0IG51bUFmdGVyRGVjaW1hbCA9IDBcbiAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5MZW47ICsraSkge1xuICAgICAgaWYgKGJ5dGVzW2ldID09ICcuJykgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZERlY2ltYWwpICsrbnVtQWZ0ZXJEZWNpbWFsXG4gICAgICAgIGVsc2UgKytudW1CZWZvcmVEZWNpbWFsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGlnbm9yZSBtYXNrIG92ZXJmbG93XG4gICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgaWYgKGxvb3NlKSByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKClcbiAgICAgIC8vIGZyaWVuZGx5IHNpbGVudCBmYWlsXG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBuYW1lOiAnTWFza0Vycm9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrYFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcm91bmQgaWYgbWFzayBpcyBmb3IgYSBsb3dlciBwcmVjaXNpb24gbnVtYmVyXG4gICAgaWYgKG51bUFmdGVyRGVjaW1hbCA+IG1hc2tBZnRlckRlY2ltYWwpIHtcbiAgICAgIG51bSA9IE51bWJlck1hc2suX3JvdW5kKG51bSwgbWFza0FmdGVyRGVjaW1hbClcbiAgICAgIGJ5dGVzID0gTnVtYmVyTWFzay5fdG9DaGFyQXJyYXkobnVtKVxuICAgICAgaW5MZW4gPSBieXRlcy5sZW5ndGhcblxuICAgICAgLy8gR2V0IG5ldyBtYWduaXR1ZGUgYW5kIHByZWNpc2lvbiBvZiBOVU1CRVJcbiAgICAgIG51bUJlZm9yZURlY2ltYWwgPSAwXG4gICAgICBudW1BZnRlckRlY2ltYWwgPSAwXG4gICAgICBmb3VuZERlY2ltYWwgPSBmYWxzZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbkxlbjsgKytpKSB7XG4gICAgICAgIGlmIChieXRlc1tpXSA9PSAnLicpIGZvdW5kRGVjaW1hbCA9IHRydWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kRGVjaW1hbCkgKytudW1BZnRlckRlY2ltYWxcbiAgICAgICAgICBlbHNlICsrbnVtQmVmb3JlRGVjaW1hbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFsd2F5cyBpZ25vcmUgbWFzayBvdmVyZmxvd1xuICAgICAgaWYgKG51bUJlZm9yZURlY2ltYWwgPiBtYXNrQmVmb3JlRGVjaW1hbCkge1xuICAgICAgICBpZiAobG9vc2UpIHJldHVybiBudW1iZXIudG9TdHJpbmcoKVxuICAgICAgICAvLyBmcmllbmRseSBzaWxlbnQgZmFpbFxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogJ01hc2tFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWFza0Vycm9yOiBOdW1iZXIgaXMgdG9vIGxhcmdlIGZvciBtYXNrYFxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsbEJ5dGUgPSAnICcsXG4gICAgICBmbG9hdEJ5dGUgPSAnICdcbiAgICBsZXQgaW5Qb3MgPSAwLFxuICAgICAgb3V0UG9zID0gMCxcbiAgICAgIGZsb2F0UG9zID0gMFxuICAgIGlmIChtYXNrLmNoYXJBdCgwKSA9PSAnKicpIGZpbGxCeXRlID0gJyonXG5cbiAgICBjb25zdCBmaWxsSW5pdCA9IGZpbGxCeXRlXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IE51bWJlck1hc2suX2dldFNpZ24obnVtKSA8IDBcbiAgICBsZXQgZW1pdERlY2ltYWwgPSBpbkxlbiA+IDAgfHwgbWFzay5pbmRleE9mKCcwJykgPj0gMFxuICAgIGxldCBmb3VuZFplcm8gPSBmYWxzZVxuICAgIGxldCBmb3VuZERpZ2l0ID0gZmFsc2VcbiAgICBsZXQgY3VycmVuY3kgPSBmYWxzZVxuICAgIGZvdW5kRGVjaW1hbCA9IGZhbHNlXG5cbiAgICBsZXQgcmV0ID0gbmV3IEFycmF5KG1hc2tMZW4pXG5cbiAgICBmb3IgKGxldCBtYXNrUG9zID0gMDsgbWFza1BvcyA8IG1hc2tMZW47ICsrbWFza1Bvcykge1xuICAgICAgbGV0IG0gPSBtYXNrLmNoYXJBdChtYXNrUG9zKVxuICAgICAgc3dpdGNoIChtKSB7XG4gICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgIC0tbWFza0JlZm9yZURlY2ltYWxcbiAgICAgICAgICBpZiAobWFza0JlZm9yZURlY2ltYWwgPCBudW1CZWZvcmVEZWNpbWFsICYmIGluUG9zIDwgaW5MZW4pIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gYnl0ZXNbaW5Qb3NdXG4gICAgICAgICAgICArK2luUG9zXG4gICAgICAgICAgICBmb3VuZERpZ2l0ID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcwJ1xuICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgLS1tYXNrQmVmb3JlRGVjaW1hbFxuICAgICAgICAgIGlmIChtYXNrQmVmb3JlRGVjaW1hbCA8IG51bUJlZm9yZURlY2ltYWwgJiYgaW5Qb3MgPCBpbkxlbikge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBieXRlc1tpblBvc11cbiAgICAgICAgICAgICsraW5Qb3NcbiAgICAgICAgICAgIGZvdW5kRGlnaXQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID1cbiAgICAgICAgICAgICAgZm91bmREZWNpbWFsICYmXG4gICAgICAgICAgICAgIGZvcmNlVHJhaWxpbmdaZXJvcyAmJlxuICAgICAgICAgICAgICBOdW1iZXJNYXNrLl9nZXRTaWduKG51bSkgIT0gMFxuICAgICAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICAgICAgOiBmaWxsQnl0ZVxuICAgICAgICAgICAgaWYgKCFmb3VuZERlY2ltYWwpIGZsb2F0UG9zID0gbWFza1Bvc1xuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnLCc6XG4gICAgICAgICAgaWYgKGZvdW5kWmVybyB8fCBpblBvcyA+IDApIHJldFtvdXRQb3NdID0gZ3JvdXBpbmdTZXBhcmF0b3JcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGlmICghZm91bmREZWNpbWFsKSBmbG9hdFBvcyA9IG1hc2tQb3NcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJy0nXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSByZXRbb3V0UG9zXSA9IGlzTmVnYXRpdmUgPyAnLScgOiBmaWxsQnl0ZVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAgICAgZmxvYXRCeXRlID0gaXNOZWdhdGl2ZSA/ICctJyA6ICcrJ1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgICB9IGVsc2UgcmV0W291dFBvc10gPSBpc05lZ2F0aXZlID8gJy0nIDogJysnXG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICBmbG9hdEJ5dGUgPSAnJCdcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZmlsbEJ5dGVcbiAgICAgICAgICAgIGZsb2F0UG9zID0gZm91bmREZWNpbWFsID8gLTEgOiBtYXNrUG9zXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyQnXG4gICAgICAgICAgfVxuICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAvLyBjYXNlICcmJzpcbiAgICAgICAgLy8gICBjdXJyZW5jeSA9IHRydWVcbiAgICAgICAgLy8gICBpZiAoIWZvdW5kRGlnaXQgJiYgZmxvYXRCeXRlID09ICcgJykge1xuICAgICAgICAvLyAgICAgZmxvYXRCeXRlID0gJyYnXG4gICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgIC8vICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICByZXRbb3V0UG9zXSA9ICcmJ1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gICArK291dFBvc1xuICAgICAgICAvLyAgIGJyZWFrXG5cbiAgICAgICAgLy8gY2FzZSAnQCc6XG4gICAgICAgIC8vICAgY3VycmVuY3kgPSB0cnVlXG4gICAgICAgIC8vICAgaWYgKCFmb3VuZERpZ2l0ICYmIGZsb2F0Qnl0ZSA9PSAnICcpIHtcbiAgICAgICAgLy8gICAgIGZsb2F0Qnl0ZSA9ICdAJ1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSBmaWxsQnl0ZVxuICAgICAgICAvLyAgICAgZmxvYXRQb3MgPSBmb3VuZERlY2ltYWwgPyAtMSA6IG1hc2tQb3NcbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgcmV0W291dFBvc10gPSAnQCdcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgKytvdXRQb3NcbiAgICAgICAgLy8gICBicmVha1xuXG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIGlmICghZm91bmREaWdpdCAmJiBmbG9hdEJ5dGUgPT0gJyAnKSB7XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkgZmxvYXRCeXRlID0gJygnXG4gICAgICAgICAgICByZXRbb3V0UG9zXSA9IGZpbGxCeXRlXG4gICAgICAgICAgICBmbG9hdFBvcyA9IGZvdW5kRGVjaW1hbCA/IC0xIDogbWFza1Bvc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcoJ1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSBmb3VuZERlY2ltYWwgPyAnICcgOiBmaWxsQnl0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gJyknXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFtvdXRQb3NdID0gZm91bmREZWNpbWFsID8gJyAnIDogZmlsbEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgKytvdXRQb3NcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgIGlmIChtYXNrUG9zIDwgbWFza0xlbiAtIDEgJiYgbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQydcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICcgJ1xuICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnICdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dFBvcyArPSAyXG4gICAgICAgICAgICArK21hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQydcbiAgICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgIGlmIChtYXNrUG9zIDwgbWFza0xlbiAtIDEgJiYgbWFzay5jaGFyQXQobWFza1BvcyArIDEpID09ICdSJykge1xuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAgICAgcmV0W291dFBvc10gPSAnQydcbiAgICAgICAgICAgICAgcmV0W291dFBvcyArIDFdID0gJ1InXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXRbb3V0UG9zXSA9ICdEJ1xuICAgICAgICAgICAgICByZXRbb3V0UG9zICsgMV0gPSAnUidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dFBvcyArPSAyXG4gICAgICAgICAgICArK21hc2tQb3NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0W291dFBvc10gPSAnRCdcbiAgICAgICAgICAgICsrb3V0UG9zXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgcmV0W291dFBvc10gPSAnKidcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnLic6XG4gICAgICAgICAgcmV0W291dFBvc10gPSBlbWl0RGVjaW1hbCA/IGRlY2ltYWxTZXBhcmF0b3IgOiBmaWxsQnl0ZVxuICAgICAgICAgIGZpbGxCeXRlID0gJyAnXG4gICAgICAgICAgZm91bmREZWNpbWFsID0gdHJ1ZVxuICAgICAgICAgICsraW5Qb3NcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnQic6XG4gICAgICAgICAgcmV0W291dFBvc10gPSAnICdcbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXRbb3V0UG9zXSA9IG1cbiAgICAgICAgICArK291dFBvc1xuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZsb2F0Qnl0ZSAhPSAnICcpIHtcbiAgICAgIGlmIChmbG9hdFBvcyA8IDApIGZsb2F0UG9zID0gb3V0UG9zXG4gICAgICB3aGlsZSAoZmxvYXRQb3MgPj0gbWFza0xlbikgLS1mbG9hdFBvc1xuICAgICAgaWYgKHJldFtmbG9hdFBvc10gPT0gZmlsbEluaXQpIHJldFtmbG9hdFBvc10gPSBmbG9hdEJ5dGVcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmpvaW4oJycpXG4gIH1cblxuICBzdGF0aWMgX3NoaWZ0KG51bWJlciwgcHJlY2lzaW9uLCByZXZlcnNlU2hpZnQpIHtcbiAgICBpZiAocmV2ZXJzZVNoaWZ0KSBwcmVjaXNpb24gPSAtcHJlY2lzaW9uXG4gICAgdmFyIG51bUFycmF5ID0gKCcnICsgbnVtYmVyKS5zcGxpdCgnZScpXG4gICAgcmV0dXJuICsoXG4gICAgICBudW1BcnJheVswXSArXG4gICAgICAnZScgK1xuICAgICAgKG51bUFycmF5WzFdID8gK251bUFycmF5WzFdICsgcHJlY2lzaW9uIDogcHJlY2lzaW9uKVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBfcm91bmQobnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICByZXR1cm4gTnVtYmVyTWFzay5fc2hpZnQoXG4gICAgICBNYXRoLnJvdW5kKE51bWJlck1hc2suX3NoaWZ0KG51bWJlciwgcHJlY2lzaW9uLCBmYWxzZSkpLFxuICAgICAgcHJlY2lzaW9uLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBfdG9DaGFyQXJyYXkobnVtYmVyKSB7XG4gICAgY29uc3Qgc2lnbnVtID0gTnVtYmVyTWFzay5fZ2V0U2lnbihudW1iZXIpXG4gICAgbGV0IGNoYXJzID0gW11cblxuICAgIGlmIChzaWdudW0gIT09IDApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBzaWdudW0gPCAwID8gYCR7LTEgKiBudW1iZXIudG9TdHJpbmcoKX1gIDogbnVtYmVyLnRvU3RyaW5nKClcblxuICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAxICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJzAnKVxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDEpXG5cbiAgICAgIC8vIFRoZSBzdHJpbmcgY29udGFpbnMgb25seSBbMC05XSBhbmQgJy4nXG4gICAgICBjaGFycyA9IHN0cmluZy5zcGxpdCgnJylcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIGEgbnVtYmVyXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4IG51bWJlclxuICAgKiBAcmV0dXJucyB7TnVtYmVyfSBBIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHNpZ24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50LlxuICAgKiAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG5lZ2F0aXZlIG51bWJlciwgcG9zaXRpdmUgemVyb1xuICAgKiAgICAgICAgICAgICAgICAgICBvciBuZWdhdGl2ZSB6ZXJvLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMSwgLTEsIDAgb3IgLTAgcmVzcGVjdGl2ZWx5LlxuICAgKiAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIE5hTiBpcyByZXR1cm5lZC5cbiAgICovXG4gIHN0YXRpYyBfZ2V0U2lnbih4KSB7XG4gICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyTWFza1xuIiwibW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxbXCJmbGF0cGlja3JcIl0gPSByZXF1aXJlKFwiLSFEOlxcXFxHaXRodWJcXFxcQkJqR3JpZEV4V2lkZ2V0XFxcXGNsaWVudFxcXFxub2RlX21vZHVsZXNcXFxcYmFiZWwtbG9hZGVyXFxcXGxpYlxcXFxpbmRleC5qcz8/cmVmLS00IS5cXFxcZmxhdHBpY2tyLmpzXCIpOyIsIi8qIGZsYXRwaWNrciB2NC42LjYsIEBsaWNlbnNlIE1JVCAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5mbGF0cGlja3IgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG4gICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG4gICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG4gICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG4gICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG4gICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gICAgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgICAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9XG5cbiAgICB2YXIgSE9PS1MgPSBbXG4gICAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgICAgXCJvbkNsb3NlXCIsXG4gICAgICAgIFwib25EYXlDcmVhdGVcIixcbiAgICAgICAgXCJvbkRlc3Ryb3lcIixcbiAgICAgICAgXCJvbktleURvd25cIixcbiAgICAgICAgXCJvbk1vbnRoQ2hhbmdlXCIsXG4gICAgICAgIFwib25PcGVuXCIsXG4gICAgICAgIFwib25QYXJzZUNvbmZpZ1wiLFxuICAgICAgICBcIm9uUmVhZHlcIixcbiAgICAgICAgXCJvblZhbHVlVXBkYXRlXCIsXG4gICAgICAgIFwib25ZZWFyQ2hhbmdlXCIsXG4gICAgICAgIFwib25QcmVDYWxlbmRhclBvc2l0aW9uXCIsXG4gICAgXTtcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICAgIF9kaXNhYmxlOiBbXSxcbiAgICAgICAgX2VuYWJsZTogW10sXG4gICAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgICBhbGxvd0ludmFsaWRQcmVsb2FkOiBmYWxzZSxcbiAgICAgICAgYWx0Rm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBhbHRJbnB1dDogZmFsc2UsXG4gICAgICAgIGFsdElucHV0Q2xhc3M6IFwiZm9ybS1jb250cm9sIGlucHV0XCIsXG4gICAgICAgIGFuaW1hdGU6IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpID09PSAtMSxcbiAgICAgICAgYXJpYURhdGVGb3JtYXQ6IFwiRiBqLCBZXCIsXG4gICAgICAgIGF1dG9GaWxsRGVmYXVsdFRpbWU6IHRydWUsXG4gICAgICAgIGNsaWNrT3BlbnM6IHRydWUsXG4gICAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgICAgIGNvbmp1bmN0aW9uOiBcIiwgXCIsXG4gICAgICAgIGRhdGVGb3JtYXQ6IFwiWS1tLWRcIixcbiAgICAgICAgZGVmYXVsdEhvdXI6IDEyLFxuICAgICAgICBkZWZhdWx0TWludXRlOiAwLFxuICAgICAgICBkZWZhdWx0U2Vjb25kczogMCxcbiAgICAgICAgZGlzYWJsZTogW10sXG4gICAgICAgIGRpc2FibGVNb2JpbGU6IGZhbHNlLFxuICAgICAgICBlbmFibGU6IFtdLFxuICAgICAgICBlbmFibGVTZWNvbmRzOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlVGltZTogZmFsc2UsXG4gICAgICAgIGVycm9ySGFuZGxlcjogZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRXZWVrOiBmdW5jdGlvbiAoZ2l2ZW5EYXRlKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGdpdmVuRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIC8vIFRodXJzZGF5IGluIGN1cnJlbnQgd2VlayBkZWNpZGVzIHRoZSB5ZWFyLlxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyAtICgoZGF0ZS5nZXREYXkoKSArIDYpICUgNykpO1xuICAgICAgICAgICAgLy8gSmFudWFyeSA0IGlzIGFsd2F5cyBpbiB3ZWVrIDEuXG4gICAgICAgICAgICB2YXIgd2VlazEgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRvIFRodXJzZGF5IGluIHdlZWsgMSBhbmQgY291bnQgbnVtYmVyIG9mIHdlZWtzIGZyb20gZGF0ZSB0byB3ZWVrMS5cbiAgICAgICAgICAgIHJldHVybiAoMSArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgoKGRhdGUuZ2V0VGltZSgpIC0gd2VlazEuZ2V0VGltZSgpKSAvIDg2NDAwMDAwIC1cbiAgICAgICAgICAgICAgICAgICAgMyArXG4gICAgICAgICAgICAgICAgICAgICgod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpKSAvXG4gICAgICAgICAgICAgICAgICAgIDcpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaG91ckluY3JlbWVudDogMSxcbiAgICAgICAgaWdub3JlZEZvY3VzRWxlbWVudHM6IFtdLFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBsb2NhbGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBtaW51dGVJbmNyZW1lbnQ6IDUsXG4gICAgICAgIG1vZGU6IFwic2luZ2xlXCIsXG4gICAgICAgIG1vbnRoU2VsZWN0b3JUeXBlOiBcImRyb3Bkb3duXCIsXG4gICAgICAgIG5leHRBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTEzLjIwNyA4LjQ3MmwtNy44NTQgNy44NTQtMC43MDctMC43MDcgNy4xNDYtNy4xNDYtNy4xNDYtNy4xNDggMC43MDctMC43MDcgNy44NTQgNy44NTR6JyAvPjwvc3ZnPlwiLFxuICAgICAgICBub0NhbGVuZGFyOiBmYWxzZSxcbiAgICAgICAgbm93OiBuZXcgRGF0ZSgpLFxuICAgICAgICBvbkNoYW5nZTogW10sXG4gICAgICAgIG9uQ2xvc2U6IFtdLFxuICAgICAgICBvbkRheUNyZWF0ZTogW10sXG4gICAgICAgIG9uRGVzdHJveTogW10sXG4gICAgICAgIG9uS2V5RG93bjogW10sXG4gICAgICAgIG9uTW9udGhDaGFuZ2U6IFtdLFxuICAgICAgICBvbk9wZW46IFtdLFxuICAgICAgICBvblBhcnNlQ29uZmlnOiBbXSxcbiAgICAgICAgb25SZWFkeTogW10sXG4gICAgICAgIG9uVmFsdWVVcGRhdGU6IFtdLFxuICAgICAgICBvblllYXJDaGFuZ2U6IFtdLFxuICAgICAgICBvblByZUNhbGVuZGFyUG9zaXRpb246IFtdLFxuICAgICAgICBwbHVnaW5zOiBbXSxcbiAgICAgICAgcG9zaXRpb246IFwiYXV0b1wiLFxuICAgICAgICBwb3NpdGlvbkVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJldkFycm93OiBcIjxzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2aWV3Qm94PScwIDAgMTcgMTcnPjxnPjwvZz48cGF0aCBkPSdNNS4yMDcgOC40NzFsNy4xNDYgNy4xNDctMC43MDcgMC43MDctNy44NTMtNy44NTQgNy44NTQtNy44NTMgMC43MDcgMC43MDctNy4xNDcgNy4xNDZ6JyAvPjwvc3ZnPlwiLFxuICAgICAgICBzaG9ydGhhbmRDdXJyZW50TW9udGg6IGZhbHNlLFxuICAgICAgICBzaG93TW9udGhzOiAxLFxuICAgICAgICBzdGF0aWM6IGZhbHNlLFxuICAgICAgICB0aW1lXzI0aHI6IGZhbHNlLFxuICAgICAgICB3ZWVrTnVtYmVyczogZmFsc2UsXG4gICAgICAgIHdyYXA6IGZhbHNlLFxuICAgIH07XG5cbiAgICB2YXIgZW5nbGlzaCA9IHtcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIHNob3J0aGFuZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICAgICAgICAgICAgbG9uZ2hhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIlN1bmRheVwiLFxuICAgICAgICAgICAgICAgIFwiTW9uZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJUdWVzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJXZWRuZXNkYXlcIixcbiAgICAgICAgICAgICAgICBcIlRodXJzZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJGcmlkYXlcIixcbiAgICAgICAgICAgICAgICBcIlNhdHVyZGF5XCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHNob3J0aGFuZDogW1xuICAgICAgICAgICAgICAgIFwiSmFuXCIsXG4gICAgICAgICAgICAgICAgXCJGZWJcIixcbiAgICAgICAgICAgICAgICBcIk1hclwiLFxuICAgICAgICAgICAgICAgIFwiQXByXCIsXG4gICAgICAgICAgICAgICAgXCJNYXlcIixcbiAgICAgICAgICAgICAgICBcIkp1blwiLFxuICAgICAgICAgICAgICAgIFwiSnVsXCIsXG4gICAgICAgICAgICAgICAgXCJBdWdcIixcbiAgICAgICAgICAgICAgICBcIlNlcFwiLFxuICAgICAgICAgICAgICAgIFwiT2N0XCIsXG4gICAgICAgICAgICAgICAgXCJOb3ZcIixcbiAgICAgICAgICAgICAgICBcIkRlY1wiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICAgICAgXCJKYW51YXJ5XCIsXG4gICAgICAgICAgICAgICAgXCJGZWJydWFyeVwiLFxuICAgICAgICAgICAgICAgIFwiTWFyY2hcIixcbiAgICAgICAgICAgICAgICBcIkFwcmlsXCIsXG4gICAgICAgICAgICAgICAgXCJNYXlcIixcbiAgICAgICAgICAgICAgICBcIkp1bmVcIixcbiAgICAgICAgICAgICAgICBcIkp1bHlcIixcbiAgICAgICAgICAgICAgICBcIkF1Z3VzdFwiLFxuICAgICAgICAgICAgICAgIFwiU2VwdGVtYmVyXCIsXG4gICAgICAgICAgICAgICAgXCJPY3RvYmVyXCIsXG4gICAgICAgICAgICAgICAgXCJOb3ZlbWJlclwiLFxuICAgICAgICAgICAgICAgIFwiRGVjZW1iZXJcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIGRheXNJbk1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG4gICAgICAgIGZpcnN0RGF5T2ZXZWVrOiAwLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnRoKSB7XG4gICAgICAgICAgICB2YXIgcyA9IG50aCAlIDEwMDtcbiAgICAgICAgICAgIGlmIChzID4gMyAmJiBzIDwgMjEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgICAgIHN3aXRjaCAocyAlIDEwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJkXCI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2VTZXBhcmF0b3I6IFwiIHRvIFwiLFxuICAgICAgICB3ZWVrQWJicmV2aWF0aW9uOiBcIldrXCIsXG4gICAgICAgIHNjcm9sbFRpdGxlOiBcIlNjcm9sbCB0byBpbmNyZW1lbnRcIixcbiAgICAgICAgdG9nZ2xlVGl0bGU6IFwiQ2xpY2sgdG8gdG9nZ2xlXCIsXG4gICAgICAgIGFtUE06IFtcIkFNXCIsIFwiUE1cIl0sXG4gICAgICAgIHllYXJBcmlhTGFiZWw6IFwiWWVhclwiLFxuICAgICAgICBtb250aEFyaWFMYWJlbDogXCJNb250aFwiLFxuICAgICAgICBob3VyQXJpYUxhYmVsOiBcIkhvdXJcIixcbiAgICAgICAgbWludXRlQXJpYUxhYmVsOiBcIk1pbnV0ZVwiLFxuICAgICAgICB0aW1lXzI0aHI6IGZhbHNlLFxuICAgIH07XG5cbiAgICB2YXIgcGFkID0gZnVuY3Rpb24gKG51bWJlciwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgeyBsZW5ndGggPSAyOyB9XG4gICAgICAgIHJldHVybiAoXCIwMDBcIiArIG51bWJlcikuc2xpY2UobGVuZ3RoICogLTEpO1xuICAgIH07XG4gICAgdmFyIGludCA9IGZ1bmN0aW9uIChib29sKSB7IHJldHVybiAoYm9vbCA9PT0gdHJ1ZSA/IDEgOiAwKTsgfTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgICAgICBpZiAoaW1tZWRpYXRlID09PSB2b2lkIDApIHsgaW1tZWRpYXRlID0gZmFsc2U7IH1cbiAgICAgICAgdmFyIHRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICB0aW1lb3V0ICE9PSBudWxsICYmIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICB9LCB3YWl0KTtcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGUgJiYgIXRpbWVvdXQpXG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGFycmF5aWZ5ID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiBbb2JqXTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxlbSwgY2xhc3NOYW1lLCBib29sKSB7XG4gICAgICAgIGlmIChib29sID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGNsYXNzTmFtZSwgY29udGVudCkge1xuICAgICAgICB2YXIgZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgICAgICBjb250ZW50ID0gY29udGVudCB8fCBcIlwiO1xuICAgICAgICBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJOb2RlKG5vZGUpIHtcbiAgICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZClcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFBhcmVudChub2RlLCBjb25kaXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbihub2RlKSlcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUpXG4gICAgICAgICAgICByZXR1cm4gZmluZFBhcmVudChub2RlLnBhcmVudE5vZGUsIGNvbmRpdGlvbik7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIG5vdGhpbmcgZm91bmRcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTnVtYmVySW5wdXQoaW5wdXRDbGFzc05hbWUsIG9wdHMpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwibnVtSW5wdXRXcmFwcGVyXCIpLCBudW1JbnB1dCA9IGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBcIm51bUlucHV0IFwiICsgaW5wdXRDbGFzc05hbWUpLCBhcnJvd1VwID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd1VwXCIpLCBhcnJvd0Rvd24gPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImFycm93RG93blwiKTtcbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUUgOS4wXCIpID09PSAtMSkge1xuICAgICAgICAgICAgbnVtSW5wdXQudHlwZSA9IFwibnVtYmVyXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1JbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBudW1JbnB1dC5wYXR0ZXJuID0gXCJcXFxcZCpcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdHMpXG4gICAgICAgICAgICAgICAgbnVtSW5wdXQuc2V0QXR0cmlidXRlKGtleSwgb3B0c1trZXldKTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChudW1JbnB1dCk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dVcCk7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dEb3duKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KGV2ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0aFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBldmVudC50YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRvTm90aGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbiAgICB2YXIgbW9udGhUb1N0ciA9IGZ1bmN0aW9uIChtb250aE51bWJlciwgc2hvcnRoYW5kLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5tb250aHNbc2hvcnRoYW5kID8gXCJzaG9ydGhhbmRcIiA6IFwibG9uZ2hhbmRcIl1bbW9udGhOdW1iZXJdOyB9O1xuICAgIHZhciByZXZGb3JtYXQgPSB7XG4gICAgICAgIEQ6IGRvTm90aGluZyxcbiAgICAgICAgRjogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoTmFtZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMubG9uZ2hhbmQuaW5kZXhPZihtb250aE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEg6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSzogZnVuY3Rpb24gKGRhdGVPYmosIGFtUE0sIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycygoZGF0ZU9iai5nZXRIb3VycygpICUgMTIpICtcbiAgICAgICAgICAgICAgICAxMiAqIGludChuZXcgUmVnRXhwKGxvY2FsZS5hbVBNWzFdLCBcImlcIikudGVzdChhbVBNKSkpO1xuICAgICAgICB9LFxuICAgICAgICBNOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2hvcnRNb250aCwgbG9jYWxlKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMuc2hvcnRoYW5kLmluZGV4T2Yoc2hvcnRNb250aCkpO1xuICAgICAgICB9LFxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgICAgICB9LFxuICAgICAgICBVOiBmdW5jdGlvbiAoXywgdW5peFNlY29uZHMpIHsgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peFNlY29uZHMpICogMTAwMCk7IH0sXG4gICAgICAgIFc6IGZ1bmN0aW9uIChkYXRlT2JqLCB3ZWVrTnVtLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVyID0gcGFyc2VJbnQod2Vla051bSk7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRhdGVPYmouZ2V0RnVsbFllYXIoKSwgMCwgMiArICh3ZWVrTnVtYmVyIC0gMSkgKiA3LCAwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyBsb2NhbGUuZmlyc3REYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIFk6IGZ1bmN0aW9uIChkYXRlT2JqLCB5ZWFyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9LFxuICAgICAgICBaOiBmdW5jdGlvbiAoXywgSVNPRGF0ZSkgeyByZXR1cm4gbmV3IERhdGUoSVNPRGF0ZSk7IH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBoOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaTogZnVuY3Rpb24gKGRhdGVPYmosIG1pbnV0ZXMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TWludXRlcyhwYXJzZUZsb2F0KG1pbnV0ZXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgajogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGw6IGRvTm90aGluZyxcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHBhcnNlRmxvYXQobW9udGgpIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG46IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgICAgICB9LFxuICAgICAgICB1OiBmdW5jdGlvbiAoXywgdW5peE1pbGxTZWNvbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4TWlsbFNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdzogZG9Ob3RoaW5nLFxuICAgICAgICB5OiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcigyMDAwICsgcGFyc2VGbG9hdCh5ZWFyKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICB2YXIgdG9rZW5SZWdleCA9IHtcbiAgICAgICAgRDogXCIoXFxcXHcrKVwiLFxuICAgICAgICBGOiBcIihcXFxcdyspXCIsXG4gICAgICAgIEc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIEg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIEo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXFxcXHcrXCIsXG4gICAgICAgIEs6IFwiXCIsXG4gICAgICAgIE06IFwiKFxcXFx3KylcIixcbiAgICAgICAgUzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgVTogXCIoLispXCIsXG4gICAgICAgIFc6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIFk6IFwiKFxcXFxkezR9KVwiLFxuICAgICAgICBaOiBcIiguKylcIixcbiAgICAgICAgZDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgaDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgaTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgajogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgbDogXCIoXFxcXHcrKVwiLFxuICAgICAgICBtOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBuOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBzOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICB1OiBcIiguKylcIixcbiAgICAgICAgdzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgeTogXCIoXFxcXGR7Mn0pXCIsXG4gICAgfTtcbiAgICB2YXIgZm9ybWF0cyA9IHtcbiAgICAgICAgLy8gZ2V0IHRoZSBkYXRlIGluIFVUQ1xuICAgICAgICBaOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpOyB9LFxuICAgICAgICAvLyB3ZWVrZGF5IG5hbWUsIHNob3J0LCBlLmcuIFRodVxuICAgICAgICBEOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLnNob3J0aGFuZFtmb3JtYXRzLncoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKV07XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bGwgbW9udGggbmFtZSBlLmcuIEphbnVhcnlcbiAgICAgICAgRjogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoVG9TdHIoZm9ybWF0cy5uKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykgLSAxLCBmYWxzZSwgbG9jYWxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcGFkZGVkIGhvdXIgMS0xMlxuICAgICAgICBHOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFkKGZvcm1hdHMuaChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gaG91cnMgd2l0aCBsZWFkaW5nIHplcm8gZS5nLiAwM1xuICAgICAgICBIOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0SG91cnMoKSk7IH0sXG4gICAgICAgIC8vIGRheSAoMS0zMCkgd2l0aCBvcmRpbmFsIHN1ZmZpeCBlLmcuIDFzdCwgMm5kXG4gICAgICAgIEo6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUub3JkaW5hbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBkYXRlLmdldERhdGUoKSArIGxvY2FsZS5vcmRpbmFsKGRhdGUuZ2V0RGF0ZSgpKVxuICAgICAgICAgICAgICAgIDogZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEFNL1BNXG4gICAgICAgIEs6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5hbVBNW2ludChkYXRlLmdldEhvdXJzKCkgPiAxMSldOyB9LFxuICAgICAgICAvLyBzaG9ydGhhbmQgbW9udGggZS5nLiBKYW4sIFNlcCwgT2N0LCBldGNcbiAgICAgICAgTTogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoVG9TdHIoZGF0ZS5nZXRNb250aCgpLCB0cnVlLCBsb2NhbGUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZWNvbmRzIDAwLTU5XG4gICAgICAgIFM6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpOyB9LFxuICAgICAgICAvLyB1bml4IHRpbWVzdGFtcFxuICAgICAgICBVOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLyAxMDAwOyB9LFxuICAgICAgICBXOiBmdW5jdGlvbiAoZGF0ZSwgXywgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0V2VlayhkYXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZnVsbCB5ZWFyIGUuZy4gMjAxNiwgcGFkZGVkICgwMDAxLTk5OTkpXG4gICAgICAgIFk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRGdWxsWWVhcigpLCA0KTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoLCBwYWRkZWQgKDAxLTMwKVxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RGF0ZSgpKTsgfSxcbiAgICAgICAgLy8gaG91ciBmcm9tIDEtMTIgKGFtL3BtKVxuICAgICAgICBoOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gKGRhdGUuZ2V0SG91cnMoKSAlIDEyID8gZGF0ZS5nZXRIb3VycygpICUgMTIgOiAxMik7IH0sXG4gICAgICAgIC8vIG1pbnV0ZXMsIHBhZGRlZCB3aXRoIGxlYWRpbmcgemVybyBlLmcuIDA5XG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgaW4gbW9udGggKDEtMzApXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldERhdGUoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBmdWxsLCBlLmcuIFRodXJzZGF5XG4gICAgICAgIGw6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMubG9uZ2hhbmRbZGF0ZS5nZXREYXkoKV07XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBtb250aCBudW1iZXIgKDAxLTEyKVxuICAgICAgICBtOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpOyB9LFxuICAgICAgICAvLyB0aGUgbW9udGggbnVtYmVyICgxLTEyKVxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTsgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwLTU5XG4gICAgICAgIHM6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFNlY29uZHMoKTsgfSxcbiAgICAgICAgLy8gVW5peCBNaWxsaXNlY29uZHNcbiAgICAgICAgdTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOyB9LFxuICAgICAgICAvLyBudW1iZXIgb2YgdGhlIGRheSBvZiB0aGUgd2Vla1xuICAgICAgICB3OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXkoKTsgfSxcbiAgICAgICAgLy8gbGFzdCB0d28gZGlnaXRzIG9mIHllYXIgZS5nLiAxNiBmb3IgMjAxNlxuICAgICAgICB5OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSkuc3Vic3RyaW5nKDIpOyB9LFxuICAgIH07XG5cbiAgICB2YXIgY3JlYXRlRGF0ZUZvcm1hdHRlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jLCBfZCA9IF9hLmlzTW9iaWxlLCBpc01vYmlsZSA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGVPYmosIGZybXQsIG92ZXJyaWRlTG9jYWxlKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gb3ZlcnJpZGVMb2NhbGUgfHwgbDEwbjtcbiAgICAgICAgICAgIGlmIChjb25maWcuZm9ybWF0RGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuZm9ybWF0RGF0ZShkYXRlT2JqLCBmcm10LCBsb2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZybXRcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCJcIilcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjLCBpLCBhcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0c1tjXSAmJiBhcnJbaSAtIDFdICE9PSBcIlxcXFxcIlxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbY10oZGF0ZU9iaiwgbG9jYWxlLCBjb25maWcpXG4gICAgICAgICAgICAgICAgICAgIDogYyAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBjcmVhdGVEYXRlUGFyc2VyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBfYiA9IF9hLmNvbmZpZywgY29uZmlnID0gX2IgPT09IHZvaWQgMCA/IGRlZmF1bHRzIDogX2IsIF9jID0gX2EubDEwbiwgbDEwbiA9IF9jID09PSB2b2lkIDAgPyBlbmdsaXNoIDogX2M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgZ2l2ZW5Gb3JtYXQsIHRpbWVsZXNzLCBjdXN0b21Mb2NhbGUpIHtcbiAgICAgICAgICAgIGlmIChkYXRlICE9PSAwICYmICFkYXRlKVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gY3VzdG9tTG9jYWxlIHx8IGwxMG47XG4gICAgICAgICAgICB2YXIgcGFyc2VkRGF0ZTtcbiAgICAgICAgICAgIHZhciBkYXRlT3JpZyA9IGRhdGU7XG4gICAgICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRlICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZGF0ZS50b0ZpeGVkICE9PSB1bmRlZmluZWQgLy8gdGltZXN0YW1wXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgY29weVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gZGF0ZSBzdHJpbmdcbiAgICAgICAgICAgICAgICB2YXIgZm9ybWF0ID0gZ2l2ZW5Gb3JtYXQgfHwgKGNvbmZpZyB8fCBkZWZhdWx0cykuZGF0ZUZvcm1hdDtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZXN0ciA9IFN0cmluZyhkYXRlKS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVzdHIgPT09IFwidG9kYXlcIikge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZWxlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvWiQvLnRlc3QoZGF0ZXN0cikgfHxcbiAgICAgICAgICAgICAgICAgICAgL0dNVCQvLnRlc3QoZGF0ZXN0cikgLy8gZGF0ZXN0cmluZ3Mgdy8gdGltZXpvbmVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb25maWcgJiYgY29uZmlnLnBhcnNlRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IGNvbmZpZy5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAhY29uZmlnIHx8ICFjb25maWcubm9DYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLCAwLCAxLCAwLCAwLCAwLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUobmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gdm9pZCAwLCBvcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG1hdGNoSW5kZXggPSAwLCByZWdleFN0ciA9IFwiXCI7IGkgPCBmb3JtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbl8xID0gZm9ybWF0W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQmFja1NsYXNoID0gdG9rZW5fMSA9PT0gXCJcXFxcXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZvcm1hdFtpIC0gMV0gPT09IFwiXFxcXFwiIHx8IGlzQmFja1NsYXNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuUmVnZXhbdG9rZW5fMV0gJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSB0b2tlblJlZ2V4W3Rva2VuXzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IG5ldyBSZWdFeHAocmVnZXhTdHIpLmV4ZWMoZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIChtYXRjaGVkID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzW3Rva2VuXzEgIT09IFwiWVwiID8gXCJwdXNoXCIgOiBcInVuc2hpZnRcIl0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHJldkZvcm1hdFt0b2tlbl8xXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogbWF0Y2hbKyttYXRjaEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzQmFja1NsYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IFwiLlwiOyAvLyBkb24ndCByZWFsbHkgY2FyZVxuICAgICAgICAgICAgICAgICAgICAgICAgb3BzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gX2EuZm4sIHZhbCA9IF9hLnZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlZERhdGUgPSBmbihwYXJzZWREYXRlLCB2YWwsIGxvY2FsZSkgfHwgcGFyc2VkRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbWF0Y2hlZCA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGlmICghKHBhcnNlZERhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihwYXJzZWREYXRlLmdldFRpbWUoKSkpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgcHJvdmlkZWQ6IFwiICsgZGF0ZU9yaWcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRpbWVsZXNzID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgaW4gZGF0ZXMsIG1lYXN1cmVkIGluIG1zXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZURhdGVzKGRhdGUxLCBkYXRlMiwgdGltZWxlc3MpIHtcbiAgICAgICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgICAgIGlmICh0aW1lbGVzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUoZGF0ZTEuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSAtXG4gICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGUxLmdldFRpbWUoKSAtIGRhdGUyLmdldFRpbWUoKTtcbiAgICB9XG4gICAgdmFyIGlzQmV0d2VlbiA9IGZ1bmN0aW9uICh0cywgdHMxLCB0czIpIHtcbiAgICAgICAgcmV0dXJuIHRzID4gTWF0aC5taW4odHMxLCB0czIpICYmIHRzIDwgTWF0aC5tYXgodHMxLCB0czIpO1xuICAgIH07XG4gICAgdmFyIGR1cmF0aW9uID0ge1xuICAgICAgICBEQVk6IDg2NDAwMDAwLFxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBPYmplY3QuYXNzaWduID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHRhcmdldFtrZXldID0gc291cmNlW2tleV0pOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBhcmdzXzEgPSBhcmdzOyBfYSA8IGFyZ3NfMS5sZW5ndGg7IF9hKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gYXJnc18xW19hXTtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKHNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBERUJPVU5DRURfQ0hBTkdFX01TID0gMzAwO1xuICAgIGZ1bmN0aW9uIEZsYXRwaWNrckluc3RhbmNlKGVsZW1lbnQsIGluc3RhbmNlQ29uZmlnKSB7XG4gICAgICAgIHZhciBzZWxmID0ge1xuICAgICAgICAgICAgY29uZmlnOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdHMpLCBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyksXG4gICAgICAgICAgICBsMTBuOiBlbmdsaXNoLFxuICAgICAgICB9O1xuICAgICAgICBzZWxmLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoeyBjb25maWc6IHNlbGYuY29uZmlnLCBsMTBuOiBzZWxmLmwxMG4gfSk7XG4gICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgIHNlbGYucGx1Z2luRWxlbWVudHMgPSBbXTtcbiAgICAgICAgc2VsZi5sb2FkZWRQbHVnaW5zID0gW107XG4gICAgICAgIHNlbGYuX2JpbmQgPSBiaW5kO1xuICAgICAgICBzZWxmLl9zZXRIb3Vyc0Zyb21EYXRlID0gc2V0SG91cnNGcm9tRGF0ZTtcbiAgICAgICAgc2VsZi5fcG9zaXRpb25DYWxlbmRhciA9IHBvc2l0aW9uQ2FsZW5kYXI7XG4gICAgICAgIHNlbGYuY2hhbmdlTW9udGggPSBjaGFuZ2VNb250aDtcbiAgICAgICAgc2VsZi5jaGFuZ2VZZWFyID0gY2hhbmdlWWVhcjtcbiAgICAgICAgc2VsZi5jbGVhciA9IGNsZWFyO1xuICAgICAgICBzZWxmLmNsb3NlID0gY2xvc2U7XG4gICAgICAgIHNlbGYuX2NyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50O1xuICAgICAgICBzZWxmLmRlc3Ryb3kgPSBkZXN0cm95O1xuICAgICAgICBzZWxmLmlzRW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgc2VsZi5qdW1wVG9EYXRlID0ganVtcFRvRGF0ZTtcbiAgICAgICAgc2VsZi5vcGVuID0gb3BlbjtcbiAgICAgICAgc2VsZi5yZWRyYXcgPSByZWRyYXc7XG4gICAgICAgIHNlbGYuc2V0ID0gc2V0O1xuICAgICAgICBzZWxmLnNldERhdGUgPSBzZXREYXRlO1xuICAgICAgICBzZWxmLnRvZ2dsZSA9IHRvZ2dsZTtcbiAgICAgICAgZnVuY3Rpb24gc2V0dXBIZWxwZXJGdW5jdGlvbnMoKSB7XG4gICAgICAgICAgICBzZWxmLnV0aWxzID0ge1xuICAgICAgICAgICAgICAgIGdldERheXNJbk1vbnRoOiBmdW5jdGlvbiAobW9udGgsIHlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gdm9pZCAwKSB7IG1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHlyID09PSB2b2lkIDApIHsgeXIgPSBzZWxmLmN1cnJlbnRZZWFyOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gMSAmJiAoKHlyICUgNCA9PT0gMCAmJiB5ciAlIDEwMCAhPT0gMCkgfHwgeXIgJSA0MDAgPT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sMTBuLmRheXNJbk1vbnRoW21vbnRoXTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICAgICAgc2VsZi5lbGVtZW50ID0gc2VsZi5pbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgcGFyc2VDb25maWcoKTtcbiAgICAgICAgICAgIHNldHVwTG9jYWxlKCk7XG4gICAgICAgICAgICBzZXR1cElucHV0cygpO1xuICAgICAgICAgICAgc2V0dXBEYXRlcygpO1xuICAgICAgICAgICAgc2V0dXBIZWxwZXJGdW5jdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICBidWlsZCgpO1xuICAgICAgICAgICAgYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggfHwgc2VsZi5jb25maWcubm9DYWxlbmRhcikge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoc2VsZi5jb25maWcubm9DYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiB8fCBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldENhbGVuZGFyV2lkdGgoKTtcbiAgICAgICAgICAgIHZhciBpc1NhZmFyaSA9IC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgICAgICAvKiBUT0RPOiBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXJcbiAgICAgICAgXG4gICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlcmUgaXMgd2VpcmQgcG9zaXRpb25pbmcgYmVoYXZpb3IgaW4gc2FmYXJpIGNhdXNpbmcgcGFnZXNcbiAgICAgICAgICAgICAgdG8gc2Nyb2xsIHVwLiBodHRwczovL2dpdGh1Yi5jb20vY2htbG4vZmxhdHBpY2tyL2lzc3Vlcy81NjNcbiAgICAgICAgXG4gICAgICAgICAgICAgIEhvd2V2ZXIsIG1vc3QgYnJvd3NlcnMgYXJlIG5vdCBTYWZhcmkgYW5kIHBvc2l0aW9uaW5nIGlzIGV4cGVuc2l2ZSB3aGVuIHVzZWRcbiAgICAgICAgICAgICAgaW4gc2NhbGUuIGh0dHBzOi8vZ2l0aHViLmNvbS9jaG1sbi9mbGF0cGlja3IvaXNzdWVzLzEwOTZcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXNlbGYuaXNNb2JpbGUgJiYgaXNTYWZhcmkpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblJlYWR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJpbmRUb0luc3RhbmNlKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYmluZChzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRDYWxlbmRhcldpZHRoKCkge1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHNlbGYuY29uZmlnO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy53ZWVrTnVtYmVycyA9PT0gZmFsc2UgJiYgY29uZmlnLnNob3dNb250aHMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcubm9DYWxlbmRhciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRheXNXaWR0aCA9IChzZWxmLmRheXMub2Zmc2V0V2lkdGggKyAxKSAqIGNvbmZpZy5zaG93TW9udGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnN0eWxlLndpZHRoID0gZGF5c1dpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS53aWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1dpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYud2Vla1dyYXBwZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLndlZWtXcmFwcGVyLm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiZGlzcGxheVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgaGFuZGxlciBmb3IgYWxsIGV2ZW50cyB0YXJnZXRpbmcgdGhlIHRpbWUgaW5wdXRzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVUaW1lKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHREYXRlID0gc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoc2VsZi5jb25maWcubWluRGF0ZS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICB2YXIgX2EgPSBnZXREZWZhdWx0SG91cnMoKSwgaG91cnMgPSBfYS5ob3VycywgbWludXRlcyA9IF9hLm1pbnV0ZXMsIHNlY29uZHMgPSBfYS5zZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCAwKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGVmYXVsdERhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlICE9PSB1bmRlZmluZWQgJiYgZS50eXBlICE9PSBcImJsdXJcIikge1xuICAgICAgICAgICAgICAgIHRpbWVXcmFwcGVyKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHNlbGYuX2lucHV0LnZhbHVlO1xuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0LnZhbHVlICE9PSBwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbXBtMm1pbGl0YXJ5KGhvdXIsIGFtUE0pIHtcbiAgICAgICAgICAgIHJldHVybiAoaG91ciAlIDEyKSArIDEyICogaW50KGFtUE0gPT09IHNlbGYubDEwbi5hbVBNWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtaWxpdGFyeTJhbXBtKGhvdXIpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoaG91ciAlIDI0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91ciAlIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTeW5jcyB0aGUgc2VsZWN0ZWQgZGF0ZSBvYmplY3QgdGltZSB3aXRoIHVzZXIncyB0aW1lIGlucHV0XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzZXRIb3Vyc0Zyb21JbnB1dHMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IHNlbGYubWludXRlRWxlbWVudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob3VycyA9IChwYXJzZUludChzZWxmLmhvdXJFbGVtZW50LnZhbHVlLnNsaWNlKC0yKSwgMTApIHx8IDApICUgMjQsIG1pbnV0ZXMgPSAocGFyc2VJbnQoc2VsZi5taW51dGVFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MCwgc2Vjb25kcyA9IHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyAocGFyc2VJbnQoc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MFxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gYW1wbTJtaWxpdGFyeShob3Vycywgc2VsZi5hbVBNLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsaW1pdE1pbkhvdXJzID0gc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5EYXRlSGFzVGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRydWUpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgICAgICB2YXIgbGltaXRNYXhIb3VycyA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgaWYgKGxpbWl0TWF4SG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4VGltZSA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heFRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5taW4oaG91cnMsIG1heFRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtYXhUaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtaW51dGVzLCBtYXhUaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1heFRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5taW4oc2Vjb25kcywgbWF4VGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbWl0TWluSG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWluVGltZSA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pblRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pblRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5UaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1heChtaW51dGVzLCBtaW5UaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1pblRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5tYXgoc2Vjb25kcywgbWluVGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTeW5jcyB0aW1lIGlucHV0IHZhbHVlcyB3aXRoIGEgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tRGF0ZShkYXRlT2JqKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IGRhdGVPYmogfHwgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmo7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXREZWZhdWx0SG91cnMoKSB7XG4gICAgICAgICAgICB2YXIgaG91cnMgPSBzZWxmLmNvbmZpZy5kZWZhdWx0SG91cjtcbiAgICAgICAgICAgIHZhciBtaW51dGVzID0gc2VsZi5jb25maWcuZGVmYXVsdE1pbnV0ZTtcbiAgICAgICAgICAgIHZhciBzZWNvbmRzID0gc2VsZi5jb25maWcuZGVmYXVsdFNlY29uZHM7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pbkhyID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICAgIHZhciBtaW5NaW51dGVzID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1heChob3VycywgbWluSHIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWluSHIpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1heChtaW5NaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhyICYmIG1pbnV0ZXMgPT09IG1pbk1pbnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4SHIgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCk7XG4gICAgICAgICAgICAgICAgdmFyIG1heE1pbnV0ZXMgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhIcik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtYXhIcilcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGgubWluKG1heE1pbnV0ZXMsIG1pbnV0ZXMpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIgJiYgbWludXRlcyA9PT0gbWF4TWludXRlcylcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaG91cnM6IGhvdXJzLCBtaW51dGVzOiBtaW51dGVzLCBzZWNvbmRzOiBzZWNvbmRzIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGhvdXJzLCBtaW51dGVzLCBhbmQgb3B0aW9uYWxseSBzZWNvbmRzXG4gICAgICAgICAqIG9mIHRoZSBsYXRlc3Qgc2VsZWN0ZWQgZGF0ZSBvYmplY3QgYW5kIHRoZVxuICAgICAgICAgKiBjb3JyZXNwb25kaW5nIHRpbWUgaW5wdXRzXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBob3VycyB0aGUgaG91ci4gd2hldGhlciBpdHMgbWlsaXRhcnlcbiAgICAgICAgICogICAgICAgICAgICAgICAgIG9yIGFtLXBtIGdldHMgaW5mZXJyZWQgZnJvbSBjb25maWdcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IG1pbnV0ZXMgdGhlIG1pbnV0ZXNcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHNlY29uZHMgdGhlIHNlY29uZHMgKG9wdGlvbmFsKVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouc2V0SG91cnMoaG91cnMgJSAyNCwgbWludXRlcywgc2Vjb25kcyB8fCAwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5ob3VyRWxlbWVudCB8fCAhc2VsZi5taW51dGVFbGVtZW50IHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC52YWx1ZSA9IHBhZCghc2VsZi5jb25maWcudGltZV8yNGhyXG4gICAgICAgICAgICAgICAgPyAoKDEyICsgaG91cnMpICUgMTIpICsgMTIgKiBpbnQoaG91cnMgJSAxMiA9PT0gMClcbiAgICAgICAgICAgICAgICA6IGhvdXJzKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC52YWx1ZSA9IHBhZChtaW51dGVzKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVtpbnQoaG91cnMgPj0gMTIpXTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhhbmRsZXMgdGhlIHllYXIgaW5wdXQgYW5kIGluY3JlbWVudGluZyBldmVudHNcbiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgdGhlIGtleXVwIG9yIGluY3JlbWVudCBldmVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gb25ZZWFySW5wdXQoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoZXZlbnRUYXJnZXQudmFsdWUpICsgKGV2ZW50LmRlbHRhIHx8IDApO1xuICAgICAgICAgICAgaWYgKHllYXIgLyAxMDAwID4gMSB8fFxuICAgICAgICAgICAgICAgIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhL1teXFxkXS8udGVzdCh5ZWFyLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoeWVhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVzc2VudGlhbGx5IGFkZEV2ZW50TGlzdGVuZXIgKyB0cmFja2luZ1xuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gYWRkRXZlbnRMaXN0ZW5lciB0b1xuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgdGhlIGV2ZW50IG5hbWVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciB0aGUgZXZlbnQgaGFuZGxlclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gYmluZChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGV2KSB7IHJldHVybiBiaW5kKGVsZW1lbnQsIGV2LCBoYW5kbGVyLCBvcHRpb25zKTsgfSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBiaW5kKGVsLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJDaGFuZ2UoKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQWRkcyBhbGwgdGhlIG5lY2Vzc2FyeSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcud3JhcCkge1xuICAgICAgICAgICAgICAgIFtcIm9wZW5cIiwgXCJjbG9zZVwiLCBcInRvZ2dsZVwiLCBcImNsZWFyXCJdLmZvckVhY2goZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNlbGYuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtXCIgKyBldnQgKyBcIl1cIiksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpbmQoZWwsIFwiY2xpY2tcIiwgc2VsZltldnRdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIHNldHVwTW9iaWxlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRlYm91bmNlZFJlc2l6ZSA9IGRlYm91bmNlKG9uUmVzaXplLCA1MCk7XG4gICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UgPSBkZWJvdW5jZSh0cmlnZ2VyQ2hhbmdlLCBERUJPVU5DRURfQ0hBTkdFX01TKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgJiYgIS9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSlcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuZGF5c0NvbnRhaW5lciwgXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKGdldEV2ZW50VGFyZ2V0KGUpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LmJvZHksIFwia2V5ZG93blwiLCBvbktleURvd24pO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5pbmxpbmUgJiYgIXNlbGYuY29uZmlnLnN0YXRpYylcbiAgICAgICAgICAgICAgICBiaW5kKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2VkUmVzaXplKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cub250b3VjaHN0YXJ0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwidG91Y2hzdGFydFwiLCBkb2N1bWVudENsaWNrKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJjbGlja1wiLCBkb2N1bWVudENsaWNrKTtcbiAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcImZvY3VzXCIsIGRvY3VtZW50Q2xpY2ssIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5jbGlja09wZW5zID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJmb2N1c1wiLCBzZWxmLm9wZW4pO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgXCJjbGlja1wiLCBvbk1vbnRoTmF2Q2xpY2spO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgW1wia2V5dXBcIiwgXCJpbmNyZW1lbnRcIl0sIG9uWWVhcklucHV0KTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuZGF5c0NvbnRhaW5lciwgXCJjbGlja1wiLCBzZWxlY3REYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLnRpbWVDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbFRleHQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RXZlbnRUYXJnZXQoZSkuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgW1wiaW5jcmVtZW50XCJdLCB1cGRhdGVUaW1lKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgXCJibHVyXCIsIHVwZGF0ZVRpbWUsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgXCJjbGlja1wiLCB0aW1lSW5jcmVtZW50KTtcbiAgICAgICAgICAgICAgICBiaW5kKFtzZWxmLmhvdXJFbGVtZW50LCBzZWxmLm1pbnV0ZUVsZW1lbnRdLCBbXCJmb2N1c1wiLCBcImNsaWNrXCJdLCBzZWxUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5zZWNvbmRFbGVtZW50LCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuc2Vjb25kRWxlbWVudCAmJiBzZWxmLnNlY29uZEVsZW1lbnQuc2VsZWN0KCk7IH0pO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuYW1QTSwgXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsbG93SW5wdXQpXG4gICAgICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJibHVyXCIsIG9uQmx1cik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldCB0aGUgY2FsZW5kYXIgdmlldyB0byBhIHBhcnRpY3VsYXIgZGF0ZS5cbiAgICAgICAgICogQHBhcmFtIHtEYXRlfSBqdW1wRGF0ZSB0aGUgZGF0ZSB0byBzZXQgdGhlIHZpZXcgdG9cbiAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB0cmlnZ2VyQ2hhbmdlIGlmIGNoYW5nZSBldmVudHMgc2hvdWxkIGJlIHRyaWdnZXJlZFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24ganVtcFRvRGF0ZShqdW1wRGF0ZSwgdHJpZ2dlckNoYW5nZSkge1xuICAgICAgICAgICAgdmFyIGp1bXBUbyA9IGp1bXBEYXRlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHNlbGYucGFyc2VEYXRlKGp1bXBEYXRlKVxuICAgICAgICAgICAgICAgIDogc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHxcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiYgc2VsZi5jb25maWcubWluRGF0ZSA+IHNlbGYubm93XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJiBzZWxmLmNvbmZpZy5tYXhEYXRlIDwgc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYubm93KTtcbiAgICAgICAgICAgIHZhciBvbGRZZWFyID0gc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgICAgIHZhciBvbGRNb250aCA9IHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoanVtcFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IGp1bXBUby5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IGp1bXBUby5nZXRNb250aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2UgPSBcIkludmFsaWQgZGF0ZSBzdXBwbGllZDogXCIgKyBqdW1wVG87XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UgJiYgc2VsZi5jdXJyZW50WWVhciAhPT0gb2xkWWVhcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyICE9PSBvbGRZZWFyIHx8IHNlbGYuY3VycmVudE1vbnRoICE9PSBvbGRNb250aCkpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHVwL2Rvd24gYXJyb3cgaGFuZGxlciBmb3IgdGltZSBpbnB1dHNcbiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZSB0aGUgY2xpY2sgZXZlbnRcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHRpbWVJbmNyZW1lbnQoZSkge1xuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICBpZiAofmV2ZW50VGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiYXJyb3dcIikpXG4gICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQoZSwgZXZlbnRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dVcFwiKSA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluY3JlbWVudHMvZGVjcmVtZW50cyB0aGUgdmFsdWUgb2YgaW5wdXQgYXNzb2NpLVxuICAgICAgICAgKiBhdGVkIHdpdGggdGhlIHVwL2Rvd24gYXJyb3cgYnkgZGlzcGF0Y2hpbmcgYW5cbiAgICAgICAgICogXCJpbmNyZW1lbnRcIiBldmVudCBvbiB0aGUgaW5wdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGUgdGhlIGNsaWNrIGV2ZW50XG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YSB0aGUgZGlmZiAodXN1YWxseSAxIG9yIC0xKVxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0RWxlbSB0aGUgaW5wdXQgZWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50TnVtSW5wdXQoZSwgZGVsdGEsIGlucHV0RWxlbSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUgJiYgZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dEVsZW0gfHxcbiAgICAgICAgICAgICAgICAodGFyZ2V0ICYmIHRhcmdldC5wYXJlbnROb2RlICYmIHRhcmdldC5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlRXZlbnQoXCJpbmNyZW1lbnRcIik7XG4gICAgICAgICAgICBldmVudC5kZWx0YSA9IGRlbHRhO1xuICAgICAgICAgICAgaW5wdXQgJiYgaW5wdXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItY2FsZW5kYXJcIik7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChidWlsZE1vbnRoTmF2KCkpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy53ZWVrTnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2EgPSBidWlsZFdlZWtzKCksIHdlZWtXcmFwcGVyID0gX2Eud2Vla1dyYXBwZXIsIHdlZWtOdW1iZXJzID0gX2Eud2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2Vla1dyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzID0gd2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYud2Vla1dyYXBwZXIgPSB3ZWVrV3JhcHBlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5yQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1yQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lci5hcHBlbmRDaGlsZChidWlsZFdlZWtkYXlzKCkpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItZGF5c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmRheXNDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5yQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzZWxmLmlubmVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRUaW1lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyYW5nZU1vZGVcIiwgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYW5pbWF0ZVwiLCBzZWxmLmNvbmZpZy5hbmltYXRlID09PSB0cnVlKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwibXVsdGlNb250aFwiLCBzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSk7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgICAgIHZhciBjdXN0b21BcHBlbmQgPSBzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuYXBwZW5kVG8ubm9kZVR5cGUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUgfHwgc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmlubGluZSA/IFwiaW5saW5lXCIgOiBcInN0YXRpY1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VzdG9tQXBwZW5kICYmIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIHNlbGYuX2lucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13cmFwcGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5lbGVtZW50LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgIXNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFwcGVuZFRvXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93LmRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURheShjbGFzc05hbWUsIGRhdGUsIGRheU51bWJlciwgaSkge1xuICAgICAgICAgICAgdmFyIGRhdGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQoZGF0ZSwgdHJ1ZSksIGRheUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1kYXkgXCIgKyBjbGFzc05hbWUsIGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5kYXRlT2JqID0gZGF0ZTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuJGkgPSBpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYuZm9ybWF0RGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5hcmlhRGF0ZUZvcm1hdCkpO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLm5vdykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRvZGF5RGF0ZUVsZW0gPSBkYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInRvZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1jdXJyZW50XCIsIFwiZGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlSXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIGlmIChpc0RhdGVTZWxlY3RlZChkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZGF5RWxlbWVudCwgXCJzdGFydFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwiZW5kUmFuZ2VcIiwgc2VsZi5zZWxlY3RlZERhdGVzWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gXCJuZXh0TW9udGhEYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc0RhdGVJblJhbmdlKGRhdGUpICYmICFpc0RhdGVTZWxlY3RlZChkYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSAhPT0gXCJwcmV2TW9udGhEYXlcIiAmJlxuICAgICAgICAgICAgICAgIGRheU51bWJlciAlIDcgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBcIjxzcGFuIGNsYXNzPSdmbGF0cGlja3ItZGF5Jz5cIiArIHNlbGYuY29uZmlnLmdldFdlZWsoZGF0ZSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRheUNyZWF0ZVwiLCBkYXlFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkYXlFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXlFbGVtKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgIHRhcmdldE5vZGUuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgb25Nb3VzZU92ZXIodGFyZ2V0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0Rmlyc3RBdmFpbGFibGVEYXkoZGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBzdGFydE1vbnRoID0gZGVsdGEgPiAwID8gMCA6IHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxO1xuICAgICAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICAgICAgZm9yICh2YXIgbSA9IHN0YXJ0TW9udGg7IG0gIT0gZW5kTW9udGg7IG0gKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBkZWx0YSA+IDAgPyAwIDogbW9udGguY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBkZWx0YSA+IDAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggOiAtMTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSAhPSBlbmRJbmRleDsgaSArPSBkZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiYgaXNFbmFibGVkKGMuZGF0ZU9iaikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE5leHRBdmFpbGFibGVEYXkoY3VycmVudCwgZGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBnaXZlbk1vbnRoID0gY3VycmVudC5jbGFzc05hbWUuaW5kZXhPZihcIk1vbnRoXCIpID09PSAtMVxuICAgICAgICAgICAgICAgID8gY3VycmVudC5kYXRlT2JqLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICAgICAgdmFyIGxvb3BEZWx0YSA9IGRlbHRhID4gMCA/IDEgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBnaXZlbk1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGg7IG0gIT0gZW5kTW9udGg7IG0gKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoID09PSBtXG4gICAgICAgICAgICAgICAgICAgID8gY3VycmVudC4kaSArIGRlbHRhXG4gICAgICAgICAgICAgICAgICAgIDogZGVsdGEgPCAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICB2YXIgbnVtTW9udGhEYXlzID0gbW9udGguY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpID49IDAgJiYgaSA8IG51bU1vbnRoRGF5cyAmJiBpICE9IChkZWx0YSA+IDAgPyBudW1Nb250aERheXMgOiAtMSk7IGkgKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjID0gbW9udGguY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmFibGVkKGMuZGF0ZU9iaikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGN1cnJlbnQuJGkgLSBpKSA+PSBNYXRoLmFicyhkZWx0YSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChsb29wRGVsdGEpO1xuICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheShsb29wRGVsdGEpLCAwKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNPbkRheShjdXJyZW50LCBvZmZzZXQpIHtcbiAgICAgICAgICAgIHZhciBkYXlGb2N1c2VkID0gaXNJblZpZXcoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAgIHZhciBzdGFydEVsZW0gPSBjdXJyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRcbiAgICAgICAgICAgICAgICA6IGRheUZvY3VzZWRcbiAgICAgICAgICAgICAgICAgICAgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi5zZWxlY3RlZERhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZUVsZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi50b2RheURhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi50b2RheURhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi50b2RheURhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRGaXJzdEF2YWlsYWJsZURheShvZmZzZXQgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgICAgIGlmIChzdGFydEVsZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZGF5Rm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIGZvY3VzT25EYXlFbGVtKHN0YXJ0RWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXROZXh0QXZhaWxhYmxlRGF5KHN0YXJ0RWxlbSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoRGF5cyh5ZWFyLCBtb250aCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0T2ZNb250aCA9IChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCkgLSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWsgKyA3KSAlIDc7XG4gICAgICAgICAgICB2YXIgcHJldk1vbnRoRGF5cyA9IHNlbGYudXRpbHMuZ2V0RGF5c0luTW9udGgoKG1vbnRoIC0gMSArIDEyKSAlIDEyLCB5ZWFyKTtcbiAgICAgICAgICAgIHZhciBkYXlzSW5Nb250aCA9IHNlbGYudXRpbHMuZ2V0RGF5c0luTW9udGgobW9udGgsIHllYXIpLCBkYXlzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgaXNNdWx0aU1vbnRoID0gc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEsIHByZXZNb250aERheUNsYXNzID0gaXNNdWx0aU1vbnRoID8gXCJwcmV2TW9udGhEYXkgaGlkZGVuXCIgOiBcInByZXZNb250aERheVwiLCBuZXh0TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwibmV4dE1vbnRoRGF5IGhpZGRlblwiIDogXCJuZXh0TW9udGhEYXlcIjtcbiAgICAgICAgICAgIHZhciBkYXlOdW1iZXIgPSBwcmV2TW9udGhEYXlzICsgMSAtIGZpcnN0T2ZNb250aCwgZGF5SW5kZXggPSAwO1xuICAgICAgICAgICAgLy8gcHJlcGVuZCBkYXlzIGZyb20gdGhlIGVuZGluZyBvZiBwcmV2aW91cyBtb250aFxuICAgICAgICAgICAgZm9yICg7IGRheU51bWJlciA8PSBwcmV2TW9udGhEYXlzOyBkYXlOdW1iZXIrKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KHByZXZNb250aERheUNsYXNzLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU51bWJlciksIGRheU51bWJlciwgZGF5SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IGF0IDEgc2luY2UgdGhlcmUgaXMgbm8gMHRoIGRheVxuICAgICAgICAgICAgZm9yIChkYXlOdW1iZXIgPSAxOyBkYXlOdW1iZXIgPD0gZGF5c0luTW9udGg7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkoXCJcIiwgbmV3IERhdGUoeWVhciwgbW9udGgsIGRheU51bWJlciksIGRheU51bWJlciwgZGF5SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkYXlzIGZyb20gdGhlIG5leHQgbW9udGhcbiAgICAgICAgICAgIGZvciAodmFyIGRheU51bSA9IGRheXNJbk1vbnRoICsgMTsgZGF5TnVtIDw9IDQyIC0gZmlyc3RPZk1vbnRoICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgfHwgZGF5SW5kZXggJSA3ICE9PSAwKTsgZGF5TnVtKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShuZXh0TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCBkYXlOdW0gJSBkYXlzSW5Nb250aCksIGRheU51bSwgZGF5SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgdmFyIGRheUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJkYXlDb250YWluZXJcIik7XG4gICAgICAgICAgICBkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5cyk7XG4gICAgICAgICAgICByZXR1cm4gZGF5Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkRGF5cygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLmRheXNDb250YWluZXIpO1xuICAgICAgICAgICAgLy8gVE9ETzogd2VlayBudW1iZXJzIGZvciBlYWNoIG1vbnRoXG4gICAgICAgICAgICBpZiAoc2VsZi53ZWVrTnVtYmVycylcbiAgICAgICAgICAgICAgICBjbGVhck5vZGUoc2VsZi53ZWVrTnVtYmVycyk7XG4gICAgICAgICAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25maWcuc2hvd01vbnRoczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBzZWxmLmN1cnJlbnRNb250aCwgMSk7XG4gICAgICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoYnVpbGRNb250aERheXMoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnKTtcbiAgICAgICAgICAgIHNlbGYuZGF5cyA9IHNlbGYuZGF5c0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJiBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgb25Nb3VzZU92ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZE1vbnRoU3dpdGNoKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgIT09IFwiZHJvcGRvd25cIilcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgc2hvdWxkQnVpbGRNb250aCA9IGZ1bmN0aW9uIChtb250aCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICEoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgICAgICAgICBtb250aCA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaG91bGRCdWlsZE1vbnRoKGkpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBjcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhcIik7XG4gICAgICAgICAgICAgICAgbW9udGgudmFsdWUgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBpKS5nZXRNb250aCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbW9udGgudGV4dENvbnRlbnQgPSBtb250aFRvU3RyKGksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKTtcbiAgICAgICAgICAgICAgICBtb250aC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICBtb250aC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIuYXBwZW5kQ2hpbGQobW9udGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGgoKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aFwiKTtcbiAgICAgICAgICAgIHZhciBtb250aE5hdkZyYWdtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHZhciBtb250aEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiY3VyLW1vbnRoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgXCJmbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHNcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYubDEwbi5tb250aEFyaWFMYWJlbCk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLCBcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE1vbnRoID0gcGFyc2VJbnQodGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlTW9udGgoc2VsZWN0ZWRNb250aCAtIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50ID0gc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB5ZWFySW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImN1ci15ZWFyXCIsIHsgdGFiaW5kZXg6IFwiLTFcIiB9KTtcbiAgICAgICAgICAgIHZhciB5ZWFyRWxlbWVudCA9IHllYXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ueWVhckFyaWFMYWJlbCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1pblwiLCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQuZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAhIXNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGN1cnJlbnRNb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItY3VycmVudC1tb250aFwiKTtcbiAgICAgICAgICAgIGN1cnJlbnRNb250aC5hcHBlbmRDaGlsZChtb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKHllYXJJbnB1dCk7XG4gICAgICAgICAgICBtb250aE5hdkZyYWdtZW50LmFwcGVuZENoaWxkKGN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobW9udGhOYXZGcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHllYXJFbGVtZW50OiB5ZWFyRWxlbWVudCxcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQ6IG1vbnRoRWxlbWVudCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aHMoKSB7XG4gICAgICAgICAgICBjbGVhck5vZGUoc2VsZi5tb250aE5hdik7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2LmFwcGVuZENoaWxkKHNlbGYucHJldk1vbnRoTmF2KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBtLS07KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gYnVpbGRNb250aCgpO1xuICAgICAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzLnB1c2gobW9udGgueWVhckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhFbGVtZW50cy5wdXNoKG1vbnRoLm1vbnRoRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChtb250aC5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLm5leHRNb250aE5hdik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aE5hdigpIHtcbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLW1vbnRoc1wiKTtcbiAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzID0gW107XG4gICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIHNlbGYucHJldk1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItcHJldi1tb250aFwiKTtcbiAgICAgICAgICAgIHNlbGYucHJldk1vbnRoTmF2LmlubmVySFRNTCA9IHNlbGYuY29uZmlnLnByZXZBcnJvdztcbiAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItbmV4dC1tb250aFwiKTtcbiAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoTmF2LmlubmVySFRNTCA9IHNlbGYuY29uZmlnLm5leHRBcnJvdztcbiAgICAgICAgICAgIGJ1aWxkTW9udGhzKCk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZVByZXZNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3c7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5wcmV2TW9udGhOYXYsIFwiZmxhdHBpY2tyLWRpc2FibGVkXCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdyA9IGJvb2w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZU5leHRNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3c7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5uZXh0TW9udGhOYXYsIFwiZmxhdHBpY2tyLWRpc2FibGVkXCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyA9IGJvb2w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCA9IHNlbGYueWVhckVsZW1lbnRzWzBdO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9udGhOYXY7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRUaW1lKCkge1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzVGltZVwiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKVxuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm5vQ2FsZW5kYXJcIik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXRpbWVcIik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci10aW1lLXNlcGFyYXRvclwiLCBcIjpcIik7XG4gICAgICAgICAgICB2YXIgaG91cklucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItaG91clwiLCB7XG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5ob3VyQXJpYUxhYmVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ID0gaG91cklucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICB2YXIgbWludXRlSW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1taW51dGVcIiwge1xuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxmLmwxMG4ubWludXRlQXJpYUxhYmVsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgPSBtaW51dGVJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC50YWJJbmRleCA9IHNlbGYubWludXRlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0SG91cnMoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcudGltZV8yNGhyXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuZGVmYXVsdEhvdXJcbiAgICAgICAgICAgICAgICAgICAgOiBtaWxpdGFyeTJhbXBtKHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdE1pbnV0ZSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5jb25maWcuaG91ckluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLm1pbnV0ZUluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMFwiIDogXCIxXCIpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcudGltZV8yNGhyID8gXCIyM1wiIDogXCIxMlwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBcIjU5XCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGhvdXJJbnB1dCk7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChtaW51dGVJbnB1dCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcudGltZV8yNGhyKVxuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidGltZTI0aHJcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzU2Vjb25kc1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgc2Vjb25kSW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1zZWNvbmRcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50ID0gc2Vjb25kSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRTZWNvbmRzKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0U2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5taW51dGVFbGVtZW50LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2Vjb25kSW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy50aW1lXzI0aHIpIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgc2VsZi5hbVBNIGlmIGFwcHJvcHJpYXRlXG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItYW0tcG1cIiwgc2VsZi5sMTBuLmFtUE1baW50KChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuaG91ckVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikgPiAxMSldKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGl0bGUgPSBzZWxmLmwxMG4udG9nZ2xlVGl0bGU7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuYW1QTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZi50aW1lQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkV2Vla2RheXMoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcilcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtkYXlzXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtkYXlDb250YWluZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlV2Vla2RheXMoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndlZWtkYXlDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlV2Vla2RheXMoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmaXJzdERheU9mV2VlayA9IHNlbGYubDEwbi5maXJzdERheU9mV2VlaztcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5cyA9IF9fc3ByZWFkQXJyYXlzKHNlbGYubDEwbi53ZWVrZGF5cy5zaG9ydGhhbmQpO1xuICAgICAgICAgICAgaWYgKGZpcnN0RGF5T2ZXZWVrID4gMCAmJiBmaXJzdERheU9mV2VlayA8IHdlZWtkYXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlzID0gX19zcHJlYWRBcnJheXMod2Vla2RheXMuc3BsaWNlKGZpcnN0RGF5T2ZXZWVrLCB3ZWVrZGF5cy5sZW5ndGgpLCB3ZWVrZGF5cy5zcGxpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyLmNoaWxkcmVuW2ldLmlubmVySFRNTCA9IFwiXFxuICAgICAgPHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cXG4gICAgICAgIFwiICsgd2Vla2RheXMuam9pbihcIjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxhdHBpY2tyLXdlZWtkYXknPlwiKSArIFwiXFxuICAgICAgPC9zcGFuPlxcbiAgICAgIFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkV2Vla3MoKSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNXZWVrc1wiKTtcbiAgICAgICAgICAgIHZhciB3ZWVrV3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla3dyYXBwZXJcIik7XG4gICAgICAgICAgICB3ZWVrV3JhcHBlci5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci13ZWVrZGF5XCIsIHNlbGYubDEwbi53ZWVrQWJicmV2aWF0aW9uKSk7XG4gICAgICAgICAgICB2YXIgd2Vla051bWJlcnMgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtzXCIpO1xuICAgICAgICAgICAgd2Vla1dyYXBwZXIuYXBwZW5kQ2hpbGQod2Vla051bWJlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3ZWVrV3JhcHBlcjogd2Vla1dyYXBwZXIsXG4gICAgICAgICAgICAgICAgd2Vla051bWJlcnM6IHdlZWtOdW1iZXJzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGFuZ2VNb250aCh2YWx1ZSwgaXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChpc09mZnNldCA9PT0gdm9pZCAwKSB7IGlzT2Zmc2V0ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgdmFyIGRlbHRhID0gaXNPZmZzZXQgPyB2YWx1ZSA6IHZhbHVlIC0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBzZWxmLl9oaWRlUHJldk1vbnRoQXJyb3cgPT09IHRydWUpIHx8XG4gICAgICAgICAgICAgICAgKGRlbHRhID4gMCAmJiBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPT09IHRydWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoICs9IGRlbHRhO1xuICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoIDwgMCB8fCBzZWxmLmN1cnJlbnRNb250aCA+IDExKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciArPSBzZWxmLmN1cnJlbnRNb250aCA+IDExID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gKHNlbGYuY3VycmVudE1vbnRoICsgMTIpICUgMTI7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjbGVhcih0cmlnZ2VyQ2hhbmdlRXZlbnQsIHRvSW5pdGlhbCkge1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2VFdmVudCA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2VFdmVudCA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmICh0b0luaXRpYWwgPT09IHZvaWQgMCkgeyB0b0luaXRpYWwgPSB0cnVlOyB9XG4gICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0b0luaXRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IHNlbGYuX2luaXRpYWxEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IGdldERlZmF1bHRIb3VycygpLCBob3VycyA9IF9hLmhvdXJzLCBtaW51dGVzID0gX2EubWludXRlcywgc2Vjb25kcyA9IF9hLnNlY29uZHM7XG4gICAgICAgICAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlckNoYW5nZUV2ZW50IGlzIHRydWUgKGRlZmF1bHQpIG9yIGFuIEV2ZW50XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uRGVzdHJveVwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLl9oYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgaCA9IHNlbGYuX2hhbmRsZXJzW2ldO1xuICAgICAgICAgICAgICAgIGguZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGguZXZlbnQsIGguaGFuZGxlciwgaC5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLm1vYmlsZUlucHV0KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5sYXN0Q2hpbGQgJiYgd3JhcHBlci5yZW1vdmVDaGlsZCh3cmFwcGVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3cmFwcGVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh3cmFwcGVyLmZpcnN0Q2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLmZpcnN0Q2hpbGQsIHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IHNlbGYuaW5wdXQuX3R5cGU7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucmVtb3ZlQXR0cmlidXRlKFwicmVhZG9ubHlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJfc2hvd1RpbWVJbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwibGF0ZXN0U2VsZWN0ZWREYXRlT2JqXCIsXG4gICAgICAgICAgICAgICAgXCJfaGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfaGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX19oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcImlzTW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgXCJpc09wZW5cIixcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcIm1pbkRhdGVIYXNUaW1lXCIsXG4gICAgICAgICAgICAgICAgXCJtYXhEYXRlSGFzVGltZVwiLFxuICAgICAgICAgICAgICAgIFwiZGF5c1wiLFxuICAgICAgICAgICAgICAgIFwiZGF5c0NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwiX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJfcG9zaXRpb25FbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJpbm5lckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwickNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcInRvZGF5RGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcImNhbGVuZGFyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJ3ZWVrZGF5Q29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2TW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcIm5leHRNb250aE5hdlwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhzRHJvcGRvd25Db250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcImN1cnJlbnRNb250aEVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcImN1cnJlbnRZZWFyRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwibmF2aWdhdGlvbkN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgICAgIFwic2VsZWN0ZWREYXRlRWxlbVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnXCIsXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZltrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNDYWxlbmRhckVsZW0oZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICYmIHNlbGYuY29uZmlnLmFwcGVuZFRvLmNvbnRhaW5zKGVsZW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY29udGFpbnMoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZG9jdW1lbnRDbGljayhlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldF8xID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ2FsZW5kYXJFbGVtZW50ID0gaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBldmVudFRhcmdldF8xID09PSBzZWxmLmlucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuYWx0SW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0XzEpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlYiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIGUucGF0aCBpcyBub3QgcHJlc2VudCBpbiBhbGwgYnJvd3NlcnMuIGNpcmN1bXZlbnRpbmcgdHlwZWNoZWNrc1xuICAgICAgICAgICAgICAgICAgICAoZS5wYXRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhdGguaW5kZXhPZiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKH5lLnBhdGguaW5kZXhPZihzZWxmLmlucHV0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5lLnBhdGguaW5kZXhPZihzZWxmLmFsdElucHV0KSkpO1xuICAgICAgICAgICAgICAgIHZhciBsb3N0Rm9jdXMgPSBlLnR5cGUgPT09IFwiYmx1clwiXG4gICAgICAgICAgICAgICAgICAgID8gaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWxhdGVkVGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICA6ICFpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIHZhciBpc0lnbm9yZWQgPSAhc2VsZi5jb25maWcuaWdub3JlZEZvY3VzRWxlbWVudHMuc29tZShmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jb250YWlucyhldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobG9zdEZvY3VzICYmIGlzSWdub3JlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi50aW1lQ29udGFpbmVyICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgIT09IFwiXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGFuZ2VZZWFyKG5ld1llYXIpIHtcbiAgICAgICAgICAgIGlmICghbmV3WWVhciB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlICYmIG5ld1llYXIgPCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiYgbmV3WWVhciA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIG5ld1llYXJOdW0gPSBuZXdZZWFyLCBpc05ld1llYXIgPSBzZWxmLmN1cnJlbnRZZWFyICE9PSBuZXdZZWFyTnVtO1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IG5ld1llYXJOdW0gfHwgc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1pbihzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IE1hdGgubWF4KHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKSwgc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0VuYWJsZWQoZGF0ZSwgdGltZWxlc3MpIHtcbiAgICAgICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdm9pZCAwKSB7IHRpbWVsZXNzID0gdHJ1ZTsgfVxuICAgICAgICAgICAgdmFyIGRhdGVUb0NoZWNrID0gc2VsZi5wYXJzZURhdGUoZGF0ZSwgdW5kZWZpbmVkLCB0aW1lbGVzcyk7IC8vIHRpbWVsZXNzXG4gICAgICAgICAgICBpZiAoKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlVG9DaGVjaywgc2VsZi5jb25maWcubWluRGF0ZSwgdGltZWxlc3MgIT09IHVuZGVmaW5lZCA/IHRpbWVsZXNzIDogIXNlbGYubWluRGF0ZUhhc1RpbWUpIDwgMCkgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjayAmJlxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1heERhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1heERhdGVIYXNUaW1lKSA+IDApKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGUubGVuZ3RoID09PSAwICYmIHNlbGYuY29uZmlnLmRpc2FibGUubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKGRhdGVUb0NoZWNrID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgdmFyIGJvb2wgPSBzZWxmLmNvbmZpZy5lbmFibGUubGVuZ3RoID4gMCwgYXJyYXkgPSBib29sID8gc2VsZi5jb25maWcuZW5hYmxlIDogc2VsZi5jb25maWcuZGlzYWJsZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBkID0gdm9pZCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkID0gYXJyYXlbaV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZChkYXRlVG9DaGVjaykgLy8gZGlzYWJsZWQgYnkgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGQgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZC5nZXRUaW1lKCkgPT09IGRhdGVUb0NoZWNrLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgZGF0ZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZCA9PT0gXCJzdHJpbmdcIiAmJiBkYXRlVG9DaGVjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZWQgPSBzZWxmLnBhcnNlRGF0ZShkLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkICYmIHBhcnNlZC5nZXRUaW1lKCkgPT09IGRhdGVUb0NoZWNrLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBib29sXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICFib29sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSByYW5nZVxuICAgICAgICAgICAgICAgIHR5cGVvZiBkID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZC5mcm9tICYmXG4gICAgICAgICAgICAgICAgICAgIGQudG8gJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2suZ2V0VGltZSgpID49IGQuZnJvbS5nZXRUaW1lKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2suZ2V0VGltZSgpIDw9IGQudG8uZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhYm9vbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc0luVmlldyhlbGVtKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIChlbGVtLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZS5pbmRleE9mKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuY29udGFpbnMoZWxlbSkpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uQmx1cihlKSB7XG4gICAgICAgICAgICB2YXIgaXNJbnB1dCA9IGUudGFyZ2V0ID09PSBzZWxmLl9pbnB1dDtcbiAgICAgICAgICAgIGlmIChpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgIShlLnJlbGF0ZWRUYXJnZXQgJiYgaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIHRydWUsIGUudGFyZ2V0ID09PSBzZWxmLmFsdElucHV0XG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYWx0Rm9ybWF0XG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICAgICAgICAgIC8vIGUua2V5ICAgICAgICAgICAgICAgICAgICAgIGUua2V5Q29kZVxuICAgICAgICAgICAgLy8gXCJCYWNrc3BhY2VcIiAgICAgICAgICAgICAgICAgICAgICAgIDhcbiAgICAgICAgICAgIC8vIFwiVGFiXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAvLyBcIkVudGVyXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAxM1xuICAgICAgICAgICAgLy8gXCJFc2NhcGVcIiAgICAgKElFIFwiRXNjXCIpICAgICAgICAgICAyN1xuICAgICAgICAgICAgLy8gXCJBcnJvd0xlZnRcIiAgKElFIFwiTGVmdFwiKSAgICAgICAgICAzN1xuICAgICAgICAgICAgLy8gXCJBcnJvd1VwXCIgICAgKElFIFwiVXBcIikgICAgICAgICAgICAzOFxuICAgICAgICAgICAgLy8gXCJBcnJvd1JpZ2h0XCIgKElFIFwiUmlnaHRcIikgICAgICAgICAzOVxuICAgICAgICAgICAgLy8gXCJBcnJvd0Rvd25cIiAgKElFIFwiRG93blwiKSAgICAgICAgICA0MFxuICAgICAgICAgICAgLy8gXCJEZWxldGVcIiAgICAgKElFIFwiRGVsXCIpICAgICAgICAgICA0NlxuICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2YXIgaXNJbnB1dCA9IHNlbGYuY29uZmlnLndyYXBcbiAgICAgICAgICAgICAgICA/IGVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXQpXG4gICAgICAgICAgICAgICAgOiBldmVudFRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgICAgICB2YXIgYWxsb3dJbnB1dCA9IHNlbGYuY29uZmlnLmFsbG93SW5wdXQ7XG4gICAgICAgICAgICB2YXIgYWxsb3dLZXlkb3duID0gc2VsZi5pc09wZW4gJiYgKCFhbGxvd0lucHV0IHx8ICFpc0lucHV0KTtcbiAgICAgICAgICAgIHZhciBhbGxvd0lubGluZUtleWRvd24gPSBzZWxmLmNvbmZpZy5pbmxpbmUgJiYgaXNJbnB1dCAmJiAhYWxsb3dJbnB1dDtcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmIGlzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIHRydWUsIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFsdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50VGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0KSB8fFxuICAgICAgICAgICAgICAgIGFsbG93S2V5ZG93biB8fFxuICAgICAgICAgICAgICAgIGFsbG93SW5saW5lS2V5ZG93bikge1xuICAgICAgICAgICAgICAgIHZhciBpc1RpbWVPYmogPSAhIXNlbGYudGltZUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY29udGFpbnMoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RGF0ZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OiAvLyBlc2NhcGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnB1dCAmJiAhc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaW1lT2JqICYmICFpc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3dJbnB1dCA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhXzEgPSBlLmtleUNvZGUgPT09IDM5ID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGgoZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuaG91ckVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBlLmtleUNvZGUgPT09IDQwID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWxmLmRheXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldC4kaSAhPT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmlucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPT09IHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheSgxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1RpbWVPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YSAqIDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUYXJnZXQgPT09IHNlbGYuY3VycmVudFllYXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaW1lT2JqICYmIHNlbGYuaG91ckVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RpbWVPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYucGx1Z2luRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gZWxlbXMuaW5kZXhPZihldmVudFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlbGVtc1tpICsgKGUuc2hpZnRLZXkgPyAtMSA6IDEpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IHx8IHNlbGYuX2lucHV0KS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50VGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCAmJiBldmVudFRhcmdldCA9PT0gc2VsZi5hbVBNKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID0gc2VsZi5sMTBuLmFtUE1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnB1dCB8fCBpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbktleURvd25cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25Nb3VzZU92ZXIoZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgICAgICAoZWxlbSAmJlxuICAgICAgICAgICAgICAgICAgICAoIWVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaG92ZXJEYXRlID0gZWxlbVxuICAgICAgICAgICAgICAgID8gZWxlbS5kYXRlT2JqLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5kYXlzLmZpcnN0RWxlbWVudENoaWxkLmRhdGVPYmouZ2V0VGltZSgpLCBpbml0aWFsRGF0ZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdW5kZWZpbmVkLCB0cnVlKS5nZXRUaW1lKCksIHJhbmdlU3RhcnREYXRlID0gTWF0aC5taW4oaG92ZXJEYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpKSwgcmFuZ2VFbmREYXRlID0gTWF0aC5tYXgoaG92ZXJEYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIHZhciBjb250YWluc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgbWluUmFuZ2UgPSAwLCBtYXhSYW5nZSA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciB0ID0gcmFuZ2VTdGFydERhdGU7IHQgPCByYW5nZUVuZERhdGU7IHQgKz0gZHVyYXRpb24uREFZKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQobmV3IERhdGUodCksIHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnNEaXNhYmxlZCB8fCAodCA+IHJhbmdlU3RhcnREYXRlICYmIHQgPCByYW5nZUVuZERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8IGluaXRpYWxEYXRlICYmICghbWluUmFuZ2UgfHwgdCA+IG1pblJhbmdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblJhbmdlID0gdDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodCA+IGluaXRpYWxEYXRlICYmICghbWF4UmFuZ2UgfHwgdCA8IG1heFJhbmdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFJhbmdlID0gdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IHNlbGYuY29uZmlnLnNob3dNb250aHM7IG0rKykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHNlbGYuZGF5c0NvbnRhaW5lci5jaGlsZHJlblttXTtcbiAgICAgICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpLCBsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXlFbGVtID0gbW9udGguY2hpbGRyZW5baV0sIGRhdGUgPSBkYXlFbGVtLmRhdGVPYmo7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG91dE9mUmFuZ2UgPSAobWluUmFuZ2UgPiAwICYmIHRpbWVzdGFtcCA8IG1pblJhbmdlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG1heFJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPiBtYXhSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRPZlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJub3RBbGxvd2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wiaW5SYW5nZVwiLCBcInN0YXJ0UmFuZ2VcIiwgXCJlbmRSYW5nZVwiXS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRhaW5zRGlzYWJsZWQgJiYgIW91dE9mUmFuZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICBbXCJzdGFydFJhbmdlXCIsIFwiaW5SYW5nZVwiLCBcImVuZFJhbmdlXCIsIFwibm90QWxsb3dlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5yZW1vdmUoYyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoaG92ZXJEYXRlIDw9IHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwic3RhcnRSYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImVuZFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRlIDwgaG92ZXJEYXRlICYmIHRpbWVzdGFtcCA9PT0gaW5pdGlhbERhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwic3RhcnRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gaG92ZXJEYXRlICYmIHRpbWVzdGFtcCA9PT0gaW5pdGlhbERhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiZW5kUmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZXN0YW1wID49IG1pblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heFJhbmdlID09PSAwIHx8IHRpbWVzdGFtcCA8PSBtYXhSYW5nZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0JldHdlZW4odGltZXN0YW1wLCBpbml0aWFsRGF0ZSwgaG92ZXJEYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG1vbnRoLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKGksIGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzT3BlbiAmJiAhc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9wZW4oZSwgcG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb25FbGVtZW50ID09PSB2b2lkIDApIHsgcG9zaXRpb25FbGVtZW50ID0gc2VsZi5fcG9zaXRpb25FbGVtZW50OyB9XG4gICAgICAgICAgICBpZiAoc2VsZi5pc01vYmlsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ICYmIGV2ZW50VGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLl9pbnB1dC5kaXNhYmxlZCB8fCBzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHdhc09wZW4gPSBzZWxmLmlzT3BlbjtcbiAgICAgICAgICAgIHNlbGYuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghd2FzT3Blbikge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG4gICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk9wZW5cIik7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcihwb3NpdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUgJiYgc2VsZi5jb25maWcubm9DYWxlbmRhciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0ID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICAgICAoZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZi50aW1lQ29udGFpbmVyLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5ob3VyRWxlbWVudC5zZWxlY3QoKTsgfSwgNTApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtaW5NYXhEYXRlU2V0dGVyKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlT2JqID0gKHNlbGYuY29uZmlnW1wiX1wiICsgdHlwZSArIFwiRGF0ZVwiXSA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgICAgICB2YXIgaW52ZXJzZURhdGVPYmogPSBzZWxmLmNvbmZpZ1tcIl9cIiArICh0eXBlID09PSBcIm1pblwiID8gXCJtYXhcIiA6IFwibWluXCIpICsgXCJEYXRlXCJdO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZlt0eXBlID09PSBcIm1pblwiID8gXCJtaW5EYXRlSGFzVGltZVwiIDogXCJtYXhEYXRlSGFzVGltZVwiXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRTZWNvbmRzKCkgPiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IHNlbGYuc2VsZWN0ZWREYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGlzRW5hYmxlZChkKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAmJiB0eXBlID09PSBcIm1pblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZShkYXRlT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICByZWRyYXcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVPYmogIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50W3R5cGVdID0gZGF0ZU9iai5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQuZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgISFpbnZlcnNlRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmogIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVyc2VEYXRlT2JqLmdldEZ1bGxZZWFyKCkgPT09IGRhdGVPYmouZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlQ29uZmlnKCkge1xuICAgICAgICAgICAgdmFyIGJvb2xPcHRzID0gW1xuICAgICAgICAgICAgICAgIFwid3JhcFwiLFxuICAgICAgICAgICAgICAgIFwid2Vla051bWJlcnNcIixcbiAgICAgICAgICAgICAgICBcImFsbG93SW5wdXRcIixcbiAgICAgICAgICAgICAgICBcImFsbG93SW52YWxpZFByZWxvYWRcIixcbiAgICAgICAgICAgICAgICBcImNsaWNrT3BlbnNcIixcbiAgICAgICAgICAgICAgICBcInRpbWVfMjRoclwiLFxuICAgICAgICAgICAgICAgIFwiZW5hYmxlVGltZVwiLFxuICAgICAgICAgICAgICAgIFwibm9DYWxlbmRhclwiLFxuICAgICAgICAgICAgICAgIFwiYWx0SW5wdXRcIixcbiAgICAgICAgICAgICAgICBcInNob3J0aGFuZEN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgICAgIFwiaW5saW5lXCIsXG4gICAgICAgICAgICAgICAgXCJzdGF0aWNcIixcbiAgICAgICAgICAgICAgICBcImVuYWJsZVNlY29uZHNcIixcbiAgICAgICAgICAgICAgICBcImRpc2FibGVNb2JpbGVcIixcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB2YXIgdXNlckNvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVsZW1lbnQuZGF0YXNldCB8fCB7fSkpKSwgaW5zdGFuY2VDb25maWcpO1xuICAgICAgICAgICAgdmFyIGZvcm1hdHMgPSB7fTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLnBhcnNlRGF0ZSA9IHVzZXJDb25maWcucGFyc2VEYXRlO1xuICAgICAgICAgICAgc2VsZi5jb25maWcuZm9ybWF0RGF0ZSA9IHVzZXJDb25maWcuZm9ybWF0RGF0ZTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJlbmFibGVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX2VuYWJsZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZW5hYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJkaXNhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9kaXNhYmxlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLl9kaXNhYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciB0aW1lTW9kZSA9IHVzZXJDb25maWcubW9kZSA9PT0gXCJ0aW1lXCI7XG4gICAgICAgICAgICBpZiAoIXVzZXJDb25maWcuZGF0ZUZvcm1hdCAmJiAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZUZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmRhdGVGb3JtYXQgfHwgZGVmYXVsdHMuZGF0ZUZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzLmRhdGVGb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0RGF0ZUZvcm1hdCArIFwiIEg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVzZXJDb25maWcuYWx0SW5wdXQgJiZcbiAgICAgICAgICAgICAgICAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSAmJlxuICAgICAgICAgICAgICAgICF1c2VyQ29uZmlnLmFsdEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0QWx0Rm9ybWF0ID0gZmxhdHBpY2tyLmRlZmF1bHRDb25maWcuYWx0Rm9ybWF0IHx8IGRlZmF1bHRzLmFsdEZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzLmFsdEZvcm1hdCA9XG4gICAgICAgICAgICAgICAgICAgIHVzZXJDb25maWcubm9DYWxlbmRhciB8fCB0aW1lTW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlMgS1wiIDogXCIgS1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0QWx0Rm9ybWF0ICsgKFwiIGg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpICsgXCIgS1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtaW5EYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5EYXRlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1pblwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heERhdGVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heERhdGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhEYXRlU2V0dGVyKFwibWF4XCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbWluTWF4VGltZVNldHRlciA9IGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbdHlwZSA9PT0gXCJtaW5cIiA/IFwiX21pblRpbWVcIiA6IFwiX21heFRpbWVcIl0gPSBzZWxmLnBhcnNlRGF0ZSh2YWwsIFwiSDppOlNcIik7XG4gICAgICAgICAgICB9OyB9O1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1pblRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21pblRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWluXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWF4VGltZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWF4VGltZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heFRpbWVTZXR0ZXIoXCJtYXhcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubm9DYWxlbmRhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZW5hYmxlVGltZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBmb3JtYXRzLCB1c2VyQ29uZmlnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbE9wdHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zMTY2M1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2Jvb2xPcHRzW2ldXSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSBcInRydWVcIjtcbiAgICAgICAgICAgIEhPT0tTLmZpbHRlcihmdW5jdGlvbiAoaG9vaykgeyByZXR1cm4gc2VsZi5jb25maWdbaG9va10gIT09IHVuZGVmaW5lZDsgfSkuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2hvb2tdID0gYXJyYXlpZnkoc2VsZi5jb25maWdbaG9va10gfHwgW10pLm1hcChiaW5kVG9JbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuaXNNb2JpbGUgPVxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5kaXNhYmxlTW9iaWxlICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5pbmxpbmUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSA9PT0gXCJzaW5nbGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLndlZWtOdW1iZXJzICYmXG4gICAgICAgICAgICAgICAgICAgIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25maWcucGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwbHVnaW5Db25mID0gc2VsZi5jb25maWcucGx1Z2luc1tpXShzZWxmKSB8fCB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGx1Z2luQ29uZikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoSE9PS1MuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2tleV0gPSBhcnJheWlmeShwbHVnaW5Db25mW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChiaW5kVG9JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYuY29uZmlnW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1c2VyQ29uZmlnW2tleV0gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gcGx1Z2luQ29uZltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdXNlckNvbmZpZy5hbHRJbnB1dENsYXNzKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcyA9XG4gICAgICAgICAgICAgICAgICAgIGdldElucHV0RWxlbSgpLmNsYXNzTmFtZSArIFwiIFwiICsgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUGFyc2VDb25maWdcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0SW5wdXRFbGVtKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLndyYXBcbiAgICAgICAgICAgICAgICA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLWlucHV0XVwiKVxuICAgICAgICAgICAgICAgIDogZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cExvY2FsZSgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlICE9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJmbGF0cGlja3I6IGludmFsaWQgbG9jYWxlIFwiICsgc2VsZi5jb25maWcubG9jYWxlKSk7XG4gICAgICAgICAgICBzZWxmLmwxMG4gPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zLmRlZmF1bHQpLCAodHlwZW9mIHNlbGYuY29uZmlnLmxvY2FsZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubG9jYWxlXG4gICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5sb2NhbGUgIT09IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgID8gZmxhdHBpY2tyLmwxMG5zW3NlbGYuY29uZmlnLmxvY2FsZV1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpKTtcbiAgICAgICAgICAgIHRva2VuUmVnZXguSyA9IFwiKFwiICsgc2VsZi5sMTBuLmFtUE1bMF0gKyBcInxcIiArIHNlbGYubDEwbi5hbVBNWzFdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVswXS50b0xvd2VyQ2FzZSgpICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXS50b0xvd2VyQ2FzZSgpICsgXCIpXCI7XG4gICAgICAgICAgICB2YXIgdXNlckNvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnN0YW5jZUNvbmZpZyksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpO1xuICAgICAgICAgICAgaWYgKHVzZXJDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy50aW1lXzI0aHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnRpbWVfMjRociA9IHNlbGYubDEwbi50aW1lXzI0aHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHNlbGYpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uQ2FsZW5kYXIoY3VzdG9tUG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiKTtcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbkVsZW1lbnQgPSBjdXN0b21Qb3NpdGlvbkVsZW1lbnQgfHwgc2VsZi5fcG9zaXRpb25FbGVtZW50O1xuICAgICAgICAgICAgdmFyIGNhbGVuZGFySGVpZ2h0ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2hpbGRyZW4sIChmdW5jdGlvbiAoYWNjLCBjaGlsZCkgeyByZXR1cm4gYWNjICsgY2hpbGQub2Zmc2V0SGVpZ2h0OyB9KSwgMCksIGNhbGVuZGFyV2lkdGggPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLm9mZnNldFdpZHRoLCBjb25maWdQb3MgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbi5zcGxpdChcIiBcIiksIGNvbmZpZ1Bvc1ZlcnRpY2FsID0gY29uZmlnUG9zWzBdLCBjb25maWdQb3NIb3Jpem9udGFsID0gY29uZmlnUG9zLmxlbmd0aCA+IDEgPyBjb25maWdQb3NbMV0gOiBudWxsLCBpbnB1dEJvdW5kcyA9IHBvc2l0aW9uRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZGlzdGFuY2VGcm9tQm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gaW5wdXRCb3VuZHMuYm90dG9tLCBzaG93T25Ub3AgPSBjb25maWdQb3NWZXJ0aWNhbCA9PT0gXCJhYm92ZVwiIHx8XG4gICAgICAgICAgICAgICAgKGNvbmZpZ1Bvc1ZlcnRpY2FsICE9PSBcImJlbG93XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VGcm9tQm90dG9tIDwgY2FsZW5kYXJIZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wID4gY2FsZW5kYXJIZWlnaHQpO1xuICAgICAgICAgICAgdmFyIHRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCArXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wICtcbiAgICAgICAgICAgICAgICAoIXNob3dPblRvcCA/IHBvc2l0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAyIDogLWNhbGVuZGFySGVpZ2h0IC0gMik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93VG9wXCIsICFzaG93T25Ub3ApO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd0JvdHRvbVwiLCBzaG93T25Ub3ApO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCArIGlucHV0Qm91bmRzLmxlZnQ7XG4gICAgICAgICAgICB2YXIgaXNDZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBpc1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoY29uZmlnUG9zSG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIikge1xuICAgICAgICAgICAgICAgIGxlZnQgLT0gKGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aCkgLyAyO1xuICAgICAgICAgICAgICAgIGlzQ2VudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgICAgIGxlZnQgLT0gY2FsZW5kYXJXaWR0aCAtIGlucHV0Qm91bmRzLndpZHRoO1xuICAgICAgICAgICAgICAgIGlzUmlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd0xlZnRcIiwgIWlzQ2VudGVyICYmICFpc1JpZ2h0KTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dDZW50ZXJcIiwgaXNDZW50ZXIpO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1JpZ2h0XCIsIGlzUmlnaHQpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLVxuICAgICAgICAgICAgICAgICh3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5yaWdodCk7XG4gICAgICAgICAgICB2YXIgcmlnaHRNb3N0ID0gbGVmdCArIGNhbGVuZGFyV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIHZhciBjZW50ZXJNb3N0ID0gcmlnaHQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCByaWdodE1vc3QpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcbiAgICAgICAgICAgIGlmICghcmlnaHRNb3N0KSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghY2VudGVyTW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSByaWdodCArIFwicHhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBkb2MgPSBnZXREb2N1bWVudFN0eWxlU2hlZXQoKTtcbiAgICAgICAgICAgICAgICAvLyBzb21lIHRlc3RpbmcgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgY3NzIHN1cHBvcnRcbiAgICAgICAgICAgICAgICBpZiAoZG9jID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YXIgYm9keVdpZHRoID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckxlZnQgPSBNYXRoLm1heCgwLCBib2R5V2lkdGggLyAyIC0gY2FsZW5kYXJXaWR0aCAvIDIpO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJCZWZvcmUgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIuY2VudGVyTW9zdDpiZWZvcmVcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQWZ0ZXIgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIuY2VudGVyTW9zdDphZnRlclwiO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJJbmRleCA9IGRvYy5jc3NSdWxlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlclN0eWxlID0gXCJ7bGVmdDpcIiArIGlucHV0Qm91bmRzLmxlZnQgKyBcInB4O3JpZ2h0OmF1dG87fVwiO1xuICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmlnaHRNb3N0XCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImNlbnRlck1vc3RcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZG9jLmluc2VydFJ1bGUoY2VudGVyQmVmb3JlICsgXCIsXCIgKyBjZW50ZXJBZnRlciArIGNlbnRlclN0eWxlLCBjZW50ZXJJbmRleCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gY2VudGVyTGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gXCJhdXRvXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0RG9jdW1lbnRTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgdmFyIGVkaXRhYmxlU2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlZGl0YWJsZVNoZWV0ID0gc2hlZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWRpdGFibGVTaGVldCAhPSBudWxsID8gZWRpdGFibGVTaGVldCA6IGNyZWF0ZVN0eWxlU2hlZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGUuc2hlZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmb2N1c0FuZENsb3NlKCkge1xuICAgICAgICAgICAgc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSAhPT0gLTEgfHxcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFjayAtIGJ1Z3MgaW4gdGhlIHdheSBJRSBoYW5kbGVzIGZvY3VzIGtlZXBzIHRoZSBjYWxlbmRhciBvcGVuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChzZWxmLmNsb3NlLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZWxlY3REYXRlKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB2YXIgaXNTZWxlY3RhYmxlID0gZnVuY3Rpb24gKGRheSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXkuY2xhc3NMaXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGF5XCIpICYmXG4gICAgICAgICAgICAgICAgICAgICFkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICFkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgdCA9IGZpbmRQYXJlbnQoZ2V0RXZlbnRUYXJnZXQoZSksIGlzU2VsZWN0YWJsZSk7XG4gICAgICAgICAgICBpZiAodCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0ZSA9IChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IG5ldyBEYXRlKHRhcmdldC5kYXRlT2JqLmdldFRpbWUoKSkpO1xuICAgICAgICAgICAgdmFyIHNob3VsZENoYW5nZU1vbnRoID0gKHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpIDwgc2VsZi5jdXJyZW50TW9udGggfHxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA+XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoICsgc2VsZi5jb25maWcuc2hvd01vbnRocyAtIDEpICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW3NlbGVjdGVkRGF0ZV07XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IGlzRGF0ZVNlbGVjdGVkKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5zcGxpY2UocGFyc2VJbnQoc2VsZWN0ZWRJbmRleCksIDEpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYXIoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxlY3RlZERhdGU7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3Mgc2VsZWN0aW5nIHNhbWUgZGF0ZSB0d2ljZSwgc29ydCBhc2NlbmRpbmdseVxuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlRGF0ZXMoc2VsZWN0ZWREYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VNb250aCkge1xuICAgICAgICAgICAgICAgIHZhciBpc05ld1llYXIgPSBzZWxmLmN1cnJlbnRZZWFyICE9PSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdZZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgLy8gbWFpbnRhaW4gZm9jdXNcbiAgICAgICAgICAgIGlmICghc2hvdWxkQ2hhbmdlTW9udGggJiZcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxKVxuICAgICAgICAgICAgICAgIGZvY3VzT25EYXlFbGVtKHRhcmdldCk7XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAmJiBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIHNlbGYuaG91ckVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHNpbmdsZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIgJiYgIXNlbGYuY29uZmlnLmVuYWJsZVRpbWU7XG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZVRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZSB8fCByYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBDQUxMQkFDS1MgPSB7XG4gICAgICAgICAgICBsb2NhbGU6IFtzZXR1cExvY2FsZSwgdXBkYXRlV2Vla2RheXNdLFxuICAgICAgICAgICAgc2hvd01vbnRoczogW2J1aWxkTW9udGhzLCBzZXRDYWxlbmRhcldpZHRoLCBidWlsZFdlZWtkYXlzXSxcbiAgICAgICAgICAgIG1pbkRhdGU6IFtqdW1wVG9EYXRlXSxcbiAgICAgICAgICAgIG1heERhdGU6IFtqdW1wVG9EYXRlXSxcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gc2V0KG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24gIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZi5jb25maWcsIG9wdGlvbik7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIENBTExCQUNLU1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgoKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChDQUxMQkFDS1Nbb3B0aW9uXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nbb3B0aW9uXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhPT0tTLmluZGV4T2Yob3B0aW9uKSA+IC0xKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tvcHRpb25dID0gYXJyYXlpZnkodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldFNlbGVjdGVkRGF0ZShpbnB1dERhdGUsIGZvcm1hdCkge1xuICAgICAgICAgICAgdmFyIGRhdGVzID0gW107XG4gICAgICAgICAgICBpZiAoaW5wdXREYXRlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGUubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGlucHV0RGF0ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICBkYXRlcyA9IFtzZWxmLnBhcnNlRGF0ZShpbnB1dERhdGUsIGZvcm1hdCldO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGlucHV0RGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoc2VsZi5jb25maWcubW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2luZ2xlXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IFtzZWxmLnBhcnNlRGF0ZShpbnB1dERhdGUsIGZvcm1hdCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoc2VsZi5jb25maWcuY29uanVuY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJhbmdlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZSBzdXBwbGllZDogXCIgKyBKU09OLnN0cmluZ2lmeShpbnB1dERhdGUpKSk7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSAoc2VsZi5jb25maWcuYWxsb3dJbnZhbGlkUHJlbG9hZFxuICAgICAgICAgICAgICAgID8gZGF0ZXNcbiAgICAgICAgICAgICAgICA6IGRhdGVzLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gZCBpbnN0YW5jZW9mIERhdGUgJiYgaXNFbmFibGVkKGQsIGZhbHNlKTsgfSkpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIilcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0RGF0ZShkYXRlLCB0cmlnZ2VyQ2hhbmdlLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IGZhbHNlOyB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsgZm9ybWF0ID0gc2VsZi5jb25maWcuZGF0ZUZvcm1hdDsgfVxuICAgICAgICAgICAgaWYgKChkYXRlICE9PSAwICYmICFkYXRlKSB8fCAoZGF0ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdGUubGVuZ3RoID09PSAwKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jbGVhcih0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlc1tzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAganVtcFRvRGF0ZSh1bmRlZmluZWQsIHRyaWdnZXJDaGFuZ2UpO1xuICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VEYXRlUnVsZXMoYXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyXG4gICAgICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlRGF0ZShydWxlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBydWxlLnRvKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogc2VsZi5wYXJzZURhdGUocnVsZS5mcm9tLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG86IHNlbGYucGFyc2VEYXRlKHJ1bGUudG8sIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pOyAvLyByZW1vdmUgZmFsc3kgdmFsdWVzXG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBEYXRlcygpIHtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5ub3cgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5ub3cpIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIElFMTEgc2V0dGluZyBwbGFjZWhvbGRlciBhcyB0aGUgaW5wdXQncyB2YWx1ZVxuICAgICAgICAgICAgdmFyIHByZWxvYWRlZERhdGUgPSBzZWxmLmNvbmZpZy5kZWZhdWx0RGF0ZSB8fFxuICAgICAgICAgICAgICAgICgoc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQubm9kZU5hbWUgPT09IFwiVEVYVEFSRUFcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wbGFjZWhvbGRlciAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID09PSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuaW5wdXQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByZWxvYWRlZERhdGUpXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWREYXRlKHByZWxvYWRlZERhdGUsIHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgc2VsZi5faW5pdGlhbERhdGUgPVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5zZWxlY3RlZERhdGVzWzBdXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRUaW1lKCkgPiBzZWxmLm5vdy5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRUaW1lKCkgPCBzZWxmLm5vdy5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYubm93O1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IHNlbGYuX2luaXRpYWxEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF07XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pblRpbWUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5taW5UaW1lLCBcIkg6aVwiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4VGltZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm1heFRpbWUsIFwiSDppXCIpO1xuICAgICAgICAgICAgc2VsZi5taW5EYXRlSGFzVGltZSA9XG4gICAgICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5taW5EYXRlLmdldEhvdXJzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1pbnV0ZXMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgICAgICBzZWxmLm1heERhdGVIYXNUaW1lID1cbiAgICAgICAgICAgICAgICAhIXNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRTZWNvbmRzKCkgPiAwKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cElucHV0cygpIHtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQgPSBnZXRJbnB1dEVsZW0oKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBpZiAoIXNlbGYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCBlbGVtZW50IHNwZWNpZmllZFwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFjazogc3RvcmUgcHJldmlvdXMgdHlwZSB0byByZXN0b3JlIGl0IGFmdGVyIGRlc3Ryb3koKVxuICAgICAgICAgICAgc2VsZi5pbnB1dC5fdHlwZSA9IHNlbGYuaW5wdXQudHlwZTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QuYWRkKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICAgICAgc2VsZi5faW5wdXQgPSBzZWxmLmlucHV0O1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsdElucHV0KSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGljYXRlIHNlbGYuZWxlbWVudFxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQgPSBjcmVhdGVFbGVtZW50KHNlbGYuaW5wdXQubm9kZU5hbWUsIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5hbHRJbnB1dDtcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnBsYWNlaG9sZGVyID0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LmRpc2FibGVkID0gc2VsZi5pbnB1dC5kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnRhYkluZGV4ID0gc2VsZi5pbnB1dC50YWJJbmRleDtcbiAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgc2VsZi5pbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYuYWx0SW5wdXQsIHNlbGYuaW5wdXQubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5hbGxvd0lucHV0KVxuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LnNldEF0dHJpYnV0ZShcInJlYWRvbmx5XCIsIFwicmVhZG9ubHlcIik7XG4gICAgICAgICAgICBzZWxmLl9wb3NpdGlvbkVsZW1lbnQgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbkVsZW1lbnQgfHwgc2VsZi5faW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBNb2JpbGUoKSB7XG4gICAgICAgICAgICB2YXIgaW5wdXRUeXBlID0gc2VsZi5jb25maWcuZW5hYmxlVGltZVxuICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubm9DYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICA/IFwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgOiBcImRhdGVcIjtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQgPSBjcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgc2VsZi5pbnB1dC5jbGFzc05hbWUgKyBcIiBmbGF0cGlja3ItbW9iaWxlXCIpO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50YWJJbmRleCA9IDE7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnR5cGUgPSBpbnB1dFR5cGU7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmRpc2FibGVkID0gc2VsZi5pbnB1dC5kaXNhYmxlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucmVxdWlyZWQgPSBzZWxmLmlucHV0LnJlcXVpcmVkO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5wbGFjZWhvbGRlciA9IHNlbGYuaW5wdXQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUZvcm1hdFN0ciA9XG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIlktbS1kXFxcXFRIOmk6U1wiXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXRUeXBlID09PSBcImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlktbS1kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJIOmk6U1wiO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kZWZhdWx0VmFsdWUgPSBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUpXG4gICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5taW4gPSBzZWxmLmZvcm1hdERhdGUoc2VsZi5jb25maWcubWluRGF0ZSwgXCJZLW0tZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWF4ID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1heERhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5pbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuc3RlcCA9IFN0cmluZyhzZWxmLmlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLm1vYmlsZUlucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgICAgICBiaW5kKHNlbGYubW9iaWxlSW5wdXQsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGdldEV2ZW50VGFyZ2V0KGUpLnZhbHVlLCBmYWxzZSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b2dnbGUoZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICBzZWxmLm9wZW4oZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkIGFscmVhZHksIGFsbCBob29rcyBoYXZlIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvb2tzID0gc2VsZi5jb25maWdbZXZlbnRdO1xuICAgICAgICAgICAgaWYgKGhvb2tzICE9PSB1bmRlZmluZWQgJiYgaG9va3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBob29rc1tpXSAmJiBpIDwgaG9va3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhvb2tzW2ldKHNlbGYuc2VsZWN0ZWREYXRlcywgc2VsZi5pbnB1dC52YWx1ZSwgc2VsZiwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwib25DaGFuZ2VcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImNoYW5nZVwiKSk7XG4gICAgICAgICAgICAgICAgLy8gbWFueSBmcm9udC1lbmQgZnJhbWV3b3JrcyBiaW5kIHRvIHRoZSBpbnB1dCBldmVudFxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImlucHV0XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgICAgICBlLmluaXRFdmVudChuYW1lLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0ZVNlbGVjdGVkKGRhdGUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVEYXRlcyhzZWxmLnNlbGVjdGVkRGF0ZXNbaV0sIGRhdGUpID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNEYXRlSW5SYW5nZShkYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiIHx8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSkgPj0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0pIDw9IDApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhciB8fCBzZWxmLmlzTW9iaWxlIHx8ICFzZWxmLm1vbnRoTmF2KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHllYXJFbGVtZW50LCBpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBzZWxmLmN1cnJlbnRNb250aCwgMSk7XG4gICAgICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHNbaV0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhUb1N0cihkLmdldE1vbnRoKCksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKSArIFwiIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci52YWx1ZSA9IGQuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC52YWx1ZSA9IGQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLl9oaWRlUHJldk1vbnRoQXJyb3cgPVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY3VycmVudE1vbnRoIDw9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIHNlbGYuX2hpZGVOZXh0TW9udGhBcnJvdyA9XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jdXJyZW50TW9udGggKyAxID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudFllYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldERhdGVTdHIoZm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZERhdGVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZE9iaikgeyByZXR1cm4gc2VsZi5mb3JtYXREYXRlKGRPYmosIGZvcm1hdCk7IH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZCwgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lbmFibGVUaW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKGQpID09PSBpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uXG4gICAgICAgICAgICAgICAgOiBzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIHRoZSB2YWx1ZXMgb2YgaW5wdXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsZW5kYXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5tb2JpbGVGb3JtYXRTdHIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmZvcm1hdERhdGUoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYubW9iaWxlRm9ybWF0U3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuYWx0Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblZhbHVlVXBkYXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW9udGhOYXZDbGljayhlKSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgICAgIHZhciBpc1ByZXZNb250aCA9IHNlbGYucHJldk1vbnRoTmF2LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIHZhciBpc05leHRNb250aCA9IHNlbGYubmV4dE1vbnRoTmF2LmNvbnRhaW5zKGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChpc1ByZXZNb250aCB8fCBpc05leHRNb250aCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoKGlzUHJldk1vbnRoID8gLTEgOiAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYueWVhckVsZW1lbnRzLmluZGV4T2YoZXZlbnRUYXJnZXQpID49IDApIHtcbiAgICAgICAgICAgICAgICBldmVudFRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dEb3duXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0aW1lV3JhcHBlcihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB2YXIgaXNLZXlEb3duID0gZS50eXBlID09PSBcImtleWRvd25cIiwgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKSwgaW5wdXQgPSBldmVudFRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCAmJiBldmVudFRhcmdldCA9PT0gc2VsZi5hbVBNKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRleHRDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1pblwiKSksIG1heCA9IHBhcnNlRmxvYXQoaW5wdXQuZ2V0QXR0cmlidXRlKFwibWF4XCIpKSwgc3RlcCA9IHBhcnNlRmxvYXQoaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSksIGN1clZhbHVlID0gcGFyc2VJbnQoaW5wdXQudmFsdWUsIDEwKSwgZGVsdGEgPSBlLmRlbHRhIHx8XG4gICAgICAgICAgICAgICAgKGlzS2V5RG93biA/IChlLndoaWNoID09PSAzOCA/IDEgOiAtMSkgOiAwKTtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1clZhbHVlICsgc3RlcCAqIGRlbHRhO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpbnB1dC52YWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNIb3VyRWxlbSA9IGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50LCBpc01pbnV0ZUVsZW0gPSBpbnB1dCA9PT0gc2VsZi5taW51dGVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoIWlzSG91ckVsZW0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KGlzSG91ckVsZW0pICYmIGludCghc2VsZi5hbVBNKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIC0xLCBzZWxmLmhvdXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV3VmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPT09IHNlbGYuaG91ckVsZW1lbnQgPyBuZXdWYWx1ZSAtIG1heCAtIGludCghc2VsZi5hbVBNKSA6IG1pbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWludXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KHVuZGVmaW5lZCwgMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gJiZcbiAgICAgICAgICAgICAgICAgICAgaXNIb3VyRWxlbSAmJlxuICAgICAgICAgICAgICAgICAgICAoc3RlcCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXdWYWx1ZSArIGN1clZhbHVlID09PSAyM1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLmFicyhuZXdWYWx1ZSAtIGN1clZhbHVlKSA+IHN0ZXApKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmwxMG4uYW1QTVtpbnQoc2VsZi5hbVBNLnRleHRDb250ZW50ID09PSBzZWxmLmwxMG4uYW1QTVswXSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHBhZChuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5pdCgpO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBfZmxhdHBpY2tyKG5vZGVMaXN0LCBjb25maWcpIHtcbiAgICAgICAgLy8gc3RhdGljIGxpc3RcbiAgICAgICAgdmFyIG5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgICAuY2FsbChub2RlTGlzdClcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudDsgfSk7XG4gICAgICAgIHZhciBpbnN0YW5jZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1mcC1vbWl0XCIpICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5fZmxhdHBpY2tyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLl9mbGF0cGlja3IgPSBGbGF0cGlja3JJbnN0YW5jZShub2RlLCBjb25maWcgfHwge30pO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKG5vZGUuX2ZsYXRwaWNrcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcy5sZW5ndGggPT09IDEgPyBpbnN0YW5jZXNbMF0gOiBpbnN0YW5jZXM7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2YgSFRNTENvbGxlY3Rpb24gIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIE5vZGVMaXN0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIGJyb3dzZXIgZW52XG4gICAgICAgIEhUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5mbGF0cGlja3IgPSBOb2RlTGlzdC5wcm90b3R5cGUuZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFt0aGlzXSwgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB2YXIgZmxhdHBpY2tyID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBjb25maWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3Iod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGVjdG9yIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IoW3NlbGVjdG9yXSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHNlbGVjdG9yLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnID0ge307XG4gICAgZmxhdHBpY2tyLmwxMG5zID0ge1xuICAgICAgICBlbjogX19hc3NpZ24oe30sIGVuZ2xpc2gpLFxuICAgICAgICBkZWZhdWx0OiBfX2Fzc2lnbih7fSwgZW5nbGlzaCksXG4gICAgfTtcbiAgICBmbGF0cGlja3IubG9jYWxpemUgPSBmdW5jdGlvbiAobDEwbikge1xuICAgICAgICBmbGF0cGlja3IubDEwbnMuZGVmYXVsdCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBmbGF0cGlja3IubDEwbnMuZGVmYXVsdCksIGwxMG4pO1xuICAgIH07XG4gICAgZmxhdHBpY2tyLnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyksIGNvbmZpZyk7XG4gICAgfTtcbiAgICBmbGF0cGlja3IucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7fSk7XG4gICAgZmxhdHBpY2tyLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHt9KTtcbiAgICBmbGF0cGlja3IuY29tcGFyZURhdGVzID0gY29tcGFyZURhdGVzO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGpRdWVyeS5mbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBqUXVlcnkuZm4uZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jYW1lbGNhc2VcbiAgICBEYXRlLnByb3RvdHlwZS5mcF9pbmNyID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSwgdGhpcy5nZXRNb250aCgpLCB0aGlzLmdldERhdGUoKSArICh0eXBlb2YgZGF5cyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSW50KGRheXMsIDEwKSA6IGRheXMpKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHdpbmRvdy5mbGF0cGlja3IgPSBmbGF0cGlja3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRwaWNrcjtcblxufSkpKTtcbiIsImlmKCFnbG9iYWxbXCJCYXNpc1wiXSkgZ2xvYmFsW1wiQmFzaXNcIl0gPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsW1wiQmFzaXNcIl1bXCJBZ0dyaWRDb21wb25lbnRzXCJdID0gcmVxdWlyZShcIi0hRDpcXFxcR2l0aHViXFxcXEJCakdyaWRFeFdpZGdldFxcXFxjbGllbnRcXFxcbm9kZV9tb2R1bGVzXFxcXGJhYmVsLWxvYWRlclxcXFxsaWJcXFxcaW5kZXguanM/P3JlZi0tNCEuXFxcXGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzLmpzXCIpOyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAwYmFlMDU5ZTJiNWZlMjZjNWIxMCIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi9Db21wb25lbnQnXG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0NvbXBvbmVudC9pbmRleC5qcyIsImltcG9ydCB7IGRlY29yYXRlLCBjcmVhdGVEZWZhdWx0U2V0dGVyLFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLCBnZXRPd25LZXlzLCBiaW5kIH0gZnJvbSAnLi9wcml2YXRlL3V0aWxzJztcbmNvbnN0IHsgZGVmaW5lUHJvcGVydHksIGdldFByb3RvdHlwZU9mIH0gPSBPYmplY3Q7XG5cbmxldCBtYXBTdG9yZTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRTdXBlcihvYmosIGZuKSB7XG4gIGlmICh0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVXNpbmcgQGF1dG9iaW5kIG9uICR7Zm4ubmFtZX0oKSByZXF1aXJlcyBXZWFrTWFwIHN1cHBvcnQgZHVlIHRvIGl0cyB1c2Ugb2Ygc3VwZXIuJHtmbi5uYW1lfSgpXG4gICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pheXBoZWxwcy9jb3JlLWRlY29yYXRvcnMuanMvaXNzdWVzLzIwYFxuICAgICk7XG4gIH1cblxuICBpZiAoIW1hcFN0b3JlKSB7XG4gICAgIG1hcFN0b3JlID0gbmV3IFdlYWtNYXAoKTtcbiAgfVxuXG4gIGlmIChtYXBTdG9yZS5oYXMob2JqKSA9PT0gZmFsc2UpIHtcbiAgICBtYXBTdG9yZS5zZXQob2JqLCBuZXcgV2Vha01hcCgpKTtcbiAgfVxuXG4gIGNvbnN0IHN1cGVyU3RvcmUgPSBtYXBTdG9yZS5nZXQob2JqKTtcblxuICBpZiAoc3VwZXJTdG9yZS5oYXMoZm4pID09PSBmYWxzZSkge1xuICAgIHN1cGVyU3RvcmUuc2V0KGZuLCBiaW5kKGZuLCBvYmopKTtcbiAgfVxuXG4gIHJldHVybiBzdXBlclN0b3JlLmdldChmbik7XG59XG5cbmZ1bmN0aW9uIGF1dG9iaW5kQ2xhc3Moa2xhc3MpIHtcbiAgY29uc3QgZGVzY3MgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGtsYXNzLnByb3RvdHlwZSk7XG4gIGNvbnN0IGtleXMgPSBnZXRPd25LZXlzKGRlc2NzKTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBjb25zdCBkZXNjID0gZGVzY3Nba2V5XTtcblxuICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSAhPT0gJ2Z1bmN0aW9uJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGRlZmluZVByb3BlcnR5KGtsYXNzLnByb3RvdHlwZSwga2V5LCBhdXRvYmluZE1ldGhvZChrbGFzcy5wcm90b3R5cGUsIGtleSwgZGVzYykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGF1dG9iaW5kTWV0aG9kKHRhcmdldCwga2V5LCB7IHZhbHVlOiBmbiwgY29uZmlndXJhYmxlLCBlbnVtZXJhYmxlIH0pIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgQGF1dG9iaW5kIGNhbiBvbmx5IGJlIHVzZWQgb24gZnVuY3Rpb25zLCBub3Q6ICR7Zm59YCk7XG4gIH1cblxuICBjb25zdCB7IGNvbnN0cnVjdG9yIH0gPSB0YXJnZXQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGUsXG4gICAgZW51bWVyYWJsZSxcblxuICAgIGdldCgpIHtcbiAgICAgIC8vIENsYXNzLnByb3RvdHlwZS5rZXkgbG9va3VwXG4gICAgICAvLyBTb21lb25lIGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBkaXJlY3RseSBvbiB0aGUgcHJvdG90eXBlIG9uIHdoaWNoIGl0IGlzXG4gICAgICAvLyBhY3R1YWxseSBkZWZpbmVkIG9uLCBpLmUuIENsYXNzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShrZXkpXG4gICAgICBpZiAodGhpcyA9PT0gdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xhc3MucHJvdG90eXBlLmtleSBsb29rdXBcbiAgICAgIC8vIFNvbWVvbmUgYWNjZXNzZXMgdGhlIHByb3BlcnR5IGRpcmVjdGx5IG9uIGEgcHJvdG90eXBlIGJ1dCBpdCB3YXMgZm91bmRcbiAgICAgIC8vIHVwIHRoZSBjaGFpbiwgbm90IGRlZmluZWQgZGlyZWN0bHkgb24gaXRcbiAgICAgIC8vIGkuZS4gQ2xhc3MucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtleSkgPT0gZmFsc2UgJiYga2V5IGluIENsYXNzLnByb3RvdHlwZVxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgIT09IGNvbnN0cnVjdG9yICYmIGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yID09PSBjb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gZm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF1dG9ib3VuZCBtZXRob2QgY2FsbGluZyBzdXBlci5zYW1lTWV0aG9kKCkgd2hpY2ggaXMgYWxzbyBhdXRvYm91bmQgYW5kIHNvIG9uLlxuICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgIT09IGNvbnN0cnVjdG9yICYmIGtleSBpbiB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0Qm91bmRTdXBlcih0aGlzLCBmbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kRm4gPSBiaW5kKGZuLCB0aGlzKTtcblxuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIC8vIE5PVCBlbnVtZXJhYmxlIHdoZW4gaXQncyBhIGJvdW5kIG1ldGhvZFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IGJvdW5kRm5cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYm91bmRGbjtcbiAgICB9LFxuICAgIHNldDogY3JlYXRlRGVmYXVsdFNldHRlcihrZXkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhbmRsZShhcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBhdXRvYmluZENsYXNzKC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhdXRvYmluZE1ldGhvZCguLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvYmluZCguLi5hcmdzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaGFuZGxlKGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaGFuZGxlKGFyZ3MpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9hdXRvYmluZC5qcyIsImltcG9ydCB7IGRlY29yYXRlIH0gZnJvbSAnLi9wcml2YXRlL3V0aWxzJztcblxuY29uc3QgR0VORVJJQ19GVU5DVElPTl9FUlJPUiA9ICd7Y2hpbGR9IGRvZXMgbm90IHByb3Blcmx5IG92ZXJyaWRlIHtwYXJlbnR9JztcbmNvbnN0IEZVTkNUSU9OX1JFR0VYUCA9IC9eZnVuY3Rpb24gKFtfJGEtekEtWlxceEEwLVxcdUZGRkZdW18kYS16QS1aMC05XFx4QTAtXFx1RkZGRl0qKT8oXFwoW15cXCldKlxcKSlbXFxzXFxTXSskLztcblxuY2xhc3MgU3ludGF4RXJyb3JSZXBvcnRlciB7XG4gIHBhcmVudEtsYXNzO1xuICBjaGlsZEtsYXNzO1xuICBwYXJlbnREZXNjcmlwdG9yO1xuICBjaGlsZERlc2NyaXB0b3I7XG4gIFxuICBnZXQga2V5KCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkRGVzY3JpcHRvci5rZXk7ICBcbiAgfVxuICBcbiAgZ2V0IHBhcmVudE5vdGF0aW9uKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnBhcmVudEtsYXNzLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5wYXJlbnRQcm9wZXJ0eVNpZ25hdHVyZX1gO1xuICB9XG5cbiAgZ2V0IGNoaWxkTm90YXRpb24oKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuY2hpbGRLbGFzcy5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMuY2hpbGRQcm9wZXJ0eVNpZ25hdHVyZX1gO1xuICB9XG4gIFxuICBnZXQgcGFyZW50VG9waWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFRvcGljKHRoaXMucGFyZW50RGVzY3JpcHRvcik7XG4gIH1cbiAgXG4gIGdldCBjaGlsZFRvcGljKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUb3BpYyh0aGlzLmNoaWxkRGVzY3JpcHRvcik7XG4gIH1cbiAgXG4gIF9nZXRUb3BpYyhkZXNjcmlwdG9yKSB7XG4gICAgaWYgKGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7ICBcbiAgICB9XG4gICAgXG4gICAgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfVxuICAgIFxuICAgIGlmICgnZ2V0JyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci5nZXQ7XG4gICAgfVxuICAgIFxuICAgIGlmICgnc2V0JyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci5zZXQ7XG4gICAgfVxuICB9XG4gIFxuICBnZXQgcGFyZW50UHJvcGVydHlTaWduYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhY3RUb3BpY1NpZ25hdHVyZSh0aGlzLnBhcmVudFRvcGljKTsgXG4gIH1cbiAgXG4gIGdldCBjaGlsZFByb3BlcnR5U2lnbmF0dXJlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYWN0VG9waWNTaWduYXR1cmUodGhpcy5jaGlsZFRvcGljKTsgXG4gIH1cbiAgXG4gIF9leHRyYWN0VG9waWNTaWduYXR1cmUodG9waWMpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB0b3BpYykge1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFjdEZ1bmN0aW9uU2lnbmF0dXJlKHRvcGljKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmtleTtcbiAgICB9XG4gIH1cbiAgXG4gIF9leHRyYWN0RnVuY3Rpb25TaWduYXR1cmUoZm4pIHtcbiAgICByZXR1cm4gZm5cbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucmVwbGFjZShcbiAgICAgICAgRlVOQ1RJT05fUkVHRVhQLFxuICAgICAgICAobWF0Y2gsIG5hbWUgPSB0aGlzLmtleSwgcGFyYW1zKSA9PiBuYW1lICsgcGFyYW1zXG4gICAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocGFyZW50S2xhc3MsIGNoaWxkS2xhc3MsIHBhcmVudERlc2NyaXB0b3IsIGNoaWxkRGVzY3JpcHRvcikge1xuICAgIHRoaXMucGFyZW50S2xhc3MgPSBwYXJlbnRLbGFzcztcbiAgICB0aGlzLmNoaWxkS2xhc3MgPSBjaGlsZEtsYXNzO1xuICAgIHRoaXMucGFyZW50RGVzY3JpcHRvciA9IHBhcmVudERlc2NyaXB0b3I7XG4gICAgdGhpcy5jaGlsZERlc2NyaXB0b3IgPSBjaGlsZERlc2NyaXB0b3I7XG4gIH1cbiAgXG4gIGFzc2VydChjb25kaXRpb24sIG1zZyA9ICcnKSB7XG4gICAgaWYgKGNvbmRpdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lcnJvcihHRU5FUklDX0ZVTkNUSU9OX0VSUk9SICsgbXNnKTtcbiAgICB9XG4gIH1cbiAgXG4gIGVycm9yKG1zZykge1xuICAgIG1zZyA9IG1zZ1xuICAgICAgLy8gUmVwbGFjZSBsYXppbHksIGJlY2F1c2UgdGhleSBhY3R1YWxseSBtaWdodCBub3RcbiAgICAgIC8vIGJlIGF2YWlsYWJsZSBpbiBhbGwgY2FzZXNcbiAgICAgIC5yZXBsYWNlKCd7cGFyZW50fScsIG0gPT4gdGhpcy5wYXJlbnROb3RhdGlvbilcbiAgICAgIC5yZXBsYWNlKCd7Y2hpbGR9JywgbSA9PiB0aGlzLmNoaWxkTm90YXRpb24pO1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlc2NyaXB0b3JUeXBlKGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICByZXR1cm4gJ2RhdGEnO1xuICB9XG5cbiAgaWYgKGRlc2NyaXB0b3IuaGFzT3duUHJvcGVydHkoJ2dldCcpIHx8IGRlc2NyaXB0b3IuaGFzT3duUHJvcGVydHkoJ3NldCcpKSB7XG4gICAgcmV0dXJuICdhY2Nlc3Nvcic7XG4gIH1cblxuICAvLyBJZiBub25lIG9mIHRoZW0gZXhpc3QsIGJyb3dzZXJzIHRyZWF0IGl0IGFzXG4gIC8vIGEgZGF0YSBkZXNjcmlwdG9yIHdpdGggYSB2YWx1ZSBvZiBgdW5kZWZpbmVkYFxuICByZXR1cm4gJ2RhdGEnO1xufVxuXG5mdW5jdGlvbiBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQsIGNoaWxkLCByZXBvcnRlcikge1xuICByZXBvcnRlci5hc3NlcnQocGFyZW50Lmxlbmd0aCA9PT0gY2hpbGQubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEYXRhRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgY29uc3QgcGFyZW50VmFsdWVUeXBlID0gdHlwZW9mIHBhcmVudC52YWx1ZTtcbiAgY29uc3QgY2hpbGRWYWx1ZVR5cGUgPSB0eXBlb2YgY2hpbGQudmFsdWU7XG4gIFxuICBpZiAocGFyZW50VmFsdWVUeXBlID09PSAndW5kZWZpbmVkJyAmJiBjaGlsZFZhbHVlVHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBjbGFzcyBwcm9wZXJ0aWVzIGNhbiBiZSBhbnkgZXhwcmVzc2lvbiwgd2hpY2ggaXNuJ3QgcmFuIHVudGlsIHRoZVxuICAgIC8vIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLCBzbyB3ZSBjYW4ndCByZWxpYWJseSBnZXQgdHlwZSBpbmZvcm1hdGlvblxuICAgIC8vIGZvciB0aGVtIHlldCAocGVyIHNwZWMpLiBQZXJoYXBzIHdoZW4gQmFiZWwgaW5jbHVkZXMgZmxvdy10eXBlIGluZm9cbiAgICAvLyBpbiBydW50aW1lPyBUcmllZCByZWdleCBzb2x1dGlvbnMsIGJ1dCBzdXBlciBoYWNreSBhbmQgb25seSBmZWFzaWJsZVxuICAgIC8vIG9uIHByaW1pdGl2ZXMsIHdoaWNoIGlzIGNvbmZ1c2luZyBmb3IgdXNhZ2UuLi5cbiAgICByZXBvcnRlci5lcnJvcihgZGVzY3JpcHRvciB2YWx1ZXMgYXJlIGJvdGggdW5kZWZpbmVkLiAoY2xhc3MgcHJvcGVydGllcyBhcmUgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkKSdgKTtcbiAgfVxuICBcbiAgaWYgKHBhcmVudFZhbHVlVHlwZSAhPT0gY2hpbGRWYWx1ZVR5cGUpIHtcbiAgICBjb25zdCBpc0Z1bmN0aW9uT3ZlclVuZGVmaW5lZCA9IChjaGlsZFZhbHVlVHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiBwYXJlbnRWYWx1ZVR5cGUgPT09IHVuZGVmaW5lZCk7XG4gICAgLy8gRXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBjbGFzcyBwcm9wZXJ0aWVzLCB0aGlzXG4gICAgLy8gd2lsbCBzdGlsbCBoYW5kbGUgbW9yZSB0aGFuIGp1c3QgZnVuY3Rpb25zLCBqdXN0IGluIGNhc2UuXG4gICAgLy8gU2hhZG93aW5nIGFuIHVuZGVmaW5lZCB2YWx1ZSBpcyBhbiBlcnJvciBpZiB0aGUgaW5oZXJpdGVkXG4gICAgLy8gdmFsdWUgd2FzIHVuZGVmaW5lZCAodXN1YWxseSBhIGNsYXNzIHByb3BlcnR5LCBub3QgYSBtZXRob2QpXG4gICAgaWYgKGlzRnVuY3Rpb25PdmVyVW5kZWZpbmVkIHx8IHBhcmVudFZhbHVlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXBvcnRlci5lcnJvcihgdmFsdWUgdHlwZXMgZG8gbm90IG1hdGNoLiB7cGFyZW50fSBpcyBcIiR7cGFyZW50VmFsdWVUeXBlfVwiLCB7Y2hpbGR9IGlzIFwiJHtjaGlsZFZhbHVlVHlwZX1cImApO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gU3dpdGNoLCBpbiBwcmVwYXJhdGlvbiBmb3Igc3VwcG9ydGluZyBtb3JlIHR5cGVzXG4gIHN3aXRjaCAoY2hpbGRWYWx1ZVR5cGUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICBjaGVja0Z1bmN0aW9uU2lnbmF0dXJlcyhwYXJlbnQudmFsdWUsIGNoaWxkLnZhbHVlLCByZXBvcnRlcik7XG4gICAgICBicmVhaztcbiAgICAgIFxuICAgIGRlZmF1bHQ6XG4gICAgICByZXBvcnRlci5lcnJvcihgVW5leHBlY3RlZCBlcnJvci4gUGxlYXNlIGZpbGUgYSBidWcgd2l0aDoge3BhcmVudH0gaXMgXCIke3BhcmVudFZhbHVlVHlwZX1cIiwge2NoaWxkfSBpcyBcIiR7Y2hpbGRWYWx1ZVR5cGV9XCJgKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrQWNjZXNzb3JEZXNjcmlwdG9ycyhwYXJlbnQsIGNoaWxkLCByZXBvcnRlcikge1xuICBjb25zdCBwYXJlbnRIYXNHZXR0ZXIgPSB0eXBlb2YgcGFyZW50LmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgY2hpbGRIYXNHZXR0ZXIgPSB0eXBlb2YgY2hpbGQuZ2V0ID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBwYXJlbnRIYXNTZXR0ZXIgPSB0eXBlb2YgcGFyZW50LnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgY2hpbGRIYXNTZXR0ZXIgPSB0eXBlb2YgY2hpbGQuc2V0ID09PSAnZnVuY3Rpb24nO1xuICBcbiAgaWYgKHBhcmVudEhhc0dldHRlciB8fCBjaGlsZEhhc0dldHRlcikge1xuICAgIGlmICghcGFyZW50SGFzR2V0dGVyICYmIHBhcmVudEhhc1NldHRlcikge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHtwYXJlbnR9IGlzIHNldHRlciBidXQge2NoaWxkfSBpcyBnZXR0ZXJgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFjaGlsZEhhc0dldHRlciAmJiBjaGlsZEhhc1NldHRlcikge1xuICAgICAgcmVwb3J0ZXIuZXJyb3IoYHtwYXJlbnR9IGlzIGdldHRlciBidXQge2NoaWxkfSBpcyBzZXR0ZXJgKTtcbiAgICB9XG4gICAgXG4gICAgY2hlY2tGdW5jdGlvblNpZ25hdHVyZXMocGFyZW50LmdldCwgY2hpbGQuZ2V0LCByZXBvcnRlcik7XG4gIH1cbiAgXG4gIGlmIChwYXJlbnRIYXNTZXR0ZXIgfHwgY2hpbGRIYXNTZXR0ZXIpIHtcbiAgICBpZiAoIXBhcmVudEhhc1NldHRlciAmJiBwYXJlbnRIYXNHZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBnZXR0ZXIgYnV0IHtjaGlsZH0gaXMgc2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghY2hpbGRIYXNTZXR0ZXIgJiYgY2hpbGRIYXNHZXR0ZXIpIHtcbiAgICAgIHJlcG9ydGVyLmVycm9yKGB7cGFyZW50fSBpcyBzZXR0ZXIgYnV0IHtjaGlsZH0gaXMgZ2V0dGVyYCk7XG4gICAgfVxuICAgIFxuICAgIGNoZWNrRnVuY3Rpb25TaWduYXR1cmVzKHBhcmVudC5zZXQsIGNoaWxkLnNldCwgcmVwb3J0ZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpIHtcbiAgY29uc3QgcGFyZW50VHlwZSA9IGdldERlc2NyaXB0b3JUeXBlKHBhcmVudCk7XG4gIGNvbnN0IGNoaWxkVHlwZSA9IGdldERlc2NyaXB0b3JUeXBlKGNoaWxkKTtcblxuICBpZiAocGFyZW50VHlwZSAhPT0gY2hpbGRUeXBlKSB7XG4gICAgcmVwb3J0ZXIuZXJyb3IoYGRlc2NyaXB0b3IgdHlwZXMgZG8gbm90IG1hdGNoLiB7cGFyZW50fSBpcyBcIiR7cGFyZW50VHlwZX1cIiwge2NoaWxkfSBpcyBcIiR7Y2hpbGRUeXBlfVwiYCk7XG4gIH1cblxuICBzd2l0Y2ggKGNoaWxkVHlwZSkge1xuICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgY2hlY2tEYXRhRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhY2Nlc3Nvcic6XG4gICAgICBjaGVja0FjY2Vzc29yRGVzY3JpcHRvcnMocGFyZW50LCBjaGlsZCwgcmVwb3J0ZXIpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuY29uc3Qgc3VnZ2VzdGlvblRyYW5zZm9ybXMgPSBbXG4gIGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKSxcbiAga2V5ID0+IGtleS50b1VwcGVyQ2FzZSgpLFxuICBrZXkgPT4ga2V5ICsgJ3MnLFxuICBrZXkgPT4ga2V5LnNsaWNlKDAsIC0xKSxcbiAga2V5ID0+IGtleS5zbGljZSgxLCBrZXkubGVuZ3RoKSxcbl07XG5cbmZ1bmN0aW9uIGZpbmRQb3NzaWJsZUFsdGVybmF0aXZlcyhzdXBlcktsYXNzLCBrZXkpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBzdWdnZXN0aW9uVHJhbnNmb3Jtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBmbiA9IHN1Z2dlc3Rpb25UcmFuc2Zvcm1zW2ldO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBmbihrZXkpO1xuXG4gICAgaWYgKHN1Z2dlc3Rpb24gaW4gc3VwZXJLbGFzcykge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaGFuZGxlRGVzY3JpcHRvcih0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yLmtleSA9IGtleTtcbiAgY29uc3Qgc3VwZXJLbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICBjb25zdCBzdXBlckRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN1cGVyS2xhc3MsIGtleSk7XG4gIGNvbnN0IHJlcG9ydGVyID0gbmV3IFN5bnRheEVycm9yUmVwb3J0ZXIoc3VwZXJLbGFzcywgdGFyZ2V0LCBzdXBlckRlc2NyaXB0b3IsIGRlc2NyaXB0b3IpO1xuICBcbiAgaWYgKHN1cGVyRGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgc3VnZ2VzdGVkS2V5ID0gZmluZFBvc3NpYmxlQWx0ZXJuYXRpdmVzKHN1cGVyS2xhc3MsIGtleSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RlZEtleSA/IGBcXG5cXG4gIERpZCB5b3UgbWVhbiBcIiR7c3VnZ2VzdGVkS2V5fVwiP2AgOiAnJztcbiAgICByZXBvcnRlci5lcnJvcihgTm8gZGVzY3JpcHRvciBtYXRjaGluZyB7Y2hpbGR9IHdhcyBmb3VuZCBvbiB0aGUgcHJvdG90eXBlIGNoYWluLiR7c3VnZ2VzdGlvbn1gKTtcbiAgfVxuICBcbiAgY2hlY2tEZXNjcmlwdG9ycyhzdXBlckRlc2NyaXB0b3IsIGRlc2NyaXB0b3IsIHJlcG9ydGVyKTtcbiAgXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvdmVycmlkZSguLi5hcmdzKSB7XG4gIHJldHVybiBkZWNvcmF0ZShoYW5kbGVEZXNjcmlwdG9yLCBhcmdzKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWRlY29yYXRvcnMvc3JjL292ZXJyaWRlLmpzIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBwYXNzaW5nIGZ1bmN0aW9uIGluIG9wdGlvbnMsIHRoZW4gdXNlIGl0IGZvciByZXNvbHZlIFwiaGVhZFwiIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVXNlZnVsIGZvciBTaGFkb3cgUm9vdCBzdHlsZSBpLmVcbiAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgLy8gICBpbnNlcnRJbnRvOiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Zvb1wiKS5zaGFkb3dSb290IH1cbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHZhciBzdHlsZVRhcmdldCA9IGdldFRhcmdldC5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0TGlrZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwiaW1wb3J0IGxhenlJbml0aWFsaXplIGZyb20gJy4uL2xhenktaW5pdGlhbGl6ZSc7XG5cbmNvbnN0IHsgZGVmaW5lUHJvcGVydHksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgICAgICAgZ2V0T3duUHJvcGVydHlOYW1lcywgZ2V0T3duUHJvcGVydHlTeW1ib2xzIH0gPSBPYmplY3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlc2NyaXB0b3IoZGVzYykge1xuICBpZiAoIWRlc2MgfHwgIWRlc2MuaGFzT3duUHJvcGVydHkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBrZXlzID0gWyd2YWx1ZScsICdpbml0aWFsaXplcicsICdnZXQnLCAnc2V0J107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChkZXNjLmhhc093blByb3BlcnR5KGtleXNbaV0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShoYW5kbGVEZXNjcmlwdG9yLCBlbnRyeUFyZ3MpIHtcbiAgaWYgKGlzRGVzY3JpcHRvcihlbnRyeUFyZ3NbZW50cnlBcmdzLmxlbmd0aCAtIDFdKSkge1xuICAgIHJldHVybiBoYW5kbGVEZXNjcmlwdG9yKC4uLmVudHJ5QXJncywgW10pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaGFuZGxlRGVzY3JpcHRvciguLi5BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLCBlbnRyeUFyZ3MpO1xuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTWV0YSB7XG4gIEBsYXp5SW5pdGlhbGl6ZVxuICBkZWJvdW5jZVRpbWVvdXRJZHMgPSB7fTtcblxuICBAbGF6eUluaXRpYWxpemVcbiAgdGhyb3R0bGVUaW1lb3V0SWRzID0ge307XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHRocm90dGxlUHJldmlvdXNUaW1lc3RhbXBzID0ge307XG5cbiAgQGxhenlJbml0aWFsaXplXG4gIHRocm90dGxlVHJhaWxpbmdBcmdzID0gbnVsbDtcblxuICBAbGF6eUluaXRpYWxpemVcbiAgcHJvZmlsZUxhc3RSYW4gPSBudWxsO1xufVxuXG5jb25zdCBNRVRBX0tFWSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKVxuICA/IFN5bWJvbCgnX19jb3JlX2RlY29yYXRvcnNfXycpXG4gIDogJ19fY29yZV9kZWNvcmF0b3JzX18nO1xuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUZvcihvYmopIHtcbiAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShNRVRBX0tFWSkgPT09IGZhbHNlKSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqLCBNRVRBX0tFWSwge1xuICAgICAgLy8gRGVmYXVsdHM6IE5PVCBlbnVtZXJhYmxlLCBjb25maWd1cmFibGUsIG9yIHdyaXRhYmxlXG4gICAgICB2YWx1ZTogbmV3IE1ldGEoKVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG9ialtNRVRBX0tFWV07XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPd25LZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzXG4gICAgPyBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdClcbiAgICAgICAgICAuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpKTtcbiAgICAgIH1cbiAgICA6IGdldE93blByb3BlcnR5TmFtZXM7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKSB7XG4gIGNvbnN0IGRlc2NzID0ge307XG5cbiAgZ2V0T3duS2V5cyhvYmopLmZvckVhY2goXG4gICAga2V5ID0+IChkZXNjc1trZXldID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgKTtcblxuICByZXR1cm4gZGVzY3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U2V0dGVyKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gc2V0KG5ld1ZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAvLyBJUyBlbnVtZXJhYmxlIHdoZW4gcmVhc3NpZ25lZCBieSB0aGUgb3V0c2lkZSB3b3JkXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3VmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kKGZuLCBjb250ZXh0KSB7XG4gIGlmIChmbi5iaW5kKSB7XG4gICAgcmV0dXJuIGZuLmJpbmQoY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9fYXV0b2JpbmRfXygpIHtcbiAgICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHdhcm4gPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICdvYmplY3QnIHx8ICFjb25zb2xlIHx8IHR5cGVvZiBjb25zb2xlLndhcm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJpbmQoY29uc29sZS53YXJuLCBjb25zb2xlKTtcbiAgfVxufSkoKTtcblxuY29uc3Qgc2VlbkRlcHJlY2F0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGludGVybmFsRGVwcmVjYXRpb24obXNnKSB7XG4gIGlmIChzZWVuRGVwcmVjYXRpb25zW21zZ10gIT09IHRydWUpIHtcbiAgICBzZWVuRGVwcmVjYXRpb25zW21zZ10gPSB0cnVlO1xuICAgIHdhcm4oJ0RFUFJFQ0FUSU9OOiAnICsgbXNnKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtZGVjb3JhdG9ycy9zcmMvcHJpdmF0ZS91dGlscy5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19yb290LmpzIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVxO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9lcS5qcyIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0FycmF5TGlrZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheUxpa2UuanMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBudW1iZXI7XG4gIH1cblxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi90b0ludGVnZXIvaW5kZXguanMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IEJvb2xlYW5Td2l0Y2ggZnJvbSAnLi9Cb29sZWFuU3dpdGNoJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuU3dpdGNoXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblN3aXRjaC9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBUZW1wbGF0ZVJlbmRlcmVyIGZyb20gJy4vVGVtcGxhdGVSZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RlbXBsYXRlUmVuZGVyZXIvaW5kZXguanMiLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlQXNzaWduVmFsdWUuanMiLCJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVQcm9wZXJ0eTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRnVuY3Rpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5leHBvcnQgZGVmYXVsdCBmcmVlR2xvYmFsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgb3ZlclJlc3QgZnJvbSAnLi9fb3ZlclJlc3QuanMnO1xuaW1wb3J0IHNldFRvU3RyaW5nIGZyb20gJy4vX3NldFRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSZXN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVJlc3QuanMiLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpZGVudGl0eTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaWRlbnRpdHkuanMiLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwcGx5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXBwbHkuanMiLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICA/IChpc0FycmF5TGlrZShvYmplY3QpICYmIGlzSW5kZXgoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxuICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICkge1xuICAgIHJldHVybiBlcShvYmplY3RbaW5kZXhdLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0l0ZXJhdGVlQ2FsbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzSXRlcmF0ZWVDYWxsLmpzIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xlbmd0aDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNMZW5ndGguanMiLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSW5kZXg7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc0luZGV4LmpzIiwiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNBcnJheS5qcyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWxNb2R1bGUpIHtcclxuXHRpZighb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XHJcblx0XHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XHJcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcclxuXHRcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJleHBvcnRzXCIsIHtcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdH0pO1xyXG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XHJcblx0fVxyXG5cdHJldHVybiBtb2R1bGU7XHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAod2VicGFjaykvYnVpbGRpbi9oYXJtb255LW1vZHVsZS5qcyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQcm90b3R5cGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIGBFdmFsRXJyb3JgLCBgUmFuZ2VFcnJvcmAsIGBSZWZlcmVuY2VFcnJvcmAsXG4gKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFcnJvcihFcnJvcik7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Vycm9yO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Vycm9yLmpzIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vdmVyQXJnLmpzIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlNYXA7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19hcnJheU1hcC5qcyIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVJbnRlcnBvbGF0ZSA9IC88JT0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUludGVycG9sYXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsImltcG9ydCBiYXNlVG9TdHJpbmcgZnJvbSAnLi9fYmFzZVRvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdG9TdHJpbmcuanMiLCJpbXBvcnQgeyBkZWNvcmF0ZSB9IGZyb20gJy4vcHJpdmF0ZS91dGlscyc7XG5cbmZ1bmN0aW9uIGhhbmRsZURlc2NyaXB0b3IodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVhZG9ubHkoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9yZWFkb25seS5qcyIsImltcG9ydCB0elBhcnNlVGltZXpvbmUgZnJvbSAnLi4vX2xpYi90elBhcnNlVGltZXpvbmUnXG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gJ2RhdGUtZm5zL2VzbS9zdWJNaWxsaXNlY29uZHMnXG5pbXBvcnQgdG9EYXRlIGZyb20gJy4uL3RvRGF0ZSdcblxuLyoqXG4gKiBAbmFtZSB1dGNUb1pvbmVkVGltZVxuICogQGNhdGVnb3J5IFRpbWUgWm9uZSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgYSBkYXRlL3RpbWUgcmVwcmVzZW50aW5nIGxvY2FsIHRpbWUgaW4gYSBnaXZlbiB0aW1lIHpvbmUgZnJvbSB0aGUgVVRDIGRhdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgYSBkYXRlIGluc3RhbmNlIHdpdGggdmFsdWVzIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgdGltZSBpbiB0aGUgdGltZSB6b25lXG4gKiBzcGVjaWZpZWQgb2YgdGhlIFVUQyB0aW1lIGZyb20gdGhlIGRhdGUgcHJvdmlkZWQuIEluIG90aGVyIHdvcmRzLCB3aGVuIHRoZSBuZXcgZGF0ZVxuICogaXMgZm9ybWF0dGVkIGl0IHdpbGwgc2hvdyB0aGUgZXF1aXZhbGVudCBob3VycyBpbiB0aGUgdGFyZ2V0IHRpbWUgem9uZSByZWdhcmRsZXNzXG4gKiBvZiB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSB6b25lLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxTdHJpbmd8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgd2l0aCB0aGUgcmVsZXZhbnQgVVRDIHRpbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lWm9uZSAtIHRoZSB0aW1lIHpvbmUgdG8gZ2V0IGxvY2FsIHRpbWUgZm9yLCBjYW4gYmUgYW4gb2Zmc2V0IG9yIElBTkEgdGltZSB6b25lXG4gKiBAcGFyYW0ge09wdGlvbnNXaXRoVFp9IFtvcHRpb25zXSAtIHRoZSBvYmplY3Qgd2l0aCBvcHRpb25zLiBTZWUgW09wdGlvbnNde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvT3B0aW9uc31cbiAqIEBwYXJhbSB7MHwxfDJ9IFtvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHM9Ml0gLSBwYXNzZWQgdG8gYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgZXF1aXZhbGVudCB0aW1lIGluIHRoZSB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEluIEp1bmUgMTBhbSBVVEMgaXMgNmFtIGluIE5ldyBZb3JrICgtMDQ6MDApXG4gKiBjb25zdCByZXN1bHQgPSB1dGNUb1pvbmVkVGltZSgnMjAxNC0wNi0yNVQxMDowMDowMC4wMDBaJywgJ0FtZXJpY2EvTmV3X1lvcmsnKVxuICogLy89PiBKdW4gMjUgMjAxNCAwNjowMDowMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1dGNUb1pvbmVkVGltZShkaXJ0eURhdGUsIHRpbWVab25lLCBvcHRpb25zKSB7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSwgb3B0aW9ucylcblxuICAvLyBUaGlzIGRhdGUgaGFzIHRoZSBVVEMgdGltZSB2YWx1ZXMgb2YgdGhlIGlucHV0IGRhdGUgYXQgdGhlIHN5c3RlbSB0aW1lIHpvbmVcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgZGF0ZS5nZXRVVENNb250aCgpLFxuICAgIGRhdGUuZ2V0VVRDRGF0ZSgpLFxuICAgIGRhdGUuZ2V0VVRDSG91cnMoKSxcbiAgICBkYXRlLmdldFVUQ01pbnV0ZXMoKSxcbiAgICBkYXRlLmdldFVUQ1NlY29uZHMoKSxcbiAgICBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpXG4gIClcbiAgLy8gV2UganVzdCBuZWVkIHRvIGFwcGx5IHRoZSBvZmZzZXQgaW5kaWNhdGVkIGJ5IHRoZSB0aW1lIHpvbmUgdG8gdGhpcyBsb2NhbGl6ZWQgZGF0ZVxuICB2YXIgb2Zmc2V0TWlsbGlzZWNvbmRzID0gdHpQYXJzZVRpbWV6b25lKHRpbWVab25lLCB1dGNEYXRlKVxuXG4gIHJldHVybiBvZmZzZXRNaWxsaXNlY29uZHNcbiAgICA/IHN1Yk1pbGxpc2Vjb25kcyh1dGNEYXRlLCBvZmZzZXRNaWxsaXNlY29uZHMpXG4gICAgOiB1dGNEYXRlXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL3V0Y1RvWm9uZWRUaW1lL2luZGV4LmpzIiwiaW1wb3J0IHR6VG9rZW5pemVEYXRlIGZyb20gJy4uL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzJ1xuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG5cbnZhciBwYXR0ZXJucyA9IHtcbiAgdGltZXpvbmU6IC8oW1orLV0uKikkLyxcbiAgdGltZXpvbmVaOiAvXihaKSQvLFxuICB0aW1lem9uZUhIOiAvXihbKy1dKShcXGR7Mn0pJC8sXG4gIHRpbWV6b25lSEhNTTogL14oWystXSkoXFxkezJ9KTo/KFxcZHsyfSkkLyxcbiAgdGltZXpvbmVJQU5BOiAvKFVUQ3woPzpbYS16QS1aXStcXC9bYS16QS1aX10rKD86XFwvW2EtekEtWl9dKyk/KSkkL1xufVxuXG4vLyBQYXJzZSB2YXJpb3VzIHRpbWUgem9uZSBvZmZzZXQgZm9ybWF0cyB0byBhbiBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0elBhcnNlVGltZXpvbmUodGltZXpvbmVTdHJpbmcsIGRhdGUpIHtcbiAgdmFyIHRva2VuXG4gIHZhciBhYnNvbHV0ZU9mZnNldFxuXG4gIC8vIFpcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZVouZXhlYyh0aW1lem9uZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHZhciBob3Vyc1xuXG4gIC8vIMKxaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhILmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID0gaG91cnMgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIMKxaGg6bW0gb3IgwrFoaG1tXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVISE1NLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bM10sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZVRpbWV6b25lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIGFic29sdXRlT2Zmc2V0ID1cbiAgICAgIGhvdXJzICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURVxuICAgIHJldHVybiB0b2tlblsxXSA9PT0gJysnID8gLWFic29sdXRlT2Zmc2V0IDogYWJzb2x1dGVPZmZzZXRcbiAgfVxuXG4gIC8vIElBTkEgdGltZSB6b25lXG4gIHRva2VuID0gcGF0dGVybnMudGltZXpvbmVJQU5BLmV4ZWModGltZXpvbmVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIC8vIHZhciBbZlllYXIsIGZNb250aCwgZkRheSwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZXpvbmVTdHJpbmcpXG4gICAgdmFyIHRva2VucyA9IHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWV6b25lU3RyaW5nKVxuICAgIHZhciBhc1VUQyA9IERhdGUuVVRDKFxuICAgICAgdG9rZW5zWzBdLFxuICAgICAgdG9rZW5zWzFdIC0gMSxcbiAgICAgIHRva2Vuc1syXSxcbiAgICAgIHRva2Vuc1szXSxcbiAgICAgIHRva2Vuc1s0XSxcbiAgICAgIHRva2Vuc1s1XVxuICAgIClcbiAgICB2YXIgdGltZXN0YW1wV2l0aE1zWmVyb2VkID0gZGF0ZS5nZXRUaW1lKCkgLSAoZGF0ZS5nZXRUaW1lKCkgJSAxMDAwKVxuICAgIHJldHVybiAtKGFzVVRDIC0gdGltZXN0YW1wV2l0aE1zWmVyb2VkKVxuICB9XG5cbiAgcmV0dXJuIDBcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykge1xuICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2VzbS9fbGliL3R6UGFyc2VUaW1lem9uZS9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50c01peGluLCB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuL0V2ZW50c01peGluJ1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudHNNaXhpblxuZXhwb3J0IHsgd2l0aEV2ZW50c01peGluIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9FdmVudHNNaXhpbi9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBEYXRlVGltZUlucHV0IGZyb20gJy4vRGF0ZVRpbWVJbnB1dCdcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVRpbWVJbnB1dFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0RhdGVUaW1lSW5wdXQvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkVkaXRvciBmcm9tICcuL0Jvb2xlYW5FZGl0b3InXG5pbXBvcnQgQm9vbGVhblJlbmRlcmVyIGZyb20gJy4vQm9vbGVhblJlbmRlcmVyJ1xuaW1wb3J0IEJvb2xlYW5GaWx0ZXIgZnJvbSAnLi9Cb29sZWFuRmlsdGVyJ1xuaW1wb3J0IE51bWJlckVkaXRvciBmcm9tICcuL051bWJlckVkaXRvcidcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gJy4vVGV4dEVkaXRvcidcbmltcG9ydCBUZW1wbGF0ZVJlbmRlcmVyIGZyb20gJy4vVGVtcGxhdGVSZW5kZXJlcidcbmltcG9ydCBJbWFnZVJlbmRlcmVyIGZyb20gJy4vSW1hZ2VSZW5kZXJlcidcbmltcG9ydCBEYXRlVGltZUZpbHRlciBmcm9tICcuL0RhdGVUaW1lRmlsdGVyJ1xuaW1wb3J0IERhdGVUaW1lRWRpdG9yIGZyb20gJy4vRGF0ZVRpbWVFZGl0b3InXG5cbmV4cG9ydCB7XG4gIEJvb2xlYW5FZGl0b3IsXG4gIEJvb2xlYW5SZW5kZXJlcixcbiAgQm9vbGVhbkZpbHRlcixcbiAgTnVtYmVyRWRpdG9yLFxuICBUZXh0RWRpdG9yLFxuICBUZW1wbGF0ZVJlbmRlcmVyLFxuICBJbWFnZVJlbmRlcmVyLFxuICBEYXRlVGltZUZpbHRlcixcbiAgRGF0ZVRpbWVFZGl0b3IsXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhbkVkaXRvciBmcm9tICcuL0Jvb2xlYW5FZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5FZGl0b3JcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgQm9vbGVhblN3aXRjaCBmcm9tICcuLi9Cb29sZWFuU3dpdGNoJ1xuXG4vKipcbiAqIEJvb2xlYW5zIEVkaXRvclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBFZGl0aW5nXG4gKlxuICogIyMgT3B0aW9uc1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqYm9vbGVhblVzZWRUcnVlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHJldHVybiB3aGVuIHRoZSBlZGl0b3IgY2hhbmdlcyB0aGUgY3VycmVudCBjZWxsIHZhbHVlIHRvIHRydWUuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkIHRoZW4gd2UgdXNlIHRoZSBmaXJzdCBpdGVtIGluICoqYm9vbGVhblRydWVWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVXNlZEZhbHNlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHJldHVybiB3aGVuIHRoZSBlZGl0b3IgY2hhbmdlcyB0aGUgY3VycmVudCBjZWxsIHZhbHVlIHRvIGZhbHNlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5GYWxzZVZhbHVlW10qKlxuICogfCAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqICAgICAgIHwgdHJ1ZShib29sKSAgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYHRydWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VWYWx1ZVtdKiogICAgICB8IGZhbHNlKGJvb2wpIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGBmYWxzZWBcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBCb29sZWFuRWRpdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zLmtleVByZXNzICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IEJvb2xlYW4ocGFyYW1zLmtleVByZXNzKVxuICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBCb29sZWFuKHBhcmFtcy5jaGFyUHJlc3MpXG4gICAgfVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gW10uY29uY2F0KFxuICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5UcnVlVmFsdWUnLCBwYXJhbXMsIFt0cnVlXSlcbiAgICApXG5cbiAgICB0aGlzLl9mYWxzZVZhbHVlID0gW10uY29uY2F0KFxuICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVZhbHVlJywgcGFyYW1zLCBbZmFsc2VdKVxuICAgIClcblxuICAgIHRoaXMuX3JldHVyblRydWVWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2Jvb2xlYW5Vc2VkVHJ1ZVZhbHVlJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRoaXMuX3RydWVWYWx1ZVswXVxuICAgIClcbiAgICB0aGlzLl9yZXR1cm5GYWxzZVZhbHVlID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnYm9vbGVhblVzZWRGYWxzZVZhbHVlJyxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRoaXMuX2ZhbHNlVmFsdWVbMF1cbiAgICApXG5cbiAgICB0aGlzLl90cnVlVmFsdWUgPSB0aGlzLl90cnVlVmFsdWUubWFwKHggPT4gU3RyaW5nKHgpKVxuICAgIHRoaXMuX2ZhbHNlVmFsdWUgPSB0aGlzLl9mYWxzZVZhbHVlLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgIHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkID0gcGFyYW1zLmNlbGxTdGFydGVkRWRpdFxuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKFxuICAgICAgdGhpcy5fdmFsdWUsXG4gICAgICB0aGlzLl90cnVlVmFsdWUsXG4gICAgICB0aGlzLl9mYWxzZVZhbHVlXG4gICAgKVxuXG4gICAgdGhpcy5fc3dpdGNoZXIgPSBuZXcgQm9vbGVhblN3aXRjaCh0aGlzLl92YWx1ZSwgc3dpdGNoZXIgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9jb252ZXJ0VmFsdWUoXG4gICAgICAgIHN3aXRjaGVyLmlzQ2hlY2tlZCgpLFxuICAgICAgICB0aGlzLl90cnVlVmFsdWUsXG4gICAgICAgIHRoaXMuX2ZhbHNlVmFsdWVcbiAgICAgIClcbiAgICB9KVxuICAgIHRoaXMuX3N3aXRjaGVyLmluaXQocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hlci5nZXRHdWkoKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9zd2l0Y2hlci5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqIE1ha2Ugc3VyZSB0aGUgY29udGFpbmVyIGlzIGFsd2F5cyBmb2N1c2VkIGFuZCBsaXN0ZW5pbmcgdG8ga2V5IGNoYW5nZXNcbiAgICovXG4gIGFmdGVyR3VpQXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICB0aGlzLmZvY3VzSW4oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbmFsIHZhbHVlIHRvIHRoZSBncmlkLCB0aGUgcmVzdWx0IG9mIHRoZSBlZGl0aW5nXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgPyB0aGlzLl9yZXR1cm5UcnVlVmFsdWUgOiB0aGlzLl9yZXR1cm5GYWxzZVZhbHVlXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBpbml0aWFsaXplZCBhbmQgcmV0dXJucyBmYWxzZSBzbyB0aGUgZWRpdG9yIGFwcGVhcnMgaW4gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYWx3YXlzIGZhbHNlXG4gICAqKi9cbiAgaXNQb3B1cCgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBpbnRvIHRoZSBjZWxsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZm9jdXNJbigpIHtcbiAgICB0aGlzLl9zd2l0Y2hlci5zZXREaXNhYmxlZChmYWxzZSlcbiAgICB0aGlzLl9zd2l0Y2hlci5mb2N1cygpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBkb2luZyBmdWxsIHJvdyBlZGl0LCB0aGVuIGdldHMgY2FsbGVkIHdoZW4gdGFiYmluZyBvdXQgb2YgdGhlIGNlbGwuXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBmb2N1c091dCgpIHtcbiAgICB0aGlzLl9zd2l0Y2hlci5zZXREaXNhYmxlZCh0cnVlKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCb29sZWFufSB2YWx1ZSB0aGUgY3VycmVudCBjZWxsIHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdHJ1ZVZhbHVlIHRydWUgdmFsdWUgYWxpYXNcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBmYWxzZVZhbHVlIGZhbHNlIHZhbHVlIGFsaWFzXG4gICAqL1xuICBfY29udmVydFZhbHVlKHZhbHVlLCB0cnVlVmFsdWUsIGZhbHNlVmFsdWUpIHtcbiAgICBjb25zdCB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKHZhbHVlKVxuXG4gICAgcmV0dXJuIHRydWVWYWx1ZS5pbmRleE9mKHZhbHVlQXNTdHJpbmcpID4gLTFcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZVZhbHVlLmluZGV4T2YodmFsdWVBc1N0cmluZykgPiAtMVxuICAgICAgPyBmYWxzZVxuICAgICAgOiB2YWx1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5FZGl0b3JcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRWRpdG9yL0Jvb2xlYW5FZGl0b3IuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBUaGUgYmFzZSBjb21wb25lbnQgY2xhc3NcbiAqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBhYnN0cmFjdCBjbGFzcyB3aGljaCBhbGwgY29tcG9uZW50cyBzaG91bGQgdXNlXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgaHRtbCBlbGVtZW50XG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9ndWkgPSBudWxsXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIFtpbml0XSBtZXRob2RgXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRE9NIGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCwgdGhpcyBpcyB3aGF0IHRoZSBncmlkIHB1dHMgaW50byB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3VpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gSWYgeW91ciBjdXN0b20gY29tcG9uZW50IG5lZWRzIHRvIGRvXG4gICAqIGFueSByZXNvdXJjZSBjbGVhbmluZyB1cCwgZG8gaXQgaGVyZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgLy8gcGFzc1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIHJlcXVpcmVkIG9wdGlvbiB2YWx1ZVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIHBhc3NlZCBvcHRpb24ncyB2YWx1ZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyXG4gICAqXG4gICAqICAxLiBwYXJhbXNcbiAgICogIDIuIFNlYXJjaCBgcGFyYW1zLmNvbERlZmBcbiAgICogIDMuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHQuQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tDT0xVTU5fSURdYCBvciBgcGFyYW1zLmNvbnRleHQubWV0YVtDT0xVTU5fSURdYFxuICAgKiAgNC4gU2VhcmNoIGBwYXJhbXMuY29udGV4dC5BR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnYCBvciBgcGFyYW1zLmNvbnRleHQubWV0YWBcbiAgICogIDUuIFNlYXJjaCBgcGFyYW1zLmNvbnRleHRgXG4gICAqICA2LiBJZiBub25lIGZvdW5kIHJldHVybiB0aGUgZmFsbGJhY2tcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIG9wdGlvblxuICAgKiBAcGFyYW0ge3BhcmFtc30gcGFyYW1zIGFuIG9iamVjdCB1c2VkIHRvIHNlYXJjaCBmb3IgdGhlIG9wdGlvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gZmFsbGJhY2sgYSB2YWx1ZSB0byByZXR1cm4gaW4gY2FzZSB0aGUgb3B0aW9uIGNhbiBub3QgYmUgZm91bmRcbiAgICovXG4gIGdldE9wdGlvbihuYW1lLCBwYXJhbXMsIGZhbGxiYWNrID0gbnVsbCkge1xuICAgIGxldCBvcHRpb25cblxuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KG5hbWUpICYmIHBhcmFtc1tuYW1lXSAhPT0gbnVsbCkge1xuICAgICAgb3B0aW9uID0gcGFyYW1zW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRyeSB0byBmZXRjaCBmcm9tIHRoZSBjb2x1bW4gZGVmIGZpcnN0XG4gICAgICBpZiAoXG4gICAgICAgIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnY29sRGVmJykgJiZcbiAgICAgICAgcGFyYW1zLmNvbERlZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICBwYXJhbXMuY29sRGVmW25hbWVdICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9uID0gcGFyYW1zLmNvbERlZltuYW1lXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZldGNoIGZyb20gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ3xtZXRhIGluIHRoZSBjb250ZXh0XG4gICAgICAgIGxldCBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnID0gbnVsbFxuICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KCdjb250ZXh0JykpIHtcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnID1cbiAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0LkFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgfHwgcGFyYW1zLmNvbnRleHQubWV0YVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnLmhhc093blByb3BlcnR5KHBhcmFtcy5jb2x1bW4uY29sSWQpICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1twYXJhbXMuY29sdW1uLmNvbElkXS5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWdbcGFyYW1zLmNvbHVtbi5jb2xJZF1bbmFtZV0gIT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9uID0gQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1twYXJhbXMuY29sdW1uLmNvbElkXVtuYW1lXVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIEFHcmlkQ29tcG9uZW50c01ldGFDb25maWcgJiZcbiAgICAgICAgICBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgQUdyaWRDb21wb25lbnRzTWV0YUNvbmZpZ1tuYW1lXSAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb24gPSBBR3JpZENvbXBvbmVudHNNZXRhQ29uZmlnW25hbWVdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIGZldGNoIGZyb20gdGhlIGNvbnRleHQgb2JqZWN0IGl0c2VsZlxuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBwYXJhbXMuY29udGV4dFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbnRleHQgJiZcbiAgICAgICAgICAgIGNvbnRleHQuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICAgIGNvbnRleHRbbmFtZV0gIT09IG51bGxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG9wdGlvbiA9IGNvbnRleHRbbmFtZV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdHJ5IHRvIGNoZWNrIHBhcmFtcyBpdHNlbGYgb3IgZmFsbGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICAgICAgb3B0aW9uID0gZmFsbGJhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIG9wdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRpb24gOiBmYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBXaW5kb3cgSW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtwYXJhbXN9IHBhcmFtcyBhbiBvYmplY3QgdXNlZCB0byBzZWFyY2ggZm9yIHRoZSB3aW5kb3cgaW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybiB7V2luZG93fVxuICAgKi9cbiAgZ2V0V2luKHBhcmFtcykge1xuICAgIGNvbnN0IHdpbiA9IHRoaXMuZ2V0T3B0aW9uKCd3aW5kb3cnLCBwYXJhbXMpIHx8IHdpbmRvdyB8fCBudWxsXG5cbiAgICBpZiAoIXdpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgd2luZG93JylcbiAgICB9XG5cbiAgICByZXR1cm4gd2luXG4gIH1cblxuICAvKipcbiAgICogR2V0IGRvY3VtZW50IEluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7cGFyYW1zfSBwYXJhbXMgYW4gb2JqZWN0IHVzZWQgdG8gc2VhcmNoIGZvciB0aGUgZG9jdW1lbnQgaW5zdGFuY2VcbiAgICpcbiAgICogQHJldHVybiB7SFRNTERvY3VtZW50fVxuICAgKi9cbiAgZ2V0RG9jKHBhcmFtcykge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2V0T3B0aW9uKCdkb2N1bWVudCcsIHBhcmFtcykgfHwgZG9jdW1lbnQgfHwgbnVsbFxuXG4gICAgaWYgKCFkb2MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRvY3VtZW50JylcbiAgICB9XG5cbiAgICByZXR1cm4gZG9jXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQ29tcG9uZW50L0NvbXBvbmVudC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSB9IGZyb20gJ2NvcmUtZGVjb3JhdG9ycydcbmltcG9ydCBDb21wb25lbnQgZnJvbSAnLi4vQ29tcG9uZW50J1xuaW1wb3J0ICcuL3N0eWxlLnNjc3MnXG5cbi8qKlxuICogQm9vbGVhbiBSZW5kZXJlclxuICpcbiAqIFNpbXBsZSB0b2dnbGUgc3dpdGNoIHRvIGhhbmRsZSBib29sZWFuIHZhbHVlc1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5Td2l0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQ29uc3RydWN0IG5ldyBCb29sZWFuU3dpdGNoIENvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpbml0aWFsVmFsdWUgPSBmYWxzZV0gdGhlIGRlZmF1bHQgc3RhdGUgLCBjaGVja2VkIG9yIHVuY2hlY2tlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbbGlzdGVuZXIgPSBudWxsXSBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUgPSBmYWxzZSwgbGlzdGVuZXIgPSBudWxsKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0Q2hlY2tlZChpbml0aWFsVmFsdWUpXG4gICAgdGhpcy5zZXRMaXN0ZW5lcihsaXN0ZW5lcilcbiAgICB0aGlzLnNldERpc2FibGVkKGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5fb25DbGljayA9IHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKVxuICAgIHRoaXMuX29uS2V5ZG93biA9IHRoaXMuX29uS2V5ZG93bi5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLl9ndWkgPSB0aGlzLmdldERvYyhwYXJhbXMpLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdib29sU3dpdGNoX193cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9IC0xXG5cbiAgICB0aGlzLnJlbmRlcigpXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzd2l0Y2ggc2xpZGVyIGFuZCBoaWRkZW4gaW5wdXQuXG4gICAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZG9jID0gdGhpcy5nZXREb2ModGhpcy5fcGFyYW1zKVxuXG4gICAgY29uc3QgYm9vbFN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYm9vbFN3aXRjaC5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaCdcblxuICAgIC8vIGlucHV0XG4gICAgdGhpcy5faW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmlkID0gYGVsLSR7TWF0aC5yYW5kb20oKX1gXG4gICAgdGhpcy5faW5wdXQubmFtZSA9ICdjaGVja2JveCdcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fY2hlY2tib3gnXG4gICAgdGhpcy5faW5wdXQudHlwZSA9ICdjaGVja2JveCdcbiAgICB0aGlzLl9pbnB1dC5jaGVja2VkID0gdGhpcy5pc0NoZWNrZWQoKVxuICAgIHRoaXMuX2lucHV0LmRpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKClcbiAgICB0aGlzLl9pbnB1dC50YWJJbmRleCA9ICcwJ1xuXG4gICAgLy8gbGFiZWxcbiAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJylcbiAgICBsYWJlbC5jbGFzc05hbWUgPSAnYm9vbFN3aXRjaF9fbGFiZWwnXG4gICAgbGFiZWwuZm9yID0gdGhpcy5faW5wdXQuaWRcbiAgICBsYWJlbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxzcGFuIGNsYXNzPVwiYm9vbFN3aXRjaF9faW5uZXJcIj48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImJvb2xTd2l0Y2hfX3N3aXRjaFwiPjwvc3Bhbj5cbiAgICBgXG5cbiAgICAvLyBhdHRhY2hlIGlucHV0IGFuZCBzbGlkZXIgdG8gY29tcG9uZW50XG4gICAgYm9vbFN3aXRjaC5hcHBlbmRDaGlsZCh0aGlzLl9pbnB1dClcbiAgICBib29sU3dpdGNoLmFwcGVuZENoaWxkKGxhYmVsKVxuXG4gICAgYm9vbFN3aXRjaC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2spXG4gICAgdGhpcy5fZ3VpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9vbktleWRvd24pXG5cbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQoYm9vbFN3aXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGJvb2xTd2l0Y2ggPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xTd2l0Y2gnKVxuICAgIGJvb2xTd2l0Y2gucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrKVxuICAgIHRoaXMuX2d1aS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25LZXlkb3duKVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuX2d1aS5mb2N1cygpXG4gICAgdGhpcy5faW5wdXQuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzd2l0Y2ggc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICAgKi9cbiAgc2V0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lciA9IGxpc3RlbmVyXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0ZW5lciBpbnN0YW5jZSAsIGlmXG4gICAqXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufG51bGx9XG4gICAqL1xuICBnZXRMaXN0ZW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fbGlzdGVuZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY2hlY2tlZFxuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHZhbHVlIHRydWUgdG8gY2hlY2sgLCBmYWxzZSB0byB1bmNoZWNrXG4gICAqL1xuICBzZXRDaGVja2VkKHZhbHVlKSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IHZhbHVlXG4gICAgaWYgKHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dC5jaGVja2VkID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIGlmIHN3aXRjaCBpcyBjaGVja2VkXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59ICB0cnVlIHdoZW4gY2hlY2tlZCAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNDaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkXG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBjb21wb25lbnQgc3RhdGVcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLnNldENoZWNrZWQoIXRoaXMuaXNDaGVja2VkKCkpXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRpc2FibGVkXG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWUgdHJ1ZSB0byBkaXNhYmxlZCAsIGZhbHNlIHRvIGVuYWJsZVxuICAgKi9cbiAgc2V0RGlzYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlXG4gICAgaWYgKHRoaXMuX2lucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dC5kaXNhYmxlZCA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBzd2l0Y2ggaXMgZGlzYWJsZWRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIGRpc2FibGVkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZFxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNsaWNrIGxpc3RlbmVyIG9mIHRoZSBzd2l0Y2guIEl0IHdpbGwgdG9nZ2xlIHRoZSBzdGF0ZSBhbmQgZmlyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBldmVudCBvYmplY3RcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBfb25DbGljayhlKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZSgpXG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGtleSBsaXN0ZW5lciBvZiB0aGUgc3dpdGNoLiBJdCB3aWxsIHRvZ2dsZSB0aGUgc3RhdGUgdXNpbmcga2V5Ym9hcmQga2V5cyAobGVmdCAsIHJpZ2h0ICwgc3BhY2UpXG4gICAqIGFuZCBmaXJlIGFueSByZWdpc3RlcmVkIGxpc3RlbmVyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGUgIHRoZSBldmVudCBvYmplY3RcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbktleWRvd24oZSkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZS53aGljaCB8fCBlLmtleUNvZGVcblxuICAgIC8vIHNwYWNlXG4gICAgaWYgKGtleSA9PSAzMikge1xuICAgICAgdGhpcy50b2dnbGUoKVxuICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyKHRoaXMpXG4gICAgICB9XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICAgIC8vIHJpZ2h0XG4gICAgZWxzZSBpZiAoa2V5ID09IDM5KSB7XG4gICAgICB0aGlzLnNldENoZWNrZWQodHJ1ZSlcbiAgICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcih0aGlzKVxuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgICAvLyBsZWZ0XG4gICAgZWxzZSBpZiAoa2V5ID09IDM3KSB7XG4gICAgICB0aGlzLnNldENoZWNrZWQoZmFsc2UpXG4gICAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXIodGhpcylcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblN3aXRjaFxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5Td2l0Y2gvQm9vbGVhblN3aXRjaC5qcyIsImltcG9ydCB7IGRlY29yYXRlLCBjcmVhdGVEZWZhdWx0U2V0dGVyIH0gZnJvbSAnLi9wcml2YXRlL3V0aWxzJztcbmNvbnN0IHsgZGVmaW5lUHJvcGVydHkgfSA9IE9iamVjdDtcblxuZnVuY3Rpb24gaGFuZGxlRGVzY3JpcHRvcih0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICBjb25zdCB7IGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSwgaW5pdGlhbGl6ZXIsIHZhbHVlIH0gPSBkZXNjcmlwdG9yO1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyYWJsZSxcbiAgICBlbnVtZXJhYmxlLFxuXG4gICAgZ2V0KCkge1xuICAgICAgLy8gVGhpcyBoYXBwZW5zIGlmIHNvbWVvbmUgYWNjZXNzZXMgdGhlXG4gICAgICAvLyBwcm9wZXJ0eSBkaXJlY3RseSBvbiB0aGUgcHJvdG90eXBlXG4gICAgICBpZiAodGhpcyA9PT0gdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmV0ID0gaW5pdGlhbGl6ZXIgPyBpbml0aWFsaXplci5jYWxsKHRoaXMpIDogdmFsdWU7XG5cbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGUsXG4gICAgICAgIGVudW1lcmFibGUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogcmV0XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgc2V0OiBjcmVhdGVEZWZhdWx0U2V0dGVyKGtleSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGF6eUluaXRpYWxpemUoLi4uYXJncykge1xuICByZXR1cm4gZGVjb3JhdGUoaGFuZGxlRGVzY3JpcHRvciwgYXJncyk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1kZWNvcmF0b3JzL3NyYy9sYXp5LWluaXRpYWxpemUuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuYWctY2VsbC1pbmxpbmUtZWRpdGluZyAuYm9vbFN3aXRjaF9fd3JhcHBlcnttYXJnaW46YXV0byAxMXB4fS5ib29sU3dpdGNoX193cmFwcGVye2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lOm5vbmU7cGFkZGluZy1sZWZ0OjZweDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uYm9vbFN3aXRjaHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDo1NXB4Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmJvb2xTd2l0Y2hfX2NoZWNrYm94e2Rpc3BsYXk6bm9uZX0uYm9vbFN3aXRjaF9fbGFiZWx7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6MjBweH0uYm9vbFN3aXRjaF9faW5uZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoyMDAlO21hcmdpbi1sZWZ0Oi0xMDAlO3RyYW5zaXRpb246bWFyZ2luIDAuM3MgZWFzZS1pbiAwc30uYm9vbFN3aXRjaF9faW5uZXI6YmVmb3JlLC5ib29sU3dpdGNoX19pbm5lcjphZnRlcntkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6NTAlO2hlaWdodDoxNXB4O3BhZGRpbmc6MDtsaW5lLWhlaWdodDoxNXB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOndoaXRlO2ZvbnQtZmFtaWx5OidTZWdvZSBVSSBTeW1ib2wnLCBUcmVidWNoZXQsIEFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OmJvbGQ7Ym94LXNpemluZzpib3JkZXItYm94fS5ib29sU3dpdGNoX19pbm5lcjpiZWZvcmV7Y29udGVudDonXFxcXDI3MTQnO3BhZGRpbmctbGVmdDoxMHB4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWctY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tYWctYWxwaW5lLWFjdGl2ZS1jb2xvciwgIzIxOTZmMykpO2NvbG9yOiNmZmZmZmZ9LmJvb2xTd2l0Y2hfX2lubmVyOmFmdGVye2NvbnRlbnQ6J1xcXFwyNzE4JztwYWRkaW5nLXJpZ2h0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO3RleHQtYWxpZ246cmlnaHR9LmJvb2xTd2l0Y2hfX3N3aXRjaHtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7bWFyZ2luOjFweDtiYWNrZ3JvdW5kOiNmZmZmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MzVweDtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWFnLWlucHV0LWJvcmRlci1jb2xvciwgdmFyKC0tYWctYm9yZGVyLWNvbG9yLCAjYmFiZmM3KSk7Ym9yZGVyLXJhZGl1czoyMHB4O3RyYW5zaXRpb246YWxsIDAuM3MgZWFzZS1pbiAwc30uYm9vbFN3aXRjaF9fY2hlY2tib3g6Y2hlY2tlZCsuYm9vbFN3aXRjaF9fbGFiZWwgLmJvb2xTd2l0Y2hfX2lubmVye21hcmdpbi1sZWZ0OjB9LmJvb2xTd2l0Y2hfX2NoZWNrYm94OmNoZWNrZWQrLmJvb2xTd2l0Y2hfX2xhYmVsIC5ib29sU3dpdGNoX19zd2l0Y2h7cmlnaHQ6MHB4fVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvQm9vbGVhblN3aXRjaC9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSA0OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCJcbi8qKlxuICogV2hlbiBzb3VyY2UgbWFwcyBhcmUgZW5hYmxlZCwgYHN0eWxlLWxvYWRlcmAgdXNlcyBhIGxpbmsgZWxlbWVudCB3aXRoIGEgZGF0YS11cmkgdG9cbiAqIGVtYmVkIHRoZSBjc3Mgb24gdGhlIHBhZ2UuIFRoaXMgYnJlYWtzIGFsbCByZWxhdGl2ZSB1cmxzIGJlY2F1c2Ugbm93IHRoZXkgYXJlIHJlbGF0aXZlIHRvIGFcbiAqIGJ1bmRsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHBhZ2UuXG4gKlxuICogT25lIHNvbHV0aW9uIGlzIHRvIG9ubHkgdXNlIGZ1bGwgdXJscywgYnV0IHRoYXQgbWF5IGJlIGltcG9zc2libGUuXG4gKlxuICogSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiBcImZpeGVzXCIgdGhlIHJlbGF0aXZlIHVybHMgdG8gYmUgYWJzb2x1dGUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgbG9jYXRpb24uXG4gKlxuICogQSBydWRpbWVudGFyeSB0ZXN0IHN1aXRlIGlzIGxvY2F0ZWQgYXQgYHRlc3QvZml4VXJscy5qc2AgYW5kIGNhbiBiZSBydW4gdmlhIHRoZSBgbnBtIHRlc3RgIGNvbW1hbmQuXG4gKlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzcykge1xuICAvLyBnZXQgY3VycmVudCBsb2NhdGlvblxuICB2YXIgbG9jYXRpb24gPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5sb2NhdGlvbjtcblxuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZml4VXJscyByZXF1aXJlcyB3aW5kb3cubG9jYXRpb25cIik7XG4gIH1cblxuXHQvLyBibGFuayBvciBudWxsP1xuXHRpZiAoIWNzcyB8fCB0eXBlb2YgY3NzICE9PSBcInN0cmluZ1wiKSB7XG5cdCAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHZhciBiYXNlVXJsID0gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xuICB2YXIgY3VycmVudERpciA9IGJhc2VVcmwgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cXC9bXlxcL10qJC8sIFwiL1wiKTtcblxuXHQvLyBjb252ZXJ0IGVhY2ggdXJsKC4uLilcblx0Lypcblx0VGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMganVzdCBhIHdheSB0byByZWN1cnNpdmVseSBtYXRjaCBicmFja2V0cyB3aXRoaW5cblx0YSBzdHJpbmcuXG5cblx0IC91cmxcXHMqXFwoICA9IE1hdGNoIG9uIHRoZSB3b3JkIFwidXJsXCIgd2l0aCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCBhbmQgdGhlbiBhIHBhcmVuc1xuXHQgICAoICA9IFN0YXJ0IGEgY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgKD86ICA9IFN0YXJ0IGEgbm9uLWNhcHR1cmluZyBncm91cFxuXHQgICAgICAgICBbXikoXSAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKD86ICA9IFN0YXJ0IGFub3RoZXIgbm9uLWNhcHR1cmluZyBncm91cHNcblx0ICAgICAgICAgICAgICAgICBbXikoXSsgID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgICAgIFteKShdKiAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICBcXCkgID0gTWF0Y2ggYSBlbmQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICkgID0gRW5kIEdyb3VwXG4gICAgICAgICAgICAgICpcXCkgPSBNYXRjaCBhbnl0aGluZyBhbmQgdGhlbiBhIGNsb3NlIHBhcmVuc1xuICAgICAgICAgICkgID0gQ2xvc2Ugbm9uLWNhcHR1cmluZyBncm91cFxuICAgICAgICAgICogID0gTWF0Y2ggYW55dGhpbmdcbiAgICAgICApICA9IENsb3NlIGNhcHR1cmluZyBncm91cFxuXHQgXFwpICA9IE1hdGNoIGEgY2xvc2UgcGFyZW5zXG5cblx0IC9naSAgPSBHZXQgYWxsIG1hdGNoZXMsIG5vdCB0aGUgZmlyc3QuICBCZSBjYXNlIGluc2Vuc2l0aXZlLlxuXHQgKi9cblx0dmFyIGZpeGVkQ3NzID0gY3NzLnJlcGxhY2UoL3VybFxccypcXCgoKD86W14pKF18XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSopXFwpL2dpLCBmdW5jdGlvbihmdWxsTWF0Y2gsIG9yaWdVcmwpIHtcblx0XHQvLyBzdHJpcCBxdW90ZXMgKGlmIHRoZXkgZXhpc3QpXG5cdFx0dmFyIHVucXVvdGVkT3JpZ1VybCA9IG9yaWdVcmxcblx0XHRcdC50cmltKClcblx0XHRcdC5yZXBsYWNlKC9eXCIoLiopXCIkLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pXG5cdFx0XHQucmVwbGFjZSgvXicoLiopJyQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSk7XG5cblx0XHQvLyBhbHJlYWR5IGEgZnVsbCB1cmw/IG5vIGNoYW5nZVxuXHRcdGlmICgvXigjfGRhdGE6fGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcL3xmaWxlOlxcL1xcL1xcL3xcXHMqJCkvaS50ZXN0KHVucXVvdGVkT3JpZ1VybCkpIHtcblx0XHQgIHJldHVybiBmdWxsTWF0Y2g7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVydCB0aGUgdXJsIHRvIGEgZnVsbCB1cmxcblx0XHR2YXIgbmV3VXJsO1xuXG5cdFx0aWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiLy9cIikgPT09IDApIHtcblx0XHQgIFx0Ly9UT0RPOiBzaG91bGQgd2UgYWRkIHByb3RvY29sP1xuXHRcdFx0bmV3VXJsID0gdW5xdW90ZWRPcmlnVXJsO1xuXHRcdH0gZWxzZSBpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZSB1cmxcblx0XHRcdG5ld1VybCA9IGJhc2VVcmwgKyB1bnF1b3RlZE9yaWdVcmw7IC8vIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5XG5cdFx0XHRuZXdVcmwgPSBjdXJyZW50RGlyICsgdW5xdW90ZWRPcmlnVXJsLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKTsgLy8gU3RyaXAgbGVhZGluZyAnLi8nXG5cdFx0fVxuXG5cdFx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCB1cmwoLi4uKVxuXHRcdHJldHVybiBcInVybChcIiArIEpTT04uc3RyaW5naWZ5KG5ld1VybCkgKyBcIilcIjtcblx0fSk7XG5cblx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCBjc3Ncblx0cmV0dXJuIGZpeGVkQ3NzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQm9vbGVhblJlbmRlcmVyIGZyb20gJy4vQm9vbGVhblJlbmRlcmVyJ1xuXG5leHBvcnQgZGVmYXVsdCBCb29sZWFuUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuUmVuZGVyZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCBCb29sZWFuU3dpdGNoIGZyb20gJy4uL0Jvb2xlYW5Td2l0Y2gnXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xuXG4vKipcbiAqIEJvb2xlYW5zIFJlbmRlcmVyXG4gKlxuICogSGFuZGxlIGJvb2xlYW4gdmFsdWVzIFJlbmRlcmluZ1xuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmJvb2xlYW5UcnVlUmVuZGVyVmFsdWUqKiAgXHR8IHN3aXRjaCAgICAgIFx0fCBUaGUgb3B0aW9uIGNvbnRyb2xzIGhvdyB0byByZW5kZXIgYHRydWVgIHZhbHVlcy4gPGJyPiAqKnN3aXRjaCoqIGlzIGEgc3BlY2lhbCB2YWx1ZSB1c2VkIHRvIHJlbmRlciB0cnVlIHZhbHVlcyBhcyBhIHN3aXRjaCBjb21wb25lbnQgIFx0fFxuICogfCAqKmJvb2xlYW5GYWxzZVJlbmRlclZhbHVlKiogXHR8IHN3aXRjaCAgICAgIFx0fCBUaGUgb3B0aW9uIGNvbnRyb2xzIGhvdyB0byByZW5kZXIgYGZhbHNlYCB2YWx1ZXMuIDxicj4gKipzd2l0Y2gqKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCB0byByZW5kZXIgdHJ1ZSB2YWx1ZXMgYXMgYSBzd2l0Y2ggY29tcG9uZW50IFx0fFxuICogfCAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqICAgICAgIHwgdHJ1ZShib29sKSAgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYHRydWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VWYWx1ZVtdKiogICAgICB8IGZhbHNlKGJvb2wpIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGBmYWxzZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgQm9vbGVhblJlbmRlcmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhblJlbmRlcmVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG5cbiAgICAvLyB3aWxsIHRoaXMgYWZmZWN0IEJCaiBidWkgP1xuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYm9vbFJlbmRlcmVyJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICdcIlNlZ29lIFVJIFN5bWJvbFwiLFRyZWJ1Y2hldCwgQXJpYWwsIHNhbnMtc2VyaWYnXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBpbml0KHBhcmFtcykge1xuICAgIHRoaXMucmVmcmVzaChwYXJhbXMsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqICBAaW5oZXJpdERvY1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fc3dpdGNoZXIpIHtcbiAgICAgIHRoaXMuX3N3aXRjaGVyLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjZWxsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgY2VsbCByZW5kZXJlciBwYXJhbXNcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0luaXQgdHJ1ZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCBpbiBgaW5pdGAgcGhhc2UgLCBmYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVmcmVzaCBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmVmcmVzaChwYXJhbXMsIGlzSW5pdCkge1xuICAgIGxldCB2YWx1ZSA9IHBhcmFtcy52YWx1ZUZvcm1hdHRlZCA/IHBhcmFtcy52YWx1ZUZvcm1hdHRlZCA6IHBhcmFtcy52YWx1ZVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgICAgIGNvbnN0IGJvb2xlYW5UcnVlUmVuZGVyVmFsdWUgPSBTdHJpbmcoXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVHJ1ZVJlbmRlclZhbHVlJywgcGFyYW1zLCAnc3dpdGNoJylcbiAgICAgIClcbiAgICAgIGNvbnN0IGJvb2xlYW5GYWxzZVJlbmRlclZhbHVlID0gU3RyaW5nKFxuICAgICAgICB0aGlzLmdldE9wdGlvbignYm9vbGVhbkZhbHNlUmVuZGVyVmFsdWUnLCBwYXJhbXMsICdzd2l0Y2gnKVxuICAgICAgKVxuICAgICAgY29uc3QgYm9vbGVhblRydWVWYWx1ZSA9IFtdXG4gICAgICAgIC5jb25jYXQodGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5UcnVlVmFsdWUnLCBwYXJhbXMsIFt0cnVlXSkpXG4gICAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpXG4gICAgICBjb25zdCBib29sZWFuRmFsc2VWYWx1ZSA9IFtdXG4gICAgICAgIC5jb25jYXQodGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5GYWxzZVZhbHVlJywgcGFyYW1zLCBbZmFsc2VdKSlcbiAgICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSlcblxuICAgICAgLy8gaGFuZGxlIHRydWUgdmFsdWVzXG4gICAgICBpZiAoYm9vbGVhblRydWVWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYm9vbGVhblRydWVSZW5kZXJWYWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICBib29sZWFuVHJ1ZVJlbmRlclZhbHVlID09PSAnc3dpdGNoJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzd2l0Y2hlciA9IHRoaXMuX2dldFN3aXRjaGVyKHBhcmFtcylcbiAgICAgICAgICBzd2l0Y2hlci5zZXRDaGVja2VkKHRydWUpXG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHN3aXRjaGVyLmdldEd1aSgpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSBib29sZWFuVHJ1ZVJlbmRlclZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBmYWxzZSB2YWx1ZXNcbiAgICAgIGVsc2UgaWYgKGJvb2xlYW5GYWxzZVZhbHVlLmluZGV4T2YodmFsdWUpID4gLTEpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFib29sZWFuRmFsc2VSZW5kZXJWYWx1ZS5sZW5ndGggfHxcbiAgICAgICAgICBib29sZWFuRmFsc2VSZW5kZXJWYWx1ZSA9PT0gJ3N3aXRjaCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZXIgPSB0aGlzLl9nZXRTd2l0Y2hlcihwYXJhbXMpXG4gICAgICAgICAgc3dpdGNoZXIuc2V0Q2hlY2tlZChmYWxzZSlcbiAgICAgICAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gJydcbiAgICAgICAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQoc3dpdGNoZXIuZ2V0R3VpKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IGJvb2xlYW5GYWxzZVJlbmRlclZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN3aXRjaCBpbnN0YW5jZSBpZiBhdmFpbGFibGUgLCBvciBjcmVhdGUgaXQgb3RoZXJ3aXNlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhblN3aXRjaH0gc3dpdGNoIGluc3RhbmNlXG4gICAqL1xuICBfZ2V0U3dpdGNoZXIocGFyYW1zKSB7XG4gICAgaWYgKCF0aGlzLl9zd2l0Y2hlcikge1xuICAgICAgdGhpcy5fc3dpdGNoZXIgPSBuZXcgQm9vbGVhblN3aXRjaCgpXG4gICAgICB0aGlzLl9zd2l0Y2hlci5zZXREaXNhYmxlZCh0cnVlKVxuICAgICAgdGhpcy5fc3dpdGNoZXIuaW5pdChwYXJhbXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N3aXRjaGVyXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhblJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvQm9vbGVhblJlbmRlcmVyL0Jvb2xlYW5SZW5kZXJlci5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBCb29sZWFuRmlsdGVyIGZyb20gJy4vQm9vbGVhbkZpbHRlcidcblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhbkZpbHRlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5GaWx0ZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG5jb25zdCB0b1RpdGxlQ2FzZSA9IHBocmFzZSA9PiB7XG4gIHJldHVybiBwaHJhc2VcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zcGxpdCgnICcpXG4gICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJylcbn1cblxuY29uc3Qgc3RyaXBIVE1MID0gaHRtbCA9PiB7XG4gIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpXG4gIHRtcC5pbm5lckhUTUwgPSBodG1sXG4gIHJldHVybiB0bXAudGV4dENvbnRlbnQgfHwgdG1wLmlubmVyVGV4dCB8fCAnJ1xufVxuXG4vKipcbiAqIEJvb2xlYW5zIEZpbHRlclxuICpcbiAqIEhhbmRsZSBib29sZWFuIHZhbHVlcyBGaWx0ZXJpbmdcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipib29sZWFuVXNlZFRydWVWYWx1ZSoqICAgfCB1bmRlZmluZWQgICAgfCB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gdGhlIGZpbHRlciBkaXNwbGF5cyB0aGUgdHJ1ZSBzdGF0ZSAuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkIHRoZW4gd2UgdXNlIHRoZSBmaXJzdCBpdGVtIGluICoqYm9vbGVhblRydWVWYWx1ZVtdKipcbiAqIHwgKipib29sZWFuVXNlZEZhbHNlVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgdGhlIHZhbHVlIHRvIHVzZSB3aGVuIHRoZSBmaWx0ZXIgZGlzcGxheXMgdGhlIGZhbHNlIHN0YXRlLiBpbiBjYXNlIGl0IGlzIHVuZGVmaW5lZCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiAqKmJvb2xlYW5GYWxzZVZhbHVlW10qKlxuICogfCAqKmJvb2xlYW5UcnVlVmFsdWVbXSoqICAgICAgIHwgdHJ1ZShib29sKSAgXHR8IFRoZSBvcHRpb25zIGRlc2NyaWJlcyB3aGF0IGlzIGNvbnNpZGVyZWQgYHRydWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwgKipib29sZWFuRmFsc2VWYWx1ZVtdKiogICAgICB8IGZhbHNlKGJvb2wpIFx0fCBUaGUgb3B0aW9ucyBkZXNjcmliZXMgd2hhdCBpcyBjb25zaWRlcmVkIGBmYWxzZWBcbiAqIHwgKipjbGVhckJ1dHRvbioqICAgfCBmYWxzZSAgICB8ICBTZXQgdG8gdHJ1ZSB0byBoYXZlIHRoZSBmaWx0ZXIgdXNlIGEgQ2xlYXIgYnV0dG9uLiBUaGUgQ2xlYXIgYnV0dG9uIHdpbGwgY2xlYXIgdGhlIChmb3JtKSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgd2l0aG91dCByZW1vdmluZyBhbnkgYWN0aXZlIGZpbHRlcnMgb24gdGhlIGNvbHVtbi5cbiAqIHwgKiphcHBseUJ1dHRvbioqICAgfCBmYWxzZSAgICB8ICBTZXQgdG8gdHJ1ZSB0byBoYXZlIHRoZSBmaWx0ZXIgdXNlIGFuIEFwcGx5IGJ1dHRvbi4gSWYgdGhlIEFwcGx5IGJ1dHRvbiBpcyBwcmVzZW50LCB0aGVuIHRoZSBmaWx0ZXIgaXMgb25seSBhcHBsaWVkIGFmdGVyIHRoZSB1c2VyIGhpdHMgdGhlIEFwcGx5IGJ1dHRvbi5cbiAqIHwgKipyZXNldEJ1dHRvbioqICAgfCBmYWxzZSAgICB8ICBTZXQgdG8gdHJ1ZSB0byBoYXZlIHRoZSBmaWx0ZXIgdXNlIGEgUmVzZXQgYnV0dG9uLiBUaGUgUmVzZXQgYnV0dG9uIHdpbGwgY2xlYXIgdGhlIGRldGFpbHMgb2YgdGhlIGZpbHRlciBhbmQgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoYXQgY29sdW1uLlxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNsYXNzIEJvb2xlYW5GaWx0ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVHJ1ZSAsIGZhbHNlIHRyYW5zbGF0aW9uXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBfYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uID0ge31cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgQm9vbGVhbkZpbHRlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2Jvb2xlYW5GaWx0ZXIgYWctZmlsdGVyLWJvZHktd3JhcHBlcidcbiAgICB0aGlzLl9ndWkudGFiSW5kZXggPSAnMCdcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gcGFyYW1zLmFwaS5ncmlkT3B0aW9uc1dyYXBwZXIuZ2V0TG9jYWxlVGV4dEZ1bmMoKVxuICAgIGNvbnN0IGlzQ2xlYXJGaWx0ZXIgPSB0aGlzLmdldE9wdGlvbignY2xlYXJCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzUmVzZXRCdXR0b24gPSB0aGlzLmdldE9wdGlvbigncmVzZXRCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuICAgIGNvbnN0IGlzQXBwbHlCdXR0b24gPSB0aGlzLmdldE9wdGlvbignYXBwbHlCdXR0b24nLCBwYXJhbXMsIGZhbHNlKVxuXG4gICAgdGhpcy5fdHJ1ZVZhbHVlID0gW11cbiAgICAgIC5jb25jYXQodGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5UcnVlVmFsdWUnLCBwYXJhbXMsIFt0cnVlXSkpXG4gICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuXG4gICAgdGhpcy5fZmFsc2VWYWx1ZSA9IFtdXG4gICAgICAuY29uY2F0KHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuRmFsc2VWYWx1ZScsIHBhcmFtcywgW2ZhbHNlXSkpXG4gICAgICAubWFwKHggPT4gU3RyaW5nKHgpKVxuXG4gICAgdGhpcy5fdXNlZFRydWVWYWx1ZSA9IFN0cmluZyhcbiAgICAgIHRoaXMuZ2V0T3B0aW9uKCdib29sZWFuVXNlZFRydWVWYWx1ZScsIHBhcmFtcywgdGhpcy5fdHJ1ZVZhbHVlWzBdKVxuICAgIClcblxuICAgIHRoaXMuX3VzZWRGYWxzZVZhbHVlID0gU3RyaW5nKFxuICAgICAgdGhpcy5nZXRPcHRpb24oJ2Jvb2xlYW5Vc2VkRmFsc2VWYWx1ZScsIHBhcmFtcywgdGhpcy5fZmFsc2VWYWx1ZVswXSlcbiAgICApXG5cbiAgICB0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24gPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdib29sZWFuRmlsdGVyVHJhbnNsYXRpb24nLFxuICAgICAgcGFyYW1zLFxuICAgICAge1xuICAgICAgICB0cnVlOiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5UcnVlJyxcbiAgICAgICAgICB0b1RpdGxlQ2FzZShTdHJpbmcodGhpcy5fdXNlZFRydWVWYWx1ZSkpXG4gICAgICAgICksXG4gICAgICAgIGZhbHNlOiB0cmFuc2xhdGUoXG4gICAgICAgICAgJ2Jvb2xlYW5GYWxzZScsXG4gICAgICAgICAgdG9UaXRsZUNhc2UoU3RyaW5nKHRoaXMuX3VzZWRGYWxzZVZhbHVlKSlcbiAgICAgICAgKSxcbiAgICAgICAgcmVzZXQ6IHRyYW5zbGF0ZShcbiAgICAgICAgICAnYm9vbGVhblJlc2V0JyxcbiAgICAgICAgICB0cmFuc2xhdGUoJ3Jlc2V0RmlsdGVyJywgJ1Jlc2V0IEZpbHRlcicpXG4gICAgICAgICksXG4gICAgICB9XG4gICAgKVxuXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5fZmlsdGVyVGV4dCA9IG51bGxcblxuICAgIHRoaXMuX29uUmFkaW9DaGFuZ2UgPSB0aGlzLl9vblJhZGlvQ2hhbmdlLmJpbmQodGhpcywgaXNBcHBseUJ1dHRvbilcblxuICAgIC8vIGNyZWF0ZSBib2R5XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYm9keS5jbGFzc05hbWUgPSAnYm9vbGVhbkZpbHRlcl9fYm9keSBhZy1maWx0ZXItYm9keSdcbiAgICBib2R5LnN0eWxlLnBhZGRpbmcgPSAnNXB4IDE1cHgnXG4gICAgYm9keS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJib29sZWFuRmlsdGVyX19ib2R5X19sYWJlbHNcIj5cblxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIj4gICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci10cnVlIGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0cnVlLWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJib29sZWFuXCIgdmFsdWU9XCJ0cnVlXCIvPiAgICAgICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+IFxuICAgICAgICAgIDxzcGFuPiR7dGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLnRydWV9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuXG5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWctaW5wdXQtZmllbGQtbGFiZWwgYWctbGFiZWwgYWctcmFkaW8tYnV0dG9uLWxhYmVsXCI+ICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXItZmFsc2UgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZhbHNlLWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJib29sZWFuXCIgdmFsdWU9XCJmYWxzZVwiLz4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi5mYWxzZX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgXG4gICAgICAgICAgJHtcbiAgICAgICAgICAgICFpc1Jlc2V0QnV0dG9uXG4gICAgICAgICAgICAgID8gLyogaHRtbCAqLyBgXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiPiAgICAgICBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyLXJlc2V0IGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy1yYWRpby1idXR0b24taW5wdXQtd3JhcHBlciBhZy1jaGVja2VkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInJlc2V0LWlucHV0IGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJib29sZWFuXCIgdmFsdWU9XCJcIiBjaGVja2VkLz4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICAgICAgICA8c3Bhbj4ke3RoaXMuX2Jvb2xlYW5GaWx0ZXJUcmFuc2xhdGlvbi5yZXNldH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgIDogJydcbiAgICAgICAgICB9ICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICBib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uUmFkaW9DaGFuZ2UpXG5cbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQoYm9keSlcblxuICAgIC8vIGNyZWF0ZSBhcHBseSBmaWx0ZXIgcGFuZWxcbiAgICBjb25zdCBhcHBseUZpbHRlclBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhcHBseUZpbHRlclBhbmVsLmNsYXNzTmFtZSA9IGBib29sZWFuRmlsdGVyX19ib2R5X19hcHBseVBhbmVsIGFnLWZpbHRlci1hcHBseS1wYW5lbCBhZy1oaWRkZW5gXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBjbGVhciAkeyFpc0NsZWFyRmlsdGVyICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdjbGVhckZpbHRlcicsXG4gICAgICAnQ2xlYXIgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gcmVzZXQgJHshaXNSZXNldEJ1dHRvbiAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAncmVzZXRGaWx0ZXInLFxuICAgICAgJ1Jlc2V0IEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIGFwcGx5ICR7IWlzQXBwbHlCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ2FwcGx5RmlsdGVyJyxcbiAgICAgICdBcHBseSBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICBgXG5cbiAgICBpZiAoaXNDbGVhckZpbHRlciB8fCBpc1Jlc2V0QnV0dG9uIHx8IGlzQXBwbHlCdXR0b24pIHtcbiAgICAgIGFwcGx5RmlsdGVyUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlclBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2xpY2snLFxuICAgICAgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrXG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGFwcGx5RmlsdGVyUGFuZWwpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2d1aVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5X19sYWJlbHMnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uUmFkaW9DaGFuZ2UpXG5cbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keV9fYXBwbHlQYW5lbCcpXG4gICAgICAucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9BcHBseUZpbHRlclBhbmVsQnV0dG9uQ2xpY2spXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzZWxlY3RlZCBmaWx0ZXIgbWF0Y2hlcyB0aGUgcGFzc2VkIGNlbGwgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgd2hlbiBwYXNzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRvZXNGaWx0ZXJQYXNzKHBhcmFtcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHRoaXMuX3BhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVHZXR0ZXInKVxuICAgICAgICA/IHRoaXMuX3BhcmFtcy5maWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpXG4gICAgICAgIDogdGhpcy5fcGFyYW1zLnZhbHVlR2V0dGVyKHBhcmFtcylcbiAgICApXG5cbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyVGV4dCA9PT0gJ3RydWUnXG4gICAgICA/IHRoaXMuX3RydWVWYWx1ZS5pbmRleE9mKHZhbHVlKSA+IC0xXG4gICAgICA6IHRoaXMuX2ZhbHNlVmFsdWUuaW5kZXhPZih2YWx1ZSkgPiAtMVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhcHBseWluZyBhbnkgZmlsdGVyIG9uIHRoZSBjb2x1bW5cbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICoqL1xuICBpc0ZpbHRlckFjdGl2ZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5fZmlsdGVyVGV4dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl9maWx0ZXJUZXh0ICE9PSAnJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaWx0ZXIgc3RhdGUuIElmIGZpbHRlciBpcyBub3QgYWN0aXZlLCB0aGVuIHNob3VsZCByZXR1cm4gbnVsbC91bmRlZmluZWQuXG4gICAqIFRoZSBncmlkIGNhbGxzIGdldE1vZGVsKCkgb24gYWxsIGFjdGl2ZSBmaWx0ZXJzIHdoZW4gZ3JpZEFwaS5nZXRGaWx0ZXJNb2RlbCgpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiBPYmplY3QgfCBudWxsIHRoZSBmaWx0ZXIgc3RhdGVcbiAgICovXG4gIGdldE1vZGVsKCkge1xuICAgIGlmICghdGhpcy5pc0ZpbHRlckFjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IG1vZGVsID0geyB2YWx1ZTogdGhpcy5fZmlsdGVyVGV4dCwgZmlsdGVyVHlwZTogJ2Jvb2xlYW4nIH1cbiAgICByZXR1cm4gbW9kZWxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZmlsdGVyIHN0YXRlLiBDYWxsZWQgYnkgdGhlIGdyaWQgYWZ0ZXIgZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChtb2RlbCkgaXMgY2FsbGVkLlxuICAgKiBUaGUgZ3JpZCB3aWxsIHBhc3MgdW5kZWZpbmVkL251bGwgdG8gY2xlYXIgdGhlIGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgc2V0TW9kZWwobW9kZWwpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbiAgICB0aGlzLl9maWx0ZXJUZXh0ID0gbW9kZWwgJiYgbW9kZWwuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBtb2RlbC52YWx1ZSA6ICcnXG5cbiAgICBjb25zdCBmaWx0ZXJUZXh0QXNTdHJpbmcgPSBTdHJpbmcodGhpcy5fZmlsdGVyVGV4dClcbiAgICBjb25zdCBib2R5ID0gdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5ib29sZWFuRmlsdGVyX19ib2R5JylcbiAgICBib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpLmZvckVhY2goaSA9PiB7XG4gICAgICBpZiAoaS52YWx1ZSA9PSBmaWx0ZXJUZXh0QXNTdHJpbmcpIHtcbiAgICAgICAgaS5jaGVja2VkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaS5jaGVja2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsdGVyIG1vZGVsIGFzIHBsYWluIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBmbG9hdGluZyBmaWx0ZXIgaW5wdXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgZ2V0TW9kZWxBc1N0cmluZyhtb2RlbCkge1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpcEhUTUwoXG4gICAgICBtb2RlbC52YWx1ZSA9PT0gJ3RydWUnXG4gICAgICAgID8gdGhpcy5fYm9vbGVhbkZpbHRlclRyYW5zbGF0aW9uLnRydWVcbiAgICAgICAgOiB0aGlzLl9ib29sZWFuRmlsdGVyVHJhbnNsYXRpb24uZmFsc2VcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpbHRlciBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYm9vbGVhbkZpbHRlcl9fYm9keScpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaS5jaGVja2VkID0gZmFsc2VcbiAgICB9KVxuXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1mYWxzZScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWNoZWNrZWQnKVxuICAgIHRyeSB7XG4gICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogcGFzcyAqL1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlclRleHQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHNlbGVjdGlvbiBjaGFuZ2VzIGluIHRoZSBmaWx0ZXIgcmFkaW8gYnV0dG9ucyBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IGZpbHRlciB0ZXh0XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIF9vblJhZGlvQ2hhbmdlKGlzQXBwbHlCdXR0b24sIGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuICAgIHRoaXMuX2ZpbHRlclRleHQgPSB0YXJnZXQudmFsdWVcblxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmJvb2xlYW5GaWx0ZXJfX2JvZHknKVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0cnVlLWlucHV0JykpIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmFsc2UtaW5wdXQnKSkge1xuICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXRydWUnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1mYWxzZScpLmNsYXNzTGlzdC5hZGQoJ2FnLWNoZWNrZWQnKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItcmVzZXQnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8qIHBhc3MgKi9cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYm9keS5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci10cnVlJykuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICAgIGJvZHkucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItZmFsc2UnKS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBib2R5LnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLXJlc2V0JykuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvKiBwYXNzICovXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFsc2UgPT09IGlzQXBwbHlCdXR0b24pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5maWx0ZXJDaGFuZ2VkQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gdGhlIGJ1dHRvbiBjbGlja3MgaW4gdGhlIGJ1dHRvbnMgcGFuZWwgYW5kIGFwcGx5IHRoZSBjaG9zZW4gYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrKGUpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldFxuXG4gICAgaWYgKHRhcmdldC5ub2RlTmFtZSA9PT0gJ0JVVFRPTicpIHtcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNldCcpKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnY2xlYXInKSkge1xuICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXBwbHknKSkge1xuICAgICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9vbGVhbkZpbHRlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0Jvb2xlYW5GaWx0ZXIvQm9vbGVhbkZpbHRlci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9Cb29sZWFuRmlsdGVyL3N0eWxlLnNjc3MiLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5ib29sZWFuRmlsdGVyX19ib2R5X19sYWJlbHMgbGFiZWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjZweH0uYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo2cHggMH0uYm9vbGVhbkZpbHRlcl9fYm9keV9fbGFiZWxzIGxhYmVsIHNwYW57cGFkZGluZy1sZWZ0OjZweH1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL0Jvb2xlYW5GaWx0ZXIvc3R5bGUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IE51bWJlckVkaXRvciBmcm9tICcuL051bWJlckVkaXRvcidcblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5cbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqbnVtYmVyTWluVmFsdWUqKiAgIHwgdW5kZWZpbmVkICAgIHwgbWluIGFsbG93ZWQgdmFsdWVcbiAqIHwgKipudW1iZXJNYXhWYWx1ZSoqICAgfCB1bmRlZmluZWQgICAgfCBtYXggYWxsb3dlZCB2YWx1ZVxuICogfCAqKm51bWJlclN0ZXBWYWx1ZSoqICAgICAgIHwgdW5kZWZpbmVkICBcdHwgbnVtYmVyIG9mIHN0ZXAgYnkgaW5jcmVtZW50IG9yIGRlY3JlbWVudFxuICogfCAqKm51bWJlck1hc2sqKiAgICAgICB8IHVuZGVmaW5lZCAgXHR8IGEgYmJqIG51bWJlciBtYXNrIHRvIHZhbGlkYXRlIHRoZSBudW1iZXIgYWdhaW5zdFxuICogfCoqbnVtYmVyR3JvdXBpbmdTZXBhcmF0b3IqKiB8ICwgfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcgc2VwYXJhdG9yLiBUaGUgb3B0aW9ucyBpcyB1c2VkIG9ubHkgd2hlbiAqKm51bWJlck1hc2sqKiBpcyBkZWZpbmVkIHxcbiAqIHwqKm51bWJlckRlY2ltYWxTZXBhcmF0b3IqKiB8IC4gfCBhIGNoYXIgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgZGVjaW1hbCBzZXBhcmF0b3IuIFRoZSBvcHRpb25zIGlzIHVzZWQgb25seSB3aGVuICoqbnVtYmVyTWFzayoqIGlzIGRlZmluZWQgIHxcbiAqIHwqKm51bWJlckZvcmNlVHJhaWxpbmdaZXJvcyoqIHwgZmFsc2UgfCBBZmZlY3RzIHRoZSBvdXRwdXQgYnkgc3dpdGNoaW5nIHRoZSB3YXkgYSBtYXNrIHdpdGggXCIjXCIgY2hhcmFjdGVycyBpbiB0aGUgdHJhaWxpbmcgcG9zaXRpb25zIGlzIGZpbGxlZC4gZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBOdW1iZXJNYXNrLm1hc2soLjEwOlwiIy4jI1wiKSByZXR1cm5zIC4xMCBpbnN0ZWFkIG9mIC4xIC4gVGhlIG9wdGlvbnMgaXMgdXNlZCBvbmx5IHdoZW4gKipudW1iZXJNYXNrKiogaXMgZGVmaW5lZHxcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBOdW1iZXJFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbignbnVtYmVyTWluVmFsdWUnLCBwYXJhbXMpXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oJ251bWJlck1heFZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmdldE9wdGlvbignbnVtYmVyU3RlcFZhbHVlJywgcGFyYW1zKVxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLmdldE9wdGlvbignbnVtYmVyTWFzaycsIHBhcmFtcylcblxuICAgIGxldCBzdGFydFZhbHVlXG5cbiAgICB0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgbGV0IGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUgPVxuICAgICAgICBwYXJhbXMua2V5UHJlc3MgPT0gMzIgfHwgcGFyYW1zLmtleVByZXNzID09IDQ2IC8vIHNwYWNlIC8vIGRlbGV0ZVxuXG4gICAgICBpZiAoa2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSkge1xuICAgICAgICBzdGFydFZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcykge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLmNoYXJQcmVzc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgICAgICBpZiAocGFyYW1zLmtleVByZXNzICE9IDExMykge1xuICAgICAgICAgIC8vRjJcbiAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBbGxPbkZvY3VzID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICAvLyBtYWtlIHBhcmFtcyBpdCBhY2Nlc3NpYmxlIGZyb20gdGFsbCBtZXRob2RzXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG5cbiAgICAvLyBjcmVhdGUgdGhlIGlucHV0IHdyYXBwZXJcbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdudW1iZXJFZGl0b3IgYWctY2VsbC1lZGl0LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IC8qIGh0bWwgKi8gYFxuICAgIDxkaXYgY2xhc3M9XCJhZy1jZWxsLWVkaXRvciBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLWxlZnQgYWctdGV4dC1maWVsZCBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy10ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGBcblxuICAgIC8vIGNyZWF0ZSB0aGUgaW5wdXRcbiAgICB0aGlzLl9pbnB1dEdlbmVyYXRlZElkID0gTWF0aC5yYW5kb20oKVxuICAgICAgLnRvU3RyaW5nKDE2KVxuICAgICAgLnNsaWNlKDIsIDEwKSAvLyBnZW5lcmF0ZSByYW5kb20gaWRcbiAgICB0aGlzLl9pbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0aGlzLl9pbnB1dC5jbGFzc05hbWUgPSAnbnVtYmVyRWRpdG9yX19pbnB1dCBhZy1jZWxsLWVkaXQtaW5wdXQnXG4gICAgdGhpcy5faW5wdXQuaWQgPSBgZWwtJHt0aGlzLl9pbnB1dEdlbmVyYXRlZElkfWBcbiAgICB0aGlzLl9pbnB1dC50eXBlID0gbWFzayA/ICd0ZXh0JyA6ICdudW1iZXInXG4gICAgdGhpcy5faW5wdXQudmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAwXG5cbiAgICAvLyBwbGFjZSB0aGUgaW5wdXQgaW5zaWRlIHRoZSB3cmFwcGVyXG4gICAgdGhpcy5fZ3VpLnF1ZXJ5U2VsZWN0b3IoJy5hZy1pbnB1dC13cmFwcGVyJykuYXBwZW5kQ2hpbGQodGhpcy5faW5wdXQpXG5cbiAgICBpZiAobWluICE9PSBudWxsKSB7XG4gICAgICBtYXNrID8gKHRoaXMuX2lucHV0LmRhdGFzZXQubWluID0gbWluKSA6ICh0aGlzLl9pbnB1dC5taW4gPSBtaW4pXG4gICAgfVxuXG4gICAgaWYgKG1heCAhPT0gbnVsbCkge1xuICAgICAgbWFzayA/ICh0aGlzLl9pbnB1dC5kYXRhc2V0Lm1heCA9IG1heCkgOiAodGhpcy5faW5wdXQubWF4ID0gbWF4KVxuICAgIH1cblxuICAgIGlmIChzdGVwICE9PSBudWxsKSB7XG4gICAgICBtYXNrID8gKHRoaXMuX2lucHV0LmRhdGFzZXQuc3RlcCA9IHN0ZXApIDogKHRoaXMuX2lucHV0LnN0ZXAgPSBzdGVwKVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgbWFzayB0aGVuIHdlIHVzZSB0aGUgYEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dGBcbiAgICBpZiAobWFzaykge1xuICAgICAgY29uc3QgZ3JvdXBpbmdTZXBhcmF0b3IgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICAgJ251bWJlckdyb3VwaW5nU2VwYXJhdG9yJyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmdldE9wdGlvbignbnVtYmVyR3JvdXBTZXAnLCBwYXJhbXMpXG4gICAgICApXG4gICAgICBjb25zdCBkZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAgICdudW1iZXJEZWNpbWFsU2VwYXJhdG9yJyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmdldE9wdGlvbignbnVtYmVyRGVjaW1hbFNlcCcsIHBhcmFtcylcbiAgICAgIClcbiAgICAgIGNvbnN0IGZvcmNlVHJhaWxpbmdaZXJvcyA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgICAnbnVtYmVyRm9yY2VUcmFpbGluZ1plcm9zJyxcbiAgICAgICAgcGFyYW1zXG4gICAgICApXG5cbiAgICAgIGlmIChncm91cGluZ1NlcGFyYXRvciAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lmdyb3VwaW5nU2VwYXJhdG9yID0gZ3JvdXBpbmdTZXBhcmF0b3JcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2ltYWxTZXBhcmF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5faW5wdXQuZGF0YXNldC5kZWNpbWFsU2VwYXJhdG9yID0gZGVjaW1hbFNlcGFyYXRvclxuICAgICAgfVxuXG4gICAgICBpZiAoZm9yY2VUcmFpbGluZ1plcm9zICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQuZm9yY2VUcmFpbGluZ1plcm9zID0gZm9yY2VUcmFpbGluZ1plcm9zXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0LmRhdGFzZXQubWFzayA9IG1hc2tcbiAgICAgIHRoaXMuX251bWJlcklucHV0ID0gbmV3IEJhc2lzLklucHV0TWFza2luZy5OdW1iZXJJbnB1dCh7XG4gICAgICAgIGVsZW1lbnRzOiBbdGhpcy5faW5wdXRdLFxuICAgICAgICAvLyBkb2M6IHRoaXMuZ2V0RG9jKHBhcmFtcyksXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLl9vbk51bWJlcklucHV0VXBkYXRlLFxuICAgICAgICBvbkludmFsaWQ6IHRoaXMuX29uTnVtYmVySW5wdXRJbnZhbGlkLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX29uSW5wdXRLZXlEb3duVXApXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcblxuICAgIC8vIHVwZGF0ZSBgY3VycmVudFZhbHVlYCB0aGUgdmFsdWUgd2hpY2ggdGhpcyBjb21wb25lbnQgaXMgbWFuYWdpbmdcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5fX2lzTWFza2VkX18gPSBtYXNrICYmIG1hc2subGVuZ3RoXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uQ2hhbmdlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9udW1iZXJJbnB1dC5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIEdVSSBpcyBhdHRhY2hlZCB0byBET00uXG4gICAqXG4gICAqIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgYWx3YXlzIGZvY3VzZWQgdG8gbGlzdGVuIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXQodGhpcy5faW5wdXQpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgY29uc3QgY2FzdGVkID0gTnVtYmVyKHRoaXMuX2N1cnJlbnRWYWx1ZSlcbiAgICBjb25zdCByZXRWYWx1ZSA9IGlzTmFOKGNhc3RlZCkgPyB0aGlzLl9jdXJyZW50VmFsdWUgOiBjYXN0ZWRcbiAgICByZXR1cm4gdGhpcy5fX2lzTWFza2VkX18gPyByZXRWYWx1ZSA6IHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHJldFZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIGlmICghdGhpcy5fX2lzTWFza2VkX18pIHtcbiAgICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faW5wdXQuY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBgY3VycmVudFZhbHVlYCB3aGVuIHRoZSBjaGVja2JveCB2YWx1ZSBpcyBjaGFuZ2VkXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgdmFsdWUgd2hlbiB0aGUgTnVtYmVySW5wdXQgY29tcG9uZW50cyBmaXJlIHRoZSB1cGRhdGVcbiAgICogZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBfbWFza2VkICB0aGUgbWFza2VkIHZhbHVlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB1bm1hc2tlZCAgdGhlIHVubWFza2VkIHZhbHVlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uTnVtYmVySW5wdXRVcGRhdGUoX21hc2tlZCwgdW5tYXNrZWQpIHtcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB1bm1hc2tlZFxuICAgIHRoaXMuZm9jdXNJbigpXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBPbiBpbnZhbGlkIGlucHV0cyAsIHVwZGF0ZSB0aGUgaW5wdXQgd2l0aCBhIGN1c3RvbSB2YWxpZGl0eSBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZXJyb3IgdGhlIGVycm9yIG1lc3NhZ2UgcmVwb3J0ZWQgYnkgTnVtYmVySW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXQgVGhlIGlucHV0IGVsZW1lbnQgdXNlZCBpbnN0YW5jZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk51bWJlcklucHV0SW52YWxpZChlcnJvciwgaW5wdXQpIHtcbiAgICB0aGlzLmZvY3VzSW4oKVxuICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBjZWxsXG4gICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlucHV0LnNldEN1c3RvbVZhbGlkaXR5KGVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGFsbCBrZXlib2FyZCBldmVudHMgdG8gYWxsb3cgdmFsdWUgcHJvY2Vzc2luZyBieSB0aGUgTnVtYmVySW5wdXQgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkNvbXBvbmVudEtleURvd24oZSkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGVcblxuICAgIGNvbnN0IGlzTmF2aWdhdGlvbktleSA9XG4gICAgICBrZXkgPT09IDM3IHx8IC8vIGxlZnRcbiAgICAgIGtleSA9PT0gMzggfHwgLy8gdXBcbiAgICAgIGtleSA9PT0gMzkgfHwgLy8gcmlnaHRcbiAgICAgIGtleSA9PT0gNDAgfHwgLy8gZG93blxuICAgICAga2V5ID09PSAzMyB8fCAvLyBwYWdlIHVwXG4gICAgICBrZXkgPT09IDM0IHx8IC8vIHBhZ2UgZG93blxuICAgICAga2V5ID09PSAzNSB8fCAvLyBwYWdlIGhvbWVcbiAgICAgIGtleSA9PT0gMzYgfHwgLy8gcGFnZSBlbmRcbiAgICAgIGtleSA9PT0gMTMgLy8gZW50ZXJcblxuICAgIGlmIChpc05hdmlnYXRpb25LZXkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAvLyBzYXZlIHRoZSBsYXN0IGNhcHR1cmUga2V5IHNvIE51bWJlcklucHV0IGNhbiBwYXNzIGl0IGFnYWluIHRvIHRoZSBncmlkLlxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBrZXkgY2hhbmdlcyBhbmQgdmFsaWRhdGUgdGhlIGlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uSW5wdXRLZXlEb3duVXAoZXZlbnQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGVcblxuICAgIGlmIChrZXkgPT0gMzggfHwga2V5ID09IDQwKSB7XG4gICAgICAvLyB0b3AgfCBkb3duXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGtleSA9PSAxMyB8fCBrZXkgPT09IDkpIHtcbiAgICAgIC8vIGVudGVyXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9pbnB1dC52YWx1ZVxuICAgIH1cblxuICAgIC8vIHdlIHBhc3MgdGhlIGxhc3QgY2FwdHVyZWQgZXZlbnQgYmFjayB0byB0aGUgZ3JpZCB0byBoYW5kbGUgaXQgaW50ZXJuYWxseVxuICAgIGlmICh0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXykge1xuICAgICAgdGhpcy5fcGFyYW1zLm9uS2V5RG93bih0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXylcbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcGFyYW1zLnZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Jiai1tYXNrLWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2Jiai1tYXNrLXN1Y2Nlc3MnKVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTnVtYmVyRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvTnVtYmVyRWRpdG9yL051bWJlckVkaXRvci5qcyIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9OdW1iZXJFZGl0b3Ivc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLm51bWJlckVkaXRvcntvdmVyZmxvdzpoaWRkZW59Lm51bWJlckVkaXRvciAubnVtYmVySW5wdXRNYXNrX193cmFwe3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDttYXJnaW46MDtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubnVtYmVyRWRpdG9yIC5iYmotbWFzay1lcnJvcntib3gtc2hhZG93OjAgLTJweCAwICNlOTFlNjMgaW5zZXR9Lm51bWJlckVkaXRvciAuYmJqLW1hc2stc3VjY2Vzc3tib3gtc2hhZG93OjAgLTJweCAwICM0Y2FmNTAgaW5zZXR9Lm51bWJlckVkaXRvcl9faW5wdXR7cGFkZGluZy1sZWZ0OjZweDtib3JkZXI6dGhpbiBzb2xpZCB2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOmluaGVyaXR9LmFnLXRoZW1lLWFscGluZSAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtYmFsaGFtIC5udW1iZXJFZGl0b3JfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAubnVtYmVyRWRpdG9yX19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpfS5hZy10aGVtZS1hbHBpbmUtZGFyayAubnVtYmVyRWRpdG9yX19pbnB1dCwuYWctdGhlbWUtYmFsaGFtLWRhcmsgLm51bWJlckVkaXRvcl9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyIS4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL051bWJlckVkaXRvci9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSA2MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL1RleHRFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IFRleHRFZGl0b3JcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9UZXh0RWRpdG9yL2luZGV4LmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5cbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG4vKipcbiAqIFRleHQgRWRpdG9yXG4gKlxuICogSGFuZGxlIHRleHQgdmFsdWVzIEVkaXRpbmdcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKnRleHRQYXR0ZXJuKiogICB8IHVuZGVmaW5lZCAgICB8IEEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgdGhlIGlucHV0J3MgdmFsdWUgbXVzdCBtYXRjaCBpbiBvcmRlciBmb3IgdGhlIHZhbHVlIHRvIHBhc3MgY29uc3RyYWludCB2YWxpZGF0aW9uXG4gKiB8ICoqdGV4dFJlcXVpcmVkKiogICB8IHVuZGVmaW5lZCAgICB8IEJvb2xlYW4uIEEgdmFsdWUgaXMgcmVxdWlyZWQgdG8gY29uc2lkZXIgdGhlIGlucHV0IHZhbGlkXG4gKiB8ICoqdGV4dE1hc2sqKiAgIHwgdW5kZWZpbmVkICAgIHwgQSBiYmogc3RyaW5nIG1hc2sgdG8gdmFsaWRhdGUgdGhlIHZhbHVlXG4gKiB8ICoqdGV4dFRpdGxlKiogICB8IG51bGwgICAgfCBUaGUgaW5wdXQgdGl0bGUgLCB3aGVuIG51bGwgYW5kIHRoZSAqKnRleHRNYXNrKiogb3B0aW9ucyBpcyBkZWZpbmVkICwgdGhlbiB3ZSB1c2UgdGhlIG1hc2sgYXMgdGl0bGUgLCB3aGVuIHNldCB0byBgZGVmYXVsdGAgd2UgdGhlIGJyb3dzZXIncyBkZWZhdWx0IHRpdGxlICwgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBkZWZpbmVkIGluIHRoaXMgb3B0aW9uXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmdldE9wdGlvbigndGV4dFBhdHRlcm4nLCBwYXJhbXMpXG4gICAgY29uc3QgcmVxdWlyZWQgPSB0aGlzLmdldE9wdGlvbigndGV4dFJlcXVpcmVkJywgcGFyYW1zKVxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLmdldE9wdGlvbigndGV4dE1hc2snLCBwYXJhbXMpXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldE9wdGlvbigndGV4dFRpdGxlJywgcGFyYW1zKVxuXG4gICAgbGV0IHN0YXJ0VmFsdWVcblxuICAgIHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCA9IHBhcmFtcy5jZWxsU3RhcnRlZEVkaXRcbiAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICBsZXQga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSAnJ1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2hhclByZXNzKSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMuY2hhclByZXNzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ3RleHRFZGl0b3IgYWctY2VsbC1lZGl0LXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnRhYkluZGV4ID0gJzAnXG4gICAgdGhpcy5fZ3VpLmlubmVySFRNTCA9IC8qIGh0bWwgKi8gYFxuICAgIDxkaXYgY2xhc3M9XCJhZy1jZWxsLWVkaXRvciBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLWxlZnQgYWctdGV4dC1maWVsZCBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy10ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGBcblxuICAgIC8vIGlucHV0XG4gICAgdGhpcy5faW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXG4gICAgdGhpcy5faW5wdXQuY2xhc3NOYW1lID1cbiAgICAgICd0ZXh0RWRpdG9yX19pbnB1dCBhZy1jZWxsLWVkaXQtaW5wdXQgYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dCdcbiAgICB0aGlzLl9pbnB1dC5pZCA9IGBlbC0ke01hdGgucmFuZG9tKClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zbGljZSgyLCAxMCl9YCAvLyBnZW5lcmF0ZSByYW5kb20gaWRcbiAgICB0aGlzLl9pbnB1dC50eXBlID0gJ3RleHQnXG4gICAgdGhpcy5faW5wdXQudmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAwXG5cbiAgICB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWlucHV0LXdyYXBwZXInKS5hcHBlbmRDaGlsZCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChwYXR0ZXJuICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ3BhdHRlcm4nLCBwYXR0ZXJuKVxuICAgIH1cblxuICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICdyZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgaWYgKHRpdGxlICE9PSBudWxsKSB7XG4gICAgICBpZiAodGl0bGUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IHRpdGxlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICB0aGlzLl9pbnB1dC50aXRsZSA9IG1hc2tcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIG1hc2sgdGhlbiB3ZSB1c2UgdGhlIGBCYXNpcy5JbnB1dE1hc2tpbmcuVGV4dElucHV0YFxuICAgIGlmIChtYXNrKSB7XG4gICAgICB0aGlzLl9pbnB1dC5kYXRhc2V0Lm1hc2sgPSBtYXNrXG4gICAgICB0aGlzLl90ZXh0SW5wdXQgPSBuZXcgQmFzaXMuSW5wdXRNYXNraW5nLlRleHRJbnB1dCh7XG4gICAgICAgIGVsZW1lbnRzOiBbdGhpcy5faW5wdXRdLFxuICAgICAgICBkb2M6IHRoaXMuZ2V0RG9jKHBhcmFtcyksXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLl9vblRleHRJbnB1dFVwZGF0ZSxcbiAgICAgICAgb25JbnZhbGlkOiB0aGlzLl9vblRleHRJbnB1dEludmFsaWQsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25DaGFuZ2UpXG4gICAgICB0aGlzLl9pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX29uQ29tcG9uZW50S2V5RG93bilcblxuICAgIC8vIHVwZGF0ZSBgY3VycmVudFZhbHVlYCB0aGUgdmFsdWUgd2hpY2ggdGhpcyBjb21wb25lbnQgaXMgbWFuYWdpbmdcbiAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5fX2lzTWFza2VkX18gPSBtYXNrICYmIG1hc2subGVuZ3RoXG4gIH1cblxuICAvKipcbiAgICogIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICBpZiAoIXRoaXMuX19pc01hc2tlZF9fKSB7XG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5fb25JbnB1dEtleURvd25VcClcbiAgICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25DaGFuZ2UpXG4gICAgICB0aGlzLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9vbkNoYW5nZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGV4dElucHV0LmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX2d1aS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fb25Db21wb25lbnRLZXlEb3duKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICpcbiAgICogTWFrZSBzdXJlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCB0byBsaXN0ZW4gdG8ga2V5IGNoYW5nZXNcbiAgICovXG4gIGFmdGVyR3VpQXR0YWNoZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9faXNNYXNrZWRfXykge1xuICAgICAgdGhpcy5fdmFsaWRhdGVJbnB1dCh0aGlzLl9pbnB1dClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cykge1xuICAgICAgdGhpcy5faW5wdXQuc2VsZWN0KClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgICB0aGlzLmZvY3VzSW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgVGhlIGNvbXBvbmVudCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1zLnBhcnNlVmFsdWUodGhpcy5fY3VycmVudFZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIElmIGRvaW5nIGZ1bGwgcm93IGVkaXQsIHRoZW4gZ2V0cyBjYWxsZWQgd2hlbiB0YWJiaW5nIGludG8gdGhlIGNlbGwuXG4gICAqL1xuICBmb2N1c0luKCkge1xuICAgIHRoaXMuX2lucHV0LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNhbGxlZCBvbmNlIGFmdGVyIGluaXRpYWxpemVkIGFuZCByZXR1cm5zIGZhbHNlIHNvIHRoZSBlZGl0b3IgYXBwZWFycyBpbiB0aGUgY2VsbFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBhbHdheXMgZmFsc2VcbiAgICoqL1xuICBpc1BvcHVwKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCB2YWx1ZSB3aGVuIHRoZSBUZXh0SW5wdXQgY29tcG9uZW50IGZpcmVzIHRoZSB1cGRhdGVcbiAgICogZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBfbWFza2VkICB0aGUgbWFza2VkIHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1bm1hc2tlZCAgdGhlIHVubWFza2VkIHZhbHVlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uVGV4dElucHV0VXBkYXRlKF9tYXNrZWQsIHVubWFza2VkLCBpbnB1dCkge1xuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHVubWFza2VkXG4gICAgaW5wdXQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpXG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyB3ZSBwYXNzIHRoZSBsYXN0IGNhcHR1cmVkIGV2ZW50IGJhY2sgdG8gdGhlIGdyaWQgdG8gaGFuZGxlIGl0IGludGVybmFsbHlcbiAgICBpZiAodGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pIHtcbiAgICAgIHRoaXMuX3BhcmFtcy5vbktleURvd24odGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18pXG4gICAgICB0aGlzLl9fbGFzdENvbXBvbmVudEtleWJvYXJkUHJlc3NfXyA9IG51bGxcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE9uIGludmFsaWQgaW5wdXRzICwgdXBkYXRlIHRoZSBpbnB1dCB3aXRoIGEgY3VzdG9tIHZhbGlkaXR5IG1lc3NhZ2VcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBlcnJvciB0aGUgZXJyb3IgbWVzc2FnZSByZXBvcnRlZCBieSBUZXh0SW5wdXRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXQgVGhlIGlucHV0IGVsZW1lbnQgdXNlZCBpbnN0YW5jZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vblRleHRJbnB1dEludmFsaWQoZXJyb3IsIGlucHV0KSB7XG4gICAgdGhpcy5mb2N1c0luKClcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgY2VsbFxuICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3BhcmFtcy52YWx1ZVxuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbnB1dC5zZXRDdXN0b21WYWxpZGl0eShlcnJvcilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhbGwga2V5Ym9hcmQgZXZlbnRzIHRvIGFsbG93IHZhbHVlIHByb2Nlc3NpbmcgYnkgdGhlIE51bWJlcklucHV0IGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Db21wb25lbnRLZXlEb3duKGUpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBjb25zdCBpc05hdmlnYXRpb25LZXkgPVxuICAgICAga2V5ID09PSAzNyB8fCAvLyBsZWZ0XG4gICAgICBrZXkgPT09IDM4IHx8IC8vIHVwXG4gICAgICBrZXkgPT09IDM5IHx8IC8vIHJpZ2h0XG4gICAgICBrZXkgPT09IDQwIHx8IC8vIGRvd25cbiAgICAgIGtleSA9PT0gMzMgfHwgLy8gcGFnZSB1cFxuICAgICAga2V5ID09PSAzNCB8fCAvLyBwYWdlIGRvd25cbiAgICAgIGtleSA9PT0gMzUgfHwgLy8gcGFnZSBob21lXG4gICAgICBrZXkgPT09IDM2IHx8IC8vIHBhZ2UgZW5kXG4gICAgICBrZXkgPT09IDEzIC8vIGVudGVyXG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgLy8gc2F2ZSB0aGUgbGFzdCBjYXB0dXJlIGtleSBzbyBOdW1iZXJJbnB1dCBjYW4gcGFzcyBpdCBhZ2FpbiB0byB0aGUgZ3JpZC5cbiAgICAgIHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fID0gZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8ga2V5IGNoYW5nZXMgYW5kIHZhbGlkYXRlIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbklucHV0S2V5RG93blVwKGV2ZW50KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuX3ZhbGlkYXRlSW5wdXQoZXZlbnQudGFyZ2V0KVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlXG5cbiAgICBpZiAoa2V5ID09IDEzIHx8IGtleSA9PT0gOSkge1xuICAgICAgLy8gZW50ZXJcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgfVxuXG4gICAgLy8gd2UgcGFzcyB0aGUgbGFzdCBjYXB0dXJlZCBldmVudCBiYWNrIHRvIHRoZSBncmlkIHRvIGhhbmRsZSBpdCBpbnRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKSB7XG4gICAgICB0aGlzLl9wYXJhbXMub25LZXlEb3duKHRoaXMuX19sYXN0Q29tcG9uZW50S2V5Ym9hcmRQcmVzc19fKVxuICAgICAgdGhpcy5fX2xhc3RDb21wb25lbnRLZXlib2FyZFByZXNzX18gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBgY3VycmVudFZhbHVlYCBvbiB0aGUgaW5wdXQgdmFsdWUgaXMgY2hhbmdlZCBhbmQgaXQgaXMgdmFsaWRcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5fdmFsaWRhdGVJbnB1dChldmVudC50YXJnZXQpXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX2lucHV0LnZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBnaXZlbiBpbnB1dCBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gdmFsaWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIF92YWxpZGF0ZUlucHV0KGlucHV0KSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IGlucHV0LmNoZWNrVmFsaWRpdHkoKVxuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBpbnB1dC5jbGFzc0xpc3QuYWRkKCdiYmotbWFzay1lcnJvcicpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdiYmotbWFzay1zdWNjZXNzJylcbiAgICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB0aGlzLl9wYXJhbXMudmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYmJqLW1hc2stZXJyb3InKVxuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYmJqLW1hc2stc3VjY2VzcycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0RWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGV4dEVkaXRvci9UZXh0RWRpdG9yLmpzIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1RleHRFZGl0b3Ivc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLnRleHRFZGl0b3J7b3ZlcmZsb3c6aGlkZGVufS50ZXh0RWRpdG9yIC50ZXh0SW5wdXRNYXNrX193cmFwe3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MDttYXJnaW46MDtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0udGV4dEVkaXRvciAuYmJqLW1hc2stZXJyb3J7Ym94LXNoYWRvdzowIC0ycHggMCAjZTkxZTYzIGluc2V0fS50ZXh0RWRpdG9yIC5iYmotbWFzay1zdWNjZXNze2JveC1zaGFkb3c6MCAtMnB4IDAgIzRjYWY1MCBpbnNldH0udGV4dEVkaXRvcl9faW5wdXR7cGFkZGluZy1sZWZ0OjZweDtib3JkZXI6dGhpbiBzb2xpZCB2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOmluaGVyaXR9LmFnLXRoZW1lLWFscGluZSAudGV4dEVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbSAudGV4dEVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLW1hdGVyaWFsIC50ZXh0RWRpdG9yX19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpfS5hZy10aGVtZS1hbHBpbmUtZGFyayAudGV4dEVkaXRvcl9faW5wdXQsLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC50ZXh0RWRpdG9yX19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMyZDM0MzYpfVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvVGV4dEVkaXRvci9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSA2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCB0ZW1wbGF0ZSBmcm9tICdsb2Rhc2gtZXMvdGVtcGxhdGUnXG5cbi8qKlxuICogTnVtYmVycyBFZGl0b3JcbiAqXG4gKiBIYW5kbGUgbnVtYmVyIHZhbHVlcyBFZGl0aW5nXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipyZW5kZXJUZW1wbGF0ZSoqICAgfCB1bmRlZmluZWQgICAgfCBsb2Rhc2ggdGVtcGxhdGVcbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBUZW1wbGF0ZVJlbmRlcmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBuZXcgVGVtcGxhdGVSZW5kZXJlclxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gd2lsbCB0aGlzIGFmZmVjdCBCQmogYnVpID9cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAndGVtcGxhdGVSZW5kZXJlciBhZy1jZWxsLXdyYXBwZXInXG4gICAgdGhpcy5fZ3VpLnN0eWxlLndpZHRoID0gJzEwMCUnXG4gICAgdGhpcy5fZ3VpLnN0eWxlLmhlaWdodCA9ICcxMDAlJ1xuICAgIHRoaXMuX2d1aS5zdHlsZS5saW5lSGVpZ2h0ID0gJ25vcm1hbCdcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5yZWZyZXNoKHBhcmFtcywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGluaGVyaXREb2NcbiAgICovXG4gIGdldEd1aSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3VpXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY2VsbCBsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgY2VsbCByZW5kZXJlciBwYXJhbXNcbiAgICogQHBhcmFtIHtCb29sZWFufSBpc0luaXQgdHJ1ZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCBpbiBgaW5pdGAgcGhhc2UgLCBmYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVmcmVzaCBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gICAqL1xuICByZWZyZXNoKHBhcmFtcywgaXNJbml0KSB7XG4gICAgaWYgKGlzSW5pdCkge1xuICAgICAgdGhpcy5fY29tcGlsZWRUZW1wbGF0ZSA9IHRlbXBsYXRlKFxuICAgICAgICB0aGlzLmdldE9wdGlvbigncmVuZGVyVGVtcGxhdGUnLCBwYXJhbXMsICcnKVxuICAgICAgKVxuICAgIH1cblxuICAgIGxldCBjb250ZW50XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuX2NvbXBpbGVkVGVtcGxhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLl9jb21waWxlZFRlbXBsYXRlKHsgcGFyYW1zIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgPyBwYXJhbXMudmFsdWVGb3JtYXR0ZWQgOiBwYXJhbXMudmFsdWVcbiAgICB9XG5cbiAgICB0aGlzLl9ndWkuaW5uZXJIVE1MID0gY29udGVudFxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZVJlbmRlcmVyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvVGVtcGxhdGVSZW5kZXJlci9UZW1wbGF0ZVJlbmRlcmVyLmpzIiwiaW1wb3J0IGFzc2lnbkluV2l0aCBmcm9tICcuL2Fzc2lnbkluV2l0aC5qcyc7XG5pbXBvcnQgYXR0ZW1wdCBmcm9tICcuL2F0dGVtcHQuanMnO1xuaW1wb3J0IGJhc2VWYWx1ZXMgZnJvbSAnLi9fYmFzZVZhbHVlcy5qcyc7XG5pbXBvcnQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiBmcm9tICcuL19jdXN0b21EZWZhdWx0c0Fzc2lnbkluLmpzJztcbmltcG9ydCBlc2NhcGVTdHJpbmdDaGFyIGZyb20gJy4vX2VzY2FwZVN0cmluZ0NoYXIuanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5pbXBvcnQgdGVtcGxhdGVTZXR0aW5ncyBmcm9tICcuL3RlbXBsYXRlU2V0dGluZ3MuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xudmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xcYl9fcCBcXCs9ICcnOy9nLFxuICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2hcbiAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gKi9cbnZhciByZUVzVGVtcGxhdGUgPSAvXFwkXFx7KFteXFxcXH1dKig/OlxcXFwuW15cXFxcfV0qKSopXFx9L2c7XG5cbi8qKiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbnZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xcblxcclxcdTIwMjhcXHUyMDI5XFxcXF0vZztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJwb2xhdGUgZGF0YSBwcm9wZXJ0aWVzXG4gKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICogXCJlc2NhcGVcIiBkZWxpbWl0ZXJzLCBhbmQgZXhlY3V0ZSBKYXZhU2NyaXB0IGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLiBEYXRhXG4gKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVlIHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZ1xuICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICpcbiAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQgYF8udGVtcGxhdGVgIHV0aWxpemVzXG4gKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAqIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gKiBbbG9kYXNoJ3MgY3VzdG9tIGJ1aWxkcyBkb2N1bWVudGF0aW9uXShodHRwczovL2xvZGFzaC5jb20vY3VzdG9tLWJ1aWxkcykuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gKiBbQ2hyb21lJ3MgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2V4dGVuc2lvbnMvc2FuZGJveGluZ0V2YWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gKiAgVGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXZhbHVhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmV2YWx1YXRlXVxuICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmltcG9ydHM9Xy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNdXG4gKiAgQW4gb2JqZWN0IHRvIGltcG9ydCBpbnRvIHRoZSB0ZW1wbGF0ZSBhcyBmcmVlIHZhcmlhYmxlcy5cbiAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gKiAgVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSd0ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICogIFRoZSBzb3VyY2VVUkwgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXVxuICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlciB0byBjcmVhdGUgYSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkISdcbiAqXG4gKiAvLyBVc2UgdGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIgdG8gZXNjYXBlIGRhdGEgcHJvcGVydHkgdmFsdWVzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPGI+PCUtIHZhbHVlICU+PC9iPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICogLy8gPT4gJzxiPiZsdDtzY3JpcHQmZ3Q7PC9iPidcbiAqXG4gKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgXy5mb3JFYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gKlxuICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJpbnRgIGZ1bmN0aW9uIGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAqIC8vID0+ICdoZWxsbyBiYXJuZXkhJ1xuICpcbiAqIC8vIFVzZSB0aGUgRVMgdGVtcGxhdGUgbGl0ZXJhbCBkZWxpbWl0ZXIgYXMgYW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAqIC8vIERpc2FibGUgc3VwcG9ydCBieSByZXBsYWNpbmcgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICogLy8gPT4gJ2hlbGxvIHBlYmJsZXMhJ1xuICpcbiAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHQuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JT0gXCJcXFxcPCUtIHZhbHVlICVcXFxcPlwiICU+Jyk7XG4gKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAqIC8vID0+ICc8JS0gdmFsdWUgJT4nXG4gKlxuICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUodGV4dCwgeyAnaW1wb3J0cyc6IHsgJ2pxJzogalF1ZXJ5IH0gfSk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7XG4gKiBjb21waWxlZChkYXRhKTtcbiAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gKlxuICogLy8gVXNlIHRoZSBgdmFyaWFibGVgIG9wdGlvbiB0byBlbnN1cmUgYSB3aXRoLXN0YXRlbWVudCBpc24ndCB1c2VkIGluIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gKiBjb21waWxlZC5zb3VyY2U7XG4gKiAvLyA9PiBmdW5jdGlvbihkYXRhKSB7XG4gKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICogLy8gICBfX3AgKz0gJ2hpICcgKyAoKF9fdCA9ICggZGF0YS51c2VyICkpID09IG51bGwgPyAnJyA6IF9fdCkgKyAnISc7XG4gKiAvLyAgIHJldHVybiBfX3A7XG4gKiAvLyB9XG4gKlxuICogLy8gVXNlIGN1c3RvbSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLlxuICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIHt7IHVzZXIgfX0hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gKlxuICogLy8gVXNlIHRoZSBgc291cmNlYCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsXG4gKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdqc3QuanMnKSwgJ1xcXG4gKiAgIHZhciBKU1QgPSB7XFxcbiAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICogICB9O1xcXG4gKiAnKTtcbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkge1xuICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uXG4gIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgLy8gYW5kIExhdXJhIERva3Rvcm92YSdzIGRvVC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL29sYWRvL2RvVCkuXG4gIHZhciBzZXR0aW5ncyA9IHRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0cy5fLnRlbXBsYXRlU2V0dGluZ3MgfHwgdGVtcGxhdGVTZXR0aW5ncztcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHtcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5ncy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxcbiAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSxcbiAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICB2YXIgaXNFc2NhcGluZyxcbiAgICAgIGlzRXZhbHVhdGluZyxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIGludGVycG9sYXRlID0gb3B0aW9ucy5pbnRlcnBvbGF0ZSB8fCByZU5vTWF0Y2gsXG4gICAgICBzb3VyY2UgPSBcIl9fcCArPSAnXCI7XG5cbiAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICB2YXIgcmVEZWxpbWl0ZXJzID0gUmVnRXhwKFxuICAgIChvcHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAoaW50ZXJwb2xhdGUgPT09IHJlSW50ZXJwb2xhdGUgPyByZUVzVGVtcGxhdGUgOiByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgKG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnXG4gICwgJ2cnKTtcblxuICAvLyBVc2UgYSBzb3VyY2VVUkwgZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gIC8vIFRoZSBzb3VyY2VVUkwgZ2V0cyBpbmplY3RlZCBpbnRvIHRoZSBzb3VyY2UgdGhhdCdzIGV2YWwtZWQsIHNvIGJlIGNhcmVmdWxcbiAgLy8gd2l0aCBsb29rdXAgKGluIGNhc2Ugb2YgZS5nLiBwcm90b3R5cGUgcG9sbHV0aW9uKSwgYW5kIHN0cmlwIG5ld2xpbmVzIGlmIGFueS5cbiAgLy8gQSBuZXdsaW5lIHdvdWxkbid0IGJlIGEgdmFsaWQgc291cmNlVVJMIGFueXdheSwgYW5kIGl0J2QgZW5hYmxlIGNvZGUgaW5qZWN0aW9uLlxuICB2YXIgc291cmNlVVJMID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc291cmNlVVJMJylcbiAgICA/ICgnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvW1xcclxcbl0vZywgJyAnKSArXG4gICAgICAgJ1xcbicpXG4gICAgOiAnJztcblxuICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgIC8vIEVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgaW5jbHVkZWQgaW4gc3RyaW5nIGxpdGVyYWxzLlxuICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICBpZiAoZXNjYXBlVmFsdWUpIHtcbiAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICB9XG4gICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiICsgZXZhbHVhdGVWYWx1ZSArIFwiO1xcbl9fcCArPSAnXCI7XG4gICAgfVxuICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICBzb3VyY2UgKz0gXCInICtcXG4oKF9fdCA9IChcIiArIGludGVycG9sYXRlVmFsdWUgKyBcIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xcbidcIjtcbiAgICB9XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAvLyBUaGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW5cbiAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgIHJldHVybiBtYXRjaDtcbiAgfSk7XG5cbiAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gIC8vIGNvZGUgdG8gYWRkIHRoZSBkYXRhIG9iamVjdCB0byB0aGUgdG9wIG9mIHRoZSBzY29wZSBjaGFpbi5cbiAgLy8gTGlrZSB3aXRoIHNvdXJjZVVSTCwgd2UgdGFrZSBjYXJlIHRvIG5vdCBjaGVjayB0aGUgb3B0aW9uJ3MgcHJvdG90eXBlLFxuICAvLyBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBjb2RlIGluamVjdGlvbiB2ZWN0b3IuXG4gIHZhciB2YXJpYWJsZSA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3ZhcmlhYmxlJykgJiYgb3B0aW9ucy52YXJpYWJsZTtcbiAgaWYgKCF2YXJpYWJsZSkge1xuICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICB9XG4gIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwgJyQxJylcbiAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XFxuJyArXG4gICAgKHZhcmlhYmxlXG4gICAgICA/ICcnXG4gICAgICA6ICdvYmogfHwgKG9iaiA9IHt9KTtcXG4nXG4gICAgKSArXG4gICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAoaXNFc2NhcGluZ1xuICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgOiAnJ1xuICAgICkgK1xuICAgIChpc0V2YWx1YXRpbmdcbiAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgIFwiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XFxuXCJcbiAgICAgIDogJztcXG4nXG4gICAgKSArXG4gICAgc291cmNlICtcbiAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBGdW5jdGlvbihpbXBvcnRzS2V5cywgc291cmNlVVJMICsgJ3JldHVybiAnICsgc291cmNlKVxuICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gIH0pO1xuXG4gIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvclxuICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICBpZiAoaXNFcnJvcihyZXN1bHQpKSB7XG4gICAgdGhyb3cgcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBhbGlhcyBleHRlbmRXaXRoXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbldpdGhcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAqIH1cbiAqXG4gKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbkluV2l0aCwgY3VzdG9taXplcik7XG4gKlxuICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYXNzaWduSW5XaXRoO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hc3NpZ25JbldpdGguanMiLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuXG4vKipcbiAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VmFsdWUgPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29weU9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnblZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgZ2V0VmFsdWUgZnJvbSAnLi9fZ2V0VmFsdWUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXROYXRpdmU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXROYXRpdmUuanMiLCJpbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzTWFza2VkIGZyb20gJy4vX2lzTWFza2VkLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hdGl2ZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc05hdGl2ZS5qcyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRSYXdUYWcuanMiLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgb2JqZWN0VG9TdHJpbmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcyIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2lzTWFza2VkLmpzIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNvcmVKc0RhdGE7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3RvU291cmNlLmpzIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZ2V0VmFsdWUuanMiLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19jcmVhdGVBc3NpZ25lci5qcyIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJSZXN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fb3ZlclJlc3QuanMiLCJpbXBvcnQgYmFzZVNldFRvU3RyaW5nIGZyb20gJy4vX2Jhc2VTZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5leHBvcnQgZGVmYXVsdCBzZXRUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX3NldFRvU3RyaW5nLmpzIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmluZVByb3BlcnR5IGZyb20gJy4vX2RlZmluZVByb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTZXRUb1N0cmluZztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvY29uc3RhbnQuanMiLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNob3J0T3V0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fc2hvcnRPdXQuanMiLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5c0luIGZyb20gJy4vX2Jhc2VLZXlzSW4uanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQga2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzSW4uanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVGltZXM7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlVGltZXMuanMiLCJpbXBvcnQgYmFzZUlzQXJndW1lbnRzIGZyb20gJy4vX2Jhc2VJc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJndW1lbnRzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0FyZ3VtZW50cy5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0FyZ3VtZW50cztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViRmFsc2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsImltcG9ydCBiYXNlSXNUeXBlZEFycmF5IGZyb20gJy4vX2Jhc2VJc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IG5vZGVVdGlsIGZyb20gJy4vX25vZGVVdGlsLmpzJztcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzVHlwZWRBcnJheTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNUeXBlZEFycmF5LmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNUeXBlZEFycmF5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVVuYXJ5LmpzIiwiaW1wb3J0IGZyZWVHbG9iYWwgZnJvbSAnLi9fZnJlZUdsb2JhbC5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IG5vZGVVdGlsO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbm9kZVV0aWwuanMiLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXNJbi5qcyIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19uYXRpdmVLZXlzSW4uanMiLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9hdHRlbXB0LmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0LmpzIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRQcm90b3R5cGU7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAqIG9mIGBwcm9wc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVZhbHVlcztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2Jhc2VWYWx1ZXMuanMiLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICByZXR1cm4gc3JjVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9ialZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyIsIi8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xudmFyIHN0cmluZ0VzY2FwZXMgPSB7XG4gICdcXFxcJzogJ1xcXFwnLFxuICBcIidcIjogXCInXCIsXG4gICdcXG4nOiAnbicsXG4gICdcXHInOiAncicsXG4gICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgJ1xcdTIwMjknOiAndTIwMjknXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXNjYXBlU3RyaW5nQ2hhcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2VzY2FwZVN0cmluZ0NoYXIuanMiLCJpbXBvcnQgYXJyYXlMaWtlS2V5cyBmcm9tICcuL19hcnJheUxpa2VLZXlzLmpzJztcbmltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9rZXlzLmpzIiwiaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBuYXRpdmVLZXlzIGZyb20gJy4vX25hdGl2ZUtleXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VLZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZUtleXMuanMiLCJpbXBvcnQgb3ZlckFyZyBmcm9tICcuL19vdmVyQXJnLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fbmF0aXZlS2V5cy5qcyIsImltcG9ydCBlc2NhcGUgZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHJlRXNjYXBlIGZyb20gJy4vX3JlRXNjYXBlLmpzJztcbmltcG9ydCByZUV2YWx1YXRlIGZyb20gJy4vX3JlRXZhbHVhdGUuanMnO1xuaW1wb3J0IHJlSW50ZXJwb2xhdGUgZnJvbSAnLi9fcmVJbnRlcnBvbGF0ZS5qcyc7XG5cbi8qKlxuICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAqIGVtYmVkZGVkIFJ1YnkgKEVSQikgYXMgd2VsbCBhcyBFUzIwMTUgdGVtcGxhdGUgc3RyaW5ncy4gQ2hhbmdlIHRoZVxuICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgdGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBiZSBIVE1MLWVzY2FwZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlZmVyZW5jZSB0aGUgZGF0YSBvYmplY3QgaW4gdGhlIHRlbXBsYXRlIHRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gICd2YXJpYWJsZSc6ICcnLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gICdpbXBvcnRzJzoge1xuXG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgICdfJzogeyAnZXNjYXBlJzogZXNjYXBlIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdGVtcGxhdGVTZXR0aW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGVtcGxhdGVTZXR0aW5ncy5qcyIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvZXNjYXBlLmpzIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZUh0bWxDaGFyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fZXNjYXBlSHRtbENoYXIuanMiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eU9mO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVByb3BlcnR5T2YuanMiLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRvU3RyaW5nLmpzIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlRXNjYXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFc2NhcGUuanMiLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXZhbHVhdGUgPSAvPCUoW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUV2YWx1YXRlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCBJbWFnZVJlbmRlcmVyIGZyb20gJy4vSW1hZ2VSZW5kZXJlcidcblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VSZW5kZXJlclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0ltYWdlUmVuZGVyZXIvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgVGVtcGxhdGVSZW5kZXJlciBmcm9tICcuLi9UZW1wbGF0ZVJlbmRlcmVyJ1xuXG4vKipcbiAqIE51bWJlcnMgRWRpdG9yXG4gKlxuICogSGFuZGxlIG51bWJlciB2YWx1ZXMgRWRpdGluZ1xuICpcbiAqIHwgTmFtZSAgICAgICAgICAgICAgICAgIFx0fCBEZWZhdWx0ICAgICBcdHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0fFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdHw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICoqaW1hZ2VSZW5kZXJlcldpZHRoKiogICB8IDI4cHggICAgfCBpbWFnZSB3aWR0aFxuICogfCAqKmltYWdlUmVuZGVyZXJIZWlnaHQqKiAgIHwgMjhweCAgICB8IGltYWdlIGhlaWdodFxuICogfCAqKmltYWdlUmVuZGVyZXJMaXN0KiogICAgICAgfCB7fSAgXHR8IGEgbGlzdCBvZiB3aGljaCBtYXBzIGltYWdlcyB3aXRoIGNlbGwgdmFsdWVzIGFzIEpTT04gb3IgcGxhaW4gSlMgb2JqZWN0XG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuMTUjdGVtcGxhdGVcbiAqL1xuY2xhc3MgSW1hZ2VSZW5kZXJlciBleHRlbmRzIFRlbXBsYXRlUmVuZGVyZXIge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHJlZnJlc2gocGFyYW1zLCBpc0luaXQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIGNvbnN0IGltYWdlV2lkdGggPSB0aGlzLmdldE9wdGlvbignaW1hZ2VSZW5kZXJlcldpZHRoJywgcGFyYW1zLCAnMjhweCcpXG4gICAgY29uc3QgaW1hZ2VIZWlnaHQgPSB0aGlzLmdldE9wdGlvbignaW1hZ2VSZW5kZXJlckhlaWdodCcsIHBhcmFtcywgJzI4cHgnKVxuICAgIGxldCBpbWFnZUxpc3QgPSB0aGlzLmdldE9wdGlvbignaW1hZ2VSZW5kZXJlckxpc3QnLCBwYXJhbXMpXG5cbiAgICB0cnkge1xuICAgICAgaW1hZ2VMaXN0ID0gSlNPTi5wYXJzZShpbWFnZUxpc3QpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW1hZ2VMaXN0ID0gaW1hZ2VMaXN0IHx8IHt9XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4gICAgaWYgKGltYWdlTGlzdCAmJiBpbWFnZUxpc3QuaGFzT3duUHJvcGVydHkodmFsdWUpKSB7XG4gICAgICBwYXJhbXMucmVuZGVyVGVtcGxhdGUgPSAvKmh0bWwqLyBgXG4gICAgICAgIDxpbWcgXG4gICAgICAgICAgc3JjPVwiJHtpbWFnZUxpc3RbcGFyYW1zLnZhbHVlXX1cIiBcbiAgICAgICAgICB3aWR0aD1cIiR7aW1hZ2VXaWR0aH1cIlxuICAgICAgICAgIGhlaWdodD1cIiR7aW1hZ2VIZWlnaHR9XCIgIFxuICAgICAgICAvPlxuICAgICAgYFxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucmVuZGVyVGVtcGxhdGUgPSB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5yZWZyZXNoKHBhcmFtcywgaXNJbml0KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlUmVuZGVyZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9JbWFnZVJlbmRlcmVyL0ltYWdlUmVuZGVyZXIuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgRGF0ZVRpbWVGaWx0ZXIgZnJvbSAnLi9EYXRlVGltZUZpbHRlcidcblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVRpbWVGaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUZpbHRlci9pbmRleC5qcyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBiYXNpcy1hZ2dyaWQtY29tcG9uZW50cyBsaWIuXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGF1dG9iaW5kLCBvdmVycmlkZSwgcmVhZG9ubHkgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgdXRjVG9ab25lZFRpbWUgZnJvbSAnZGF0ZS1mbnMtdHovdXRjVG9ab25lZFRpbWUnXG5pbXBvcnQgeyB3aXRoRXZlbnRzTWl4aW4gfSBmcm9tICcuLi9FdmVudHNNaXhpbidcbmltcG9ydCBEYXRlVGltZUlucHV0IGZyb20gJy4uL0RhdGVUaW1lSW5wdXQnXG5pbXBvcnQgQ29tcG9uZW50IGZyb20gJy4uL0NvbXBvbmVudCdcbmltcG9ydCAnLi9zdHlsZS5zY3NzJ1xuXG5jb25zdCBUT0tFTlMgPSB7XG4gIFRPS0VOX0VRVUFMOiAnZXF1YWxzJyxcbiAgVE9LRU5fTk9UX0VRVUFMOiAnbm90RXF1YWwnLFxuICBUT0tFTl9MRVNTOiAnbGVzc1RoYW4nLFxuICBUT0tFTl9HUkVBVEVSOiAnZ3JlYXRlclRoYW4nLFxuICBUT0tFTl9SQU5HRTogJ2luUmFuZ2UnLFxuICBUT0tFTl9BTkQ6ICdBTkQnLFxuICBUT0tFTl9PUjogJ09SJyxcbn1cblxuQHdpdGhFdmVudHNNaXhpblxuY2xhc3MgQ29uZGl0aW9uUGFuZWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQ29uc3RhbnQgd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCBuYW1lIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIHRoZSBvcHRpb25cbiAgICogc3RhdGUgaXMgY2hhbmdlZFxuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgQHJlYWRvbmx5XG4gIHN0YXRpYyBPTl9DT05ESVRJT05fQ0hBTkdFRCA9ICdDb25kaXRpb25QYW5lbC5PTl9DT05ESVRJT05fQ0hBTkdFRCdcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gc3RhdGVcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0ZSA9IHtcbiAgICB0eXBlOiBUT0tFTlMuVE9LRU5fRVFVQUwsXG4gICAgZmlsdGVyOiBudWxsLFxuICAgIGZpbHRlclRvOiBudWxsLFxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtEYXRlVGltZUlucHV0fVxuICAgKi9cbiAgX2ZpbHRlclRpbWVJbnB1dCA9IG5ldyBEYXRlVGltZUlucHV0KClcblxuICAvKipcbiAgICogQHR5cGUge0RhdGVUaW1lSW5wdXR9XG4gICAqL1xuICBfZmlsdGVyVG9EYXRlVGltZUlucHV0ID0gbmV3IERhdGVUaW1lSW5wdXQoKVxuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBlbmFibGVkIGZpbHRlciB0eXBlc1xuICAgKlxuICAgKiBAdHlwZSB7QXJyYXl9XG4gICAqL1xuICBfZmlsdGVyT3B0aW9ucyA9IFtdXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGVuYWJsZWQgZmlsdGVyIHR5cGVcbiAgICpcbiAgICogQHR5cGUge051bWJlcn1cbiAgICovXG4gIF9kZWZhdWx0T3B0aW9uID0gLTFcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG5cbiAgICB0aGlzLl9maWx0ZXJPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oJ2ZpbHRlck9wdGlvbnMnLCBwYXJhbXMsIFtcbiAgICAgIFRPS0VOUy5UT0tFTl9FUVVBTCxcbiAgICAgIFRPS0VOUy5UT0tFTl9OT1RfRVFVQUwsXG4gICAgICBUT0tFTlMuVE9LRU5fTEVTUyxcbiAgICAgIFRPS0VOUy5UT0tFTl9HUkVBVEVSLFxuICAgICAgVE9LRU5TLlRPS0VOX1JBTkdFLFxuICAgIF0pXG5cbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGVmYXVsdE9wdGlvbicsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aGlzLl9maWx0ZXJPcHRpb25zLmluZGV4T2YoVE9LRU5TLlRPS0VOX0VRVUFMKSA+IC0xXG4gICAgICAgID8gVE9LRU5TLlRPS0VOX0VRVUFMXG4gICAgICAgIDogdGhpcy5fZmlsdGVyT3B0aW9uc1swXVxuICAgIClcblxuICAgIHRoaXMuc3RhdGUudHlwZSA9IHRoaXMuX2RlZmF1bHRPcHRpb25cblxuICAgIGNvbnN0IG9wdGlvbnNUcmFuc2xhdGlvbnMgPSB7XG4gICAgICBbVE9LRU5TLlRPS0VOX0VRVUFMXTogdHJhbnNsYXRlKFRPS0VOUy5UT0tFTl9FUVVBTCwgJ0VxdWFscycpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9OT1RfRVFVQUxdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0VRVUFMLCAnTm90IGVxdWFsJyksXG4gICAgICBbVE9LRU5TLlRPS0VOX0xFU1NdOiB0cmFuc2xhdGUoVE9LRU5TLlRPS0VOX0xFU1MsICdMZXNzIHRoYW4nKSxcbiAgICAgIFtUT0tFTlMuVE9LRU5fR1JFQVRFUl06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fR1JFQVRFUiwgJ0dyZWF0ZXIgdGhhbicpLFxuICAgICAgW1RPS0VOUy5UT0tFTl9SQU5HRV06IHRyYW5zbGF0ZShUT0tFTlMuVE9LRU5fUkFOR0UsICdJbiByYW5nZScpLFxuICAgIH1cblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdkYXRlVGltZUZpbHRlciBhZy1maWx0ZXItYm9keS13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJhZy1maWx0ZXItc2VsZWN0IGRhdGVUaW1lRmlsdGVyX19zZWxlY3RcIiAgJHtcbiAgICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5sZW5ndGggPT09IDEgPyAnZGlzYWJsZWQnIDogJydcbiAgICAgIH0+XG4gICAgICAgICR7dGhpcy5fZmlsdGVyT3B0aW9ucy5tYXAoXG4gICAgICAgICAgb3B0aW9uID0+IC8qIGh0bWwgKi8gYFxuICAgICAgICAgIDxvcHRpb24gXG4gICAgICAgICAgICB2YWx1ZT1cIiR7b3B0aW9ufVwiIFxuICAgICAgICAgICAgJHtvcHRpb24gPT09IHRoaXMuX2RlZmF1bHRPcHRpb24gPyAnc2VsZWN0ZWQnIDogJyd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICAke29wdGlvbnNUcmFuc2xhdGlvbnNbb3B0aW9uXX1cbiAgICAgICAgICA8L29wdGlvbj5gXG4gICAgICAgICl9XG4gICAgICA8L3NlbGVjdD5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWRhdGUtZnJvbVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFnLWZpbHRlci1kYXRlLXRvIGFnLWhpZGRlblwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGBcblxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9maWx0ZXJUaW1lSW5wdXQub24oRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsIHNlbGVjdGVkRGF0ZSA9PiB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlciA9IHNlbGVjdGVkRGF0ZVxuICAgICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gICAgfSlcblxuICAgIHRoaXMuX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQub24oXG4gICAgICBEYXRlVGltZUlucHV0Lk9OX0RBVEVfQ0hBTkdFRCxcbiAgICAgIHNlbGVjdGVkRGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBzZWxlY3RlZERhdGVcbiAgICAgICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gICAgICB9XG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1kYXRlLWZyb20nKVxuICAgICAgLmFwcGVuZENoaWxkKHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5nZXRHdWkoKSlcbiAgICB0aGlzLl9ndWlcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctZmlsdGVyLWRhdGUtdG8nKVxuICAgICAgLmFwcGVuZENoaWxkKHRoaXMuX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dC5nZXRHdWkoKSlcblxuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctZmlsdGVyLXNlbGVjdCcpXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uVHlwZUNoYW5nZSlcblxuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5fc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMub2ZmKENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VEKVxuICAgIHRoaXMuX2ZpbHRlclRpbWVJbnB1dC5kZXN0cm95KClcbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQuZGVzdHJveSgpXG4gICAgdGhpcy5fZ3VpXG4gICAgICAucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uVHlwZUNoYW5nZSlcbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc3RhdGVcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc3RhdGUuZmlsdGVyID0gbnVsbFxuICAgIHRoaXMuc3RhdGUuZmlsdGVyVG8gPSBudWxsXG4gICAgdGhpcy5fZmlsdGVyVGltZUlucHV0LnJlc2V0KClcbiAgICB0aGlzLl9maWx0ZXJUb0RhdGVUaW1lSW5wdXQucmVzZXQoKVxuXG4gICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjb25kaXRpb24gc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHN0YXRlID0gc3RhdGUgfHwge31cbiAgICB0aGlzLnN0YXRlLmZpbHRlciA9IHN0YXRlLmZpbHRlciB8fCBudWxsXG4gICAgdGhpcy5zdGF0ZS5maWx0ZXJUbyA9IHN0YXRlLmZpbHRlclRvIHx8IG51bGxcbiAgICB0aGlzLnN0YXRlLnR5cGUgPSBzdGF0ZS50eXBlIHx8IHRoaXMuX2RlZmF1bHRPcHRpb25cblxuICAgIGNvbnN0IGd1aSA9IHRoaXMuX2d1aVxuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSB0aGlzLl9maWx0ZXJPcHRpb25zXG4gICAgY29uc3Qgc2VsZWN0RWwgPSBndWkucXVlcnlTZWxlY3RvcignLmFnLWZpbHRlci1zZWxlY3QnKVxuICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5fZmlsdGVyVGltZUlucHV0XG4gICAgY29uc3QgZmlsdGVyVG9JbnB1dCA9IHRoaXMuX2ZpbHRlclRvRGF0ZVRpbWVJbnB1dFxuXG4gICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IGZpbHRlck9wdGlvbnMuaW5kZXhPZih0aGlzLnN0YXRlLnR5cGUpXG4gICAgZmlsdGVySW5wdXQuc2V0RGF0ZSh0aGlzLnN0YXRlLmZpbHRlcilcbiAgICBmaWx0ZXJUb0lucHV0LnNldERhdGUodGhpcy5zdGF0ZS5maWx0ZXJUbylcblxuICAgIC8vIHdlIGZpcmUgb24gY2hhbmdlIGV2ZW50IGluIGNhc2UgdGhlIGZpbHRlciBvcHRpb25zIGNvbnRhaW5cbiAgICAvLyBvbmUgb3B0aW9uIHdoaWNoIGlzIGluIFJhbmdlIFwiaW5SYW5nZVwiXG4gICAgaWYgKCdjcmVhdGVFdmVudCcgaW4gZG9jdW1lbnQpIHtcbiAgICAgIGNvbnN0IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJylcbiAgICAgIGV2dC5pbml0RXZlbnQoJ2NoYW5nZScsIGZhbHNlLCB0cnVlKVxuICAgICAgc2VsZWN0RWwuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdEVsLmZpcmVFdmVudCgnb25jaGFuZ2UnKVxuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KENvbmRpdGlvblBhbmVsLk9OX0NPTkRJVElPTl9DSEFOR0VELCB0aGlzLnN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgc3RhdGUgd2l0aCB0aGUgc2VsZWN0ZWQgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uVHlwZUNoYW5nZShlKSB7XG4gICAgY29uc3QgZWwgPSBlLnRhcmdldFxuICAgIGNvbnN0IGZpbHRlckRhdGVUbyA9IHRoaXMuX2d1aS5xdWVyeVNlbGVjdG9yKCcuYWctZmlsdGVyLWRhdGUtdG8nKVxuXG4gICAgdGhpcy5zdGF0ZS50eXBlID0gZWwub3B0aW9uc1tlbC5zZWxlY3RlZEluZGV4XS52YWx1ZVxuXG4gICAgaWYgKHRoaXMuc3RhdGUudHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFKSB7XG4gICAgICBmaWx0ZXJEYXRlVG8uY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyRGF0ZVRvLmNsYXNzTGlzdC5hZGQoJ2FnLWhpZGRlbicpXG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cbn1cblxuQHdpdGhFdmVudHNNaXhpblxuY2xhc3MgSm9pbkNvbmRpdGlvblBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXZlbnQgbmFtZSB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiB0aGUgam9pblxuICAgKiBzdGF0ZSBpcyBjaGFuZ2VkXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGljIE9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQgPVxuICAgICdKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCdcbiAgLyoqXG4gICAqIFRoZSBqb2luIHN0YXRlXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBAcmVhZG9ubHlcbiAgc3RhdGUgPSB7XG4gICAgY29uZGl0aW9uMToge30sXG4gICAgY29uZGl0aW9uMjoge30sXG4gICAgb3BlcmF0b3I6IFRPS0VOUy5UT0tFTl9PUixcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7T3B0aW9ufVxuICAgKi9cbiAgX2ZpcnN0Q29uZGl0aW9uUGFuZWwgPSBuZXcgQ29uZGl0aW9uUGFuZWwoKVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7T3B0aW9ufVxuICAgKi9cbiAgX3NlY29uZENvbmRpdGlvblBhbmVsID0gbmV3IENvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgX29wZXJhdG9yUGFuZWwgPSBudWxsXG5cbiAgLyoqXG4gICAqIFBhcmFtcyByZWNlaXZlZCBhZnRlciBpbml0XG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBfcGFyYW1zID0gbnVsbFxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBpbml0KHBhcmFtcykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdldExvY2FsZVRleHRGdW5jKClcblxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZmlyc3RDb25kaXRpb25QYW5lbC5pbml0KHBhcmFtcylcbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLm9uKFxuICAgICAgQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsXG4gICAgICB0aGlzLl9vbkZpcnN0Q29uZGl0aW9uQ2hhbmdlZFxuICAgIClcblxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmluaXQocGFyYW1zKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLm9uKFxuICAgICAgQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsXG4gICAgICB0aGlzLl9vblNlY29uZENvbmRpdGlvbkNoYW5nZWRcbiAgICApXG4gICAgdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKCkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcblxuICAgIHRoaXMuX2d1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fZ3VpLmNsYXNzTmFtZSA9ICdhZy1maWx0ZXItYm9keS13cmFwcGVyIGFnLXNpbXBsZS1maWx0ZXItYm9keS13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5hcHBlbmRDaGlsZCh0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLmdldEd1aSgpKVxuXG4gICAgLy9wcmV0dGllci1pZ25vcmVcbiAgICBjb25zdCBpZE9uZSA9ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KSxcbiAgICAgICAgICBpZFR3byA9ICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KVxuXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5jbGFzc05hbWUgPSAnYWctZmlsdGVyLWNvbmRpdGlvbiBhZy1oaWRkZW4nXG4gICAgdGhpcy5fb3BlcmF0b3JQYW5lbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctZmlsdGVyLWNvbmRpdGlvbi1vcGVyYXRvciBhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yLWFuZCBhZy1sYWJlbGVkIGFnLWxhYmVsLWFsaWduLXJpZ2h0IGFnLXJhZGlvLWJ1dHRvbiBhZy1pbnB1dC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZy1pbnB1dC1maWVsZC1sYWJlbCBhZy1sYWJlbCBhZy1yYWRpby1idXR0b24tbGFiZWxcIiBmb3I9XCIke2lkT25lfVwiPiAgICAgICBcbiAgICAgICAgICAke3RyYW5zbGF0ZSgnYW5kQ29uZGl0aW9uJywgJ0FORCcpfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1hbmQgYWctd3JhcHBlciBhZy1pbnB1dC13cmFwcGVyIGFnLXJhZGlvLWJ1dHRvbi1pbnB1dC13cmFwcGVyIGFnLWNoZWNrZWRcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCIke2lkT25lfVwiIGNsYXNzPVwiQU5EIGFnLWlucHV0LWZpZWxkLWlucHV0IGFnLXJhZGlvLWJ1dHRvbi1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvckFuZFJhZGlvXCIgdmFsdWU9XCIke1xuICAgICAgVE9LRU5TLlRPS0VOX0FORFxuICAgIH1cIi8+ICAgICAgICAgICAgICBcbiAgICAgICAgPC9kaXY+IFxuICAgIDwvZGl2PiAgIFxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJhZy1maWx0ZXItY29uZGl0aW9uLW9wZXJhdG9yIGFnLWZpbHRlci1jb25kaXRpb24tb3BlcmF0b3ItYW5kIGFnLWxhYmVsZWQgYWctbGFiZWwtYWxpZ24tcmlnaHQgYWctcmFkaW8tYnV0dG9uIGFnLWlucHV0LWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFnLWlucHV0LWZpZWxkLWxhYmVsIGFnLWxhYmVsIGFnLXJhZGlvLWJ1dHRvbi1sYWJlbFwiIGZvcj1cIiR7aWRUd299XCI+ICAgICAgIFxuICAgICAgICAgICR7dHJhbnNsYXRlKCdvckNvbmRpdGlvbicsICdPUicpfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWctd3JhcHBlci1vciBhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctcmFkaW8tYnV0dG9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCIke2lkVHdvfVwiIGNsYXNzPVwiT1IgYWctaW5wdXQtZmllbGQtaW5wdXQgYWctcmFkaW8tYnV0dG9uLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm9yQW5kUmFkaW9cIiB2YWx1ZT1cIiR7XG4gICAgICBUT0tFTlMuVE9LRU5fT1JcbiAgICB9XCIvPiAgICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PiAgICAgICAgIFxuICAgIDwvZGl2PiAgIFxuICAgIGBcbiAgICB0aGlzLl9ndWkuYXBwZW5kQ2hpbGQodGhpcy5fb3BlcmF0b3JQYW5lbClcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX29uT3BlcmF0b3JDaGFuZ2VkKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmdldEd1aSgpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLmRlc3Ryb3koKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLmRlc3Ryb3koKVxuICAgIHRoaXMuX29wZXJhdG9yUGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25PcGVyYXRvckNoYW5nZWQpXG4gICAgdGhpcy5vZmYoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQpXG4gICAgdGhpcy5yZXNldCgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHN0YXRlXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLl9maXJzdENvbmRpdGlvblBhbmVsLnJlc2V0KClcbiAgICB0aGlzLl9zZWNvbmRDb25kaXRpb25QYW5lbC5yZXNldCgpXG4gICAgdGhpcy5ub3RpZnkoQ29uZGl0aW9uUGFuZWwuT05fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjb25kaXRpb24gam9pbiBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICovXG4gIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgc3RhdGUgPSBzdGF0ZSB8fCB7fVxuICAgIHRoaXMuc3RhdGUub3BlcmF0b3IgPSBzdGF0ZS5vcGVyYXRvciB8fCBUT0tFTlMuVE9LRU5fT1JcbiAgICB0aGlzLnN0YXRlLmNvbmRpdGlvbjEgPSBzdGF0ZS5jb25kaXRpb24xIHx8IG51bGxcbiAgICB0aGlzLnN0YXRlLmNvbmRpdGlvbjIgPSBzdGF0ZS5jb25kaXRpb24yIHx8IG51bGxcblxuICAgIHRoaXMuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuc2V0U3RhdGUodGhpcy5zdGF0ZS5jb25kaXRpb24xKVxuICAgIHRoaXMuX3NlY29uZENvbmRpdGlvblBhbmVsLnNldFN0YXRlKHRoaXMuc3RhdGUuY29uZGl0aW9uMilcbiAgICB0aGlzLl9vcGVyYXRvclBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JykuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICBpZiAoaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuc3RhdGUub3BlcmF0b3IpKSB7XG4gICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBzZWxlY3RlZCBjb25kaXRpb24gdG8gdGhlIGNvbXBvbmVudCBzdGF0ZXJcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbk9wZXJhdG9yQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXRcblxuICAgIHRoaXMuc3RhdGUub3BlcmF0b3IgPSB0YXJnZXQudmFsdWVcblxuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdPUicpKSB7XG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1vcicpXG4gICAgICAgIC5jbGFzc0xpc3QuYWRkKCdhZy1jaGVja2VkJylcbiAgICAgIHRoaXMuX29wZXJhdG9yUGFuZWxcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5hZy13cmFwcGVyLWFuZCcpXG4gICAgICAgIC5jbGFzc0xpc3QucmVtb3ZlKCdhZy1jaGVja2VkJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3BlcmF0b3JQYW5lbFxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmFnLXdyYXBwZXItb3InKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYWctY2hlY2tlZCcpXG4gICAgICB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuYWctd3JhcHBlci1hbmQnKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZCgnYWctY2hlY2tlZCcpXG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoSm9pbkNvbmRpdGlvblBhbmVsLk9OX0pPSU5fQ09ORElUSU9OX0NIQU5HRUQsIHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlICB0aGUgb3B0aW9uIHN0YXRlXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uRmlyc3RDb25kaXRpb25DaGFuZ2VkKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24xID0gc3RhdGVcblxuICAgIGNvbnN0IHN1cHByZXNzQW5kT3JDb25kaXRpb24gPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdzdXBwcmVzc0FuZE9yQ29uZGl0aW9uJyxcbiAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgIGZhbHNlXG4gICAgKVxuXG4gICAgaWYgKCFzdXBwcmVzc0FuZE9yQ29uZGl0aW9uKSB7XG4gICAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyVG8sIHR5cGUgfSA9IHRoaXMuc3RhdGUuY29uZGl0aW9uMVxuICAgICAgY29uc3Qgc2Vjb25kQ29uZGl0aW9uR3VpID0gdGhpcy5fc2Vjb25kQ29uZGl0aW9uUGFuZWwuZ2V0R3VpKClcbiAgICAgIGNvbnN0IG9wZXJhdG9yUGFuZWxHdWkgPSB0aGlzLl9vcGVyYXRvclBhbmVsXG4gICAgICBjb25zdCBjb25kaXRpb24gPVxuICAgICAgICB0eXBlID09PSBUT0tFTlMuVE9LRU5fUkFOR0UgPyAhZmlsdGVyIHx8ICFmaWx0ZXJUbyA6ICFmaWx0ZXJcblxuICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICBzZWNvbmRDb25kaXRpb25HdWkuY2xhc3NMaXN0LmFkZCgnYWctaGlkZGVuJylcbiAgICAgICAgb3BlcmF0b3JQYW5lbEd1aS5jbGFzc0xpc3QuYWRkKCdhZy1oaWRkZW4nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Vjb25kQ29uZGl0aW9uR3VpLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWhpZGRlbicpXG4gICAgICAgIG9wZXJhdG9yUGFuZWxHdWkuY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeShKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgIHRoZSBvcHRpb24gc3RhdGVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25TZWNvbmRDb25kaXRpb25DaGFuZ2VkKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZS5jb25kaXRpb24yID0gc3RhdGVcbiAgICB0aGlzLm5vdGlmeShKb2luQ29uZGl0aW9uUGFuZWwuT05fSk9JTl9DT05ESVRJT05fQ0hBTkdFRCwgdGhpcy5zdGF0ZSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGVUaW1lIEZpbHRlclxuICpcbiAqICMjIE9wdGlvbnNcbiAqXG4gKiB8IE5hbWUgICAgICAgICAgICAgICAgICBcdHwgRGVmYXVsdCAgICAgXHR8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHR8Oi0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKmRhdGVUaW1lRW5hYmxlVGltZSoqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgdGltZVxuICogfCAqKmRhdGVUaW1lRW5hYmxlMjRIUioqICAgfCBmYWxzZSAgICB8IGVuYWJsZSAvIGRpc2FibGUgdGltZSAyNCBmb3JtYXRcbiAqIHwgKipkYXRlVGltZUVuYWJsZVNlY29uZHMqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHNlY29uZHMgbWFuYWdlbWVudFxuICogfCAqKmRhdGVUaW1lRW5hYmxlQ2FsZW5kYXIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIENhbGVuZGFyLlxuICogfCAqKmRhdGVUaW1lTWFzayoqICAgfCBmYWxzZSAgICB8IFRoZSBtYXNrIHVzZWQgdG8gZm9ybWF0IHRoZSBzZWxlY3RlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNYXgqKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1heCBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZU1pbioqICAgfCB1bmRlZmluZWQgICAgfCAgTWluIGFsbG93ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lRm9ybWF0dGVyKiogICB8IHVuZGVmaW5lZCAgICB8ICBBIGZ1bmN0aW9uIG9yIGV4cHJlc3Npb24gdG8gZm9ybWF0IHRoZSBkYXRlIChAc2VlIHN1cHBvcnRlZCBwYXJhbSlcbiAqIHwgKipkYXRlVGltZUxvY2FsZSoqICAgfCBTeXN0ZW0gZGVmYXVsdCAgICB8ICBBIGxvY2FsZSB0byB1c2UgZm9yIGRhdGUgZm9ybWF0dGluZ1xuICogfCAqKmRhdGVUaW1lRGVmYXVsdEhvdXIqKiAgIHwgMTIgICAgfCAgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgaG91ciBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGVmYXVsdE1pbnV0ZSoqICAgfCAwICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIG1pbnV0ZSBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGlzYWJsZU1vYmlsZSoqICAgfCBmYWxzZSAgICB8ICBTZXQgZGlzYWJsZU1vYmlsZSB0byB0cnVlIHRvIGFsd2F5cyB1c2UgdGhlIG5vbi1uYXRpdmUgcGlja2VyLlxuICogfCAqKmRhdGVUaW1lRW5hYmxlV2Vla051bWJlcioqICAgfCB0cnVlICAgIHwgIEVuYWJsZXMgZGlzcGxheSBvZiB3ZWVrIG51bWJlcnMgaW4gY2FsZW5kYXIuXG4gKiB8ICoqZmlsdGVyT3B0aW9ucyoqICAgfCBFcXVhbHMsIEdyZWF0ZXIgVGhhbiwgTGVzcyBUaGFuLCBOb3QgRXF1YWxzLCBJbiBSYW5nZS4gICAgfCAgV2hhdCBGaWx0ZXIgT3B0aW9ucyB0byBwcmVzZW50IHRvIHRoZSB1c2VyLlxuICogfCAqKmRlZmF1bHRPcHRpb24qKiAgIHwgRXF1YWxzICAgIHwgIFRoZSBkZWZhdWx0IEZpbHRlciBPcHRpb25zIHRvIGJlIHNlbGVjdGVkLlxuICogfCAqKnN1cHByZXNzQW5kT3JDb25kaXRpb24qKiAgIHwgZmFsc2UgICAgfCAgSWYgdHJ1ZSwgdGhlIGZpbHRlciB3aWxsIG9ubHkgb2ZmZXIgQ29uZGl0aW9uIDEuXG4gKiB8ICoqaW5SYW5nZUluY2x1c2l2ZSoqICAgfCBmYWxzZSAgICB8ICBJZiB0cnVlIHRoZW4gZG9pbmcgJ2luUmFuZ2UnIGZpbHRlciBvcHRpb24gd2lsbCBpbmNsdWRlIHZhbHVlcyBlcXVhbCB0byB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiB8ICoqY2xlYXJCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIENsZWFyIGJ1dHRvbi4gVGhlIENsZWFyIGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSAoZm9ybSkgZGV0YWlscyBvZiB0aGUgZmlsdGVyIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGFjdGl2ZSBmaWx0ZXJzIG9uIHRoZSBjb2x1bW4uXG4gKiB8ICoqYXBwbHlCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhbiBBcHBseSBidXR0b24uIElmIHRoZSBBcHBseSBidXR0b24gaXMgcHJlc2VudCwgdGhlbiB0aGUgZmlsdGVyIGlzIG9ubHkgYXBwbGllZCBhZnRlciB0aGUgdXNlciBoaXRzIHRoZSBBcHBseSBidXR0b24uXG4gKiB8ICoqcmVzZXRCdXR0b24qKiAgIHwgZmFsc2UgICAgfCAgU2V0IHRvIHRydWUgdG8gaGF2ZSB0aGUgZmlsdGVyIHVzZSBhIFJlc2V0IGJ1dHRvbi4gVGhlIFJlc2V0IGJ1dHRvbiB3aWxsIGNsZWFyIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWx0ZXIgYW5kIGFueSBhY3RpdmUgZmlsdGVycyBvbiB0aGF0IGNvbHVtbi5cbiAqXG4gKiBAYXV0aG9yIEh5eWFuIEFibyBGYWtoZXIgPGhhYm9mYWtoZXJAYmFzaXMuY29tPlxuICovXG5jbGFzcyBEYXRlVGltZUZpbHRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBAdHlwZSB7Sm9pbn1cbiAgICovXG4gIF9Kb2luQ29uZGl0aW9uUGFuZWwgPSBuZXcgSm9pbkNvbmRpdGlvblBhbmVsKClcblxuICAvKipcbiAgICogSm9pbiBwYW5lbCBzdGF0ZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3N0YXRlID0ge31cblxuICAvKipcbiAgICogQ29tcG9uZW50IHBhcmFtc1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IHt9XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCBvZiBhbGwgdGhlIHJlcXVpcmVkIG9wdGlvbnMgY2FjaGVkIGZvciBkb2VzRmlsdGVyUGFzcyBtZXRob2RcbiAgICovXG4gIF9kb2VzRmlsdGVyUGFzc09wdGlvbnMgPSBudWxsXG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBAb3ZlcnJpZGVcbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCB0cmFuc2xhdGUgPSBwYXJhbXMuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5nZXRMb2NhbGVUZXh0RnVuYygpXG4gICAgY29uc3QgaXNDbGVhckZpbHRlciA9IHRoaXMuZ2V0T3B0aW9uKCdjbGVhckJ1dHRvbicsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3QgaXNSZXNldEJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKCdyZXNldEJ1dHRvbicsIHBhcmFtcywgZmFsc2UpXG4gICAgY29uc3QgaXNBcHBseUJ1dHRvbiA9IHRoaXMuZ2V0T3B0aW9uKCdhcHBseUJ1dHRvbicsIHBhcmFtcywgZmFsc2UpXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuXG4gICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLmluaXQocGFyYW1zKVxuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5vbihcbiAgICAgIEpvaW5Db25kaXRpb25QYW5lbC5PTl9KT0lOX0NPTkRJVElPTl9DSEFOR0VELFxuICAgICAgc3RhdGUgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgICAgIHRoaXMuX29uSm9pbkNvbmRpdGlvblBhbmVsU3RhdGVDaGFuZ2VkKHN0YXRlLCBpc0FwcGx5QnV0dG9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5nZXRHdWkoKSlcblxuICAgIGNvbnN0IGFwcGx5RmlsdGVyUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGFwcGx5RmlsdGVyUGFuZWwuY2xhc3NOYW1lID0gYGFnLWZpbHRlci1hcHBseS1wYW5lbCBhZy1oaWRkZW5gXG4gICAgYXBwbHlGaWx0ZXJQYW5lbC5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZy1zdGFuZGFyZC1idXR0b24gYWctZmlsdGVyLWFwcGx5LXBhbmVsLWJ1dHRvbiBjbGVhciAkeyFpc0NsZWFyRmlsdGVyICYmXG4gICAgICAgICdhZy1oaWRkZW4nfVwiIHR5cGU9XCJidXR0b25cIj4ke3RyYW5zbGF0ZShcbiAgICAgICdjbGVhckZpbHRlcicsXG4gICAgICAnQ2xlYXIgRmlsdGVyJ1xuICAgICl9PC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWctc3RhbmRhcmQtYnV0dG9uIGFnLWZpbHRlci1hcHBseS1wYW5lbC1idXR0b24gcmVzZXQgJHshaXNSZXNldEJ1dHRvbiAmJlxuICAgICAgICAnYWctaGlkZGVuJ31cIiB0eXBlPVwiYnV0dG9uXCI+JHt0cmFuc2xhdGUoXG4gICAgICAncmVzZXRGaWx0ZXInLFxuICAgICAgJ1Jlc2V0IEZpbHRlcidcbiAgICApfTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFnLXN0YW5kYXJkLWJ1dHRvbiBhZy1maWx0ZXItYXBwbHktcGFuZWwtYnV0dG9uIGFwcGx5ICR7IWlzQXBwbHlCdXR0b24gJiZcbiAgICAgICAgJ2FnLWhpZGRlbid9XCIgdHlwZT1cImJ1dHRvblwiPiR7dHJhbnNsYXRlKFxuICAgICAgJ2FwcGx5RmlsdGVyJyxcbiAgICAgICdBcHBseSBGaWx0ZXInXG4gICAgKX08L2J1dHRvbj5cbiAgICBgXG5cbiAgICBpZiAoaXNDbGVhckZpbHRlciB8fCBpc1Jlc2V0QnV0dG9uIHx8IGlzQXBwbHlCdXR0b24pIHtcbiAgICAgIGFwcGx5RmlsdGVyUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWctaGlkZGVuJylcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlclBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnY2xpY2snLFxuICAgICAgdGhpcy5fQXBwbHlGaWx0ZXJQYW5lbEJ1dHRvbkNsaWNrXG4gICAgKVxuXG4gICAgdGhpcy5fZ3VpLmFwcGVuZENoaWxkKGFwcGx5RmlsdGVyUGFuZWwpXG5cbiAgICB0aGlzLl9zdGF0ZSA9IHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5zdGF0ZVxuICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtc1xuXG4gICAgdGhpcy5fZG9lc0ZpbHRlclBhc3NPcHRpb25zID0ge1xuICAgICAgZW5hYmxlVGltZTogdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlVGltZScsIHRoaXMuX3BhcmFtcywgdHJ1ZSksXG4gICAgICBpblJhbmdlSW5jbHVzaXZlOiB0aGlzLmdldE9wdGlvbignaW5SYW5nZUluY2x1c2l2ZScsIHRoaXMuX3BhcmFtcywgZmFsc2UpLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgdmFsdWVHZXR0ZXI6IHRoaXMuX3BhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVHZXR0ZXInKVxuICAgICAgICA/IHRoaXMuX3BhcmFtcy5maWx0ZXJWYWx1ZUdldHRlclxuICAgICAgICA6IHRoaXMuX3BhcmFtcy52YWx1ZUdldHRlcixcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX0pvaW5Db25kaXRpb25QYW5lbC5kZXN0cm95KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHNlbGVjdGVkIGZpbHRlciBtYXRjaGVzIHRoZSBwYXNzZWQgY2VsbCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHBhc3MsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgZG9lc0ZpbHRlclBhc3MocGFyYW1zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kb2VzRmlsdGVyUGFzc09wdGlvbnMudmFsdWVHZXR0ZXIocGFyYW1zKVxuICAgIGNvbnN0IHsgY29uZGl0aW9uMSwgY29uZGl0aW9uMiwgb3BlcmF0b3IgfSA9IHRoaXMuX3N0YXRlXG4gICAgY29uc3QgZG9lc1Bhc3NGaXJzdENvbmRpdGlvbiA9IHRoaXMuX2RvZXNQYXNzQ29uZGl0aW9uKGNvbmRpdGlvbjEsIHZhbHVlKVxuICAgIGNvbnN0IGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uID0gdGhpcy5fZG9lc1Bhc3NDb25kaXRpb24oY29uZGl0aW9uMiwgdmFsdWUpXG5cbiAgICByZXR1cm4gb3BlcmF0b3IgPT09IFRPS0VOUy5UT0tFTl9PUlxuICAgICAgPyBkb2VzUGFzc0ZpcnN0Q29uZGl0aW9uIHx8IGRvZXNQYXNzU2Vjb25kQ29uZGl0aW9uXG4gICAgICA6IGRvZXNQYXNzRmlyc3RDb25kaXRpb24gJiYgZG9lc1Bhc3NTZWNvbmRDb25kaXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYXBwbHlpbmcgYW55IGZpbHRlciBvbiB0aGUgY29sdW1uXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqKi9cbiAgaXNGaWx0ZXJBY3RpdmUoKSB7XG4gICAgY29uc3QgeyBjb25kaXRpb24xIH0gPSB0aGlzLl9zdGF0ZVxuXG4gICAgaWYgKGNvbmRpdGlvbjEgJiYgY29uZGl0aW9uMS5maWx0ZXIpIHtcbiAgICAgIGlmIChjb25kaXRpb24xLmZpbHRlclRvICYmIGNvbmRpdGlvbjEudHlwZSA9PT0gVE9LRU5TLlRPS0VOX1JBTkdFKSB7XG4gICAgICAgIHJldHVybiBjb25kaXRpb24xLmZpbHRlciAhPT0gbnVsbCAmJiBjb25kaXRpb24xLmZpbHRlclRvICE9PSBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25kaXRpb24xLmZpbHRlciAhPT0gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGZpbHRlciBzdGF0ZS4gSWYgZmlsdGVyIGlzIG5vdCBhY3RpdmUsIHRoZW4gc2hvdWxkIHJldHVybiBudWxsL3VuZGVmaW5lZC5cbiAgICogVGhlIGdyaWQgY2FsbHMgZ2V0TW9kZWwoKSBvbiBhbGwgYWN0aXZlIGZpbHRlcnMgd2hlbiBncmlkQXBpLmdldEZpbHRlck1vZGVsKCkgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJuIE9iamVjdCB8IG51bGwgdGhlIGZpbHRlciBzdGF0ZVxuICAgKi9cbiAgZ2V0TW9kZWwoKSB7XG4gICAgY29uc3QgY2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX3N0YXRlKSlcbiAgICA7W2Nsb25lLmNvbmRpdGlvbjEsIGNsb25lLmNvbmRpdGlvbjJdLmZvckVhY2goKGNvbmRpdGlvbiwgaSkgPT4ge1xuICAgICAgaWYgKGNvbmRpdGlvbi5maWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlciA9IHRoaXMuX3N0YXRlW2Bjb25kaXRpb24ke2kgKyAxfWBdLmZpbHRlci50b0lTT1N0cmluZygpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IHRoaXMuX3N0YXRlW1xuICAgICAgICAgIGBjb25kaXRpb24ke2kgKyAxfWBcbiAgICAgICAgXS5maWx0ZXJUby50b0lTT1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNsb25lLmZpbHRlclR5cGUgPSAnZGF0ZXRpbWUnXG4gICAgY2xvbmUuY29uZGl0aW9uMS5maWx0ZXJUeXBlID0gJ2RhdGV0aW1lJ1xuICAgIGNsb25lLmNvbmRpdGlvbjIuZmlsdGVyVHlwZSA9ICdkYXRldGltZSdcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICByZXR1cm4gY2xvbmUuaGFzT3duUHJvcGVydHkoJ2NvbmRpdGlvbjInKSAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgY2xvbmUuY29uZGl0aW9uMi5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyJykgJiZcbiAgICAgIGNsb25lLmNvbmRpdGlvbjIuZmlsdGVyXG4gICAgICA/IGNsb25lXG4gICAgICA6IGNsb25lLmNvbmRpdGlvbjFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgZmlsdGVyIHN0YXRlLiBDYWxsZWQgYnkgdGhlIGdyaWQgYWZ0ZXIgZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChtb2RlbCkgaXMgY2FsbGVkLlxuICAgKiBUaGUgZ3JpZCB3aWxsIHBhc3MgdW5kZWZpbmVkL251bGwgdG8gY2xlYXIgdGhlIGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudWxsfSBtb2RlbFxuICAgKi9cbiAgc2V0TW9kZWwobW9kZWwpIHtcbiAgICBpZiAoXG4gICAgICBtb2RlbCAmJlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgIW1vZGVsLmhhc093blByb3BlcnR5KCdjb25kaXRpb24xJykgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICFtb2RlbC5oYXNPd25Qcm9wZXJ0eSgnY29uZGl0aW9uMicpXG4gICAgKSB7XG4gICAgICBtb2RlbCA9IHtcbiAgICAgICAgY29uZGl0aW9uMTogbW9kZWwsXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX19kaXNhYmxlU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IHRydWVcbiAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuc2V0U3RhdGUobW9kZWwpXG4gICAgdGhpcy5fX2Rpc2FibGVTdGF0ZUNoYW5nZUxpc3RlbmVyID0gZmFsc2VcblxuICAgIHRoaXMuX3N0YXRlID0gdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnN0YXRlXG4gICAgO1t0aGlzLl9zdGF0ZS5jb25kaXRpb24xLCB0aGlzLl9zdGF0ZS5jb25kaXRpb24yXS5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlcikge1xuICAgICAgICBjb25kaXRpb24uZmlsdGVyID0gbmV3IERhdGUoY29uZGl0aW9uLmZpbHRlcilcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyVG8pIHtcbiAgICAgICAgY29uZGl0aW9uLmZpbHRlclRvID0gbmV3IERhdGUoY29uZGl0aW9uLmZpbHRlclRvKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaWx0ZXIgbW9kZWwgYXMgcGxhaW4gc3RyaW5nIHRvIGRpc3BsYXkgaW4gdGhlIGZsb2F0aW5nIGZpbHRlciBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bGx9IG1vZGVsXG4gICAqL1xuICBnZXRNb2RlbEFzU3RyaW5nKG1vZGVsKSB7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZVRpbWVNYXNrID0gdGhpcy5nZXRPcHRpb24oXG4gICAgICAnZGF0ZVRpbWVNYXNrJyxcbiAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgIC8vIEB0b2RvIEZpbmQgYSBiZXR0ZXIgd2F5IGZvciB0aGlzXG4gICAgICB0aGlzLl9Kb2luQ29uZGl0aW9uUGFuZWwuX2ZpcnN0Q29uZGl0aW9uUGFuZWwuX2ZpbHRlclRpbWVJbnB1dC5waWNrZXJcbiAgICAgICAgLmNvbmZpZ1snZGF0ZUZvcm1hdCddXG4gICAgKVxuICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ2V0T3B0aW9uKFxuICAgICAgJ2RhdGVUaW1lTG9jYWxlJyxcbiAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUgfHwgJ2VuLVVTJ1xuICAgIClcblxuICAgIGNvbnN0IHsgY29uZGl0aW9uMSwgY29uZGl0aW9uMiwgb3BlcmF0b3IgfSA9IEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShtb2RlbClcbiAgICApXG5cbiAgICA7W2NvbmRpdGlvbjEsIGNvbmRpdGlvbjJdLmZvckVhY2goY29uZGl0aW9uID0+IHtcbiAgICAgIGlmIChjb25kaXRpb24uZmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXIgPSBCQmouTWFza3MuRGF0ZU1hc2subWFzayhcbiAgICAgICAgICBjb25kaXRpb24uZmlsdGVyLFxuICAgICAgICAgIGRhdGVUaW1lTWFzayxcbiAgICAgICAgICBsb2NhbGVcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29uZGl0aW9uLmZpbHRlclRvKSB7XG4gICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyA9IEJCai5NYXNrcy5EYXRlTWFzay5tYXNrKFxuICAgICAgICAgIGNvbmRpdGlvbi5maWx0ZXJUbyxcbiAgICAgICAgICBkYXRlVGltZU1hc2ssXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgZmlyc3RDb25kaXRpb25Bc1N0cmluZyA9IGAke2NvbmRpdGlvbjEuZmlsdGVyIHx8ICcnfSAke1xuICAgICAgY29uZGl0aW9uMS5maWx0ZXJUbyA/ICfihpIgJyArIGNvbmRpdGlvbjEuZmlsdGVyVG8gOiAnJ1xuICAgIH1gXG4gICAgY29uc3Qgc2Vjb25kQ29uZGl0aW9uQXNTdHJpbmcgPSBgJHtjb25kaXRpb24yLmZpbHRlciB8fCAnJ30gJHtcbiAgICAgIGNvbmRpdGlvbjIuZmlsdGVyVG8gPyAn4oaSICcgKyBjb25kaXRpb24yLmZpbHRlclRvIDogJydcbiAgICB9YFxuICAgIGNvbnN0IG9wZXJhdG9yQXNTdHJpbmcgPSBgJHtjb25kaXRpb24yLmZpbHRlciAmJiBvcGVyYXRvciA/IG9wZXJhdG9yIDogJyd9YFxuXG4gICAgcmV0dXJuIGAke2ZpcnN0Q29uZGl0aW9uQXNTdHJpbmd9ICR7b3BlcmF0b3JBc1N0cmluZ30gJHtzZWNvbmRDb25kaXRpb25Bc1N0cmluZ31gLnRyaW0oKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBwYXNzZXMgdGhlIGZpbHRlciBkZWZpbmVkIGluIHRoZSBwYXNzZWQgQ29uZGl0aW9uUGFuZWwncyBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZGl0aW9uIGNvbmRpdGlvbiBwYW5lbCBzdGF0ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgY2VsbCB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIHdoZW4gcGFzcywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfZG9lc1Bhc3NDb25kaXRpb24oY29uZGl0aW9uLCB2YWx1ZSkge1xuICAgIGlmICghY29uZGl0aW9uLmZpbHRlciB8fCAhdmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHsgZmlsdGVyLCBmaWx0ZXJUbywgdHlwZSB9ID0gY29uZGl0aW9uXG4gICAgY29uc3QgdGltZXpvbmUgPSBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZ2V0VGltZXpvbmVPck9mZnNldCgpXG4gICAgY29uc3QgaW5SYW5nZUluY2x1c2l2ZSA9IHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucy5pblJhbmdlSW5jbHVzaXZlXG4gICAgY29uc3QgZW5hYmxlVGltZSA9IHRoaXMuX2RvZXNGaWx0ZXJQYXNzT3B0aW9ucy5lbmFibGVUaW1lXG4gICAgbGV0IHBhc3NlZCA9IGZhbHNlXG5cbiAgICBpZiAoQkJqLk1hc2tzLlV0aWxzLkRhdGVzLklTX1RJTUVfUkVHRVgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgPSBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gICAgICA7W2ZpbHRlciwgZmlsdGVyVG9dLmZvckVhY2goZGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoMTk3MClcbiAgICAgICAgICBkYXRlLnNldE1vbnRoKDApXG4gICAgICAgICAgZGF0ZS5zZXREYXRlKDEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChCQmouTWFza3MuVXRpbHMuRGF0ZXMuSVNfREFURV9SRUdFWC50ZXN0KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSBCQmouTWFza3MuVXRpbHMuRGF0ZXMuZml4U2hvcnRJU08odmFsdWUpXG4gICAgfVxuXG4gICAgLy8gY29udmVydCB0aGUgZGF0ZXRpbWUgZnJvbSB1dGMgdG8gbG9jYWxlXG4gICAgdmFsdWUgPSB1dGNUb1pvbmVkVGltZSh2YWx1ZSwgdGltZXpvbmUpXG4gICAgLy8gZmlyc3REYXRlID0gZmlyc3REYXRlID8gem9uZWRUaW1lVG9VdGMoZmlyc3REYXRlICwgdGltZXpvbmUpIDogZmlyc3REYXRlXG4gICAgLy8gc2Vjb25kRGF0ZSA9IHNlY29uZERhdGUgPyB6b25lZFRpbWVUb1V0YyhzZWNvbmREYXRlICwgdGltZXpvbmUpIDogc2Vjb25kRGF0ZVxuXG4gICAgaWYgKCFlbmFibGVUaW1lKSB7XG4gICAgICAvLyByZW1vdmUgdGhlIHRpbWUgcG9ydGlvbiBmcm9tIHRoZSBkYXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtc2VtaVxuICAgICAgO1t2YWx1ZSwgZmlsdGVyLCBmaWx0ZXJUb10uZm9yRWFjaChkYXRlID0+IHtcbiAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgZGF0ZS5zZXRIb3VycygwKVxuICAgICAgICAgIGRhdGUuc2V0TWludXRlcygwKVxuICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcygwKVxuICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKDApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9FUVVBTCkge1xuICAgICAgcGFzc2VkID0gZmlsdGVyID4gdmFsdWUgPT09IGZhbHNlICYmIGZpbHRlciA8IHZhbHVlID09IGZhbHNlXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fTk9UX0VRVUFMKSB7XG4gICAgICBwYXNzZWQgPSAhKGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRPS0VOUy5UT0tFTl9HUkVBVEVSKSB7XG4gICAgICBwYXNzZWQgPSBmaWx0ZXIgPCB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVE9LRU5TLlRPS0VOX0xFU1MpIHtcbiAgICAgIHBhc3NlZCA9IGZpbHRlciA+IHZhbHVlXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUT0tFTlMuVE9LRU5fUkFOR0UgJiYgZmlsdGVyVG8pIHtcbiAgICAgIGlmIChpblJhbmdlSW5jbHVzaXZlKSB7XG4gICAgICAgIHBhc3NlZCA9XG4gICAgICAgICAgKChmaWx0ZXIgPCB2YWx1ZSB8fFxuICAgICAgICAgICAgKGZpbHRlciA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXIgPCB2YWx1ZSA9PSBmYWxzZSkpICYmXG4gICAgICAgICAgICBmaWx0ZXJUbyA+IHZhbHVlKSB8fFxuICAgICAgICAgIChmaWx0ZXJUbyA+IHZhbHVlID09PSBmYWxzZSAmJiBmaWx0ZXJUbyA8IHZhbHVlID09IGZhbHNlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFzc2VkID0gZmlsdGVyIDwgdmFsdWUgJiYgZmlsdGVyVG8gPiB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXNzZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRvIGNsaWNrIGJ1dHRvbiBldmVudCBvbiB0aGUgZmlsdGVyIHBhbmVsIGFuZCBleGVjdXRlIHRoZVxuICAgKiByaWdodCBhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9BcHBseUZpbHRlclBhbmVsQnV0dG9uQ2xpY2soZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0XG5cbiAgICBpZiAodGFyZ2V0Lm5vZGVOYW1lID09PSAnQlVUVE9OJykge1xuICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2V0JykpIHtcbiAgICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnJlc2V0KClcbiAgICAgICAgdGhpcy5fcGFyYW1zLmZpbHRlckNoYW5nZWRDYWxsYmFjaygpXG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NsZWFyJykpIHtcbiAgICAgICAgdGhpcy5fSm9pbkNvbmRpdGlvblBhbmVsLnJlc2V0KClcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXBwbHknKSkge1xuICAgICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBmaWx0ZXIgc3RhdGUgYW5kIEFwcGx5IHRoZSBmaWx0ZXIgZGVwZW5kaW5nIG9uXG4gICAqIHdoZXRoZXIgdGhlIGBpc0FwcGx5QnV0dG9uQWN0aXZlYCBpcyB0cnVlIG9yIGZhbHNlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzQXBwbHlCdXR0b25BY3RpdmVcbiAgICovXG4gIEBhdXRvYmluZFxuICBfb25Kb2luQ29uZGl0aW9uUGFuZWxTdGF0ZUNoYW5nZWQoc3RhdGUsIGlzQXBwbHlCdXR0b25BY3RpdmUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlXG4gICAgaWYgKGZhbHNlID09PSBpc0FwcGx5QnV0dG9uQWN0aXZlKSB7XG4gICAgICB0aGlzLl9wYXJhbXMuZmlsdGVyQ2hhbmdlZENhbGxiYWNrKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF0ZVRpbWVGaWx0ZXJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUZpbHRlci9EYXRlVGltZUZpbHRlci5qcyIsIi8qKlxuICogUmV0dXJucyB0aGUgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kc10gdG9rZW5zIG9mIHRoZSBwcm92aWRlZFxuICogYGRhdGVgIGFzIGl0IHdpbGwgYmUgcmVuZGVyZWQgaW4gdGhlIGB0aW1lWm9uZWAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHR6VG9rZW5pemVEYXRlKGRhdGUsIHRpbWVab25lKSB7XG4gIHZhciBkdGYgPSBnZXREYXRlVGltZUZvcm1hdCh0aW1lWm9uZSlcbiAgcmV0dXJuIGR0Zi5mb3JtYXRUb1BhcnRzID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSA6IGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSlcbn1cblxudmFyIHR5cGVUb1BvcyA9IHtcbiAgeWVhcjogMCxcbiAgbW9udGg6IDEsXG4gIGRheTogMixcbiAgaG91cjogMyxcbiAgbWludXRlOiA0LFxuICBzZWNvbmQ6IDVcbn1cblxuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIHZhciBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKVxuICB2YXIgZmlsbGVkID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcG9zID0gdHlwZVRvUG9zW2Zvcm1hdHRlZFtpXS50eXBlXVxuXG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHBhcnNlSW50KGZvcm1hdHRlZFtpXS52YWx1ZSwgMTApXG4gICAgfVxuICB9XG4gIHJldHVybiBmaWxsZWRcbn1cblxuZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7XG4gIHZhciBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1xcdTIwMEUvZywgJycpXG4gIHZhciBwYXJzZWQgPSAvKFxcZCspXFwvKFxcZCspXFwvKFxcZCspLD8gKFxcZCspOihcXGQrKTooXFxkKykvLmV4ZWMoZm9ybWF0dGVkKVxuICAvLyB2YXIgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkXG4gIC8vIHJldHVybiBbZlllYXIsIGZNb250aCwgZkRheSwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdXG4gIHJldHVybiBbcGFyc2VkWzNdLCBwYXJzZWRbMV0sIHBhcnNlZFsyXSwgcGFyc2VkWzRdLCBwYXJzZWRbNV0sIHBhcnNlZFs2XV1cbn1cblxuLy8gR2V0IGEgY2FjaGVkIEludGwuRGF0ZVRpbWVGb3JtYXQgaW5zdGFuY2UgZm9yIHRoZSBJQU5BIGB0aW1lWm9uZWAuIFRoaXMgY2FuIGJlIHVzZWRcbi8vIHRvIGdldCBkZXRlcm1pbmlzdGljIGxvY2FsIGRhdGUvdGltZSBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBgZW4tVVNgIGxvY2FsZSB3aGljaFxuLy8gY2FuIGJlIHVzZWQgdG8gZXh0cmFjdCBsb2NhbCB0aW1lIHBhcnRzIGFzIG5lY2Vzc2FyeS5cbnZhciBkdGZDYWNoZSA9IHt9XG5mdW5jdGlvbiBnZXREYXRlVGltZUZvcm1hdCh0aW1lWm9uZSkge1xuICBpZiAoIWR0ZkNhY2hlW3RpbWVab25lXSkge1xuICAgIC8vIE5ldyBicm93c2VycyB1c2UgYGhvdXJDeWNsZWAsIElFIGFuZCBDaHJvbWUgPDczIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHVzZXMgYGhvdXIxMmBcbiAgICB2YXIgdGVzdERhdGVGb3JtYXR0ZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgdGltZVpvbmU6ICdBbWVyaWNhL05ld19Zb3JrJyxcbiAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICB9KS5mb3JtYXQobmV3IERhdGUoJzIwMTQtMDYtMjVUMDQ6MDA6MDAuMTIzWicpKVxuICAgIHZhciBob3VyQ3ljbGVTdXBwb3J0ZWQgPVxuICAgICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICcwNi8yNS8yMDE0LCAwMDowMDowMCcgfHxcbiAgICAgIHRlc3REYXRlRm9ybWF0dGVkID09PSAn4oCOMDbigI4v4oCOMjXigI4v4oCOMjAxNOKAjiDigI4wMOKAjjrigI4wMOKAjjrigI4wMCdcblxuICAgIGR0ZkNhY2hlW3RpbWVab25lXSA9IGhvdXJDeWNsZVN1cHBvcnRlZFxuICAgICAgPyBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBob3VyQ3ljbGU6ICdoMjMnLFxuICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgfVxuICByZXR1cm4gZHRmQ2FjaGVbdGltZVpvbmVdXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZXNtL19saWIvdHpUb2tlbml6ZURhdGUvaW5kZXguanMiLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzJztcbmltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSAnLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzJztcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSAnLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBzdWJNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogdmFyIHJlc3VsdCA9IHN1Yk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjI5LjI1MFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qcyc7XG5pbXBvcnQgdG9EYXRlIGZyb20gJy4uL3RvRGF0ZS9pbmRleC5qcyc7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgYWRkTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogIyMjIHYyLjAuMCBicmVha2luZyBjaGFuZ2VzOlxuICpcbiAqIC0gW0NoYW5nZXMgdGhhdCBhcmUgY29tbW9uIGZvciB0aGUgd2hvbGUgbGlicmFyeV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdXBncmFkZUd1aWRlLm1kI0NvbW1vbi1DaGFuZ2VzKS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogdmFyIHJlc3VsdCA9IGFkZE1pbGxpc2Vjb25kcyhuZXcgRGF0ZSgyMDE0LCA2LCAxMCwgMTIsIDQ1LCAzMCwgMCksIDc1MClcbiAqIC8vPT4gVGh1IEp1bCAxMCAyMDE0IDEyOjQ1OjMwLjc1MFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9hZGRNaWxsaXNlY29uZHMvaW5kZXguanMiLCJpbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gJy4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzJztcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGFyZ1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7IC8vIENsb25lIHRoZSBkYXRlXG5cbiAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2ZqdWxlXCIpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS90b0RhdGUvaW5kZXguanMiLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gJ2RhdGUtZm5zL2VzbS9fbGliL3RvSW50ZWdlci9pbmRleC5qcydcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gJ2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMnXG5pbXBvcnQgdHpQYXJzZVRpbWV6b25lIGZyb20gJy4uL19saWIvdHpQYXJzZVRpbWV6b25lJ1xuXG52YXIgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwXG52YXIgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwXG52YXIgREVGQVVMVF9BRERJVElPTkFMX0RJR0lUUyA9IDJcblxudmFyIHBhdHRlcm5zID0ge1xuICBkYXRlVGltZURlbGltZXRlcjogL1tUIF0vLFxuICBwbGFpblRpbWU6IC86LyxcbiAgdGltZVpvbmVEZWxpbWV0ZXI6IC9bWiBdL2ksXG5cbiAgLy8geWVhciB0b2tlbnNcbiAgWVk6IC9eKFxcZHsyfSkkLyxcbiAgWVlZOiBbXG4gICAgL14oWystXVxcZHsyfSkkLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIC9eKFsrLV1cXGR7M30pJC8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7NH0pJC8gLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICBdLFxuICBZWVlZOiAvXihcXGR7NH0pLyxcbiAgWVlZWVk6IFtcbiAgICAvXihbKy1dXFxkezR9KS8sIC8vIDAgYWRkaXRpb25hbCBkaWdpdHNcbiAgICAvXihbKy1dXFxkezV9KS8sIC8vIDEgYWRkaXRpb25hbCBkaWdpdFxuICAgIC9eKFsrLV1cXGR7Nn0pLyAvLyAyIGFkZGl0aW9uYWwgZGlnaXRzXG4gIF0sXG5cbiAgLy8gZGF0ZSB0b2tlbnNcbiAgTU06IC9eLShcXGR7Mn0pJC8sXG4gIERERDogL14tPyhcXGR7M30pJC8sXG4gIE1NREQ6IC9eLT8oXFxkezJ9KS0/KFxcZHsyfSkkLyxcbiAgV3d3OiAvXi0/VyhcXGR7Mn0pJC8sXG4gIFd3d0Q6IC9eLT9XKFxcZHsyfSktPyhcXGR7MX0pJC8sXG5cbiAgSEg6IC9eKFxcZHsyfShbLixdXFxkKik/KSQvLFxuICBISE1NOiAvXihcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gIEhITU1TUzogL14oXFxkezJ9KTo/KFxcZHsyfSk6PyhcXGR7Mn0oWy4sXVxcZCopPykkLyxcblxuICAvLyB0aW1lem9uZSB0b2tlbnMgKHRvIGlkZW50aWZ5IHRoZSBwcmVzZW5jZSBvZiBhIHR6KVxuICB0aW1lem9uZTogLyhbWistXS4qfCBVVEN8KD86W2EtekEtWl0rXFwvW2EtekEtWl9dKyg/OlxcL1thLXpBLVpfXSspPykpJC9cbn1cblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgYW4gYXJndW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBpdC5cbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvciB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqIEFsbCAqZGF0ZS1mbnMqIGZ1bmN0aW9ucyB3aWxsIHRocm93IGBSYW5nZUVycm9yYCBpZiBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBpcyBub3QgMCwgMSwgMiBvciB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSB7T3B0aW9uc1dpdGhUWn0gW29wdGlvbnNdIC0gdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0XG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudGltZVpvbmU9JyddIC0gdXNlZCB0byBzcGVjaWZ5IHRoZSBJQU5BIHRpbWUgem9uZSBvZmZzZXQgb2YgYSBkYXRlIFN0cmluZy5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBtdXN0IGJlIDAsIDEgb3IgMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHN0cmluZyAnMjAxNC0wMi0xMVQxMTozMDozMCcgdG8gZGF0ZTpcbiAqIHZhciByZXN1bHQgPSB0b0RhdGUoJzIwMTQtMDItMTFUMTE6MzA6MzAnKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCBzdHJpbmcgJyswMjAxNDEwMScgdG8gZGF0ZSxcbiAqIC8vIGlmIHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGV4dGVuZGVkIHllYXIgZm9ybWF0IGlzIDE6XG4gKiB2YXIgcmVzdWx0ID0gdG9EYXRlKCcrMDIwMTQxMDEnLCB7YWRkaXRpb25hbERpZ2l0czogMX0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGRpcnR5T3B0aW9ucykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBwcmVzZW50J1xuICAgIClcbiAgfVxuXG4gIGlmIChhcmd1bWVudCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IGRpcnR5T3B0aW9ucyB8fCB7fVxuXG4gIHZhciBhZGRpdGlvbmFsRGlnaXRzID1cbiAgICBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMgPT0gbnVsbFxuICAgICAgPyBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTXG4gICAgICA6IHRvSW50ZWdlcihvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHMpXG4gIGlmIChcbiAgICBhZGRpdGlvbmFsRGlnaXRzICE9PSAyICYmXG4gICAgYWRkaXRpb25hbERpZ2l0cyAhPT0gMSAmJlxuICAgIGFkZGl0aW9uYWxEaWdpdHMgIT09IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2FkZGl0aW9uYWxEaWdpdHMgbXVzdCBiZSAwLCAxIG9yIDInKVxuICB9XG5cbiAgLy8gQ2xvbmUgdGhlIGRhdGVcbiAgaWYgKFxuICAgIGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICh0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBEYXRlXScpXG4gICkge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpXG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICkge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudClcbiAgfSBlbHNlIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSdcbiAgICApXG4gICkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICB2YXIgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpXG5cbiAgdmFyIHBhcnNlWWVhclJlc3VsdCA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKVxuICB2YXIgeWVhciA9IHBhcnNlWWVhclJlc3VsdC55ZWFyXG4gIHZhciByZXN0RGF0ZVN0cmluZyA9IHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZ1xuXG4gIHZhciBkYXRlID0gcGFyc2VEYXRlKHJlc3REYXRlU3RyaW5nLCB5ZWFyKVxuXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cblxuICBpZiAoZGF0ZSkge1xuICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKVxuICAgIHZhciB0aW1lID0gMFxuICAgIHZhciBvZmZzZXRcblxuICAgIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpXG5cbiAgICAgIGlmIChpc05hTih0aW1lKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lKSB7XG4gICAgICBvZmZzZXQgPSB0elBhcnNlVGltZXpvbmUoXG4gICAgICAgIGRhdGVTdHJpbmdzLnRpbWV6b25lIHx8IG9wdGlvbnMudGltZVpvbmUsXG4gICAgICAgIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpXG4gICAgICApXG4gICAgICBpZiAoaXNOYU4ob2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgICAgfVxuICAgICAgb2Zmc2V0ID0gdHpQYXJzZVRpbWV6b25lKFxuICAgICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSB8fCBvcHRpb25zLnRpbWVab25lLFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgICAgaWYgKGlzTmFOKG9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IG9mZnNldCBhY2N1cmF0ZSB0byBob3VyIGluIHRpbWV6b25lcyB0aGF0IGNoYW5nZSBvZmZzZXRcbiAgICAgIG9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobmV3IERhdGUodGltZXN0YW1wICsgdGltZSkpXG4gICAgICBvZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKFxuICAgICAgICBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gIH1cbn1cblxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgdmFyIGRhdGVTdHJpbmdzID0ge31cbiAgdmFyIGFycmF5ID0gZGF0ZVN0cmluZy5zcGxpdChwYXR0ZXJucy5kYXRlVGltZURlbGltZXRlcilcbiAgdmFyIHRpbWVTdHJpbmdcblxuICBpZiAocGF0dGVybnMucGxhaW5UaW1lLnRlc3QoYXJyYXlbMF0pKSB7XG4gICAgZGF0ZVN0cmluZ3MuZGF0ZSA9IG51bGxcbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF1cbiAgfSBlbHNlIHtcbiAgICBkYXRlU3RyaW5ncy5kYXRlID0gYXJyYXlbMF1cbiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMV1cbiAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IGFycmF5WzJdXG4gICAgaWYgKHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyLnRlc3QoZGF0ZVN0cmluZ3MuZGF0ZSkpIHtcbiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1ldGVyKVswXVxuICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLCBkYXRlU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICBpZiAodGltZVN0cmluZykge1xuICAgIHZhciB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZylcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGRhdGVTdHJpbmdzLnRpbWUgPSB0aW1lU3RyaW5nLnJlcGxhY2UodG9rZW5bMV0sICcnKVxuICAgICAgZGF0ZVN0cmluZ3MudGltZXpvbmUgPSB0b2tlblsxXVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU3RyaW5nc1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICB2YXIgcGF0dGVybllZWSA9IHBhdHRlcm5zLllZWVthZGRpdGlvbmFsRGlnaXRzXVxuICB2YXIgcGF0dGVybllZWVlZID0gcGF0dGVybnMuWVlZWVlbYWRkaXRpb25hbERpZ2l0c11cblxuICB2YXIgdG9rZW5cblxuICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgdG9rZW4gPSBwYXR0ZXJucy5ZWVlZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWVlZLmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgdmFyIHllYXJTdHJpbmcgPSB0b2tlblsxXVxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyU3RyaW5nLCAxMCksXG4gICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZSh5ZWFyU3RyaW5nLmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvLyBZWSBvciDCsVlZWVxuICB0b2tlbiA9IHBhdHRlcm5zLllZLmV4ZWMoZGF0ZVN0cmluZykgfHwgcGF0dGVybllZWS5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIHZhciBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV1cbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogcGFyc2VJbnQoY2VudHVyeVN0cmluZywgMTApICogMTAwLFxuICAgICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoY2VudHVyeVN0cmluZy5sZW5ndGgpXG4gICAgfVxuICB9XG5cbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHllYXJcbiAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHRva2VuXG4gIHZhciBkYXRlXG4gIHZhciBtb250aFxuICB2YXIgd2Vla1xuXG4gIC8vIFlZWVlcbiAgaWYgKGRhdGVTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDApXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLU1NXG4gIHRva2VuID0gcGF0dGVybnMuTU0uZXhlYyhkYXRlU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMClcbiAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aClcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgLy8gWVlZWS1EREQgb3IgWVlZWURERFxuICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIHZhciBkYXlPZlllYXIgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG5cbiAgICBpZiAoIXZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoTmFOKVxuICAgIH1cblxuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyB5eXl5LU1NLWRkIG9yIFlZWVlNTUREXG4gIHRva2VuID0gcGF0dGVybnMuTU1ERC5leGVjKGRhdGVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGRhdGUgPSBuZXcgRGF0ZSgwKVxuICAgIG1vbnRoID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDFcbiAgICB2YXIgZGF5ID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKVxuXG4gICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheSkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KVxuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICAvLyBZWVlZLVd3dyBvciBZWVlZV3d3XG4gIHRva2VuID0gcGF0dGVybnMuV3d3LmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaykpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2VlaylcbiAgfVxuXG4gIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgdG9rZW4gPSBwYXR0ZXJucy5Xd3dELmV4ZWMoZGF0ZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxXG4gICAgdmFyIGRheU9mV2VlayA9IHBhcnNlSW50KHRva2VuWzJdLCAxMCkgLSAxXG5cbiAgICBpZiAoIXZhbGlkYXRlV2Vla0RhdGUoeWVhciwgd2VlaywgZGF5T2ZXZWVrKSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTilcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5T2ZJU09XZWVrWWVhcih5ZWFyLCB3ZWVrLCBkYXlPZldlZWspXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgZGF0ZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICB2YXIgdG9rZW5cbiAgdmFyIGhvdXJzXG4gIHZhciBtaW51dGVzXG5cbiAgLy8gaGhcbiAgdG9rZW4gPSBwYXR0ZXJucy5ISC5leGVjKHRpbWVTdHJpbmcpXG4gIGlmICh0b2tlbikge1xuICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUlxuICB9XG5cbiAgLy8gaGg6bW0gb3IgaGhtbVxuICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKVxuICBpZiAodG9rZW4pIHtcbiAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMClcbiAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSlcblxuICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgcmV0dXJuIE5hTlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoaG91cnMgJSAyNCkgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgKVxuICB9XG5cbiAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gIHRva2VuID0gcGF0dGVybnMuSEhNTVNTLmV4ZWModGltZVN0cmluZylcbiAgaWYgKHRva2VuKSB7XG4gICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApXG4gICAgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzJdLCAxMClcbiAgICB2YXIgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpXG5cbiAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgIHJldHVybiBOYU5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgK1xuICAgICAgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgK1xuICAgICAgc2Vjb25kcyAqIDEwMDBcbiAgICApXG4gIH1cblxuICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgdGltZVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBkYXlPZklTT1dlZWtZZWFyKGlzb1dlZWtZZWFyLCB3ZWVrLCBkYXkpIHtcbiAgd2VlayA9IHdlZWsgfHwgMFxuICBkYXkgPSBkYXkgfHwgMFxuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKDApXG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpXG4gIHZhciBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDdcbiAgdmFyIGRpZmYgPSB3ZWVrICogNyArIGRheSArIDEgLSBmb3VydGhPZkphbnVhcnlEYXlcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgZGlmZilcbiAgcmV0dXJuIGRhdGVcbn1cblxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcblxudmFyIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV1cbnZhciBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikge1xuICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICBpZiAoZGF5T2ZZZWFyIDwgMSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGlzTGVhcFllYXIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcilcbiAgaWYgKGlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY2KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCFpc0xlYXBZZWFyICYmIGRheU9mWWVhciA+IDM2NSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXkpIHtcbiAgaWYgKHdlZWsgPCAwIHx8IHdlZWsgPiA1Mikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRheSAhPSBudWxsICYmIChkYXkgPCAwIHx8IGRheSA+IDYpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgaWYgKGhvdXJzICE9IG51bGwgJiYgKGhvdXJzIDwgMCB8fCBob3VycyA+PSAyNSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtaW51dGVzICE9IG51bGwgJiYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoc2Vjb25kcyAhPSBudWxsICYmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9lc20vdG9EYXRlL2luZGV4LmpzIiwidmFyIE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcblxuZnVuY3Rpb24gZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xufVxuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkaXJ0eURhdGUuZ2V0VGltZSgpKTtcbiAgdmFyIGJhc2VUaW1lem9uZU9mZnNldCA9IE1hdGguY2VpbChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICBkYXRlLnNldFNlY29uZHMoMCwgMCk7XG4gIHZhciBoYXNOZWdhdGl2ZVVUQ09mZnNldCA9IGJhc2VUaW1lem9uZU9mZnNldCA+IDA7XG4gIHZhciBtaWxsaXNlY29uZHNQYXJ0T2ZUaW1lem9uZU9mZnNldCA9IGhhc05lZ2F0aXZlVVRDT2Zmc2V0ID8gKE1JTExJU0VDT05EU19JTl9NSU5VVEUgKyBnZXREYXRlTWlsbGlzZWNvbmRzUGFydChkYXRlKSkgJSBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIDogZ2V0RGF0ZU1pbGxpc2Vjb25kc1BhcnQoZGF0ZSk7XG4gIHJldHVybiBiYXNlVGltZXpvbmVPZmZzZXQgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFICsgbWlsbGlzZWNvbmRzUGFydE9mVGltZXpvbmVPZmZzZXQ7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cblxuLyoqXG4gKiBFdmVudHMgTWl4aW5cbiAqXG4gKiBBbGxvdyBjbGFzc2VzIHRvIGhhdmUgdGhlaXIgb3duIGV2ZW50cyBtYW5hZ2VyXG4gKlxuICogQHBhcmFtIHtDbGFzc30gc3VwZXJDbGFzc1xuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbmNvbnN0IEV2ZW50c01peGluID0gc3VwZXJDbGFzcyA9PlxuICBjbGFzcyBleHRlbmRzIHN1cGVyQ2xhc3Mge1xuICAgIC8qKlxuICAgICAqIE9iamVjdCBvZiByZWdpc3RlcnMgaGFuZGxlcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgX19oYW5kbGVycyA9IHt9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBldmVudCBoYW5kbGVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBldmVudCBuYW1lXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICovXG4gICAgb24obmFtZSwgaGFuZGxlcikge1xuICAgICAgdGhpcy5fX2hhbmRsZXJzW25hbWVdID0gdGhpcy5fX2hhbmRsZXJzW25hbWVdIHx8IFtdXG4gICAgICB0aGlzLl9faGFuZGxlcnNbbmFtZV0ucHVzaChoYW5kbGVyKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBldmVudCBoYW5kbGVyXG4gICAgICpcbiAgICAgKiAqKk5vdGUgOioqIGlmIGhhbmRsZXIgaXMgbm90IHByb3ZpZGVkIHRoZW4gYWxsIHJlZ2lzdGVyZWQgaGFuZGxlciBmb3IgdGhlIGdpdmVuIGV2ZW50IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgaGFuZGxlciBmdW5jdGlvblxuICAgICAqL1xuICAgIG9mZihuYW1lLCBoYW5kbGVyKSB7XG4gICAgICB0aGlzLl9faGFuZGxlcnNbbmFtZV0gPSB0aGlzLl9faGFuZGxlcnNbbmFtZV0gfHwgW11cbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBkZWxldGUgdGhpcy5fX2hhbmRsZXJzW25hbWVdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRIYW5kbGVyIGluIHRoaXMuX19oYW5kbGVycykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX19oYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShyZWdpc3RlcmVkSGFuZGxlcikgJiZcbiAgICAgICAgICAgIHRoaXMuX19oYW5kbGVyc1tyZWdpc3RlcmVkSGFuZGxlcl0gPT09IGhhbmRsZXJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9faGFuZGxlcnNbbmFtZV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3RpZnkgaGFuZGxlcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGV2ZW50IG5hbWVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgcGF5bG9hZFxuICAgICAqL1xuICAgIG5vdGlmeShuYW1lLCBwYXlsb2FkKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuX19oYW5kbGVyc1tuYW1lXSB8fCBbXVxuICAgICAgaGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHtcbiAgICAgICAgaGFuZGxlcihwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuLyoqXG4gKiBBbiBldmVudHMgbWl4aW4gZGVjb3JhdG9yXG4gKlxuICogQHBhcmFtIHtDbGFzc30gc3VwZXJDbGFzc1xuICpcbiAqIEBzZWUge0V2ZW50c01peGlufVxuICovXG5mdW5jdGlvbiB3aXRoRXZlbnRzTWl4aW4oc3VwZXJDbGFzcykge1xuICByZXR1cm4gRXZlbnRzTWl4aW4oc3VwZXJDbGFzcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRzTWl4aW5cbmV4cG9ydCB7IEV2ZW50c01peGluLCB3aXRoRXZlbnRzTWl4aW4gfVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL0V2ZW50c01peGluL0V2ZW50c01peGluLmpzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgYXV0b2JpbmQsIG92ZXJyaWRlLCByZWFkb25seSB9IGZyb20gJ2NvcmUtZGVjb3JhdG9ycydcbmltcG9ydCB7IHdpdGhFdmVudHNNaXhpbiB9IGZyb20gJy4uL0V2ZW50c01peGluJ1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5pbXBvcnQgJy4vc3R5bGUuc2NzcydcblxuLyoqXG4gKiBEYXRlVGltZUlucHV0XG4gKlxuICogU2ltcGxlIERhdGVUaW1lSW5wdXQgY29tcG9uZW50IHdoaWNoIGludGVncmF0ZXMgdGhlIGZsYXRwaWNrclxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlciA8aGFib2Zha2hlckBiYXNpcy5jb20+XG4gKi9cbkB3aXRoRXZlbnRzTWl4aW5cbmNsYXNzIERhdGVUaW1lSW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQ29uc3RhbnQgd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCBuYW1lIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIGEgZGF0ZVxuICAgKiBpcyBzZWxlY3RlZCB1c2luZyB0aGUgZGF0ZSBwaWNrZXJcbiAgICpcbiAgICogQHR5cGUge1N0cmluZ31cbiAgICovXG4gIEByZWFkb25seVxuICBzdGF0aWMgT05fREFURV9DSEFOR0VEID0gJ0RhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VEJ1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBwaWNrZXIgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUge0ZsYXRwaWNrckZufVxuICAgKi9cbiAgcGlja2VyID0gbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWxlY3RlZCBkYXRlXG4gICAqXG4gICAqIEB0eXBlIHtEYXRlfG51bGx9XG4gICAqL1xuICBzZWxlY3RlZERhdGUgPSBudWxsXG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgcmVjZWl2ZWQgcGFyYW1zIHdoZW4gaW5pdCBpcyBjYWxsZWRcbiAgICpzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBfcGFyYW1zID0ge31cblxuICAvKipcbiAgICogQ29uc3RydWN0IG5ldyBEYXRlVGltZUlucHV0XG4gICAqXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNFZGl0b3Igd2hlbiB0cnVlICwgdGhlIGlucHV0IHdpbGwgc3R5bGVkIHRvIGZpdCBhcyBhIGNlbGwgZWRpdG9yXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihpc0VkaXRvciA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5fZ3VpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0aGlzLl9ndWkuY2xhc3NOYW1lID0gJ2FnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZV9faW5wdXQgJHtcbiAgICAgICAgaXNFZGl0b3IgPyAnZGF0ZXRpbWVfX2lucHV0LS1lZGl0b3IgJyA6ICcnXG4gICAgICB9IGFnLXdyYXBwZXIgYWctaW5wdXQtd3JhcHBlciBhZy10ZXh0LWZpZWxkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkYXRldGltZV9faW5wdXRfX2lucHV0ICR7XG4gICAgICAgICAgICBpc0VkaXRvciA/ICdhZy1jZWxsLWVkaXQtaW5wdXQgJyA6ICcnXG4gICAgICAgICAgfSBhZy1pbnB1dC1maWVsZC1pbnB1dCBhZy10ZXh0LWZpZWxkLWlucHV0XCIgdHlwZT1cInRleHRcIiBkYXRhLWlucHV0PlxuICAgICAgICAgIDxhIGNsYXNzPVwiZGF0ZXRpbWVfX2lucHV0X19jbGVhclwiIGRhdGEtY2xlYXI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImRhdGV0aW1lX19pbnB1dF9fY2xlYXJfX2ljb24gYWctaWNvbiBhZy1pY29uLWNyb3NzXCI+PC9pPlxuICAgICAgICAgIDwvYT4gICAgXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgaW5pdChwYXJhbXMpIHtcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcbiAgICBjb25zdCBlbmFibGVUaW1lID0gdGhpcy5nZXRPcHRpb24oJ2RhdGVUaW1lRW5hYmxlVGltZScsIHBhcmFtcywgdHJ1ZSlcbiAgICBjb25zdCB0aW1lXzI0aHIgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGUyNEhSJywgcGFyYW1zLCB0cnVlKVxuICAgIGNvbnN0IGVuYWJsZVNlY29uZHMgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVTZWNvbmRzJywgcGFyYW1zLCBmYWxzZSlcbiAgICBjb25zdCBub0NhbGVuZGFyID0gIXRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUVuYWJsZUNhbGVuZGFyJywgcGFyYW1zLCB0cnVlKVxuXG4gICAgbGV0IGRhdGVGb3JtYXQgPSB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNYXNrJywgcGFyYW1zKVxuXG4gICAgLy8gdHJ5IHRvIGdlbmVyYXRlIGEgZGVmYXVsdCBkYXRlIGZvcm1hdCBiYXNlZCBvbiB0aGUgb3B0aW9uc1xuICAgIGlmICghZGF0ZUZvcm1hdCkge1xuICAgICAgZGF0ZUZvcm1hdCA9IG5vQ2FsZW5kYXIgPyAnJyA6ICclWS8lTXovJUR6J1xuICAgICAgaWYgKGVuYWJsZVRpbWUpIHtcbiAgICAgICAgZGF0ZUZvcm1hdCArPSB0aW1lXzI0aHIgPyAnICVIejolbXonIDogJyAlaHo6JW16J1xuXG4gICAgICAgIGlmIChlbmFibGVTZWNvbmRzKSB7XG4gICAgICAgICAgZGF0ZUZvcm1hdCArPSAnOiVzeidcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0LnRyaW0oKVxuXG4gICAgLy8gaW5pdCB0aGUgZGF0ZSBwaWNrZXJcbiAgICB0aGlzLnBpY2tlciA9IGZsYXRwaWNrcih0aGlzLl9ndWksIHtcbiAgICAgIHdyYXA6IHRydWUsXG4gICAgICAvLyBhbGxvdyBlbnRlcmluZyB0aGUgZGF0ZSBtYW51YWxseSByZXF1aXJlcyBkYXRlIHBhcnNpbmcgZnJvbSBzdHJpbmdcbiAgICAgIC8vIHRoaXMgaXMgYSB0b3VnaCB0aGluZyBhbmQgcmVxdWlyZXMgbGlicyBsaWtlIG1vbWVudFxuICAgICAgYWxsb3dJbnB1dDogZmFsc2UsXG4gICAgICBvbkNoYW5nZTogdGhpcy5fb25EYXRlQ2hhbmdlZCxcbiAgICAgIGZvcm1hdERhdGU6IHRoaXMuZm9ybWF0RGF0ZSxcbiAgICAgIG1heERhdGU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZU1heCcsIHBhcmFtcywgbnVsbCksXG4gICAgICBtaW5EYXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVNaW4nLCBwYXJhbXMsIG51bGwpLFxuICAgICAgZGVmYXVsdEhvdXI6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZURlZmF1bHRIb3VyJywgcGFyYW1zLCAxMiksXG4gICAgICBkZWZhdWx0TWludXRlOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVEZWZhdWx0TWludXRlJywgcGFyYW1zLCAwKSxcbiAgICAgIGRpc2FibGVNb2JpbGU6IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZURpc2FibGVNb2JpbGUnLCBwYXJhbXMsIGZhbHNlKSxcbiAgICAgIHdlZWtOdW1iZXJzOiB0aGlzLmdldE9wdGlvbignZGF0ZVRpbWVFbmFibGVXZWVrTnVtYmVyJywgcGFyYW1zLCBmYWxzZSksXG4gICAgICBsb2NhbGU6IHRoaXMuX2dldFBpY2tlckxvY2FsZSgpLFxuICAgICAgbm9DYWxlbmRhcixcbiAgICAgIGRhdGVGb3JtYXQsXG4gICAgICBlbmFibGVUaW1lLFxuICAgICAgZW5hYmxlU2Vjb25kcyxcbiAgICAgIHRpbWVfMjRocixcbiAgICB9KVxuXG4gICAgLy8gZm9yY2UgZGlhbG9nIG92ZXJmbG93XG4gICAgdGhpcy5waWNrZXIuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYWctY3VzdG9tLWNvbXBvbmVudC1wb3B1cCcpXG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIEBvdmVycmlkZVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMucGlja2VyLmRlc3Ryb3koKVxuICAgIHRoaXMub2ZmKERhdGVUaW1lSW5wdXQuT05fREFURV9DSEFOR0VEKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGlja2VyIGRhdGVcbiAgICpcbiAgICogQHBhcmFtIHtEYXRlfFN0cmluZ30gdmFsdWUgdGhlIGRhdGUgdmFsdWUgdG8gc2V0XG4gICAqL1xuICBzZXREYXRlKHZhbHVlKSB7XG4gICAgdGhpcy5waWNrZXIuc2V0RGF0ZSh2YWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIFBpY2tlclxuICAgKi9cbiAgb3BlbigpIHtcbiAgICB0aGlzLnBpY2tlci5vcGVuKClcbiAgICB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgcGlja2VyXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLnBpY2tlci5jbG9zZSgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHBpY2tlclxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgLyoqIHRoaXMgY2hlY2sgYmVjYXVzZSB0aGUgdGVzdHMgZmFpbCBoZXJlIGZvciBzb21lIHJlYXNvbnMgICovXG4gICAgaWYgKHRoaXMucGlja2VyLmNvbmZpZykge1xuICAgICAgdGhpcy5waWNrZXIuY2xlYXIoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIGRhdGUgdXNpbmcgYEJCai5NYXNrcy5UeXBlcy5kYXRlYFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZSBkYXRlIGFzIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmb3JtYXQgQkJqIGRhdGUgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge1N0cmluZ30gZm9ybWF0dGVkIGRhdGUgYXMgc3RyaW5nXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgZm9ybWF0RGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBkYXRlVGltZUZvcm1hdHRlciA9IHRoaXMuZ2V0T3B0aW9uKCdkYXRlVGltZUZvcm1hdHRlcicsIHRoaXMuX3BhcmFtcylcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmdldE9wdGlvbihcbiAgICAgICdkYXRlVGltZUxvY2FsZScsXG4gICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcbiAgICApXG5cbiAgICBpZiAoZGF0ZVRpbWVGb3JtYXR0ZXIpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0ZVRpbWVGb3JtYXR0ZXJcbiAgICAgIGxldCBleHByZXNzaW9uID0gZGF0ZVRpbWVGb3JtYXR0ZXJcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgaWYgKCEoZXhwcmVzc2lvbi5pbmRleE9mKCdyZXR1cm4nKSA+PSAwKSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICdyZXR1cm4gJyArIGV4cHJlc3Npb24gKyAnOydcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgJ2Zvcm1hdCcsXG4gICAgICAgICAgICAnbG9jYWxlJyxcbiAgICAgICAgICAgICdEYXRlTWFzaycsXG4gICAgICAgICAgICBleHByZXNzaW9uXG4gICAgICAgICAgKShkYXRlLCBmb3JtYXQsIGxvY2FsZSwgQkJqLk1hc2tzLkRhdGVNYXNrKVxuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZGF0ZVRpbWVGb3JtYXR0ZXIoZGF0ZSwgZm9ybWF0LCBsb2NhbGUsIEJCai5NYXNrcy5EYXRlTWFzaylcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBkYXRlVGltZUZvcm1hdHRlciBkZWZpbmVkIGZvciBjb2x1bW4gXCIke3RoaXMuX3BhcmFtcy5jb2xEZWYuZmllbGR9XCIuIFRoZSBmb3JtYXR0ZXIgc2hvdWxkIGJlIGFuIGV4cHJlc3Npb24gb3IgcGxhaW4gZnVuY3Rpb25gXG4gICAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZvcm1hdCB8fCAoZm9ybWF0ICYmIGZvcm1hdC5pbmRleE9mKCclJykgPCAwKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEJCai5NYXNrcy5EYXRlTWFzay5tYXNrKGRhdGUsIGZvcm1hdCwgbG9jYWxlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gZGF0ZSBwaWNrZXIgY2hhbmdlcyBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBkYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkRGF0ZXMgIGFycmF5IG9mIHNlbGVjdGVkIGRhdGVzXG4gICAqL1xuICBAYXV0b2JpbmRcbiAgX29uRGF0ZUNoYW5nZWQoc2VsZWN0ZWREYXRlcykge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWREYXRlc1swXSB8fCBudWxsXG4gICAgdGhpcy5ub3RpZnkoRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsIHRoaXMuc2VsZWN0ZWREYXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwaWNrZXIgZ2xvYmFsIGxvY2FsaXphdGlvbiB3aGljaCB3aWxsIHdvcmsgd2l0aCBhbnkgbG9jYWxlXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRwaWNrci9mbGF0cGlja3IvYmxvYi9tYXN0ZXIvc3JjL2wxMG4vZGVmYXVsdC50c1xuICAgKi9cbiAgX2dldFBpY2tlckxvY2FsZSgpIHtcbiAgICBjb25zdCBsb2NhbGUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlIHx8ICdlbi1VUydcblxuICAgIGNvbnN0IHdlZWtEYXlzU2hvcnQgPSBbXVxuICAgIGNvbnN0IHdlZWtEYXlzTG9uZyA9IFtdXG5cbiAgICBmb3IgKGxldCBkYXkgPSA0OyBkYXkgPCAxMTsgZGF5KyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgxOTcwLCAxIC0gMSwgZGF5KVxuXG4gICAgICB3ZWVrRGF5c1Nob3J0LnB1c2goXG4gICAgICAgIGRhdGVcbiAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNwbGl0KCcsJylbMF0gLy8gdGhlIGRhdGUtdGltZS1mb3JtYXQtdGltZXpvbmUgcG9seWZpbGwgYXR0YWNoIHRoZSBkYXRlIGFsc29cbiAgICAgIClcblxuICAgICAgd2Vla0RheXNMb25nLnB1c2goXG4gICAgICAgIGRhdGVcbiAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgICAgICB3ZWVrZGF5OiAnbG9uZycsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc3BsaXQoJywnKVswXSAvLyB0aGUgZGF0ZS10aW1lLWZvcm1hdC10aW1lem9uZSBwb2x5ZmlsbCBhdHRhY2ggdGhlIGRhdGUgYWxzb1xuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IG1vbnRoc1Nob3J0ID0gW11cbiAgICBjb25zdCBtb250aHNMb25nID0gW11cblxuICAgIGZvciAobGV0IG1vbnRoID0gMDsgbW9udGggPCAxMjsgbW9udGgrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDE5NzAsIG1vbnRoLCA0KVxuXG4gICAgICBtb250aHNTaG9ydC5wdXNoKFxuICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBtb250aHNMb25nLnB1c2goXG4gICAgICAgIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7XG4gICAgICAgICAgbW9udGg6ICdsb25nJyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiB3ZWVrRGF5c1Nob3J0LFxuICAgICAgICBsb25naGFuZDogd2Vla0RheXNMb25nLFxuICAgICAgfSxcbiAgICAgIG1vbnRoczoge1xuICAgICAgICBzaG9ydGhhbmQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBsb25naGFuZDogbW9udGhzTG9uZyxcbiAgICAgIH0sXG4gICAgICBkYXlzSW5Nb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxuICAgICAgZmlyc3REYXlPZldlZWs6IEJCai5NYXNrcy5VdGlscy5EYXRlcy5nZXRXZWVrU3RhcnRCeUxvY2FsZShsb2NhbGUpLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBvcmRpbmFsOiBudW1iZXIgPT4gJycsXG4gICAgICByYW5nZVNlcGFyYXRvcjogJyAgJyxcbiAgICAgIHdlZWtBYmJyZXZpYXRpb246ICcnLFxuICAgICAgc2Nyb2xsVGl0bGU6ICcnLFxuICAgICAgdG9nZ2xlVGl0bGU6ICcnLFxuICAgICAgYW1QTTogWydBTScsICdQTSddLFxuICAgICAgeWVhckFyaWFMYWJlbDogJycsXG4gICAgICBob3VyQXJpYUxhYmVsOiAnJyxcbiAgICAgIG1pbnV0ZUFyaWFMYWJlbDogJycsXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lSW5wdXRcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9EYXRlVGltZUlucHV0L0RhdGVUaW1lSW5wdXQuanMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVJbnB1dC9zdHlsZS5zY3NzIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIuZGF0ZXRpbWVfX2lucHV0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hZy1pbnB1dC1ib3JkZXItY29sb3IsIHZhcigtLWFnLWJvcmRlci1jb2xvciwgI2JhYmZjNykpO2JvcmRlci1yYWRpdXM6M3B4fS5kYXRldGltZV9faW5wdXQ6Zm9jdXMsLmRhdGV0aW1lX19pbnB1dDphY3RpdmUsLmRhdGV0aW1lX19pbnB1dDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWctaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yLCByZ2JhKDMzLDE1MCwyNDMsMC40KSl9LmRhdGV0aW1lX19pbnB1dF9faW5wdXR7ZmxleDoxO3BhZGRpbmc6NnB4O2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOmluaGVyaXR9LmFnLXRoZW1lLWFscGluZSAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtYmFsaGFtIC5kYXRldGltZV9faW5wdXRfX2lucHV0LC5hZy10aGVtZS1tYXRlcmlhbCAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpfS5hZy10aGVtZS1hbHBpbmUtZGFyayAuZGF0ZXRpbWVfX2lucHV0X19pbnB1dCwuYWctdGhlbWUtYmFsaGFtLWRhcmsgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hZy1iYWNrZ3JvdW5kLWNvbG9yLCAjMmQzNDM2KX0uZGF0ZXRpbWVfX2lucHV0X19jbGVhcnttYXJnaW4tbGVmdDoxcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzo2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO2NvbG9yOmluaGVyaXR9LmRhdGV0aW1lX19pbnB1dC0tZWRpdG9ye2JvcmRlci1jb2xvcjp2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKX0uZGF0ZXRpbWVfX2lucHV0LS1lZGl0b3IgLmRhdGV0aW1lX19pbnB1dF9faW5wdXR7cGFkZGluZzowO3BhZGRpbmctbGVmdDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9EYXRlVGltZUlucHV0L3N0eWxlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDEyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSAyIDMiLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cucGFyZW50LmRvY3VtZW50LmhlYWRcbiAgICAgICAgICAgICAgfTtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGUuc2Nzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLnNjc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVGaWx0ZXIvc3R5bGUuc2NzcyIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLmRhdGVUaW1lRmlsdGVyIHNlbGVjdHttYXJnaW4tYm90dG9tOjlweDtwYWRkaW5nOjZweDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFnLWlucHV0LWJvcmRlci1jb2xvciwgdmFyKC0tYWctYm9yZGVyLWNvbG9yLCAjYmFiZmM3KSk7Y29sb3I6aW5oZXJpdH0uZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0OmZvY3VzLC5kYXRlVGltZUZpbHRlciBzZWxlY3Q6YWN0aXZle2JvcmRlci1jb2xvcjp2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsMTUwLDI0MywwLjQpKX0uZGF0ZVRpbWVGaWx0ZXIgc2VsZWN0IG9wdGlvbnt0ZXh0LWluZGVudDo2cHh9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlciEuL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9EYXRlVGltZUZpbHRlci9zdHlsZS5zY3NzXG4vLyBtb2R1bGUgaWQgPSAxMjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEgMiAzIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGJhc2lzLWFnZ3JpZC1jb21wb25lbnRzIGxpYi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IERhdGVUaW1lRWRpdG9yIGZyb20gJy4vRGF0ZVRpbWVFZGl0b3InXG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVFZGl0b3IvaW5kZXguanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmFzaXMtYWdncmlkLWNvbXBvbmVudHMgbGliLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhdXRvYmluZCwgb3ZlcnJpZGUgfSBmcm9tICdjb3JlLWRlY29yYXRvcnMnXG5pbXBvcnQgdXRjVG9ab25lZFRpbWUgZnJvbSAnZGF0ZS1mbnMtdHovdXRjVG9ab25lZFRpbWUnXG5pbXBvcnQgRGF0ZVRpbWVJbnB1dCBmcm9tICcuLi9EYXRlVGltZUlucHV0J1xuaW1wb3J0IENvbXBvbmVudCBmcm9tICcuLi9Db21wb25lbnQnXG5cbi8qKlxuICogRGF0ZVRpbWVJbnB1dFxuICpcbiAqIFNpbXBsZSBEYXRlVGltZUlucHV0IGNvbXBvbmVudCB3aGljaCBpbnRlZ3JhdGVzIHRoZSBmbGF0cGlja3JcbiAqXG4gKiAjIyBPcHRpb25zXG4gKlxuICogfCBOYW1lICAgICAgICAgICAgICAgICAgXHR8IERlZmF1bHQgICAgIFx0fCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0fDotLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipkYXRlVGltZUVuYWJsZVRpbWUqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWVcbiAqIHwgKipkYXRlVGltZUVuYWJsZTI0SFIqKiAgIHwgZmFsc2UgICAgfCBlbmFibGUgLyBkaXNhYmxlIHRpbWUgMjQgZm9ybWF0XG4gKiB8ICoqZGF0ZVRpbWVFbmFibGVTZWNvbmRzKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBzZWNvbmRzIG1hbmFnZW1lbnRcbiAqIHwgKipkYXRlVGltZUVuYWJsZUNhbGVuZGFyKiogICB8IGZhbHNlICAgIHwgZW5hYmxlIC8gZGlzYWJsZSBDYWxlbmRhci5cbiAqIHwgKipkYXRlVGltZU1hc2sqKiAgIHwgZmFsc2UgICAgfCBUaGUgbWFzayB1c2VkIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICogfCAqKmRhdGVUaW1lTWF4KiogICB8IHVuZGVmaW5lZCAgICB8ICBNYXggYWxsb3dlZCBkYXRlXG4gKiB8ICoqZGF0ZVRpbWVNaW4qKiAgIHwgdW5kZWZpbmVkICAgIHwgIE1pbiBhbGxvd2VkIGRhdGVcbiAqIHwgKipkYXRlVGltZUZvcm1hdHRlcioqICAgfCBmYWxzZSAgICB8ICBBIGZ1bmN0aW9uIG9yIGV4cHJlc3Npb24gdG8gZm9ybWF0IHRoZSBkYXRlIChAc2VlIHN1cHBvcnRlZCBwYXJhbSlcbiAqIHwgKipkYXRlVGltZUxvY2FsZSoqICAgfCBTeXN0ZW0gZGVmYXVsdCAgICB8ICBBIGxvY2FsZSB0byB1c2UgZm9yIGRhdGUgZm9ybWF0dGluZ1xuICogfCAqKmRhdGVUaW1lRGVmYXVsdEhvdXIqKiAgIHwgMTIgICAgfCAgSW5pdGlhbCB2YWx1ZSBvZiB0aGUgaG91ciBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGVmYXVsdE1pbnV0ZSoqICAgfCAwICAgIHwgIEluaXRpYWwgdmFsdWUgb2YgdGhlIG1pbnV0ZSBlbGVtZW50LlxuICogfCAqKmRhdGVUaW1lRGlzYWJsZU1vYmlsZSoqICAgfCBmYWxzZSAgICB8ICBTZXQgZGlzYWJsZU1vYmlsZSB0byB0cnVlIHRvIGFsd2F5cyB1c2UgdGhlIG5vbi1uYXRpdmUgcGlja2VyLlxuICogfCAqKmRhdGVUaW1lRW5hYmxlV2Vla051bWJlcioqICAgfCB0cnVlICAgIHwgIEVuYWJsZXMgZGlzcGxheSBvZiB3ZWVrIG51bWJlcnMgaW4gY2FsZW5kYXIuXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyIDxoYWJvZmFraGVyQGJhc2lzLmNvbT5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVFZGl0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogQHR5cGUge0RhdGVUaW1lSW5wdXR9XG4gICAqL1xuICBfaW5wdXQgPSBuZXcgRGF0ZVRpbWVJbnB1dCh0cnVlKVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgX3ZhbHVlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBQYXJhbXMgcmVjZWl2ZWQgaW4gaW5pdFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgX3BhcmFtcyA9IG51bGxcblxuICAvKipcbiAgICogVGFrZXMgaW5jb21wbGV0ZSBpc28gc3RyaW5nIGFuZCByZXR1cm4gYSBjb21wbGV0ZSBvbmVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRhdGUgaW5jb21wbGV0ZSBpc28gc3RyaW5nXG4gICAqXG4gICAqIEByZXR1cm4ge1N0cmluZ30gY29tcGxldGUgaXNvIHN0cmluZ1xuICAgKi9cbiAgc3RhdGljIGZpeFNob3J0SVNPKHZhbHVlKSB7XG4gICAgcmV0dXJuIEJCai5NYXNrcy5VdGlscy5EYXRlcy5maXhTaG9ydElTTyh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGluaXQocGFyYW1zKSB7XG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5mb2N1c0FmdGVyQXR0YWNoZWQgPSBwYXJhbXMuY2VsbFN0YXJ0ZWRFZGl0XG4gICAgaWYgKHRoaXMuZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICBsZXQga2V5UHJlc3NCYWNrc3BhY2VPckRlbGV0ZSA9XG4gICAgICAgIHBhcmFtcy5rZXlQcmVzcyA9PSAzMiB8fCBwYXJhbXMua2V5UHJlc3MgPT0gNDYgLy8gc3BhY2UgLy8gZGVsZXRlXG5cbiAgICAgIGlmIChrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gJydcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmNoYXJQcmVzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgICAgIGlmIChwYXJhbXMua2V5UHJlc3MgIT0gMTEzKSB7XG4gICAgICAgICAgLy9GMlxuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHBhcmFtcy52YWx1ZVxuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gRGF0ZVRpbWVFZGl0b3IuZml4U2hvcnRJU08odGhpcy5fdmFsdWUpXG4gICAgdGhpcy5faW5wdXQuaW5pdChwYXJhbXMpXG4gICAgdGhpcy5faW5wdXQub24oRGF0ZVRpbWVJbnB1dC5PTl9EQVRFX0NIQU5HRUQsIHRoaXMuX29uRGF0ZUNoYW5nZSlcblxuICAgIGlmICh0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0RGF0ZShcbiAgICAgICAgdXRjVG9ab25lZFRpbWUodGhpcy5fdmFsdWUsIEJCai5NYXNrcy5VdGlscy5EYXRlcy5nZXRUaW1lem9uZU9yT2Zmc2V0KCkpXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5fZ3VpID0gdGhpcy5faW5wdXQuZ2V0R3VpKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgQG92ZXJyaWRlXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5faW5wdXQuZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsZWQgb25jZSBhZnRlciBHVUkgaXMgYXR0YWNoZWQgdG8gRE9NLlxuICAgKiBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCBhbmQgbGlzdGVuaW5nIHRvIGtleSBjaGFuZ2VzXG4gICAqL1xuICBhZnRlckd1aUF0dGFjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvY3VzQWZ0ZXJBdHRhY2hlZCkge1xuICAgICAgdGhpcy5mb2N1c0luKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaW5hbCB2YWx1ZSB0byB0aGUgZ3JpZCwgdGhlIHJlc3VsdCBvZiB0aGUgZWRpdGluZ1xuICAgKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcy5wYXJzZVZhbHVlKHRoaXMuX3ZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgaW5pdGlhbGl6ZWQgYW5kIHJldHVybnMgZmFsc2Ugc28gdGhlIGVkaXRvciBhcHBlYXJzIGluIHRoZSBjZWxsXG4gICAqXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGFsd2F5cyBmYWxzZVxuICAgKiovXG4gIGlzUG9wdXAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgaW50byB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzSW4oKSB7XG4gICAgdGhpcy5faW5wdXQub3BlbigpXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgb3V0IG9mIHRoZSBjZWxsLlxuICAgKi9cbiAgZm9jdXNPdXQoKSB7XG4gICAgdGhpcy5faW5wdXQuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZWRpdG9yIHZhbHVlIHdpdGggc2VsZWN0ZWQgZGF0ZSBmcm9tIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGF0ZVxuICAgKi9cbiAgQGF1dG9iaW5kXG4gIF9vbkRhdGVDaGFuZ2UoZGF0ZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiAnJ1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lRWRpdG9yXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRGF0ZVRpbWVFZGl0b3IvRGF0ZVRpbWVFZGl0b3IuanMiLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRXZlbnQvQ3VzdG9tRXZlbnQgICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtc2VtaVxuOyhmdW5jdGlvbigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSAvL0lmIG5vdCBJRVxuXG4gIGZ1bmN0aW9uIEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwgeyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UsIGRldGFpbDogdW5kZWZpbmVkIH1cbiAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50JylcbiAgICBldnQuaW5pdEN1c3RvbUV2ZW50KGV2ZW50LCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpXG4gICAgcmV0dXJuIGV2dFxuICB9XG5cbiAgQ3VzdG9tRXZlbnQucHJvdG90eXBlID0gd2luZG93LkV2ZW50LnByb3RvdHlwZVxuXG4gIHdpbmRvdy5DdXN0b21FdmVudCA9IEN1c3RvbUV2ZW50XG59KSgpXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbml0LmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9jb2x1bW5zLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9yb3dzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9jZWxscy5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUuanMnXG5leHBvcnQgKiBmcm9tICcuL3Rvb2xwYW5lbC5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzYmFyLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5cy5qcydcbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC5qcydcbmV4cG9ydCAqIGZyb20gJy4vY2hhcnRzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9qc3MuanMnXG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdGllcy5qcydcbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QEJhc2lzLkFnR3JpZENvbXBvbmVudHMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyB9IGZyb20gJy4vY29sdW1ucydcbmltcG9ydCB7IGd3X25hdmlnYXRlVG9OZXh0Um93LCBnd19nZXRSb3dOb2RlSWQgfSBmcm9tICcuL3Jvd3MnXG5pbXBvcnQgeyBnd19nZXRDb250ZXh0TWVudSB9IGZyb20gJy4vbWVudXMnXG5pbXBvcnQgeyBnd19nZXRDaGFydFRvb2xiYXJJdGVtcyB9IGZyb20gJy4vY2hhcnRzJ1xuaW1wb3J0IHsgZ3dfZ2V0RG9jdW1lbnQsIGd3X2dldFdpbmRvdywgZ3dfYWRkR3JpZCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgZ3dfb25Sb3dDbGlja2VkLFxuICBnd19vblJvd0RvdWJsZUNsaWNrZWQsXG4gIGd3X29uU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQsXG4gIGd3X29uQ2VsbENsaWNrRXZlbnQsXG4gIGd3X29uQ2VsbEVkaXRpbmdFdmVudCxcbiAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQsXG4gIGd3X29uUmVhZHlFdmVudCxcbiAgZ3dfb25GaWx0ZXJDaGFuZ2VkLFxuICBnd19kZWJvdW5jZSxcbn0gZnJvbSAnZXZlbnRzJ1xuaW1wb3J0IHRlbXBsYXRlIGZyb20gJ2xvZGFzaC1lcy90ZW1wbGF0ZSdcbmltcG9ydCBIVE1MVG9vbHRpcCBmcm9tICcuLi9jb21wb25lbnRzL0hUTUxUb29sdGlwLmpzJ1xuaW1wb3J0IFN1Z2dlc3Rpb25FZGl0b3IgZnJvbSAnLi4vY29tcG9uZW50cy9TdWdnZXN0aW9uRWRpdG9yLmpzJ1xuXG5jb25zdCB7IGRlZXBQYXJzZUpzb24gfSA9IHJlcXVpcmUoJ2RlZXAtcGFyc2UtanNvbicpXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19pbml0KG9wdGlvbnMsIGxpY2Vuc2UsIGRhdGEpIHtcbiAgaWYgKGFnR3JpZC5MaWNlbnNlTWFuYWdlciAmJiBsaWNlbnNlKSB7XG4gICAgYWdHcmlkLkxpY2Vuc2VNYW5hZ2VyLnNldExpY2Vuc2VLZXkobGljZW5zZSlcbiAgfVxuXG4gIGNvbnN0IGlkID0gb3B0aW9ucy5jb250ZXh0LmlkXG4gIGNvbnN0IGNvbnRhaW5lciA9IGd3X2dldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoaWQpXG4gIC8vIHdlIG1ha2UgdGhlIGdyaWQgb3B0aW9ucyBhdmFpbGFibGUgYXMgc29vbiBhcyBwb3NzaWJsZVxuICBjb25zdCBncmlkID0gZ3dfYWRkR3JpZChpZCwge1xuICAgIGNvbnRhaW5lcixcbiAgICBvcHRpb25zLFxuICB9KVxuXG4gIC8vIFRPRE86IHVzZSBhZyBncmlkIGRlc3Ryb3lcbiAgY29udGFpbmVyLmlubmVySFRNTCA9ICcnXG5cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IGd3X3BhcnNlT3B0aW9ucyhvcHRpb25zKVxuICBwYXJzZWRPcHRpb25zLnJvd0RhdGEgPSBkYXRhXG5cbiAgY29uc3QgaW5zdGFuY2UgPSBuZXcgYWdHcmlkLkdyaWQoY29udGFpbmVyLCBwYXJzZWRPcHRpb25zKVxuICBncmlkLmluc3RhbmNlID0gaW5zdGFuY2VcbiAgZ3JpZC5vcHRpb25zID0gcGFyc2VkT3B0aW9uc1xuXG4gIGNvbnNvbGUubG9nKFxuICAgIGAlYyBHcmlkIFske2lkfV0gc2V0dGluZ3MgOiBgLFxuICAgICdiYWNrZ3JvdW5kOiAjMjIyOyBjb2xvcjogI2JhZGE1NScsXG4gICAgcGFyc2VkT3B0aW9uc1xuICApXG59XG5cbi8qKlxuICogUGFyc2UgT3B0aW9uc1xuICpcbiAqIFBhcnNlIHRoZSBncmlkIG9wdGlvbnMgYW5kIHJldHVyblxuICogYW4gb2JqZWN0IHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGdyaWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBHcmlkIG9wdGlvbnMgYXMgSnNvbiBPYmplY3RcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG9wdGlvbnMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGd3X3BhcnNlT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IGRlZXBQYXJzZWRPcHRpb25zID0gZGVlcFBhcnNlSnNvbihKU09OLnN0cmluZ2lmeShvcHRpb25zKSlcbiAgY29uc3QgaWQgPSBkZWVwUGFyc2VkT3B0aW9ucy5jb250ZXh0LmlkXG4gIGNvbnN0IGdldERhdGFQYXRoVGVtcGxhdGUgPSBkZWVwUGFyc2VkT3B0aW9ucy5jb250ZXh0LmdldERhdGFQYXRoIHx8ICcnXG4gIC8vIFRPRE86IGRvIHdlIG5lZWQgdG8gY29udHJvbCB0aGlzIHNldHRpbmcgZnJvbSBCQmogP1xuICBjb25zdCBkZWJvdW5jZUR1cmF0aW9uID0gMjUwXG4gIGNvbnN0IGZpbmFsT3B0aW9ucyA9IHtcbiAgICAuLi5kZWVwUGFyc2VkT3B0aW9ucyxcbiAgICAuLi57XG4gICAgICBnZXREb2N1bWVudDogKCkgPT4gZ3dfZ2V0RG9jdW1lbnQoKSxcbiAgICAgIG9uQ2VsbEVkaXRpbmdTdGFydGVkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uQ2VsbEVkaXRpbmdTdG9wcGVkOiBlID0+IHtcbiAgICAgICAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50KGlkLCBlKVxuICAgICAgfSxcbiAgICAgIG9uQ2VsbFZhbHVlQ2hhbmdlZDogZSA9PiB7XG4gICAgICAgIGd3X29uQ2VsbEVkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvblJvd0VkaXRpbmdTdGFydGVkOiBlID0+IHtcbiAgICAgICAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25Sb3dWYWx1ZUNoYW5nZWQ6IGUgPT4ge1xuICAgICAgICBnd19vblJvd0VkaXRpbmdFdmVudChpZCwgZSlcbiAgICAgIH0sXG4gICAgICBvblJvd0VkaXRpbmdTdG9wcGVkOiBlID0+IHtcbiAgICAgICAgZ3dfb25Sb3dFZGl0aW5nRXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25HcmlkUmVhZHk6IGUgPT4ge1xuICAgICAgICBnd19vblJlYWR5RXZlbnQoaWQsIGUpXG4gICAgICB9LFxuICAgICAgb25GaWx0ZXJDaGFuZ2VkOiBlID0+IHtcbiAgICAgICAgZ3dfb25GaWx0ZXJDaGFuZ2VkKGlkLCBlKVxuICAgICAgfSxcbiAgICAgIGdldFJvd05vZGVJZDogZGF0YSA9PiBnd19nZXRSb3dOb2RlSWQoaWQsIGRhdGEpLFxuICAgICAgZ2V0Q29udGV4dE1lbnVJdGVtczogcGFyYW1zID0+IGd3X2dldENvbnRleHRNZW51KGlkLCBwYXJhbXMpLFxuICAgICAgZ2V0Q2hhcnRUb29sYmFySXRlbXM6IGd3X2dldENoYXJ0VG9vbGJhckl0ZW1zLFxuICAgICAgcG9wdXBQYXJlbnQ6IGd3X2dldERvY3VtZW50KCkuYm9keSxcbiAgICAgIG9uUm93RG91YmxlQ2xpY2tlZDogZ3dfZGVib3VuY2UoZ3dfb25Sb3dEb3VibGVDbGlja2VkLCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uUm93Q2xpY2tlZDogZ3dfZGVib3VuY2UoZ3dfb25Sb3dDbGlja2VkLCBkZWJvdW5jZUR1cmF0aW9uKSxcbiAgICAgIG9uQ2VsbENsaWNrZWQ6IGd3X2RlYm91bmNlKGd3X29uQ2VsbENsaWNrRXZlbnQsIGRlYm91bmNlRHVyYXRpb24pLFxuICAgICAgb25DZWxsRG91YmxlQ2xpY2tlZDogZ3dfZGVib3VuY2UoZ3dfb25DZWxsQ2xpY2tFdmVudCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblNlbGVjdGlvbkNoYW5nZWQ6IGd3X2RlYm91bmNlKGd3X29uU2VsZWN0aW9uQ2hhbmdlZCwgZGVib3VuY2VEdXJhdGlvbiksXG4gICAgICBvblJhbmdlU2VsZWN0aW9uQ2hhbmdlZDogZ3dfZGVib3VuY2UoXG4gICAgICAgIGd3X29uUmFuZ2VTZWxlY3Rpb25DaGFuZ2VkLFxuICAgICAgICBkZWJvdW5jZUR1cmF0aW9uXG4gICAgICApLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBCb29sZWFuRmlsdGVyOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLkJvb2xlYW5GaWx0ZXIsXG4gICAgICAgIEJvb2xlYW5SZW5kZXJlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5Cb29sZWFuUmVuZGVyZXIsXG4gICAgICAgIEJvb2xlYW5FZGl0b3I6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuQm9vbGVhbkVkaXRvcixcbiAgICAgICAgTnVtYmVyRWRpdG9yOiBCYXNpcy5BZ0dyaWRDb21wb25lbnRzLk51bWJlckVkaXRvcixcbiAgICAgICAgVGV4dEVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5UZXh0RWRpdG9yLFxuICAgICAgICBEYXRlVGltZUVkaXRvcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5EYXRlVGltZUVkaXRvcixcbiAgICAgICAgRGF0ZVRpbWVGaWx0ZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuRGF0ZVRpbWVGaWx0ZXIsXG4gICAgICAgIEltYWdlUmVuZGVyZXI6IEJhc2lzLkFnR3JpZENvbXBvbmVudHMuSW1hZ2VSZW5kZXJlcixcbiAgICAgICAgVGVtcGxhdGVSZW5kZXJlcjogQmFzaXMuQWdHcmlkQ29tcG9uZW50cy5UZW1wbGF0ZVJlbmRlcmVyLFxuICAgICAgICBIVE1MVG9vbHRpcDogSFRNTFRvb2x0aXAsXG4gICAgICAgIFN1Z2dlc3Rpb25FZGl0b3I6IFN1Z2dlc3Rpb25FZGl0b3IsXG4gICAgICB9LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICAuLi5kZWVwUGFyc2VkT3B0aW9ucy5jb250ZXh0LFxuICAgICAgICAuLi57XG4gICAgICAgICAgZG9jdW1lbnQ6IGd3X2dldERvY3VtZW50KCksXG4gICAgICAgICAgd2luZG93OiBnd19nZXRXaW5kb3coKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfVxuXG4gIGlmIChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgZmluYWxPcHRpb25zLmNvbnRleHQuaGFzT3duUHJvcGVydHkoJ25hdmlnYXRlVG9OZXh0Q2VsbCcpICYmXG4gICAgZmluYWxPcHRpb25zLmNvbnRleHQubmF2aWdhdGVUb05leHRDZWxsXG4gICkge1xuICAgIGZpbmFsT3B0aW9ucy5uYXZpZ2F0ZVRvTmV4dENlbGwgPSBwYXJhbXMgPT4ge1xuICAgICAgcmV0dXJuIGd3X25hdmlnYXRlVG9OZXh0Um93KGlkLCBwYXJhbXMpXG4gICAgfVxuICB9XG5cbiAgaWYgKGdldERhdGFQYXRoVGVtcGxhdGUgJiYgZmluYWxPcHRpb25zLnRyZWVEYXRhKSB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGhUZW1wbGF0ZUNvbXBsaWVkID0gdGVtcGxhdGUoZ2V0RGF0YVBhdGhUZW1wbGF0ZSlcbiAgICBmaW5hbE9wdGlvbnMuZ2V0RGF0YVBhdGggPSBkYXRhID0+XG4gICAgICBnZXREYXRhUGF0aFRlbXBsYXRlQ29tcGxpZWQoeyBkYXRhOiBkYXRhIH0pXG4gIH1cblxuICAvLyBleHRlbmQgdGhlIGNvbHVtbiBkZWZpbml0aW9uc1xuICBnd19leHRlbmRDb2x1bW5EZWZpbml0aW9ucyhmaW5hbE9wdGlvbnMuY29sdW1uRGVmcylcblxuICByZXR1cm4gZmluYWxPcHRpb25zXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IGd3X3BhcnNlTm9kZUZyb21FdmVudCwgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnZXZlbnRzL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2dldENvbnRleHRNZW51KGdyaWRJZCwgcGFyYW1zKSB7XG4gIGNvbnN0IGJ1aWxkQ29udGV4dE1lbnVBY3Rpb24gPSAocGFyYW1zLCBpZCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KHBhcmFtcylcbiAgICAgIGNvbnN0IGNvbElkID0gcGFyYW1zLmNvbHVtbi5jb2xJZFxuICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXMudmFsdWVcblxuICAgICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgICBnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5jb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2d3LmNvbnRleHRtZW51JyxcbiAgICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHsgcjogbm9kZSwgYzogY29sSWQsIHY6IHZhbHVlLCBpOiBpZCB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgaWRcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJzZU1lbnUgPSBtZW51ID0+IHtcbiAgICBtZW51LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpdGVtWydhY3Rpb24nXSA9IGJ1aWxkQ29udGV4dE1lbnVBY3Rpb24ocGFyYW1zLCBpdGVtLmlkKVxuXG4gICAgICBpZiAoaXRlbVsnY3NzQ2xhc3NlcyddICYmICFBcnJheS5pc0FycmF5KGl0ZW1bJ2Nzc0NsYXNzZXMnXSkpIHtcbiAgICAgICAgaXRlbVsnY3NzQ2xhc3NlcyddID0gaXRlbVsnY3NzQ2xhc3NlcyddLnNwbGl0KCcgJylcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bJ3N1Yk1lbnUnXSkge1xuICAgICAgICBpdGVtWydzdWJNZW51J10gPSBwYXJzZU1lbnUoaXRlbVsnc3ViTWVudSddKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gbWVudVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlTWVudShnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5jb250ZXh0LmNvbnRleHRNZW51KVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQge1xuICBnd19vblJvd0NsaWNrZWQsXG4gIGd3X29uUm93RG91YmxlQ2xpY2tlZCxcbiAgZ3dfb25TZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vbkNlbGxDbGlja0V2ZW50LFxuICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbn0gZnJvbSAnLi9zZWxlY3Rpb25zJ1xuaW1wb3J0IHsgZ3dfb25DZWxsRWRpdGluZ0V2ZW50LCBnd19vblJvd0VkaXRpbmdFdmVudCB9IGZyb20gJy4vZWRpdGluZydcbmltcG9ydCB7IGd3X29uUmVhZHlFdmVudCB9IGZyb20gJy4vcmVhZHknXG5pbXBvcnQgeyBnd19kZWJvdW5jZSB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfb25GaWx0ZXJDaGFuZ2VkIH0gZnJvbSAnLi9maWx0ZXJzJ1xuXG5leHBvcnQge1xuICBnd19vblJvd0NsaWNrZWQsXG4gIGd3X29uUm93RG91YmxlQ2xpY2tlZCxcbiAgZ3dfb25TZWxlY3Rpb25DaGFuZ2VkLFxuICBnd19vblJhbmdlU2VsZWN0aW9uQ2hhbmdlZCxcbiAgZ3dfb25DZWxsQ2xpY2tFdmVudCxcbiAgZ3dfb25DZWxsRWRpdGluZ0V2ZW50LFxuICBnd19vblJvd0VkaXRpbmdFdmVudCxcbiAgZ3dfb25SZWFkeUV2ZW50LFxuICBnd19kZWJvdW5jZSxcbiAgZ3dfb25GaWx0ZXJDaGFuZ2VkLFxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19zZW5kRXZlbnQsIGd3X3BhcnNlTm9kZUZyb21FdmVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZXNjYXBlLCBnd19nZXRHcmlkIH0gZnJvbSAnYXBpL3V0aWxpdGllcydcbmltcG9ydCB7XG4gIEdXX0VWRU5UX1JPV19DTElDSyxcbiAgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDSyxcbiAgR1dfRVZFTlRfUk9XX1NFTEVDVCxcbiAgR1dfRVZFTlRfQ0VMTF9DTElDSyxcbiAgR1dfRVZFTlRfQ0VMTF9ET1VCTEVfQ0xJQ0ssXG4gIEdXX0VWRU5UX1JBTkdFX1NFTEVDVElPTl9DSEFOR0VELFxufSBmcm9tICcuL2NvbnN0YW50cydcblxuY29uc3QgQ0VMTF9DTElDS0lOR19FVkVOVFNfTUFQID0ge1xuICBjZWxsQ2xpY2tlZDogR1dfRVZFTlRfQ0VMTF9DTElDSyxcbiAgY2VsbERvdWJsZUNsaWNrZWQ6IEdXX0VWRU5UX0NFTExfRE9VQkxFX0NMSUNLLFxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGByb3dEb3VibGVDbGlja2VkYCBldmVudFxuICpcbiAqIFRoZSBmdW5jdGlvbiB3aWxsIHNlbmQgYSBiYmogZXZlbnQgd2l0aCBgR1dfTk9ERWAgYXMgcGF5bG9hZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlIFRoZSBldmVudCdzIHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RG91YmxlQ2xpY2tlZFxuICogQGZpcmVzIGd3LnJvd0RvdWJsZUNsaWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vblJvd0RvdWJsZUNsaWNrZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcblxuICBnd19zZW5kRXZlbnQoXG4gICAgY29udGV4dCxcbiAgICB7XG4gICAgICB0eXBlOiAnZ3cucm93RG91YmxlQ2xpY2snLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGs6IGd3X2dldEdyaWQoY29udGV4dC5pZCkua2V5cyxcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgR1dfRVZFTlRfUk9XX0RPVUJMRV9DTElDS1xuICApXG59XG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJvd0NsaWNrZWRgIGV2ZW50XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKlxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0NsaWNrZWRcbiAqIEBmaXJlcyBndy5yb3dDbGlja1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25Sb3dDbGlja2VkKGUpIHtcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG5cbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJvd0NsaWNrJyxcbiAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBrOiBnd19nZXRHcmlkKGNvbnRleHQuaWQpLmtleXMsXG4gICAgICB9KSxcbiAgICB9LFxuICAgIEdXX0VWRU5UX1JPV19DTElDS1xuICApXG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgc2VsZWN0aW9uQ2hhbmdlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQuc2VsZWN0aW9uQ2hhbmdlZFxuICogQGZpcmVzIGd3LnJvd1NlbGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25TZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gIGd3X3NlbmRFdmVudChcbiAgICBjb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5yb3dTZWxlY3QnLFxuICAgICAgZGV0YWlsOiAnJyxcbiAgICB9LFxuICAgIEdXX0VWRU5UX1JPV19TRUxFQ1RcbiAgKVxufVxuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgdGhlIGdyaWQgYHJhbmdlU2VsZWN0aW9uQ2hhbmdlZGAgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZVxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yYW5nZVNlbGVjdGlvbkNoYW5nZWRcbiAqIEBmaXJlcyBndy5yYW5nZVNlbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25SYW5nZVNlbGVjdGlvbkNoYW5nZWQoZSkge1xuICBjb25zdCBjb250ZXh0ID0gZS5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgZ3dfc2VuZEV2ZW50KFxuICAgIGNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogJ2d3LnJhbmdlU2VsZWN0aW9uJyxcbiAgICAgIGRldGFpbDogJycsXG4gICAgfSxcbiAgICBHV19FVkVOVF9SQU5HRV9TRUxFQ1RJT05fQ0hBTkdFRFxuICApXG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgY2VsbENsaWNrRXZlbnRgICYgYGNlbGxEb3VibGVDbGlja2VkYCBldmVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQuY2VsbENsaWNrRXZlbnRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsRG91YmxlQ2xpY2tlZFxuICpcbiAqIEBmaXJlcyBndy5jZWxsQ2xpY2tlZFxuICogQGZpcmVzIGd3LmNlbGxEb3VibGVDbGlja2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19vbkNlbGxDbGlja0V2ZW50KGUpIHtcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XG4gIGNvbnN0IGlkID0gY29udGV4dC5pZFxuICBjb25zdCBwYXJzZWQgPSBnd19wYXJzZU5vZGVGcm9tRXZlbnQoZSlcblxuICBpZiAocGFyc2VkKSB7XG4gICAgY29uc3QgdHlwZSA9IGUudHlwZVxuICAgIGd3X3NlbmRFdmVudChcbiAgICAgIGNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke2UudHlwZX1gLFxuICAgICAgICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICByOiBwYXJzZWQsIC8vIHJvd1xuICAgICAgICAgIHY6IGd3X2VzY2FwZShlLnZhbHVlKSwgLy8gbmV3IHZhbHVlXG4gICAgICAgICAgbzogZ3dfZXNjYXBlKGUudmFsdWUpLCAvLyBvZGwgdmFsdWVcbiAgICAgICAgICBjOiBlLmNvbHVtbi5jb2xJZCwgLy8gY29sdW1uc1xuICAgICAgICAgIGs6IGd3X2dldEdyaWQoaWQpLmtleXMsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIENFTExfQ0xJQ0tJTkdfRVZFTlRTX01BUFt0eXBlXVxuICAgIClcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCwgZ3dfcGFyc2VOb2RlRnJvbUV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19lc2NhcGUsIGd3X2dldEdyaWQgfSBmcm9tICdhcGkvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQsXG4gIEdXX0VWRU5UX0NFTExfRURJVElOR19TVE9QUEVELFxuICBHV19FVkVOVF9DRUxMX1ZBTFVFX0NIQU5HRUQsXG4gIEdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQsXG4gIEdXX0VWRU5UX1JPV19FRElUSU5HX1NUT1BQRUQsXG4gIEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VELFxufSBmcm9tICcuL2NvbnN0YW50cydcblxuY29uc3QgQ0VMTF9FRElUSU5HX0VWRU5UU19NQVAgPSB7XG4gIGNlbGxFZGl0aW5nU3RhcnRlZDogR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUQVJURUQsXG4gIGNlbGxFZGl0aW5nU3RvcHBlZDogR1dfRVZFTlRfQ0VMTF9FRElUSU5HX1NUT1BQRUQsXG4gIGNlbGxWYWx1ZUNoYW5nZWQ6IEdXX0VWRU5UX0NFTExfVkFMVUVfQ0hBTkdFRCxcbn1cblxuY29uc3QgUk9XX0VESVRJTkdfRVZFTlRTX01BUCA9IHtcbiAgcm93RWRpdGluZ1N0YXJ0ZWQ6IEdXX0VWRU5UX1JPV19FRElUSU5HX1NUQVJURUQsXG4gIHJvd0VkaXRpbmdTdG9wcGVkOiBHV19FVkVOVF9ST1dfRURJVElOR19TVE9QUEVELFxuICByb3dWYWx1ZUNoYW5nZWQ6IEdXX0VWRU5UX1JPV19WQUxVRV9DSEFOR0VELFxufVxuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBjZWxsRWRpdGluZ1N0YXJ0ZWRgICwgYGNlbGxFZGl0aW5nU3RvcHBlZGAgYW5kXG4gKiBgY2VsbFZhbHVlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsRWRpdGluZ1N0YXJ0ZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsRWRpdGluZ1N0b3BwZWRcbiAqIEBsaXN0ZW5zIGFnR3JpZC5jZWxsVmFsdWVDaGFuZ2VkXG4gKlxuICogQGZpcmVzIGd3LmNlbGxFZGl0aW5nU3RhcnRlZFxuICogQGZpcmVzIGd3LmNlbGxFZGl0aW5nU3RvcHBlZFxuICogQGZpcmVzIGd3LmNlbGxWYWx1ZUNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uQ2VsbEVkaXRpbmdFdmVudChpZCwgZSkge1xuICBjb25zdCB2YWx1ZSA9IGUuaGFzT3duUHJvcGVydHkoJ25ld1ZhbHVlJylcbiAgICA/IGd3X2VzY2FwZShlLm5ld1ZhbHVlKVxuICAgIDogZ3dfZXNjYXBlKGUudmFsdWUpXG4gIGNvbnN0IG9sZFZhbHVlID0gZS5oYXNPd25Qcm9wZXJ0eSgnb2xkVmFsdWUnKVxuICAgID8gZ3dfZXNjYXBlKGUub2xkVmFsdWUpXG4gICAgOiBlLmhhc093blByb3BlcnR5KCduZXdWYWx1ZScpXG4gICAgPyBnd19lc2NhcGUoZS5uZXdWYWx1ZSlcbiAgICA6IGd3X2VzY2FwZShlLnZhbHVlKVxuXG4gIGlmICh2YWx1ZSA9PSBvbGRWYWx1ZSAmJiBlLnR5cGUgPT09ICdjZWxsVmFsdWVDaGFuZ2VkJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gZ3dfcGFyc2VOb2RlRnJvbUV2ZW50KGUpXG4gIGNvbnN0IHR5cGUgPSBlLnR5cGVcbiAgY29uc3QgY29sSWQgPSBlLmNvbHVtbi5jb2xJZFxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBnd19zZW5kRXZlbnQoXG4gICAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGBndy4ke3R5cGV9YCxcbiAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgcjogeyAuLi5wYXJzZWQsIC4uLnsgY3I6IGUuZGF0YSB9IH0sIC8vIHJvdyAod2UgYWx3YXlzIGluY2x1ZGUgdGhlIGNsaWVudCByb3cgZGF0YSlcbiAgICAgICAgICB2OiB2YWx1ZSwgLy8gbmV3IHZhbHVlXG4gICAgICAgICAgbzogb2xkVmFsdWUsIC8vIG9sZCB2YWx1ZVxuICAgICAgICAgIGM6IGNvbElkLCAvLyBjb2x1bW5cbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgQ0VMTF9FRElUSU5HX0VWRU5UU19NQVBbdHlwZV1cbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBBbiBoYW5kbGVyIGZvciB0aGUgZ3JpZCBgcm93RWRpdGluZ1N0YXJ0ZWRgICwgYHJvd0VkaXRpbmdTdG9wcGVkYCBhbmQgYHJvd1ZhbHVlQ2hhbmdlZGAgZXZlbnRzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBncmlkJ3MgaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBlICBUaGUgZXZlbnQgcGF5bG9hZFxuICpcbiAqIEBsaXN0ZW5zIGFnR3JpZC5yb3dFZGl0aW5nU3RhcnRlZFxuICogQGxpc3RlbnMgYWdHcmlkLnJvd0VkaXRpbmdTdG9wcGVkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93VmFsdWVDaGFuZ2VkXG4gKlxuICogQGZpcmVzIGd3LnJvd0VkaXRpbmdTdGFydGVkXG4gKiBAZmlyZXMgZ3cucm93RWRpdGluZ1N0b3BwZWRcbiAqIEBmaXJlcyBndy5yb3dWYWx1ZUNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUm93RWRpdGluZ0V2ZW50KGlkLCBlKSB7XG4gIGNvbnN0IHBhcnNlZCA9IGd3X3BhcnNlTm9kZUZyb21FdmVudChlKVxuXG4gIGlmIChwYXJzZWQpIHtcbiAgICBjb25zdCB0eXBlID0gZS50eXBlXG4gICAgZ3dfc2VuZEV2ZW50KFxuICAgICAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LFxuICAgICAge1xuICAgICAgICB0eXBlOiBgZ3cuJHtlLnR5cGV9YCxcbiAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7IC4uLnBhcnNlZCwgLi4ueyBjcjogZS5kYXRhIH0gfSksIC8vIHJvdyAod2UgYWx3YXlzIGluY2x1ZGUgdGhlIGNsaWVudCByb3cgZGF0YSlcbiAgICAgIH0sXG4gICAgICBST1dfRURJVElOR19FVkVOVFNfTUFQW3R5cGVdXG4gICAgKVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2RlYm91bmNlIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBnd19vblN0YXRlQ2hhbmdlZCB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyBnd19vbktleWRvd24gfSBmcm9tICcuL2tleWJvYXJkJ1xuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5cbi8qKlxuICogT24gUmVhZHkgRXZlbnRcbiAqXG4gKiBUaGUgbWV0aG9kIHdpbGwgaWdub3JlIGZpcnN0IHJlYWR5IGV2ZW50IGFuZCB0aGVuIHJlZ2lzdGVyIGEgZGVib3VuY2VkIHN0YXRlXG4gKiBjYWxsYmFjayB0byBzZW5kIHN0YXRlIGV2ZW50cyB0byBCQmpcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtPYmplY3R9IGUgIFRoZSBldmVudCBwYXlsb2FkXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uUmVhZHlFdmVudChpZCwgX2UpIHtcbiAgY29uc3QgZ3JpZCA9IGd3X2dldEdyaWQoaWQpXG5cbiAgLy8gcmVnaXN0ZXIgc3RhdGUgZGVib3VuY2UgbW9uaXRvclxuICBjb25zdCBzdGF0ZURlYm91bmNlID0gZ3dfZGVib3VuY2UoY2hhbmdlRXZlbnQgPT4ge1xuICAgIGd3X29uU3RhdGVDaGFuZ2VkKGlkLCBjaGFuZ2VFdmVudClcbiAgfSwgNTAwKVxuXG4gIDtbXG4gICAgJ3NvcnRDaGFuZ2VkJyxcbiAgICAnZmlsdGVyQ2hhbmdlZCcsXG4gICAgJ2NvbHVtblZpc2libGUnLFxuICAgICdjb2x1bW5QaW5uZWQnLFxuICAgICdjb2x1bW5SZXNpemVkJyxcbiAgICAnY29sdW1uTW92ZWQnLFxuICAgICduZXdDb2x1bW5zTG9hZGVkJyxcbiAgICAnZ3JpZENvbHVtbnNDaGFuZ2VkJyxcbiAgICAnZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQnLFxuICAgICd2aXJ0dWFsQ29sdW1uc0NoYW5nZWQnLFxuICAgICdjb2x1bW5FdmVyeXRoaW5nQ2hhbmdlZCcsXG4gICAgLy8nZ3JpZFNpemVDaGFuZ2VkJyxcbiAgICAnZXhwYW5kT3JDb2xsYXBzZUFsbCcsXG4gICAgLy8ndG9vbFBhbmVsVmlzaWJsZUNoYW5nZWQnXG4gIF0uZm9yRWFjaChldmVudCA9PiB7XG4gICAgZ3JpZC5vcHRpb25zLmFwaS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzdGF0ZURlYm91bmNlKVxuICB9KVxuXG4gIC8vIGNvbGxlY3Qga2V5IGRvd25zIGluZm9ybWF0aW9uIHRvIGJlIHJlcG9ydGVkIHdpdGggb3RoZXIgZXZlbnRzXG4gIGdyaWQuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duRXZlbnQgPT4ge1xuICAgIGdyaWQua2V5cyA9IHtcbiAgICAgIGM6IGtleWRvd25FdmVudC5rZXksXG4gICAgICBrYzoga2V5ZG93bkV2ZW50LndoaWNoIHx8IE51bWJlcihrZXlkb3duRXZlbnQua2V5Q29kZSksXG4gICAgICBhazoga2V5ZG93bkV2ZW50LmFsdEtleSxcbiAgICAgIHNrOiBrZXlkb3duRXZlbnQuc2hpZnRLZXksXG4gICAgICBjazoga2V5ZG93bkV2ZW50LmN0cmxLZXksXG4gICAgfVxuICB9KVxuXG4gIC8vIGNsZWFyIGNvbGxlY3Qga2V5ZG93biBpbmZvcm1hdGlvblxuICBncmlkLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFxuICAgICdrZXl1cCcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZ3dfZGVib3VuY2UoX2UgPT4ge1xuICAgICAgZ3JpZC5rZXlzID0gbnVsbFxuICAgIH0sIDI1MClcbiAgKVxuXG4gIC8vIHJlZ2lzdGVyIGtleWJvYXJkIGRlYm91bmNlIG1vbml0b3JcblxuICBncmlkLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFxuICAgICdrZXlkb3duJyxcbiAgICBnd19kZWJvdW5jZShrZXlkb3duRXZlbnQgPT4ge1xuICAgICAgZ3dfb25LZXlkb3duKGlkLCBrZXlkb3duRXZlbnQpXG4gICAgfSwgNTAwKVxuICApXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X3NlbmRFdmVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5pbXBvcnQgeyBHV19FVkVOVF9HUklEX1NUQVRFX0NIQU5HRSB9IGZyb20gJy4vY29uc3RhbnRzJ1xuXG4vKipcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBzdGF0ZUNoYW5nZWRgIGV2ZW50c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gZSAgVGhlIGV2ZW50IHBheWxvYWRcbiAqXG4gKiBAbGlzdGVucyBhZ0dyaWQuc3RhdGVDaGFuZ2VkXG4gKiBAbGlzdGVucyBhZ0dyaWQucm93RWRpdGluZ1N0b3BwZWRcbiAqXG4gKiBAZmlyZXMgZ3cuc3RhdGVDaGFuZ2VkXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uU3RhdGVDaGFuZ2VkKGlkLCBfZSkge1xuICBnd19zZW5kRXZlbnQoXG4gICAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5jb250ZXh0LFxuICAgIHtcbiAgICAgIHR5cGU6ICdndy5zdGF0ZUNoYW5nZWQnLFxuICAgICAgZGV0YWlsOiBbXSxcbiAgICB9LFxuICAgIEdXX0VWRU5UX0dSSURfU1RBVEVfQ0hBTkdFXG4gIClcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0IHsgZ3dfc2VuZEV2ZW50IH0gZnJvbSAnLi91dGlsaXRpZXMnXG5pbXBvcnQgeyBHV19FVkVOVF9LRVlQUkVTUyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZ3dfZ2V0R3JpZCB9IGZyb20gJ2FwaS91dGlsaXRpZXMnXG5cbi8qKlxuICogQ29tcG9zZSBhIG1vZGVsIG9mIHRoZSBrZXlkb3duIGV2ZW50IGFuZCBzZW5kIGl0IHRvIEJCalxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCAgdGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtFdmVudH0ga2V5ZG93bkV2ZW50IGtleWRvd24gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X29uS2V5ZG93bihpZCwga2V5ZG93bkV2ZW50KSB7XG4gIGd3X3NlbmRFdmVudChcbiAgICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmNvbnRleHQsXG4gICAge1xuICAgICAgdHlwZTogYGd3LmtleXByZXNzYCxcbiAgICAgIGRldGFpbDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjOiBrZXlkb3duRXZlbnQua2V5LFxuICAgICAgICBrYzoga2V5ZG93bkV2ZW50LndoaWNoIHx8IE51bWJlcihrZXlkb3duRXZlbnQua2V5Q29kZSksXG4gICAgICAgIGFrOiBrZXlkb3duRXZlbnQuYWx0S2V5LFxuICAgICAgICBzazoga2V5ZG93bkV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBjazoga2V5ZG93bkV2ZW50LmN0cmxLZXksXG4gICAgICB9KSxcbiAgICB9LFxuICAgIEdXX0VWRU5UX0tFWVBSRVNTXG4gIClcbn1cbiIsIi8qXHJcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxyXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XHJcbiAqXHJcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXHJcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IGd3X3NlbmRFdmVudCB9IGZyb20gJy4vdXRpbGl0aWVzJ1xyXG5pbXBvcnQgeyBHV19FVkVOVF9GSUxURVJfQ0hBTkdFRCB9IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5cclxuLyoqXHJcbiAqIEFuIGhhbmRsZXIgZm9yIHRoZSBncmlkIGBmaWx0ZXJDaGFuZ2VkYCBldmVudFxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gdGhlIGdyaWQncyBpZFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZSBUaGUgZXZlbnQncyBwYXlsb2FkXHJcbiAqXHJcbiAqIEBsaXN0ZW5zIGFnR3JpZC5maWx0ZXJDaGFuZ2VkXHJcbiAqIEBmaXJlcyBndy5maWx0ZXJDaGFuZ2VkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ3dfb25GaWx0ZXJDaGFuZ2VkKGlkLCBlKSB7XHJcbiAgY29uc3QgY29udGV4dCA9IGUuYXBpLmdyaWRPcHRpb25zV3JhcHBlci5ncmlkT3B0aW9ucy5jb250ZXh0XHJcblxyXG4gIGd3X3NlbmRFdmVudChcclxuICAgIGNvbnRleHQsXHJcbiAgICB7XHJcbiAgICAgIHR5cGU6ICdndy5maWx0ZXJDaGFuZ2VkJyxcclxuICAgICAgZGV0YWlsOiB7fSxcclxuICAgIH0sXHJcbiAgICBHV19FVkVOVF9GSUxURVJfQ0hBTkdFRFxyXG4gIClcclxufVxyXG4iLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kV2l0aFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5hc3NpZ25XaXRoXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gKiB9XG4gKlxuICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBhc3NpZ25JbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluV2l0aDtcbiIsImltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5T2JqZWN0O1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25WYWx1ZTtcbiIsImltcG9ydCBiYXNlSXNOYXRpdmUgZnJvbSAnLi9fYmFzZUlzTmF0aXZlLmpzJztcbmltcG9ydCBnZXRWYWx1ZSBmcm9tICcuL19nZXRWYWx1ZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldE5hdGl2ZTtcbiIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNNYXNrZWQgZnJvbSAnLi9faXNNYXNrZWQuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvU291cmNlIGZyb20gJy4vX3RvU291cmNlLmpzJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTmF0aXZlO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1N0cmluZztcbiIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRWYWx1ZTtcbiIsImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBc3NpZ25lcjtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJSZXN0O1xuIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbnN0YW50O1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcbiIsImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzSW4gZnJvbSAnLi9fYmFzZUtleXNJbi5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBrZXlzSW47XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVGltZXM7XG4iLCJpbXBvcnQgYmFzZUlzQXJndW1lbnRzIGZyb20gJy4vX2Jhc2VJc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJndW1lbnRzO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzQXJndW1lbnRzO1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5pbXBvcnQgc3R1YkZhbHNlIGZyb20gJy4vc3R1YkZhbHNlLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCBpc0J1ZmZlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YkZhbHNlO1xuIiwiaW1wb3J0IGJhc2VJc1R5cGVkQXJyYXkgZnJvbSAnLi9fYmFzZUlzVHlwZWRBcnJheS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNUeXBlZEFycmF5O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNMZW5ndGggZnJvbSAnLi9pc0xlbmd0aC5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVW5hcnk7XG4iLCJpbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxuZXhwb3J0IGRlZmF1bHQgbm9kZVV0aWw7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5hdGl2ZUtleXNJbjtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcblxuLyoqXG4gKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICogb2JqZWN0LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXR0ZW1wdC5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICogdmFyIGVsZW1lbnRzID0gXy5hdHRlbXB0KGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gKiAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAqIH0sICc+Xz4nKTtcbiAqXG4gKiBpZiAoXy5pc0Vycm9yKGVsZW1lbnRzKSkge1xuICogICBlbGVtZW50cyA9IFtdO1xuICogfVxuICovXG52YXIgYXR0ZW1wdCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdW5kZWZpbmVkLCBhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBpc0Vycm9yKGUpID8gZSA6IG5ldyBFcnJvcihlKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGF0dGVtcHQ7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUGxhaW5PYmplY3Q7XG4iLCJpbXBvcnQgb3ZlckFyZyBmcm9tICcuL19vdmVyQXJnLmpzJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbmV4cG9ydCBkZWZhdWx0IGdldFByb3RvdHlwZTtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICogb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVmFsdWVzO1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uYXNzaWduSW5gIHVzZSB0byBhc3NpZ24gcHJvcGVydGllc1xuICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgcmV0dXJuIHNyY1ZhbHVlO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbjtcbiIsIi8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xudmFyIHN0cmluZ0VzY2FwZXMgPSB7XG4gICdcXFxcJzogJ1xcXFwnLFxuICBcIidcIjogXCInXCIsXG4gICdcXG4nOiAnbicsXG4gICdcXHInOiAncicsXG4gICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgJ1xcdTIwMjknOiAndTIwMjknXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXNjYXBlU3RyaW5nQ2hhcjtcbiIsImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iLCJpbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXMgZnJvbSAnLi9fbmF0aXZlS2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUtleXM7XG4iLCJpbXBvcnQgb3ZlckFyZyBmcm9tICcuL19vdmVyQXJnLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzO1xuIiwiaW1wb3J0IGVzY2FwZSBmcm9tICcuL2VzY2FwZS5qcyc7XG5pbXBvcnQgcmVFc2NhcGUgZnJvbSAnLi9fcmVFc2NhcGUuanMnO1xuaW1wb3J0IHJlRXZhbHVhdGUgZnJvbSAnLi9fcmVFdmFsdWF0ZS5qcyc7XG5pbXBvcnQgcmVJbnRlcnBvbGF0ZSBmcm9tICcuL19yZUludGVycG9sYXRlLmpzJztcblxuLyoqXG4gKiBCeSBkZWZhdWx0LCB0aGUgdGVtcGxhdGUgZGVsaW1pdGVycyB1c2VkIGJ5IGxvZGFzaCBhcmUgbGlrZSB0aG9zZSBpblxuICogZW1iZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFuZ2UgdGhlXG4gKiBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbnZhciB0ZW1wbGF0ZVNldHRpbmdzID0ge1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2VzY2FwZSc6IHJlRXNjYXBlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBjb2RlIHRvIGJlIGV2YWx1YXRlZC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byBkZXRlY3QgYGRhdGFgIHByb3BlcnR5IHZhbHVlcyB0byBpbmplY3QuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICogQHR5cGUge1JlZ0V4cH1cbiAgICovXG4gICdpbnRlcnBvbGF0ZSc6IHJlSW50ZXJwb2xhdGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkYXRhIG9iamVjdCBpbiB0aGUgdGVtcGxhdGUgdGV4dC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgJ3ZhcmlhYmxlJzogJycsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gaW1wb3J0IHZhcmlhYmxlcyBpbnRvIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgJ2ltcG9ydHMnOiB7XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgJ18nOiB7ICdlc2NhcGUnOiBlc2NhcGUgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZVNldHRpbmdzO1xuIiwiaW1wb3J0IGVzY2FwZUh0bWxDaGFyIGZyb20gJy4vX2VzY2FwZUh0bWxDaGFyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgIHJlSGFzVW5lc2NhcGVkSHRtbCA9IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgY2hhcmFjdGVycyBcIiZcIiwgXCI8XCIsIFwiPlwiLCAnXCInLCBhbmQgXCInXCIgaW4gYHN0cmluZ2AgdG8gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gVG8gZXNjYXBlIGFkZGl0aW9uYWxcbiAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICpcbiAqIFRob3VnaCB0aGUgXCI+XCIgY2hhcmFjdGVyIGlzIGVzY2FwZWQgZm9yIHN5bW1ldHJ5LCBjaGFyYWN0ZXJzIGxpa2VcbiAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gKiBbTWF0aGlhcyBCeW5lbnMncyBhcnRpY2xlXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHMpXG4gKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBXaGVuIHdvcmtpbmcgd2l0aCBIVE1MIHlvdSBzaG91bGQgYWx3YXlzXG4gKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICogWFNTIHZlY3RvcnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcilcbiAgICA6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXNjYXBlO1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbnZhciBodG1sRXNjYXBlcyA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7J1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG52YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZUh0bWxDaGFyO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlPZjtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlVG9TdHJpbmc7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3ltYm9sO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nO1xuXG5leHBvcnQgZGVmYXVsdCByZUVzY2FwZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVFdmFsdWF0ZSA9IC88JShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlRXZhbHVhdGU7XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi8qKlxuICogQW4gaW1wcm92ZWQgdG9vbHRpcCBjb21wb25lbnQgd2hpY2ggc3VwcG9ydHMgSFRNTCBhbmQgYmVoYXZlcyB0aGUgc2FtZSBpbiBib3RoIEdVSSBhbmQgQlVJXG4gKlxuICogQGF1dGhvciBIeXlhbiBBYm8gRmFraGVyXG4gKi9cbmNsYXNzIEhUTUxUb29sdGlwIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgdGhlIHRvb2x0aXAgY29tcG9uZW50IHBhcmFtc1xuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBlR3VpID0gKHRoaXMuZUd1aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxuICAgIGNvbnN0IHRvb2x0aXBWYWx1ZUdldHRlciA9IHBhcmFtcy5jb2xEZWYudG9vbHRpcFZhbHVlR2V0dGVyXG4gICAgY29uc3QgaXNIZWFkZXIgPSBwYXJhbXMucm93SW5kZXggPT09IHVuZGVmaW5lZFxuICAgIGNvbnN0IGlzR3JvdXBlZEhlYWRlciA9IGlzSGVhZGVyICYmICEhcGFyYW1zLmNvbERlZi5jaGlsZHJlblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBjb25zdCBkYXRhID1cbiAgICAgICFpc0hlYWRlciAmJiAhaXNHcm91cGVkSGVhZGVyXG4gICAgICAgID8gcGFyYW1zLmFwaS5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHBhcmFtcy5yb3dJbmRleCkuZGF0YVxuICAgICAgICA6IG51bGxcbiAgICBjb25zdCB0aGVtZSA9IHBhcmFtcy5hcGkuZ3JpZENvcmUuZUdyaWREaXYuY2xhc3NOYW1lLmVuZHNXaXRoKCdkYXJrJylcbiAgICAgID8gJ2d3LXRvb2x0aXAtZGFyaydcbiAgICAgIDogJ2d3LXRvb2x0aXAtbGlnaHQnXG4gICAgY29uc3QgdG9vbHRpcEZpZWxkID0gcGFyYW1zLmNvbERlZi50b29sdGlwRmllbGRcbiAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICBkYXRhICYmIGRhdGEuaGFzT3duUHJvcGVydHkocGFyYW1zLmNvbERlZi50b29sdGlwRmllbGQpXG4gICAgICAgID8gZGF0YVtwYXJhbXMuY29sRGVmLnRvb2x0aXBGaWVsZF1cbiAgICAgICAgOiBudWxsXG4gICAgICA6IG51bGxcblxuICAgIGNvbnN0IHBhc3NlZFBhcmFtcyA9IHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIC4uLnsgZGF0YSB9LFxuICAgICAgLi4ueyBpc0hlYWRlciwgaXNHcm91cGVkSGVhZGVyLCB0b29sdGlwRmllbGQgfSxcbiAgICB9XG5cbiAgICBlR3VpLmNsYXNzTGlzdC5hZGQoJ2d3LXRvb2x0aXAnLCB0aGVtZSlcbiAgICBlR3VpLmlubmVySFRNTCA9XG4gICAgICBpc0hlYWRlciB8fCBpc0dyb3VwZWRIZWFkZXJcbiAgICAgICAgPyBwYXJhbXMudmFsdWVcbiAgICAgICAgOiB0b29sdGlwRmllbGRcbiAgICAgICAgPyB0b29sdGlwRmllbGRcbiAgICAgICAgOiB0b29sdGlwVmFsdWVHZXR0ZXJcbiAgICAgICAgPyB0b29sdGlwVmFsdWVHZXR0ZXIocGFzc2VkUGFyYW1zKVxuICAgICAgICA6IHBhcmFtcy52YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZ3VpIEluc3RhbmNlXG4gICAqXG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0R3VpKCkge1xuICAgIHJldHVybiB0aGlzLmVHdWlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIVE1MVG9vbHRpcFxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgYXV0b2NvbXBsZXRlIGZyb20gJ2F1dG9jb21wbGV0ZXInXG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnbG9kYXNoLWVzL3RlbXBsYXRlJ1xuaW1wb3J0IHsgZ3dfcGFyc2VOb2RlIH0gZnJvbSAnZXZlbnRzL3V0aWxpdGllcydcbi8qKlxuICogQW4gYXV0b2NvbXBsZXRlIGNlbGwgZWRpdG9yIHdyaXR0ZW4gc3BlY2lmaWNhbGx5IHRvIEJCakdyaWRFeFdpZGdldFxuICpcbiAqIEBhdXRob3IgSHl5YW4gQWJvIEZha2hlclxuICovXG5jbGFzcyBTdWdnZXN0aW9uRWRpdG9yIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gICAqXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgaW5pdChwYXJhbXMpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gcGFyYW1zLnRleHRQYXR0ZXJuIHx8IG51bGxcbiAgICBjb25zdCByZXF1aXJlZCA9IHBhcmFtcy50ZXh0UmVxdWlyZWQgfHwgZmFsc2VcbiAgICBjb25zdCB0aXRsZSA9IHBhcmFtcy50ZXh0VGl0bGUgfHwgbnVsbFxuICAgIGNvbnN0IGRlYm91bmNlV2FpdE1zID0gcGFyYW1zLmRlYm91bmNlV2FpdE1zIHx8IDI1MFxuXG4gICAgbGV0IHN0YXJ0VmFsdWVcblxuICAgIHRoaXMuX2ZvY3VzQWZ0ZXJBdHRhY2hlZCA9IHBhcmFtcy5jZWxsU3RhcnRlZEVkaXRcbiAgICBpZiAodGhpcy5fZm9jdXNBZnRlckF0dGFjaGVkKSB7XG4gICAgICBjb25zdCBrZXlQcmVzc0JhY2tzcGFjZU9yRGVsZXRlID1cbiAgICAgICAgcGFyYW1zLmtleVByZXNzID09IDMyIHx8IHBhcmFtcy5rZXlQcmVzcyA9PSA0NiAvLyBzcGFjZSAvLyBkZWxldGVcblxuICAgICAgaWYgKGtleVByZXNzQmFja3NwYWNlT3JEZWxldGUpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9ICcnXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5jaGFyUHJlc3MpIHtcbiAgICAgICAgc3RhcnRWYWx1ZSA9IHBhcmFtcy5jaGFyUHJlc3NcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VmFsdWUgPSBwYXJhbXMudmFsdWVcbiAgICAgICAgaWYgKHBhcmFtcy5rZXlQcmVzcyAhPSAxMTMpIHtcbiAgICAgICAgICAvL0YyXG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWxsT25Gb2N1cyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFZhbHVlID0gcGFyYW1zLnZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG5cbiAgICB0aGlzLl9ndWkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMuX2d1aS5jbGFzc05hbWUgPSAnYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyIGFnLWNlbGwtZWRpdC13cmFwcGVyJ1xuICAgIHRoaXMuX2d1aS50YWJJbmRleCA9ICcwJ1xuICAgIHRoaXMuX2d1aS5pbm5lckhUTUwgPSAvKiBodG1sICovIGBcbiAgICA8ZGl2IGNsYXNzPVwiYWctY2VsbC1lZGl0b3IgYWctbGFiZWxlZCBhZy1sYWJlbC1hbGlnbi1sZWZ0IGFnLXRleHQtZmllbGQgYWctaW5wdXQtZmllbGRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZy13cmFwcGVyIGFnLWlucHV0LXdyYXBwZXIgYWctdGV4dC1maWVsZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgXG5cbiAgICAvLyBpbnB1dFxuICAgIHRoaXMuX2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIHRoaXMuX2lucHV0LmNsYXNzTmFtZSA9XG4gICAgICAnYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCBhZy1jZWxsLWVkaXQtaW5wdXQgYWctaW5wdXQtZmllbGQtaW5wdXQgYWctdGV4dC1maWVsZC1pbnB1dCdcbiAgICB0aGlzLl9pbnB1dC50eXBlID0gJ3RleHQnXG4gICAgdGhpcy5faW5wdXQudmFsdWUgPSBzdGFydFZhbHVlXG4gICAgdGhpcy5faW5wdXQudGFiSW5kZXggPSAwXG5cbiAgICB0aGlzLl9ndWkucXVlcnlTZWxlY3RvcignLmFnLWlucHV0LXdyYXBwZXInKS5hcHBlbmRDaGlsZCh0aGlzLl9pbnB1dClcblxuICAgIGlmIChwYXR0ZXJuICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9pbnB1dC5zZXRBdHRyaWJ1dGUoJ3BhdHRlcm4nLCBwYXR0ZXJuKVxuICAgIH1cblxuICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5faW5wdXQuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICdyZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgaWYgKHRpdGxlICE9PSBudWxsICYmIHRpdGxlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRpdGxlID0gdGl0bGVcbiAgICB9XG5cbiAgICB0aGlzLl9vbkNoYW5nZSA9IHRoaXMuX29uQ2hhbmdlLmJpbmQodGhpcylcblxuICAgIHRoaXMuX2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25DaGFuZ2UpXG4gICAgdGhpcy5faW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG5cbiAgICAvLyBzZXR1cCB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudFxuICAgIHRoaXMuX3JlbmRlckl0ZW1UZW1wbGF0ZSA9IHRoaXMuX3BhcmFtcy5pdGVtVGVtcGxhdGVcbiAgICAgID8gdGVtcGxhdGUodGhpcy5fcGFyYW1zLml0ZW1UZW1wbGF0ZSlcbiAgICAgIDogJydcbiAgICB0aGlzLl9yZW5kZXJHcm91cFRlbXBsYXRlID0gdGhpcy5fcGFyYW1zLmdyb3VwVGVtcGxhdGVcbiAgICAgID8gdGVtcGxhdGUodGhpcy5fcGFyYW1zLmdyb3VwVGVtcGxhdGUpXG4gICAgICA6ICcnXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlID0gYXV0b2NvbXBsZXRlKHtcbiAgICAgIGlucHV0OiB0aGlzLl9pbnB1dCxcbiAgICAgIGRlYm91bmNlV2FpdE1zOiBkZWJvdW5jZVdhaXRNcyxcbiAgICAgIC8vIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCAsIHRoZSBsaXN0IHdvbnQgYmUgY2xvc2VkIGluIEdVSVxuICAgICAgcHJldmVudFN1Ym1pdDogdHJ1ZSxcbiAgICAgIGZldGNoOiB0aGlzLl9vbkF1dG9jb21wbGV0ZUZldGNoLmJpbmQodGhpcyksXG4gICAgICBvblNlbGVjdDogdGhpcy5fb25BdXRvY29tcGxldGVTZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgIHJlbmRlckdyb3VwOiB0aGlzLl9vbkF1dG9jb21wbGV0ZVJlbmRlckdyb3VwLmJpbmQodGhpcyksXG4gICAgICByZW5kZXI6IHRoaXMuX29uQXV0b2NvbXBsZXRlUmVuZGVySXRlbS5iaW5kKHRoaXMpLFxuICAgICAgY3VzdG9taXplOiB0aGlzLl9vbkF1dG9jb21wbGV0ZUN1c3RvbWl6ZS5iaW5kKHRoaXMpLFxuICAgICAgZW1wdHlNc2c6IHRoaXMuX3BhcmFtcy5lbXB0eU1lc3NhZ2UgfHwgbnVsbCxcbiAgICAgIG1pbkxlbmd0aDogdGhpcy5fcGFyYW1zLm1pbkxlbmd0aCB8fCAyLFxuICAgICAgc2hvd09uRm9jdXM6IHRoaXMuX3BhcmFtcy5zaG93T25Gb2N1cyB8fCBmYWxzZSxcbiAgICAgIGNsYXNzTmFtZTogcGFyYW1zLmFwaS5ncmlkQ29yZS5lR3JpZERpdi5jbGFzc05hbWUuZW5kc1dpdGgoJ2RhcmsnKVxuICAgICAgICA/ICdkYXJrJ1xuICAgICAgICA6ICdsaWdodCcsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIERPTSBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQsIHRoaXMgaXMgd2hhdCB0aGUgZ3JpZCBwdXRzIGludG8gdGhlIGNlbGxcbiAgICpcbiAgICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRHdWkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1aVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2UgYWZ0ZXIgR1VJIGlzIGF0dGFjaGVkIHRvIERPTS5cbiAgICpcbiAgICogTWFrZSBzdXJlIGNvbnRhaW5lciBpcyBhbHdheXMgZm9jdXNlZCB0byBsaXN0ZW4gdG8ga2V5IGNoYW5nZXNcbiAgICovXG4gIGFmdGVyR3VpQXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuX2hpZ2hsaWdodEFsbE9uRm9jdXMpIHtcbiAgICAgIHRoaXMuX2lucHV0LnNlbGVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9mb2N1c0FmdGVyQXR0YWNoZWQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0luKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFRoZSBjb21wb25lbnQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0LnZhbHVlXG4gIH1cblxuICAvKipcbiAgICogSWYgZG9pbmcgZnVsbCByb3cgZWRpdCwgdGhlbiBnZXRzIGNhbGxlZCB3aGVuIHRhYmJpbmcgaW50byB0aGUgY2VsbC5cbiAgICovXG4gIGZvY3VzSW4oKSB7XG4gICAgdGhpcy5faW5wdXQuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIG9uY2Ugd2hlbiBlZGl0aW5nIGlzIGZpbmlzaGVkIChlZyBpZiBlbnRlciBpcyBwcmVzc2VkKS5cbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgd2hlbiB0aGUgcmVzdWx0IG9mIHRoZSBlZGl0IHdpbGwgYmUgaWdub3JlZC4gZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc0NhbmNlbEFmdGVyRW5kKCkge1xuICAgIGNvbnN0IGFsbG93Q3VzdG9tVmFsdWVzID0gdGhpcy5fcGFyYW1zLmFsbG93Q3VzdG9tVmFsdWVzIHx8IGZhbHNlXG4gICAgbGV0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KHRoaXMuX2lucHV0KVxuXG4gICAgaWYgKGlzVmFsaWQgJiYgYWxsb3dDdXN0b21WYWx1ZXMgPT09IGZhbHNlICYmIHRoaXMuX2xhc3RGZXRjaGVkRGF0YSkge1xuICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2xhc3RGZXRjaGVkRGF0YS5maWx0ZXIoXG4gICAgICAgIHggPT4geC52YWx1ZSA9PT0gdGhpcy5faW5wdXQudmFsdWVcbiAgICAgIClcbiAgICAgIGlzVmFsaWQgPSBmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMVxuICAgIH1cblxuICAgIHJldHVybiAhaXNWYWxpZFxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG4gICAqXG4gICAqIENsZWFyIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycyBhbmQgZGVzdHJveSB0aGUgYXV0b2NvbXBsZXRlXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25DaGFuZ2UpXG4gICAgdGhpcy5faW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlLmRlc3Ryb3koKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHRvIHByZXBhcmUgc3VnZ2VzdGlvbnMgYW5kIHRoZW4gcGFzcyB0aGVtIHRvIGF1dG9jb21wbGV0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgc3VnZ2VzdGlvbnMgYXJlIHByZXBhcmVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBmYWxzZSB3aGVuIHRoZSByZXF1ZXN0IGlzIGlnbm9yZWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIF9vbkF1dG9jb21wbGV0ZUZldGNoKHRleHQsIHVwZGF0ZSkge1xuICAgIGNvbnN0IHN1cHByZXNzU3VnZ2VzdGlvbk9uSW52YWxpZElucHV0ID1cbiAgICAgIHRoaXMuX3BhcmFtcy5zdXBwcmVzc1N1Z2dlc3Rpb25PbkludmFsaWRJbnB1dCB8fCBmYWxzZVxuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLl92YWxpZGF0ZUlucHV0KHRoaXMuX2lucHV0KVxuXG4gICAgaWYgKHN1cHByZXNzU3VnZ2VzdGlvbk9uSW52YWxpZElucHV0ICYmICFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuX3BhcmFtcy5ldmVudElkXG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGlkLCBldmVudCA9PiB7XG4gICAgICB0aGlzLl9sYXN0RmV0Y2hlZERhdGEgPSBldmVudC5kZXRhaWxcbiAgICAgIHVwZGF0ZShldmVudC5kZXRhaWwpXG4gICAgfSlcblxuICAgIHdpbmRvdy5iYXNpc0Rpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcy5fcGFyYW1zLmVHcmlkQ2VsbCwge1xuICAgICAgdHlwZTogJ2d3LnN1Z2dlc3Rpb24nLFxuICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkLFxuICAgICAgICB0ZXh0LFxuICAgICAgICBjb2x1bW46IHRoaXMuX3BhcmFtcy5jb2xEZWYuZmllbGQsXG4gICAgICAgIHJvdzogZ3dfcGFyc2VOb2RlKFxuICAgICAgICAgIHRoaXMuX3BhcmFtcy5ub2RlLFxuICAgICAgICAgIHRoaXMuX3BhcmFtcy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLmdyaWRPcHRpb25zLmNvbnRleHRcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW4gdXNlciBjaG9vc2UgYW4gaXRlbSBpbiBhdXRvY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIFRoZSBzZWxlY3RlZCBpdGVtXG4gICAqL1xuICBfb25BdXRvY29tcGxldGVTZWxlY3QoaXRlbSkge1xuICAgIHRoaXMuX2lucHV0LnZhbHVlID0gaXRlbS52YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHRoZSByZW5kZXJpbmcgZnVuY3Rpb24gb2YgYXV0b2NvbXBsZXRlIGl0ZW1zLlxuICAgKlxuICAgKiBJdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBzdWdnZXN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIHN1Z2dlc3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjdXJyZW50VmFsdWUgVGhlIGN1cnJlbnQgaW5wdXQgZmllbGQgdmFsdWVcbiAgICpcbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgX29uQXV0b2NvbXBsZXRlUmVuZGVySXRlbShpdGVtLCBjdXJyZW50VmFsdWUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGRpdi5jbGFzc05hbWUgPSAnc3VnZ2VzdGlvbi1pdGVtJ1xuXG4gICAgaWYgKHRoaXMuX3JlbmRlckl0ZW1UZW1wbGF0ZSkge1xuICAgICAgZGl2LmlubmVySFRNTCA9IHRoaXMuX3JlbmRlckl0ZW1UZW1wbGF0ZSh7XG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBpdGVtLmxhYmVsXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHRoZSByZW5kZXJpbmcgZnVuY3Rpb24gb2YgYXV0b2NvbXBsZXRlIGdyb3Vwcy5cbiAgICpcbiAgICogSXQgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggZ3JvdXBcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGdyb3VwTmFtZSBUaGUgZ3JvdXAgbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IGlucHV0IGZpZWxkIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIF9vbkF1dG9jb21wbGV0ZVJlbmRlckdyb3VwKGdyb3VwTmFtZSwgY3VycmVudFZhbHVlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBkaXYuY2xhc3NOYW1lID0gJ3N1Z2dlc3Rpb24tZ3JvdXAnXG5cbiAgICBpZiAodGhpcy5fcmVuZGVyR3JvdXBUZW1wbGF0ZSkge1xuICAgICAgZGl2LmlubmVySFRNTCA9IHRoaXMuX3JlbmRlckdyb3VwVGVtcGxhdGUoeyBncm91cE5hbWUsIGN1cnJlbnRWYWx1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gZ3JvdXBOYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgb24gdGhlIGF1dG9jb21wbGV0ZSBjb250YWluZXIgcmVuZGVyIGFuZCBjaGFuZ2UgdGhlIHdpZHRoIGFuZCB0aGVcbiAgICogaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpbnB1dFxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpbnB1dFJlY3RcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtYXhIZWlnaHRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBfb25BdXRvY29tcGxldGVDdXN0b21pemUoaW5wdXQsIGlucHV0UmVjdCwgY29udGFpbmVyLCBtYXhIZWlnaHQpIHtcbiAgICBpZiAodGhpcy5fcGFyYW1zLndpZHRoKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBgJHt0aGlzLl9wYXJhbXMud2lkdGh9cHhgXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BhcmFtcy5oZWlnaHQpIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLl9wYXJhbXMuaGVpZ2h0fXB4YFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IHRvIHRoZSBpbnB1dCBjaGFuZ2VzIGFuZCB2YWxpZGF0ZSBpdFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBUaGUgZXZlbnQgb2JqZWN0XG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdmFsaWQgLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIF9vbkNoYW5nZShldmVudCkge1xuICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlucHV0KGV2ZW50LnRhcmdldClcbiAgfVxuXG4gIC8qKlxuICAgKiBEbyB2YWxpZGF0ZSB0aGUgZ2l2ZW4gaW5wdXQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJbnB1dEVsZW1lbnR9IGlucHV0IGlucHV0IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHZhbGlkICwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBfdmFsaWRhdGVJbnB1dChpbnB1dCkge1xuICAgIGNvbnN0IGlzVmFsaWQgPSBpbnB1dC5jaGVja1ZhbGlkaXR5KClcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYXV0b2NvbXBsZXRlLWlucHV0LWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2F1dG9jb21wbGV0ZS1pbnB1dC1zdWNjZXNzJylcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnYXV0b2NvbXBsZXRlLWlucHV0LWVycm9yJylcbiAgICAgIGlucHV0LmNsYXNzTGlzdC5hZGQoJ2F1dG9jb21wbGV0ZS1pbnB1dC1zdWNjZXNzJylcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN1Z2dlc3Rpb25FZGl0b3JcbiIsIiAvKlxyXG4gICogaHR0cHM6Ly9naXRodWIuY29tL2tyYWFkZW4vYXV0b2NvbXBsZXRlXHJcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgRGVueXMgS3Jhc25vc2hjaG9rXHJcbiAgKiBNSVQgTGljZW5zZVxyXG4gICovXHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBFdmVudFRyaWdnZXIge1xyXG4gICAgS2V5Ym9hcmQgPSAwLFxyXG4gICAgRm9jdXMgPSAxXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b2NvbXBsZXRlSXRlbSB7XHJcbiAgICBsYWJlbD86IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZVNldHRpbmdzPFQgZXh0ZW5kcyBBdXRvY29tcGxldGVJdGVtPiB7XHJcbiAgICBpbnB1dDogSFRNTElucHV0RWxlbWVudDtcclxuICAgIHJlbmRlcj86IChpdGVtOiBULCBjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gSFRNTERpdkVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgICByZW5kZXJHcm91cD86IChuYW1lOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZDtcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZztcclxuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcclxuICAgIGVtcHR5TXNnPzogc3RyaW5nO1xyXG4gICAgb25TZWxlY3Q6IChpdGVtOiBULCBpbnB1dDogSFRNTElucHV0RWxlbWVudCkgPT4gdm9pZDtcclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhdXRvY29tcGxldGUgb24gZm9jdXMgZXZlbnQuIEZvY3VzIGV2ZW50IHdpbGwgaWdub3JlIHRoZSBgbWluTGVuZ3RoYCBwcm9wZXJ0eSBhbmQgd2lsbCBhbHdheXMgY2FsbCBgZmV0Y2hgLlxyXG4gICAgICovXHJcbiAgICBzaG93T25Gb2N1cz86IGJvb2xlYW47XHJcbiAgICBmZXRjaDogKHRleHQ6IHN0cmluZywgdXBkYXRlOiAoaXRlbXM6IFRbXSB8IGZhbHNlKSA9PiB2b2lkLCB0cmlnZ2VyOiBFdmVudFRyaWdnZXIpID0+IHZvaWQ7XHJcbiAgICBkZWJvdW5jZVdhaXRNcz86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZm9yIGFkZGl0aW9uYWwgYXV0b2NvbXBsZXRlIGN1c3RvbWl6YXRpb25cclxuICAgICAqIEBwYXJhbSB7SFRNTElucHV0RWxlbWVudH0gaW5wdXQgLSBpbnB1dCBib3ggYXNzb2NpYXRlZCB3aXRoIGF1dG9jb21wbGV0ZVxyXG4gICAgICogQHBhcmFtIHtDbGllbnRSZWN0IHwgRE9NUmVjdH0gaW5wdXRSZWN0IC0gc2l6ZSBvZiB0aGUgaW5wdXQgYm94IGFuZCBpdHMgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0XHJcbiAgICAgKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50fSBjb250YWluZXIgLSBjb250YWluZXIgd2l0aCBzdWdnZXN0aW9uc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heEhlaWdodCAtIG1heCBoZWlnaHQgdGhhdCBjYW4gYmUgdXNlZCBieSBhdXRvY29tcGxldGVcclxuICAgICAqL1xyXG4gICAgY3VzdG9taXplPzogKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBpbnB1dFJlY3Q6IENsaWVudFJlY3QgfCBET01SZWN0LCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LCBtYXhIZWlnaHQ6IG51bWJlcikgPT4gdm9pZDtcclxuICAgIC8qKlxyXG4gICAgICogUHJldmVudHMgYXV0b21hdGljIGZvcm0gc3VibWl0IHdoZW4gRU5URVIgaXMgcHJlc3NlZFxyXG4gICAgICovXHJcbiAgICBwcmV2ZW50U3VibWl0PzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVSZXN1bHQge1xyXG4gICAgZGVzdHJveTogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuY29uc3QgZW51bSBLZXlzIHtcclxuICAgIEVudGVyID0gMTMsXHJcbiAgICBFc2MgPSAyNyxcclxuICAgIFVwID0gMzgsXHJcbiAgICBEb3duID0gNDAsXHJcbiAgICBMZWZ0ID0gMzcsXHJcbiAgICBSaWdodCA9IDM5LFxyXG4gICAgU2hpZnQgPSAxNixcclxuICAgIEN0cmwgPSAxNyxcclxuICAgIEFsdCA9IDE4LFxyXG4gICAgQ2Fwc0xvY2sgPSAyMCxcclxuICAgIFdpbmRvd3NLZXkgPSA5MSxcclxuICAgIFRhYiA9IDksXHJcbiAgICBGMSA9IDExMixcclxuICAgIEYxMiA9IDEyM1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvY29tcGxldGU8VCBleHRlbmRzIEF1dG9jb21wbGV0ZUl0ZW0+KHNldHRpbmdzOiBBdXRvY29tcGxldGVTZXR0aW5nczxUPik6IEF1dG9jb21wbGV0ZVJlc3VsdCB7XHJcblxyXG4gICAgLy8ganVzdCBhbiBhbGlhcyB0byBtaW5pbWl6ZSBKUyBmaWxlIHNpemVcclxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50O1xyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIGNvbnN0IGNvbnRhaW5lclN0eWxlID0gY29udGFpbmVyLnN0eWxlO1xyXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGNvbnN0IG1vYmlsZUZpcmVmb3ggPSB1c2VyQWdlbnQuaW5kZXhPZihcIkZpcmVmb3hcIikgIT09IC0xICYmIHVzZXJBZ2VudC5pbmRleE9mKFwiTW9iaWxlXCIpICE9PSAtMTtcclxuICAgIGNvbnN0IGRlYm91bmNlV2FpdE1zID0gc2V0dGluZ3MuZGVib3VuY2VXYWl0TXMgfHwgMDtcclxuICAgIGNvbnN0IHByZXZlbnRTdWJtaXQgPSBzZXR0aW5ncy5wcmV2ZW50U3VibWl0IHx8IGZhbHNlO1xyXG4gICAgXHJcbiAgICAvLyAna2V5dXAnIGV2ZW50IHdpbGwgbm90IGJlIGZpcmVkIG9uIE1vYmlsZSBGaXJlZm94LCBzbyB3ZSBoYXZlIHRvIHVzZSAnaW5wdXQnIGV2ZW50IGluc3RlYWRcclxuICAgIGNvbnN0IGtleVVwRXZlbnROYW1lID0gbW9iaWxlRmlyZWZveCA/IFwiaW5wdXRcIiA6IFwia2V5dXBcIjtcclxuICAgIFxyXG4gICAgbGV0IGl0ZW1zOiBUW10gPSBbXTtcclxuICAgIGxldCBpbnB1dFZhbHVlID0gXCJcIjtcclxuICAgIGxldCBtaW5MZW4gPSAyO1xyXG4gICAgY29uc3Qgc2hvd09uRm9jdXMgPSBzZXR0aW5ncy5zaG93T25Gb2N1cztcclxuICAgIGxldCBzZWxlY3RlZDogVCB8IHVuZGVmaW5lZDtcclxuICAgIGxldCBrZXlwcmVzc0NvdW50ZXIgPSAwO1xyXG4gICAgbGV0IGRlYm91bmNlVGltZXIgOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHNldHRpbmdzLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbWluTGVuID0gc2V0dGluZ3MubWluTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2V0dGluZ3MuaW5wdXQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dCB1bmRlZmluZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBzZXR0aW5ncy5pbnB1dDtcclxuXHJcbiAgICBjb250YWluZXIuY2xhc3NOYW1lID0gXCJhdXRvY29tcGxldGUgXCIgKyAoc2V0dGluZ3MuY2xhc3NOYW1lIHx8IFwiXCIpO1xyXG5cclxuICAgIC8vIElPUyBpbXBsZW1lbnRhdGlvbiBmb3IgZml4ZWQgcG9zaXRpb25pbmcgaGFzIG1hbnkgYnVncywgc28gd2Ugd2lsbCB1c2UgYWJzb2x1dGUgcG9zaXRpb25pbmdcclxuICAgIGNvbnRhaW5lclN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIHRoZSBjb250YWluZXIgZnJvbSBET01cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZGV0YWNoKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXIgZGVib3VuY2luZyB0aW1lciBpZiBhc3NpZ25lZFxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjbGVhckRlYm91bmNlVGltZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGRlYm91bmNlVGltZXIpIHtcclxuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggdGhlIGNvbnRhaW5lciB0byBET01cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gYXR0YWNoKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiBjb250YWluZXIgZm9yIGF1dG9jb21wbGV0ZSBpcyBkaXNwbGF5ZWRcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY29udGFpbmVyRGlzcGxheWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIWNvbnRhaW5lci5wYXJlbnROb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXIgYXV0b2NvbXBsZXRlIHN0YXRlIGFuZCBoaWRlIGNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjbGVhcigpOiB2b2lkIHtcclxuICAgICAgICAvLyBwcmV2ZW50IHRoZSB1cGRhdGUgY2FsbCBpZiB0aGVyZSBhcmUgcGVuZGluZyBBSkFYIHJlcXVlc3RzXHJcbiAgICAgICAga2V5cHJlc3NDb3VudGVyKys7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaXRlbXMgPSBbXTtcclxuICAgICAgICBpbnB1dFZhbHVlID0gXCJcIjtcclxuICAgICAgICBzZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBkZXRhY2goKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBhdXRvY29tcGxldGUgcG9zaXRpb25cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdXBkYXRlUG9zaXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFjb250YWluZXJEaXNwbGF5ZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250YWluZXJTdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcclxuICAgICAgICBjb250YWluZXJTdHlsZS53aWR0aCA9IGlucHV0Lm9mZnNldFdpZHRoICsgXCJweFwiO1xyXG5cclxuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gMDtcclxuICAgICAgICBsZXQgaW5wdXRSZWN0OiBDbGllbnRSZWN0IHwgRE9NUmVjdCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2FsYygpIHtcclxuICAgICAgICAgICAgY29uc3QgZG9jRWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBjbGllbnRUb3AgPSBkb2NFbC5jbGllbnRUb3AgfHwgZG9jLmJvZHkuY2xpZW50VG9wIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGRvYy5ib2R5LmNsaWVudExlZnQgfHwgMDtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2NFbC5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICAgICAgaW5wdXRSZWN0ID0gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IGlucHV0UmVjdC50b3AgKyBpbnB1dC5vZmZzZXRIZWlnaHQgKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpbnB1dFJlY3QubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0O1xyXG4gICAgXHJcbiAgICAgICAgICAgIGNvbnRhaW5lclN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XHJcbiAgICBcclxuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gKGlucHV0UmVjdC50b3AgKyBpbnB1dC5vZmZzZXRIZWlnaHQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xyXG4gICAgICAgICAgICBjb250YWluZXJTdHlsZS5ib3R0b20gPSBcIlwiO1xyXG4gICAgICAgICAgICBjb250YWluZXJTdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29udGFpbmVyU3R5bGUubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgXCJweFwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhlIGNhbGMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHR3aWNlLCBvdGhlcndpc2UgdGhlIGNhbGN1bGF0aW9uIG1heSBiZSB3cm9uZyBvbiByZXNpemUgZXZlbnQgKGNocm9tZSBicm93c2VyKVxyXG4gICAgICAgIGNhbGMoKTtcclxuICAgICAgICBjYWxjKCk7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5ncy5jdXN0b21pemUgJiYgaW5wdXRSZWN0KSB7XHJcbiAgICAgICAgICAgIHNldHRpbmdzLmN1c3RvbWl6ZShpbnB1dCwgaW5wdXRSZWN0LCBjb250YWluZXIsIG1heEhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVkcmF3IHRoZSBhdXRvY29tcGxldGUgZGl2IGVsZW1lbnQgd2l0aCBzdWdnZXN0aW9uc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB1cGRhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gZGVsZXRlIGFsbCBjaGlsZHJlbiBmcm9tIGF1dG9jb21wbGV0ZSBET00gY29udGFpbmVyXHJcbiAgICAgICAgd2hpbGUgKGNvbnRhaW5lci5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmdW5jdGlvbiBmb3IgcmVuZGVyaW5nIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xyXG4gICAgICAgIGxldCByZW5kZXIgPSBmdW5jdGlvbihpdGVtOiBULCBjdXJyZW50VmFsdWU6IHN0cmluZyk6IEhUTUxEaXZFbGVtZW50IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQudGV4dENvbnRlbnQgPSBpdGVtLmxhYmVsIHx8IFwiXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtRWxlbWVudDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzZXR0aW5ncy5yZW5kZXIpIHtcclxuICAgICAgICAgICAgcmVuZGVyID0gc2V0dGluZ3MucmVuZGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZnVuY3Rpb24gdG8gcmVuZGVyIGF1dG9jb21wbGV0ZSBncm91cHNcclxuICAgICAgICBsZXQgcmVuZGVyR3JvdXAgPSBmdW5jdGlvbihncm91cE5hbWU6IHN0cmluZywgY3VycmVudFZhbHVlOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIGdyb3VwRGl2LnRleHRDb250ZW50ID0gZ3JvdXBOYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBEaXY7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2V0dGluZ3MucmVuZGVyR3JvdXApIHtcclxuICAgICAgICAgICAgcmVuZGVyR3JvdXAgPSBzZXR0aW5ncy5yZW5kZXJHcm91cDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuICAgICAgICBsZXQgcHJldkdyb3VwID0gXCIjOT8kXCI7XHJcblxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbTogVCk6IHZvaWQge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5ncm91cCAmJiBpdGVtLmdyb3VwICE9PSBwcmV2R3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHByZXZHcm91cCA9IGl0ZW0uZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cERpdiA9IHJlbmRlckdyb3VwKGl0ZW0uZ3JvdXAsIGlucHV0VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwRGl2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBEaXYuY2xhc3NOYW1lICs9IFwiIGdyb3VwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZ3JvdXBEaXYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IHJlbmRlcihpdGVtLCBpbnB1dFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGRpdikge1xyXG4gICAgICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihldjogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm9uU2VsZWN0KGl0ZW0sIGlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5jbGFzc05hbWUgKz0gXCIgc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5lbXB0eU1zZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgICAgIGVtcHR5LmNsYXNzTmFtZSA9IFwiZW1wdHlcIjtcclxuICAgICAgICAgICAgICAgIGVtcHR5LnRleHRDb250ZW50ID0gc2V0dGluZ3MuZW1wdHlNc2c7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZW1wdHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXR0YWNoKCk7XHJcbiAgICAgICAgdXBkYXRlUG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgdXBkYXRlU2Nyb2xsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlSWZEaXNwbGF5ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lckRpc3BsYXllZCgpKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXNpemVFdmVudEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdXBkYXRlSWZEaXNwbGF5ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzY3JvbGxFdmVudEhhbmRsZXIoZTogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZS50YXJnZXQgIT09IGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB1cGRhdGVJZkRpc3BsYXllZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24ga2V5dXBFdmVudEhhbmRsZXIoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXYud2hpY2ggfHwgZXYua2V5Q29kZSB8fCAwO1xyXG5cclxuICAgICAgICBjb25zdCBpZ25vcmUgPSBbS2V5cy5VcCwgS2V5cy5FbnRlciwgS2V5cy5Fc2MsIEtleXMuUmlnaHQsIEtleXMuTGVmdCwgS2V5cy5TaGlmdCwgS2V5cy5DdHJsLCBLZXlzLkFsdCwgS2V5cy5DYXBzTG9jaywgS2V5cy5XaW5kb3dzS2V5LCBLZXlzLlRhYl07XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgaWdub3JlKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBrZXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleUNvZGUgPj0gS2V5cy5GMSAmJiBrZXlDb2RlIDw9IEtleXMuRjEyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoZSBkb3duIGtleSBpcyB1c2VkIHRvIG9wZW4gYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuRG93biAmJiBjb250YWluZXJEaXNwbGF5ZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGFydEZldGNoKEV2ZW50VHJpZ2dlci5LZXlib2FyZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXRvbWF0aWNhbGx5IG1vdmUgc2Nyb2xsIGJhciBpZiBzZWxlY3RlZCBpdGVtIGlzIG5vdCB2aXNpYmxlXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGNvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBlbGVtZW50c1swXSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIG1ha2UgZ3JvdXAgdmlzaWJsZVxyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLmNsYXNzTmFtZS5pbmRleE9mKFwiZ3JvdXBcIikgIT09IC0xICYmICFwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gcHJldmlvdXM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9mZnNldFRvcCA8IGNvbnRhaW5lci5zY3JvbGxUb3ApIHtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdEJvdHRvbSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsVG9wICsgY29udGFpbmVyLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RCb3R0b20gPiBjb250YWluZXJCb3R0b20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wICs9IHNlbGVjdEJvdHRvbSAtIGNvbnRhaW5lckJvdHRvbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCB0aGUgcHJldmlvdXMgaXRlbSBpbiBzdWdnZXN0aW9uc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBzZWxlY3RQcmV2KCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gaXRlbXNbMF0pIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gaXRlbXNbaV0gfHwgaSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGl0ZW1zW2kgLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VsZWN0IHRoZSBuZXh0IGl0ZW0gaW4gc3VnZ2VzdGlvbnNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2VsZWN0TmV4dCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZCB8fCBzZWxlY3RlZCA9PT0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0pIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBpdGVtc1swXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChpdGVtcy5sZW5ndGggLSAxKTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gaXRlbXNbaV0pIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gaXRlbXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24ga2V5ZG93bkV2ZW50SGFuZGxlcihldjogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBldi53aGljaCB8fCBldi5rZXlDb2RlIHx8IDA7XHJcblxyXG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLlVwIHx8IGtleUNvZGUgPT09IEtleXMuRG93biB8fCBrZXlDb2RlID09PSBLZXlzLkVzYykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJJc0Rpc3BsYXllZCA9IGNvbnRhaW5lckRpc3BsYXllZCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuRXNjKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhcigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb250YWluZXJEaXNwbGF5ZWQgfHwgaXRlbXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGtleUNvZGUgPT09IEtleXMuVXBcclxuICAgICAgICAgICAgICAgICAgICA/IHNlbGVjdFByZXYoKVxyXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZWN0TmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXJJc0Rpc3BsYXllZCkge1xyXG4gICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkVudGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3Mub25TZWxlY3Qoc2VsZWN0ZWQsIGlucHV0KTtcclxuICAgICAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZiAocHJldmVudFN1Ym1pdCkge1xyXG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmb2N1c0V2ZW50SGFuZGxlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoc2hvd09uRm9jdXMpIHtcclxuICAgICAgICAgICAgc3RhcnRGZXRjaChFdmVudFRyaWdnZXIuRm9jdXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzdGFydEZldGNoKHRyaWdnZXI6IEV2ZW50VHJpZ2dlcikge1xyXG4gICAgICAgIC8vIGlmIG11bHRpcGxlIGtleXMgd2VyZSBwcmVzc2VkLCBiZWZvcmUgd2UgZ2V0IHVwZGF0ZSBmcm9tIHNlcnZlcixcclxuICAgICAgICAvLyB0aGlzIG1heSBjYXVzZSByZWRyYXdpbmcgb3VyIGF1dG9jb21wbGV0ZSBtdWx0aXBsZSB0aW1lcyBhZnRlciB0aGUgbGFzdCBrZXkgcHJlc3MuXHJcbiAgICAgICAgLy8gdG8gYXZvaWQgdGhpcywgdGhlIG51bWJlciBvZiB0aW1lcyBrZXlib2FyZCB3YXMgcHJlc3NlZCB3aWxsIGJlXHJcbiAgICAgICAgLy8gc2F2ZWQgYW5kIGNoZWNrZWQgYmVmb3JlIHJlZHJhdyBvdXIgYXV0b2NvbXBsZXRlIGJveC5cclxuICAgICAgICBjb25zdCBzYXZlZEtleXByZXNzQ291bnRlciA9ICsra2V5cHJlc3NDb3VudGVyO1xyXG5cclxuICAgICAgICBjb25zdCB2YWwgPSBpbnB1dC52YWx1ZTtcclxuICAgICAgICBpZiAodmFsLmxlbmd0aCA+PSBtaW5MZW4gfHwgdHJpZ2dlciA9PT0gRXZlbnRUcmlnZ2VyLkZvY3VzKSB7XHJcbiAgICAgICAgICAgIGNsZWFyRGVib3VuY2VUaW1lcigpO1xyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy5mZXRjaCh2YWwsIGZ1bmN0aW9uKGVsZW1lbnRzOiBUW10gfCBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlwcmVzc0NvdW50ZXIgPT09IHNhdmVkS2V5cHJlc3NDb3VudGVyICYmIGVsZW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gZWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBFdmVudFRyaWdnZXIuS2V5Ym9hcmQpO1xyXG4gICAgICAgICAgICB9LCB0cmlnZ2VyID09PSBFdmVudFRyaWdnZXIuS2V5Ym9hcmQgPyBkZWJvdW5jZVdhaXRNcyA6IDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJsdXJFdmVudEhhbmRsZXIoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gd2UgbmVlZCB0byBkZWxheSBjbGVhciwgYmVjYXVzZSB3aGVuIHdlIGNsaWNrIG9uIGFuIGl0ZW0sIGJsdXIgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGNsaWNrIGFuZCByZW1vdmUgaXRlbXMgZnJvbSBET01cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ICE9PSBpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaXhlcyAjMjY6IG9uIGxvbmcgY2xpY2tzIGZvY3VzIHdpbGwgYmUgbG9zdCBhbmQgb25TZWxlY3QgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZFxyXG4gICAgICovXHJcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBmdW5jdGlvbihldnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaXhlcyAjMzA6IGF1dG9jb21wbGV0ZSBjbG9zZXMgd2hlbiBzY3JvbGxiYXIgaXMgY2xpY2tlZCBpbiBJRVxyXG4gICAgICogU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTIxMDI2Ny8xMzE3MjM0OVxyXG4gICAgICovXHJcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IGlucHV0LmZvY3VzKCkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlbW92ZSBET00gZWxlbWVudHMgYW5kIGNsZWFyIGV2ZW50IGhhbmRsZXJzXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBrZXlkb3duRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKGtleVVwRXZlbnROYW1lLCBrZXl1cEV2ZW50SGFuZGxlciBhcyBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0KTtcclxuICAgICAgICBpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbEV2ZW50SGFuZGxlciwgdHJ1ZSk7XHJcbiAgICAgICAgY2xlYXJEZWJvdW5jZVRpbWVyKCk7XHJcbiAgICAgICAgY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXR1cCBldmVudCBoYW5kbGVyc1xyXG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwga2V5ZG93bkV2ZW50SGFuZGxlcik7XHJcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKGtleVVwRXZlbnROYW1lLCBrZXl1cEV2ZW50SGFuZGxlciBhcyBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0KTtcclxuICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGJsdXJFdmVudEhhbmRsZXIpO1xyXG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzRXZlbnRIYW5kbGVyKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHJlc2l6ZUV2ZW50SGFuZGxlcik7XHJcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxFdmVudEhhbmRsZXIsIHRydWUpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVzdHJveVxyXG4gICAgfTtcclxufVxyXG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFN0YXRlKGlkLCBzdGF0ZSkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuXG4gIHRyeSB7XG4gICAgb3B0aW9ucy5jb2x1bW5BcGkuc2V0Q29sdW1uU3RhdGUoc3RhdGUuY29sdW1ucylcbiAgICBvcHRpb25zLmNvbHVtbkFwaS5zZXRDb2x1bW5Hcm91cFN0YXRlKHN0YXRlLmdyb3VwcylcbiAgICBvcHRpb25zLmFwaS5zZXRTb3J0TW9kZWwoc3RhdGUuc29ydClcbiAgICBvcHRpb25zLmFwaS5zZXRGaWx0ZXJNb2RlbChzdGF0ZS5maWx0ZXJzKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgZ3JpZCBzdGF0ZSBmcm9tIEpTT04nLCBlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnd19nZXRTdGF0ZShpZCkge1xuICBjb25zdCBvcHRpb25zID0gZ3dfZ2V0R3JpZChpZCkub3B0aW9uc1xuICBjb25zdCBjb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5BcGkuZ2V0Q29sdW1uU3RhdGUoKVxuICBjb25zdCBncm91cHMgPSBvcHRpb25zLmNvbHVtbkFwaS5nZXRDb2x1bW5Hcm91cFN0YXRlKClcbiAgY29uc3Qgc29ydCA9IG9wdGlvbnMuYXBpLmdldFNvcnRNb2RlbCgpXG4gIGNvbnN0IGZpbHRlcnMgPSBvcHRpb25zLmFwaS5nZXRGaWx0ZXJNb2RlbCgpXG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgY29sdW1ucyxcbiAgICAgIGdyb3VwcyxcbiAgICAgIHNvcnQsXG4gICAgICBmaWx0ZXJzLFxuICAgIH0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBjb252ZXJ0IHRoZSBncmlkIHN0YXRlIHRvIGpzb24nLCBlKVxuICB9XG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuZXhwb3J0IGZ1bmN0aW9uIGd3X3NldFNpZGVCYXJWaXNpYmxlKGlkLCB2YWx1ZSkge1xuICBnd19nZXRHcmlkKGlkKS5vcHRpb25zLmFwaS5zZXRTaWRlQmFyVmlzaWJsZShCb29sZWFuKHZhbHVlKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X29wZW5Ub29scGFuZWwoZ3JpZElkLCB0b29scGFuZWxJZCkge1xuICBnd19nZXRHcmlkKGdyaWRJZCkub3B0aW9ucy5hcGkub3BlblRvb2xQYW5lbCh0b29scGFuZWxJZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGd3X2Nsb3NlVG9vbHBhbmVsKGdyaWRJZCwgdG9vbHBhbmVsSWQpIHtcbiAgZ3dfZ2V0R3JpZChncmlkSWQpLm9wdGlvbnMuYXBpLmNsb3NlVG9vbFBhbmVsKHRvb2xwYW5lbElkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2V0RnVuY3Rpb25zUmVhZE9ubHkoaWQsIHJlYWRvbmx5KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNldEZ1bmN0aW9uc1JlYWRPbmx5KEJvb2xlYW4ocmVhZG9ubHkpKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdGF0dXNiYXJDb21wb25lbnRWaXNpYmlsaXR5KGlkLCBrZXksIHZpc2liaWxpdHkpIHtcbiAgZ3dfZ2V0R3JpZChpZClcbiAgICAub3B0aW9ucy5hcGkuZ2V0U3RhdHVzUGFuZWwoa2V5KVxuICAgIC5zZXRWaXNpYmxlKEJvb2xlYW4odmlzaWJpbGl0eSkpXG59XG4iLCIvKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXG4gKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGd3X2dldEdyaWQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuLyoqXG4gKiBTaG93IGxvYWRpbmcgb3ZlcmxheVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2hvd0xvYWRpbmdPdmVybGF5KGlkKSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuYXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpXG59XG5cbi8qKlxuICogU2hvdyAnbm8gcm93cycgb3ZlcmxheVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfc2hvd05vUm93c092ZXJsYXkoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuc2hvd05vUm93c092ZXJsYXkoKVxufVxuXG4vKipcbiAqIENsZWFyIGFsbCBvdmVybGF5c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZ3JpZCBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3dfaGlkZU92ZXJsYXkoaWQpIHtcbiAgZ3dfZ2V0R3JpZChpZCkub3B0aW9ucy5hcGkuaGlkZU92ZXJsYXkoKVxufVxuIiwiLypcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBCQmpHcmlkRXhXaWRnZXQgcGx1Z2luLlxuICogKGMpIEJhc2lzIEV1cm9wZSA8ZXVAYmFzaXMuY29tPlxuICpcbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBnd19nZXRHcmlkIH0gZnJvbSAnLi91dGlsaXRpZXMnXG5cbi8qKlxuICogVXBkYXRlIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgVGhlIGdyaWQncyBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGtleSBUaGUgY29udGV4dCdzIGtleSB0byB1cGRhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSAgVGhlIG5ldyBjb250ZXh0J3MgdmFsdWVcbiAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIGd3X2xlZ2FjeVVwZGF0ZUNvbnRleHQoaWQsIGtleSwgdmFsdWUpIHtcbi8vIFx0Z3dfZ2V0R3JpZChpZClcbi8vIFx0XHQub3B0aW9uc1xuLy8gXHRcdC5jb250ZXh0W2tleV0gPSBKU09OLnBhcnNlKHZhbHVlKTtcbi8vIH1cblxuLyoqXG4gKiBVcGRhdGUgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZCBUaGUgZ3JpZCdzIGlkXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCBUaGUgbmV3IGNvbnRleHQgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd191cGRhdGVDb250ZXh0KGlkLCBjb250ZXh0KSB7XG4gIGd3X2dldEdyaWQoaWQpLm9wdGlvbnMuY29udGV4dCA9IGNvbnRleHRcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQkJqR3JpZEV4V2lkZ2V0IHBsdWdpbi5cbiAqIChjKSBCYXNpcyBFdXJvcGUgPGV1QGJhc2lzLmNvbT5cbiAqXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKi9cblxuaW1wb3J0ICdleHBvc2UtbG9hZGVyP2pzcyFqc3MvanNzLmpzJ1xuaW1wb3J0IHsgZ3dfZ2V0RG9jdW1lbnQgfSBmcm9tICcuL3V0aWxpdGllcydcblxuLyoqXG4gKiBBZGQgbmV3IHN0eWxlXG4gKlxuICogQWRkIG5ldyBzdHlsZSB0byB0aGUgZG9jdW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgY3NzIHNlbGVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gcnVsZXMgSnNvbiBzdHJpbmcgZm9yIGFuIGFycmF5IG9mIHJ1bGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnd19zZXRTdHlsZShzZWxlY3RvciwgcnVsZXMpIHtcbiAganNzLmZvckRvY3VtZW50KGd3X2dldERvY3VtZW50KCkpLnNldChzZWxlY3RvciwgSlNPTi5wYXJzZShydWxlcykpXG59XG5cbi8qKlxuICogUmVtb3ZlIHN0eWxlXG4gKlxuICogUmVtb3ZlIGFkZGVkIHN0eWxlIGZyb20gdGhlcyBkb2N1bWVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBjc3Mgc2VsZWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd3X3JlbW92ZVN0eWxlKHNlbGVjdG9yKSB7XG4gIGpzcy5mb3JEb2N1bWVudChnd19nZXREb2N1bWVudCgpKS5yZW1vdmUoc2VsZWN0b3IpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbFtcImpzc1wiXSA9IHJlcXVpcmUoXCItIUQ6XFxcXEdpdGh1YlxcXFxCQmpHcmlkRXhXaWRnZXRcXFxcY2xpZW50XFxcXG5vZGVfbW9kdWxlc1xcXFxiYWJlbC1sb2FkZXJcXFxcbGliXFxcXGluZGV4LmpzPz9yZWYtLTQhLlxcXFxqc3MuanNcIik7IiwiLypcbiAqIEpTUyB2MC42IC0gSmF2YVNjcmlwdCBTdHlsZXNoZWV0c1xuICogaHR0cHM6Ly9naXRodWIuY29tL0JveDkvanNzXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLCBEYXZpZCBUYW5nXG4gKiBNSVQgTGljZW5zZWQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuICovXG52YXIganNzID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBhZGpTZWxBdHRyUmVnZXggPSAvKCg/OlxcLnwjKVteXFwuXFxzI10rKSgoPzpcXC58IylbXlxcLlxccyNdKykvZztcbiAgICB2YXIgZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4ID0gLyg6OikoYmVmb3JlfGFmdGVyfGZpcnN0LWxpbmV8Zmlyc3QtbGV0dGVyfHNlbGVjdGlvbikvO1xuICAgIHZhciBzaW5nbGVDb2xvblBzZXVkb0VsUmVnZXggPSAvKFteOl0pKDopKGJlZm9yZXxhZnRlcnxmaXJzdC1saW5lfGZpcnN0LWxldHRlcnxzZWxlY3Rpb24pLztcbiAgICB2YXIgc2luZ2xlQ29sb25Gb3JQc2V1ZG9FbGVtZW50czsgLy8gZmxhZyBmb3Igb2xkZXIgYnJvd3NlcnNcblxuICAgIGZ1bmN0aW9uIGdldFNlbGVjdG9yc0FuZFJ1bGVzKHNoZWV0KSB7XG4gICAgICAgIHZhciBydWxlcyA9IHNoZWV0LmNzc1J1bGVzIHx8IHNoZWV0LnJ1bGVzIHx8IFtdO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBPbGRlciBicm93c2VycyBhbmQgRkYgcmVwb3J0IHBzZXVkbyBlbGVtZW50IHNlbGVjdG9ycyBpbiBhbiBvdXRkYXRlZCBmb3JtYXRcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSB0b0RvdWJsZUNvbG9uUHNldWRvRWxlbWVudHMocnVsZXNbaV0uc2VsZWN0b3JUZXh0KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0c1tzZWxlY3RvclRleHRdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1tzZWxlY3RvclRleHRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzW3NlbGVjdG9yVGV4dF0ucHVzaCh7XG4gICAgICAgICAgICAgICAgc2hlZXQ6IHNoZWV0LFxuICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBydWxlc1tpXS5zdHlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UnVsZXMoc2hlZXQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBydWxlcyA9IHNoZWV0LmNzc1J1bGVzIHx8IHNoZWV0LnJ1bGVzIHx8IFtdO1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICAvLyBCcm93c2VycyByZXBvcnQgc2VsZWN0b3JzIGluIGxvd2VyY2FzZVxuICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSBydWxlc1tpXS5zZWxlY3RvclRleHQ7XG4gICAgICAgICAgICAvLyBOb3RlIC0gY2VydGFpbiBydWxlcyAoZS5nLiBAcnVsZXMpIGRvbid0IGhhdmUgc2VsZWN0b3JUZXh0XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3JUZXh0ICYmIChzZWxlY3RvclRleHQgPT0gc2VsZWN0b3IgfHwgc2VsZWN0b3JUZXh0ID09IHN3YXBBZGpTZWxBdHRyKHNlbGVjdG9yKSB8fCBzZWxlY3RvclRleHQgPT0gc3dhcFBzZXVkb0VsU3ludGF4KHNlbGVjdG9yKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzaGVldDogc2hlZXQsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogcnVsZXNbaV0uc3R5bGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRSdWxlKHNoZWV0LCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgcnVsZXMgPSBzaGVldC5jc3NSdWxlcyB8fCBzaGVldC5ydWxlcyB8fCBbXTtcbiAgICAgICAgdmFyIGluZGV4ID0gcnVsZXMubGVuZ3RoO1xuICAgICAgICB2YXIgcHNldWRvRWxlbWVudFJ1bGUgPSBhZGRQc2V1ZG9FbGVtZW50UnVsZShzaGVldCwgc2VsZWN0b3IsIHJ1bGVzLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKCFwc2V1ZG9FbGVtZW50UnVsZSkge1xuICAgICAgICAgICAgYWRkUnVsZVRvU2hlZXQoc2hlZXQsIHNlbGVjdG9yLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaGVldDogc2hlZXQsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBzdHlsZTogcnVsZXNbaW5kZXhdLnN0eWxlXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGFkZFJ1bGVUb1NoZWV0KHNoZWV0LCBzZWxlY3RvciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHNoZWV0Lmluc2VydFJ1bGUpIHtcbiAgICAgICAgICAgIHNoZWV0Lmluc2VydFJ1bGUoc2VsZWN0b3IgKyAnIHsgfScsIGluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZFJ1bGUoc2VsZWN0b3IsIG51bGwsIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZXMgc2luZ2xlIGNvbG9uIHN5bnRheCBmb3Igb2xkZXIgYnJvd3NlcnMgYW5kIGJ1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD05NDk2NTFcbiAgICBmdW5jdGlvbiBhZGRQc2V1ZG9FbGVtZW50UnVsZShzaGVldCwgc2VsZWN0b3IsIHJ1bGVzLCBpbmRleCkge1xuICAgICAgICB2YXIgZG91YmxlQ29sb25TZWxlY3RvcjtcbiAgICAgICAgdmFyIHNpbmdsZUNvbG9uU2VsZWN0b3I7XG5cbiAgICAgICAgaWYgKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleC5leGVjKHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgZG91YmxlQ29sb25TZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICAgICAgc2luZ2xlQ29sb25TZWxlY3RvciA9IHRvU2luZ2xlQ29sb25Qc2V1ZG9FbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoc2luZ2xlQ29sb25Qc2V1ZG9FbFJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBkb3VibGVDb2xvblNlbGVjdG9yID0gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKTtcbiAgICAgICAgICAgIHNpbmdsZUNvbG9uU2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGRlYWxpbmcgd2l0aCBhIHBzZXVkbyBlbGVtZW50XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMpIHtcbiAgICAgICAgICAgIC8vIEFzc3VtZSBtb2Rlcm4gYnJvd3NlciBhbmQgdGhlbiBjaGVjayBpZiBzdWNjZXNzZnVsXG4gICAgICAgICAgICBhZGRSdWxlVG9TaGVldChzaGVldCwgZG91YmxlQ29sb25TZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIHNpbmdsZUNvbG9uRm9yUHNldWRvRWxlbWVudHMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaW5nbGVDb2xvbkZvclBzZXVkb0VsZW1lbnRzKSB7XG4gICAgICAgICAgICBhZGRSdWxlVG9TaGVldChzaGVldCwgc2luZ2xlQ29sb25TZWxlY3RvciwgaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Eb3VibGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5yZXBsYWNlKHNpbmdsZUNvbG9uUHNldWRvRWxSZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBzdWJtYXRjaDEsIHN1Ym1hdGNoMiwgc3VibWF0Y2gzKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VibWF0Y2gxICsgJzo6JyArIHN1Ym1hdGNoMztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5yZXBsYWNlKGRvdWJsZUNvbG9uUHNldWRvRWxSZWdleCwgZnVuY3Rpb24obWF0Y2gsIHN1Ym1hdGNoMSwgc3VibWF0Y2gyKSB7XG4gICAgICAgICAgICByZXR1cm4gJzonICsgc3VibWF0Y2gyO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZVJ1bGUocnVsZSkge1xuICAgICAgICB2YXIgc2hlZXQgPSBydWxlLnNoZWV0O1xuICAgICAgICBpZiAoc2hlZXQuZGVsZXRlUnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuZGVsZXRlUnVsZShydWxlLmluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChzaGVldC5yZW1vdmVSdWxlKSB7XG4gICAgICAgICAgICBzaGVldC5yZW1vdmVSdWxlKHJ1bGUuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICAgICAgICBpZiAoIXNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZGVzdFtrZXldID0gc3JjW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWdncmVnYXRlU3R5bGVzKHJ1bGVzKSB7XG4gICAgICAgIHZhciBhZ2dyZWdhdGUgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXh0ZW5kKGFnZ3JlZ2F0ZSwgZGVjbGFyZWRQcm9wZXJ0aWVzKHJ1bGVzW2ldLnN0eWxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNsYXJlZFByb3BlcnRpZXMoc3R5bGUpIHtcbiAgICAgICAgdmFyIGRlY2xhcmVkID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRlY2xhcmVkW3N0eWxlW2ldXSA9IHN0eWxlW3RvQ2FtZWxDYXNlKHN0eWxlW2ldKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY2xhcmVkO1xuICAgIH1cblxuICAgIC8vIElFOSBzdG9yZXMgcnVsZXMgd2l0aCBhdHRyaWJ1dGVzIChjbGFzc2VzIG9yIElEJ3MpIGFkamFjZW50IGluIHRoZSBvcHBvc2l0ZSBvcmRlciBhcyBkZWZpbmVkXG4gICAgLy8gY2F1c2luZyB0aGVtIHRvIG5vdCBiZSBmb3VuZCwgc28gdGhpcyBtZXRob2Qgc3dhcHMgWyN8Ll1zZWwxWyN8Ll1zZWwyIHRvIGJlY29tZSBbI3wuXXNlbDJbI3wuXXNlbDFcbiAgICBmdW5jdGlvbiBzd2FwQWRqU2VsQXR0cihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgc3dhcCA9ICcnO1xuICAgICAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIFxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gYWRqU2VsQXR0clJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHJpbmcobGFzdEluZGV4LCBtYXRjaC5pbmRleCk7XG4gICAgICAgICAgICBzd2FwICs9IHNlbGVjdG9yLnN1YnN0cihtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMl0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHN3YXAgKz0gc2VsZWN0b3Iuc3Vic3RyKG1hdGNoLmluZGV4LCBtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3dhcCArPSBzZWxlY3Rvci5zdWJzdHIobGFzdEluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzd2FwO1xuICAgIH07XG5cbiAgICAvLyBGRiBhbmQgb2xkZXIgYnJvd3NlcnMgc3RvcmUgcnVsZXMgd2l0aCBwc2V1ZG8gZWxlbWVudHMgdXNpbmcgc2luZ2xlLWNvbG9uIHN5bnRheFxuICAgIGZ1bmN0aW9uIHN3YXBQc2V1ZG9FbFN5bnRheChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoZG91YmxlQ29sb25Qc2V1ZG9FbFJlZ2V4LmV4ZWMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9TaW5nbGVDb2xvblBzZXVkb0VsZW1lbnRzKHNlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0U3R5bGVQcm9wZXJ0aWVzKHJ1bGUsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIHZhciBpbXBvcnRhbnRJbmRleCA9IHZhbHVlLmluZGV4T2YoJyAhaW1wb3J0YW50Jyk7XG5cbiAgICAgICAgICAgIC8vIE1vZGVybiBicm93c2VycyBzZWVtIHRvIGhhbmRsZSBvdmVycmlkZXMgZmluZSwgYnV0IElFOSBkb2Vzbid0XG4gICAgICAgICAgICBydWxlLnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7IFxuICAgICAgICAgICAgaWYgKGltcG9ydGFudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJ1bGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZS5zdWJzdHIoMCwgaW1wb3J0YW50SW5kZXgpLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJ1bGUuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0NhbWVsQ2FzZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8tKFthLXpdKS9nLCBmdW5jdGlvbiAobWF0Y2gsIHN1Ym1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VibWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtQ2FtZWxDYXNlZFByb3BlcnR5TmFtZXMob2xkUHJvcHMpIHtcbiAgICAgICAgdmFyIG5ld1Byb3BzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvbGRQcm9wcykge1xuICAgICAgICAgICAgbmV3UHJvcHNbdW5DYW1lbENhc2Uoa2V5KV0gPSBvbGRQcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bkNhbWVsQ2FzZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uKG1hdGNoLCBzdWJtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuICctJyArIHN1Ym1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBKc3MgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgICAgIHRoaXMuaGVhZCA9IHRoaXMuZG9jLmhlYWQgfHwgdGhpcy5kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICAgICAgdGhpcy5zaGVldHMgPSB0aGlzLmRvYy5zdHlsZVNoZWV0cyB8fCBbXTtcbiAgICB9O1xuXG4gICAgSnNzLnByb3RvdHlwZSA9IHtcbiAgICAgICAgLy8gUmV0dXJucyBKU1MgcnVsZXMgKHNlbGVjdG9yIGlzIG9wdGlvbmFsKVxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFNoZWV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZVN0eWxlcyhnZXRSdWxlcyh0aGlzLmRlZmF1bHRTaGVldCwgc2VsZWN0b3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBydWxlcyA9IGdldFNlbGVjdG9yc0FuZFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0KTtcbiAgICAgICAgICAgIGZvciAoc2VsZWN0b3IgaW4gcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBydWxlc1tzZWxlY3Rvcl0gPSBhZ2dyZWdhdGVTdHlsZXMocnVsZXNbc2VsZWN0b3JdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydWxlcztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUmV0dXJucyBhbGwgcnVsZXMgKHNlbGVjdG9yIGlzIHJlcXVpcmVkKVxuICAgICAgICBnZXRBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGV4dGVuZChwcm9wZXJ0aWVzLCBhZ2dyZWdhdGVTdHlsZXMoZ2V0UnVsZXModGhpcy5zaGVldHNbaV0sIHNlbGVjdG9yKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEFkZHMgSlNTIHJ1bGVzIGZvciB0aGUgc2VsZWN0b3IgYmFzZWQgb24gdGhlIGdpdmVuIHByb3BlcnRpZXNcbiAgICAgICAgc2V0OiBmdW5jdGlvbihzZWxlY3RvciwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRTaGVldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNoZWV0ID0gdGhpcy5fY3JlYXRlU2hlZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0cmFuc2Zvcm1DYW1lbENhc2VkUHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IGdldFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAoIXJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJ1bGVzID0gW2FkZFJ1bGUodGhpcy5kZWZhdWx0U2hlZXQsIHNlbGVjdG9yKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc2V0U3R5bGVQcm9wZXJ0aWVzKHJ1bGVzW2ldLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gUmVtb3ZlcyBKU1MgcnVsZXMgKHNlbGVjdG9yIGlzIG9wdGlvbmFsKVxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdFNoZWV0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVTaGVldCh0aGlzLmRlZmF1bHRTaGVldCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGVmYXVsdFNoZWV0O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBydWxlcyA9IGdldFJ1bGVzKHRoaXMuZGVmYXVsdFNoZWV0LCBzZWxlY3Rvcik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShydWxlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVsZXMubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBfY3JlYXRlU2hlZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlTm9kZSA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICBzdHlsZU5vZGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgICAgICBzdHlsZU5vZGUucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICAgICAgdGhpcy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVOb2RlLnNoZWV0O1xuICAgICAgICB9LFxuICAgICAgICBfcmVtb3ZlU2hlZXQ6IGZ1bmN0aW9uKHNoZWV0KSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHNoZWV0Lm93bmVyTm9kZTtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZXhwb3J0cyA9IG5ldyBKc3MoZG9jdW1lbnQpO1xuICAgIGV4cG9ydHMuZm9yRG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBKc3MoZG9jKTtcbiAgICB9O1xuICAgIHJldHVybiBleHBvcnRzO1xufSkoKTtcblxudHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgJiYgKG1vZHVsZS5leHBvcnRzID0ganNzKTsgLy8gQ29tbW9uSlMgc3VwcG9ydCIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2ZsYXRwaWNrci5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9mbGF0cGlja3IuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwibW9kdWxlLmV4cG9ydHMgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBvcGFjaXR5OiAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDA7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBub25lO1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxuICBib3JkZXI6IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XFxuICAgICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTYsIC0xcHggMCAwICNlNmU2ZTYsIDAgMXB4IDAgI2U2ZTZlNiwgMCAtMXB4IDAgI2U2ZTZlNiwgMCAzcHggMTNweCByZ2JhKDAsMCwwLDAuMDgpO1xcbiAgICAgICAgICBib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTYsIC0xcHggMCAwICNlNmU2ZTYsIDAgMXB4IDAgI2U2ZTZlNiwgMCAtMXB4IDAgI2U2ZTZlNiwgMCAzcHggMTNweCByZ2JhKDAsMCwwLDAuMDgpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm9wZW4sXFxuLmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmUge1xcbiAgb3BhY2l0eTogMTtcXG4gIG1heC1oZWlnaHQ6IDY0MHB4O1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHotaW5kZXg6IDk5OTk5O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFuaW1hdGUub3BlbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBmcEZhZGVJbkRvd24gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmlubGluZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnN0YXRpYyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IGNhbGMoMTAwJSArIDJweCk7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGljLm9wZW4ge1xcbiAgei1pbmRleDogOTk5O1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubXVsdGlNb250aCAuZmxhdHBpY2tyLWRheXMgLmRheUNvbnRhaW5lcjpudGgtY2hpbGQobisxKSAuZmxhdHBpY2tyLWRheS5pblJhbmdlOm50aC1jaGlsZCg3bis3KSB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMikgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rMSkge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0ycHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lcixcXG4uZmxhdHBpY2tyLWNhbGVuZGFyIC5oYXNUaW1lIC5kYXlDb250YWluZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lciB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5ub0NhbGVuZGFyLmhhc1RpbWUgLmZsYXRwaWNrci10aW1lIHtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhcjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgaGVpZ2h0OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBsZWZ0OiAyMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnJpZ2h0TW9zdDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1JpZ2h0OmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnJpZ2h0TW9zdDphZnRlcixcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93UmlnaHQ6YWZ0ZXIge1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiAyMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Q2VudGVyOmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Q2VudGVyOmFmdGVyIHtcXG4gIGxlZnQ6IDUwJTtcXG4gIHJpZ2h0OiA1MCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlIHtcXG4gIGJvcmRlci13aWR0aDogNXB4O1xcbiAgbWFyZ2luOiAwIC01cHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgYm9yZGVyLXdpZHRoOiA0cHg7XFxuICBtYXJnaW46IDAgLTRweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlciB7XFxuICBib3R0b206IDEwMCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlciB7XFxuICB0b3A6IDEwMCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YmVmb3JlIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyB7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1tb250aCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBoZWlnaHQ6IDM0cHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBoZWlnaHQ6IDM0cHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgei1pbmRleDogMztcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1kaXNhYmxlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggaSxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggaSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aC5mbGF0cGlja3ItcHJldi1tb250aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGguZmxhdHBpY2tyLXByZXYtbW9udGgge1xcbi8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgICovXFxuICBsZWZ0OiAwO1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbn1cXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLW5leHQtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoIHtcXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbiAgcmlnaHQ6IDA7XFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4vKlxcbiAgICAgICovXFxufVxcbi8qXFxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aDpob3ZlcixcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGg6aG92ZXIge1xcbiAgY29sb3I6ICM5NTllYTk7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aDpob3ZlciBzdmcsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoOmhvdmVyIHN2ZyB7XFxuICBmaWxsOiAjZjY0NzQ3O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggc3ZnLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCBzdmcge1xcbiAgd2lkdGg6IDE0cHg7XFxuICBoZWlnaHQ6IDE0cHg7XFxufVxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCBzdmcgcGF0aCxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHBhdGgge1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBmaWxsIDAuMXM7XFxuICB0cmFuc2l0aW9uOiBmaWxsIDAuMXM7XFxuICBmaWxsOiBpbmhlcml0O1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dCxcXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0OjotbXMtY2xlYXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixcXG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgd2lkdGg6IDE0cHg7XFxuICBwYWRkaW5nOiAwIDRweCAwIDJweDtcXG4gIGhlaWdodDogNTAlO1xcbiAgbGluZS1oZWlnaHQ6IDUwJTtcXG4gIG9wYWNpdHk6IDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuMTUpO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46YWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yKTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFmdGVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwIHtcXG4gIHRvcDogMDtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuNik7XFxuICB0b3A6IDI2JTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93biB7XFxuICB0b3A6IDUwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93bjphZnRlciB7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItdG9wOiA0cHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjYpO1xcbiAgdG9wOiA0MCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiBzdmcge1xcbiAgd2lkdGg6IGluaGVyaXQ7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiBzdmcgcGF0aCB7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuNSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcXG59XFxuLm51bUlucHV0V3JhcHBlcjpob3ZlciBzcGFuIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCB7XFxuICBmb250LXNpemU6IDEzNSU7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA3NSU7XFxuICBsZWZ0OiAxMi41JTtcXG4gIHBhZGRpbmc6IDcuNDhweCAwIDAgMDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGgge1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogMC41Y2g7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGg6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDZjaDtcXG4gIHdpZHRoOiA3Y2hcXFxcMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXIge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGN1cnNvcjogdGV4dDtcXG4gIHBhZGRpbmc6IDAgMCAwIDAuNWNoO1xcbiAgbWFyZ2luOiAwO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXI6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXSxcXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXJbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGZvbnQtc2l6ZTogMTAwJTtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRocyB7XFxuICBhcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGhlaWdodDogYXV0bztcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgbWFyZ2luOiAtMXB4IDAgMCAwO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDAgMCAwIDAuNWNoO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lbnVsaXN0O1xcbiAgLW1vei1hcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIHdpZHRoOiBhdXRvO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoczpmb2N1cyxcXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoczphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMgLmZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5mbGF0cGlja3Itd2Vla2RheXMge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XFxuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMjhweDtcXG59XFxuLmZsYXRwaWNrci13ZWVrZGF5cyAuZmxhdHBpY2tyLXdlZWtkYXljb250YWluZXIge1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbn1cXG5zcGFuLmZsYXRwaWNrci13ZWVrZGF5IHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbiAgbWFyZ2luOiAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcXG59XFxuLmRheUNvbnRhaW5lcixcXG4uZmxhdHBpY2tyLXdlZWtzIHtcXG4gIHBhZGRpbmc6IDFweCAwIDAgMDtcXG59XFxuLmZsYXRwaWNrci1kYXlzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxufVxcbi5mbGF0cGlja3ItZGF5czpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZGF5Q29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBvdXRsaW5lOiAwO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxuICBtaW4td2lkdGg6IDMwNy44NzVweDtcXG4gIG1heC13aWR0aDogMzA3Ljg3NXB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDtcXG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5kYXlDb250YWluZXIgKyAuZGF5Q29udGFpbmVyIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTFweCAwIDAgI2U2ZTZlNjtcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTFweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1kYXkge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogMTUwcHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBjb2xvcjogIzM5MzkzOTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICB3aWR0aDogMTQuMjg1NzE0MyU7XFxuICAtd2Via2l0LWZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xcbiAgICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAxNC4yODU3MTQzJTtcXG4gICAgICAgICAgZmxleC1iYXNpczogMTQuMjg1NzE0MyU7XFxuICBtYXgtd2lkdGg6IDM5cHg7XFxuICBoZWlnaHQ6IDM5cHg7XFxuICBsaW5lLWhlaWdodDogMzlweDtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmZsYXRwaWNrci1kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS50b2RheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheS50b2RheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheS50b2RheS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXk6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5OmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheTpmb2N1cyB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBvdXRsaW5lOiAwO1xcbiAgYmFja2dyb3VuZDogI2U2ZTZlNjtcXG4gIGJvcmRlci1jb2xvcjogI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1kYXkudG9kYXkge1xcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xcbn1cXG4uZmxhdHBpY2tyLWRheS50b2RheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS50b2RheTpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICM5NTllYTk7XFxuICBiYWNrZ3JvdW5kOiAjOTU5ZWE5O1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2U6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2U6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5uZXh0TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5uZXh0TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UubmV4dE1vbnRoRGF5IHtcXG4gIGJhY2tncm91bmQ6ICM1NjlmZjc7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJvcmRlci1jb2xvcjogIzU2OWZmNztcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuc3RhcnRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2Uuc3RhcnRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MHB4IDAgMCA1MHB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmVuZFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAgNTBweCA1MHB4IDA7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZSArIC5lbmRSYW5nZTpub3QoOm50aC1jaGlsZCg3bisxKSksXFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2Uuc3RhcnRSYW5nZSArIC5lbmRSYW5nZTpub3QoOm50aC1jaGlsZCg3bisxKSkge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMTBweCAwIDAgIzU2OWZmNztcXG4gICAgICAgICAgYm94LXNoYWRvdzogLTEwcHggMCAwICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UuZW5kUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweDtcXG59XFxuLmZsYXRwaWNrci1kYXkuaW5SYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC01cHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZDpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQsXFxuLmZsYXRwaWNrci1kYXkubm90QWxsb3dlZC5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkubm90QWxsb3dlZC5uZXh0TW9udGhEYXkge1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuLmZsYXRwaWNrci1kYXkuZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZDpob3ZlciB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4xKTtcXG59XFxuLmZsYXRwaWNrci1kYXkud2Vlay5zZWxlY3RlZCB7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtNXB4IDAgMCAjNTY5ZmY3LCA1cHggMCAwICM1NjlmZjc7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC01cHggMCAwICM1NjlmZjcsIDVweCAwIDAgIzU2OWZmNztcXG59XFxuLmZsYXRwaWNrci1kYXkuaGlkZGVuIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnJhbmdlTW9kZSAuZmxhdHBpY2tyLWRheSB7XFxuICBtYXJnaW4tdG9wOiAxcHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIge1xcbiAgZmxvYXQ6IGxlZnQ7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgLmZsYXRwaWNrci13ZWVrcyB7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla2RheSB7XFxuICBmbG9hdDogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbGluZS1oZWlnaHQ6IDI4cHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5LFxcbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5OmhvdmVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXgtd2lkdGg6IG5vbmU7XFxuICBjb2xvcjogcmdiYSg1Nyw1Nyw1NywwLjMpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItaW5uZXJDb250YWluZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5mbGF0cGlja3ItckNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwYWRkaW5nOiAwO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAwO1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxuICBtYXgtaGVpZ2h0OiA0MHB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWU6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBkaXNwbGF5OiB0YWJsZTtcXG4gIGNsZWFyOiBib3RoO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLm51bUlucHV0V3JhcHBlciB7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgLXdlYmtpdC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbiAgd2lkdGg6IDQwJTtcXG4gIGhlaWdodDogNDBweDtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzM5MzkzOTtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzM5MzkzOTtcXG59XFxuLmZsYXRwaWNrci10aW1lLmhhc1NlY29uZHMgLm51bUlucHV0V3JhcHBlciB7XFxuICB3aWR0aDogMjYlO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUudGltZTI0aHIgLm51bUlucHV0V3JhcHBlciB7XFxuICB3aWR0aDogNDklO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICBib3JkZXI6IDA7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGhlaWdodDogaW5oZXJpdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbiAgYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLWhvdXIge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dC5mbGF0cGlja3ItbWludXRlLFxcbi5mbGF0cGlja3ItdGltZSBpbnB1dC5mbGF0cGlja3Itc2Vjb25kIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci10aW1lLXNlcGFyYXRvcixcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbSB7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBmbG9hdDogbGVmdDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIHdpZHRoOiAyJTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG0ge1xcbiAgb3V0bGluZTogMDtcXG4gIHdpZHRoOiAxOCU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6aG92ZXIsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG06aG92ZXIsXFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmZvY3VzLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNlZWU7XFxufVxcbi5mbGF0cGlja3ItaW5wdXRbcmVhZG9ubHldIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgZnBGYWRlSW5Eb3duIHtcXG4gIGZyb20ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xcbiAgfVxcbiAgdG8ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gIH1cXG59XFxuXCIiLCJcbi8qKlxuICogV2hlbiBzb3VyY2UgbWFwcyBhcmUgZW5hYmxlZCwgYHN0eWxlLWxvYWRlcmAgdXNlcyBhIGxpbmsgZWxlbWVudCB3aXRoIGEgZGF0YS11cmkgdG9cbiAqIGVtYmVkIHRoZSBjc3Mgb24gdGhlIHBhZ2UuIFRoaXMgYnJlYWtzIGFsbCByZWxhdGl2ZSB1cmxzIGJlY2F1c2Ugbm93IHRoZXkgYXJlIHJlbGF0aXZlIHRvIGFcbiAqIGJ1bmRsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHBhZ2UuXG4gKlxuICogT25lIHNvbHV0aW9uIGlzIHRvIG9ubHkgdXNlIGZ1bGwgdXJscywgYnV0IHRoYXQgbWF5IGJlIGltcG9zc2libGUuXG4gKlxuICogSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiBcImZpeGVzXCIgdGhlIHJlbGF0aXZlIHVybHMgdG8gYmUgYWJzb2x1dGUgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgbG9jYXRpb24uXG4gKlxuICogQSBydWRpbWVudGFyeSB0ZXN0IHN1aXRlIGlzIGxvY2F0ZWQgYXQgYHRlc3QvZml4VXJscy5qc2AgYW5kIGNhbiBiZSBydW4gdmlhIHRoZSBgbnBtIHRlc3RgIGNvbW1hbmQuXG4gKlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzcykge1xuICAvLyBnZXQgY3VycmVudCBsb2NhdGlvblxuICB2YXIgbG9jYXRpb24gPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5sb2NhdGlvbjtcblxuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZml4VXJscyByZXF1aXJlcyB3aW5kb3cubG9jYXRpb25cIik7XG4gIH1cblxuXHQvLyBibGFuayBvciBudWxsP1xuXHRpZiAoIWNzcyB8fCB0eXBlb2YgY3NzICE9PSBcInN0cmluZ1wiKSB7XG5cdCAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHZhciBiYXNlVXJsID0gbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0O1xuICB2YXIgY3VycmVudERpciA9IGJhc2VVcmwgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cXC9bXlxcL10qJC8sIFwiL1wiKTtcblxuXHQvLyBjb252ZXJ0IGVhY2ggdXJsKC4uLilcblx0Lypcblx0VGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMganVzdCBhIHdheSB0byByZWN1cnNpdmVseSBtYXRjaCBicmFja2V0cyB3aXRoaW5cblx0YSBzdHJpbmcuXG5cblx0IC91cmxcXHMqXFwoICA9IE1hdGNoIG9uIHRoZSB3b3JkIFwidXJsXCIgd2l0aCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCBhbmQgdGhlbiBhIHBhcmVuc1xuXHQgICAoICA9IFN0YXJ0IGEgY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgKD86ICA9IFN0YXJ0IGEgbm9uLWNhcHR1cmluZyBncm91cFxuXHQgICAgICAgICBbXikoXSAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICBcXCggID0gTWF0Y2ggYSBzdGFydCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKD86ICA9IFN0YXJ0IGFub3RoZXIgbm9uLWNhcHR1cmluZyBncm91cHNcblx0ICAgICAgICAgICAgICAgICBbXikoXSsgID0gTWF0Y2ggYW55dGhpbmcgdGhhdCBpc24ndCBhIHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgfCAgPSBPUlxuXHQgICAgICAgICAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAgICAgICAgIFteKShdKiAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICBcXCkgID0gTWF0Y2ggYSBlbmQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICkgID0gRW5kIEdyb3VwXG4gICAgICAgICAgICAgICpcXCkgPSBNYXRjaCBhbnl0aGluZyBhbmQgdGhlbiBhIGNsb3NlIHBhcmVuc1xuICAgICAgICAgICkgID0gQ2xvc2Ugbm9uLWNhcHR1cmluZyBncm91cFxuICAgICAgICAgICogID0gTWF0Y2ggYW55dGhpbmdcbiAgICAgICApICA9IENsb3NlIGNhcHR1cmluZyBncm91cFxuXHQgXFwpICA9IE1hdGNoIGEgY2xvc2UgcGFyZW5zXG5cblx0IC9naSAgPSBHZXQgYWxsIG1hdGNoZXMsIG5vdCB0aGUgZmlyc3QuICBCZSBjYXNlIGluc2Vuc2l0aXZlLlxuXHQgKi9cblx0dmFyIGZpeGVkQ3NzID0gY3NzLnJlcGxhY2UoL3VybFxccypcXCgoKD86W14pKF18XFwoKD86W14pKF0rfFxcKFteKShdKlxcKSkqXFwpKSopXFwpL2dpLCBmdW5jdGlvbihmdWxsTWF0Y2gsIG9yaWdVcmwpIHtcblx0XHQvLyBzdHJpcCBxdW90ZXMgKGlmIHRoZXkgZXhpc3QpXG5cdFx0dmFyIHVucXVvdGVkT3JpZ1VybCA9IG9yaWdVcmxcblx0XHRcdC50cmltKClcblx0XHRcdC5yZXBsYWNlKC9eXCIoLiopXCIkLywgZnVuY3Rpb24obywgJDEpeyByZXR1cm4gJDE7IH0pXG5cdFx0XHQucmVwbGFjZSgvXicoLiopJyQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSk7XG5cblx0XHQvLyBhbHJlYWR5IGEgZnVsbCB1cmw/IG5vIGNoYW5nZVxuXHRcdGlmICgvXigjfGRhdGE6fGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcL3xmaWxlOlxcL1xcL1xcL3xcXHMqJCkvaS50ZXN0KHVucXVvdGVkT3JpZ1VybCkpIHtcblx0XHQgIHJldHVybiBmdWxsTWF0Y2g7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVydCB0aGUgdXJsIHRvIGEgZnVsbCB1cmxcblx0XHR2YXIgbmV3VXJsO1xuXG5cdFx0aWYgKHVucXVvdGVkT3JpZ1VybC5pbmRleE9mKFwiLy9cIikgPT09IDApIHtcblx0XHQgIFx0Ly9UT0RPOiBzaG91bGQgd2UgYWRkIHByb3RvY29sP1xuXHRcdFx0bmV3VXJsID0gdW5xdW90ZWRPcmlnVXJsO1xuXHRcdH0gZWxzZSBpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHQvLyBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZSB1cmxcblx0XHRcdG5ld1VybCA9IGJhc2VVcmwgKyB1bnF1b3RlZE9yaWdVcmw7IC8vIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5XG5cdFx0XHRuZXdVcmwgPSBjdXJyZW50RGlyICsgdW5xdW90ZWRPcmlnVXJsLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKTsgLy8gU3RyaXAgbGVhZGluZyAnLi8nXG5cdFx0fVxuXG5cdFx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCB1cmwoLi4uKVxuXHRcdHJldHVybiBcInVybChcIiArIEpTT04uc3RyaW5naWZ5KG5ld1VybCkgKyBcIilcIjtcblx0fSk7XG5cblx0Ly8gc2VuZCBiYWNrIHRoZSBmaXhlZCBjc3Ncblx0cmV0dXJuIGZpeGVkQ3NzO1xufTtcbiIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vY2xhc3Nlcy5jc3NcIik7XG5cbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuXG52YXIgdHJhbnNmb3JtO1xudmFyIGluc2VydEludG87XG5cblxuXG52YXIgb3B0aW9ucyA9IHtcImhtclwiOnRydWV9XG5cbm9wdGlvbnMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5vcHRpb25zLmluc2VydEludG8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LnBhcmVudC5kb2N1bWVudC5oZWFkXG4gICAgICAgICAgICAgIH07XG5cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlcy5qc1wiKShjb250ZW50LCBvcHRpb25zKTtcblxuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG5cbmlmKG1vZHVsZS5ob3QpIHtcblx0bW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9jbGFzc2VzLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9jbGFzc2VzLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIm1vZHVsZS5leHBvcnRzID0gXCIvKlxcbiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJCakdyaWRFeFdpZGdldCBwbHVnaW4uXFxuKiAoYykgQmFzaXMgRXVyb3BlIDxldUBiYXNpcy5jb20+XFxuKlxcbiogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcXG4qIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxcbiovXFxuXFxuLmd3LWFsaWdubWVudC1jZWxsLXJpZ2h0LFxcbi5ndy1hbGlnbm1lbnQtY2VsbC1yaWdodCAuYWctY2VsbC12YWx1ZSxcXG4uZ3ctYWxpZ25tZW50LWNlbGwtcmlnaHQgLnRlbXBsYXRlUmVuZGVyZXIge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XFxuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1jZWxsLWNlbnRlcixcXG4uZ3ctYWxpZ25tZW50LWNlbGwtY2VudGVyIC5hZy1jZWxsLXZhbHVlLFxcbi5ndy1hbGlnbm1lbnQtY2VsbC1jZW50ZXIgLnRlbXBsYXRlUmVuZGVyZXIge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAtd2Via2l0LWJveC1mbGV4OiAxO1xcbiAgICAgIC1tcy1mbGV4OiAxO1xcbiAgICAgICAgICBmbGV4OiAxO1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1yaWdodCAuYWctaGVhZGVyLWNlbGwtbGFiZWwge1xcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuXFxuLmd3LWFsaWdubWVudC1oZWFkZXItY2VudGVyIC5hZy1oZWFkZXItY2VsbC1sYWJlbCB7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcXG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1jZW50ZXIgLmFnLWhlYWRlci1jZWxsLXRleHQge1xcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5ndy1hbGlnbm1lbnQtaGVhZGVyLXJpZ2h0IC5hZy1jZWxsLWxhYmVsLWNvbnRhaW5lcixcXG4uZ3ctYWxpZ25tZW50LWhlYWRlci1jZW50ZXIgLmFnLWNlbGwtbGFiZWwtY29udGFpbmVyIHtcXG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcXG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4uZ3ctdG9vbHRpcCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMXM7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDFzO1xcbiAgYm9yZGVyLXJhZGl1czogMy4xcHg7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDI2MG1zO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNjBtcztcXG59XFxuXFxuLmd3LXRvb2x0aXAtbGlnaHQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG5cXG4uZ3ctdG9vbHRpcC1kYXJrIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxYzFmMjA7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggIzVjNWM1YztcXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAjNWM1YzVjO1xcbiAgY29sb3I6IHdoaXRlO1xcbn1cXG5cIiIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vc3VnZ2VzdGlvbi1lZGl0b3IuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuaGVhZFxuICAgICAgICAgICAgICB9O1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vc3VnZ2VzdGlvbi1lZGl0b3IuY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3N1Z2dlc3Rpb24tZWRpdG9yLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIm1vZHVsZS5leHBvcnRzID0gXCIuYXV0b2NvbXBsZXRlSW5wdXRXcmFwcGVyX19pbnB1dCB7XFxuICBwYWRkaW5nLWxlZnQ6IDZweDtcXG4gIGJvcmRlcjogdGhpbiBzb2xpZCB2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsIDE1MCwgMjQzLCAwLjQpKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IpO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uYWctdGhlbWUtYWxwaW5lIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0LFxcbi5hZy10aGVtZS1iYWxoYW0gLmF1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQsXFxuLmFnLXRoZW1lLW1hdGVyaWFsIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpO1xcbn1cXG5cXG4uYWctdGhlbWUtYWxwaW5lLWRhcmsgLmF1dG9jb21wbGV0ZUlucHV0V3JhcHBlcl9faW5wdXQsXFxuLmFnLXRoZW1lLWJhbGhhbS1kYXJrIC5hdXRvY29tcGxldGVJbnB1dFdyYXBwZXJfX2lucHV0IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMyZDM0MzYpO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICNmZmYpO1xcbiAgei1pbmRleDogMTAwMDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogdGhpbiBzb2xpZCB2YXIoLS1hZy1pbnB1dC1mb2N1cy1ib3JkZXItY29sb3IsIHJnYmEoMzMsIDE1MCwgMjQzLCAwLjQpKTtcXG4gIGJvcmRlci10b3A6IDA7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDNweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMHB4IDNweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS5kYXJrIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWFnLWJhY2tncm91bmQtY29sb3IsICMyZDM0MzYpO1xcbiAgY29sb3I6IHZhcigtLWFnLWRhdGEtY29sb3IsIHZhcigtLWFnLWZvcmVncm91bmQtY29sb3IsICNmZmYpKTtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZSAuc3VnZ2VzdGlvbi1ncm91cCB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbiAgcGFkZGluZzogNXB4IDZweDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlLmRhcmsgLnN1Z2dlc3Rpb24tZ3JvdXAge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciwgIzE4MWQxZik7XFxufVxcblxcbi5hdXRvY29tcGxldGUgLnN1Z2dlc3Rpb24taXRlbSB7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5zdWdnZXN0aW9uLWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYWctcm93LWhvdmVyLWNvbG9yLCByZ2JhKDMzLCAxNTAsIDI0NCwgMC4xKSk7XFxufVxcblxcbi5hdXRvY29tcGxldGUgLnN1Z2dlc3Rpb24taXRlbS5zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoXFxuICAgIC0tYWctc2VsZWN0ZWQtcm93LWJhY2tncm91bmQtY29sb3IsXFxuICAgIHJnYmEoMzMsIDE1MCwgMjQzLCAwLjMpXFxuICApO1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlIC5lbXB0eSB7XFxuICBwYWRkaW5nOiA4cHggNnB4O1xcbn1cXG5cXG4uYXV0b2NvbXBsZXRlLWlucHV0LWVycm9yIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAtMnB4IDAgI2U5MWU2MyBpbnNldDtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAtMnB4IDAgI2U5MWU2MyBpbnNldDtcXG59XFxuXFxuLmF1dG9jb21wbGV0ZS1pbnB1dC1zdWNjZXNzIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAtMnB4IDAgIzRjYWY1MCBpbnNldDtcXG4gICAgICAgICAgYm94LXNoYWRvdzogMCAtMnB4IDAgIzRjYWY1MCBpbnNldDtcXG59XFxuXCIiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/client/dist/bbj-grid-widget.min.js b/client/dist/bbj-grid-widget.min.js index c35f71da..6a079f76 100644 --- a/client/dist/bbj-grid-widget.min.js +++ b/client/dist/bbj-grid-widget.min.js @@ -1,4 +1,4 @@ -!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=40)}([function(e,t,n){"use strict";function r(e){window.BBjGridExWidget=window.BBjGridExWidget||{};var t=window.BBjGridExWidget[e]||null;if(!t){var n=JSON.stringify(Object.keys(window.BBjGridExWidget));throw new TypeError("\n\n[Grid Not Found] The method asked for non-existent grid instance.\n-------------------------------------------------------------------\nRequired Grid Id : ".concat(e," \nRegistered Grids : ").concat(n,"\n"))}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getDocument=function(){return"undefined"!=typeof $doc?$doc:document},t.gw_getWindow=function(){return"undefined"!=typeof $wnd?$wnd:window},t.gw_escape=function(e){return null!==e&&void 0!==e?e:""},t.gw_uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0,n="x"==e?t:3&t|8;return n.toString(16)})},t.gw_getGrid=r,t.gw_addGrid=function(e,t){return window.BBjGridExWidget=window.BBjGridExWidget||{},window.BBjGridExWidget[e]=t,r(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_debounce=function(e,t,n){var r;return function(){var o=this,i=arguments,a=n&&!r;clearTimeout(r),r=setTimeout(function(){r=null,n||e.apply(o,i)},t),a&&e.apply(o,i)}},t.gw_sendEvent=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if((e.interests||[]).includes(n)){var o=(0,r.gw_getDocument)().getElementById("".concat(e.id));window.basisDispatchCustomEvent(o,t)}},t.gw_parseNode=o,t.gw_parseNodeFromEvent=function(e){return o(e.node,e.context)};var r=n(0);function o(e,t){if(!0===e.group)return!1;var n=e.rowPinned?"__ROW_INDEX":t.getRowNodeId;return{i:t.hasOwnProperty("getRowNodeId")&&e.data[n]?e.data[n]:e.id,x:e.rowIndex,p:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:"",c:e.rowPinned?-1:e.childIndex,s:Boolean(e.selected),cr:t.hasOwnProperty("includeClientRowData")&&!0===t.includeClientRowData?e.data:null,pp:e.rowPinned}}},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(9)),o=a(n(67)),i=a(n(68));function a(e){return e&&e.__esModule?e:{default:e}}var u="[object Null]",c="[object Undefined]",l=r.default?r.default.toStringTag:void 0;var s=function(e){return null==e?void 0===e?c:u:l&&l in Object(e)?(0,o.default)(e):(0,i.default)(e)};t.default=s},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){return null!=e&&"object"==r(e)};t.default=o},function(e,t,n){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports={deepParseJson:function e(t){if("string"!=typeof t)return Array.isArray(t)?t.map(function(t){return e(t)}):"object"===r(t)&&null!==t?Object.keys(t).reduce(function(n,r){return n[r]=e(t[r]),n},{}):t;try{return e(JSON.parse(t))}catch(e){return t}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GW_EVENT_KEYPRESS=t.GW_EVENT_RANGE_SELECTION_CHANGED=t.GW_EVENT_GRID_STATE_CHANGE=t.GW_EVENT_ROW_VALUE_CHANGED=t.GW_EVENT_ROW_EDITING_STOPPED=t.GW_EVENT_ROW_EDITING_STARTED=t.GW_EVENT_CELL_VALUE_CHANGED=t.GW_EVENT_CELL_EDITING_STOPPED=t.GW_EVENT_CELL_EDITING_STARTED=t.GW_EVENT_CELL_DOUBLE_CLICK=t.GW_EVENT_CELL_CLICK=t.GW_EVENT_ROW_DOUBLE_CLICK=t.GW_EVENT_ROW_CLICK=t.GW_EVENT_ROW_SELECT=void 0;t.GW_EVENT_ROW_SELECT=69;t.GW_EVENT_ROW_CLICK=5011;t.GW_EVENT_ROW_DOUBLE_CLICK=52;t.GW_EVENT_CELL_CLICK=5001;t.GW_EVENT_CELL_DOUBLE_CLICK=5002;t.GW_EVENT_CELL_EDITING_STARTED=5003;t.GW_EVENT_CELL_EDITING_STOPPED=5004;t.GW_EVENT_CELL_VALUE_CHANGED=5005;t.GW_EVENT_ROW_EDITING_STARTED=5006;t.GW_EVENT_ROW_EDITING_STOPPED=5007;t.GW_EVENT_ROW_VALUE_CHANGED=5012;t.GW_EVENT_GRID_STATE_CHANGE=5008;t.GW_EVENT_RANGE_SELECTION_CHANGED=5009;t.GW_EVENT_KEYPRESS=5010},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){var t=r(e);return null!=e&&("object"==t||"function"==t)};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(10)).default.Symbol;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(25));function o(e){"@babel/helpers - typeof";return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i="object"==("undefined"==typeof self?"undefined":o(self))&&self&&self.Object===Object&&self,a=r.default||i||Function("return this")();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){return e===t||e!=e&&t!=t};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(24)),o=i(n(30));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){return null!=e&&(0,o.default)(e.length)&&!(0,r.default)(e)};t.default=a},function(e,t,n){var r={},o=function(e){var t;return function(){return void 0===t&&(t=e.apply(this,arguments)),t}}(function(){return window&&document&&document.all&&!window.atob}),i=function(e){var t={};return function(e){if("function"==typeof e)return e();if(void 0===t[e]){var n=function(e){return document.querySelector(e)}.call(this,e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}}(),a=null,u=0,c=[],l=n(121);function s(e,t){for(var n=0;n=0&&c.splice(t,1)}function h(e){var t=document.createElement("style");return e.attrs.type="text/css",g(t,e.attrs),f(e,t),t}function g(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function b(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var c=u++;n=a||(a=h(t)),r=m.bind(null,n,c,!1),o=m.bind(null,n,c,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",g(t,e.attrs),f(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=l(r));o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){p(n),n.href&&URL.revokeObjectURL(n.href)}):(n=h(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){p(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=d(e,t);return s(n,t),function(e){for(var o=[],i=0;i1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(0,r.gw_getGrid)(e).options.columnApi;if(n&&n.length)o.autoSizeColumns(n,Boolean(t));else{var i=[];o.getAllColumns().forEach(function(e){i.push(e.colId)}),o.autoSizeColumns(i,Boolean(t))}},t.gw_ensureColumnVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.ensureColumnVisible(t)},t.gw_setColumnWidth=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnWidth(t,Number(n))},t.gw_pinColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnPinned(t,n)},t.gw_moveColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.moveColumn(t,n)},t.gw_isShowSelectionCheckbox=u,t.gw_isHeaderCheckboxSelection=c,t.gw_addRowGroupColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setRowGroupColumns":"addRowGroupColumns"](t.split(",").map(function(e){return e.trim()}))},t.gw_removeRowGroupColumn=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeRowGroupColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_getPivotMode=function(e){return(0,r.gw_getGrid)(e).options.columnApi.isPivotMode()},t.gw_setPivotMode=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.setPivotMode(!!Number(t))},t.gw_addPivotColumns=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setPivotColumns":"addPivotColumns"](t.split(",").map(function(e){return e.trim()}))},t.gw_removePivotColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removePivotColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_addValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.addValueColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_removeValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeValueColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_setSortModel=function(e,t){var n=[];JSON.parse(t).forEach(function(e){for(var t in e)n.push({colId:t,sort:e[t]})}),(0,r.gw_getGrid)(e).options.api.setSortModel(n)},t.gw_refreshHeader=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setColumnVisible=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnsVisible(t.split(","),Boolean(n))};var r=n(0),o=n(17),i=n(6).deepParseJson;function a(e){var t=function(t){var n=e[t];n.checkboxSelection=n.checkboxSelection||u,n.headerCheckboxSelection=n.headerCheckboxSelection||c;var r=n.tooltipValueGetter;if(r&&(n.tooltipValueGetter=function(e){return(0,o.gw_executeExpression)(r,e)}),n.tooltipComponent="HTMLTooltip",n.hasOwnProperty("editable")&&"string"==typeof n.editable){var i=n.editable;n.editable=function(e){return(0,o.gw_executeExpression)(i,e)}}if(n.hasOwnProperty("rowSpan")&&"string"==typeof n.rowSpan){var l=n.rowSpan;n.rowSpan=function(e){return(0,o.gw_executeExpression)(l,e)}}if(n.hasOwnProperty("colSpan")&&"string"==typeof n.colSpan){var s=n.colSpan;n.colSpan=function(e){return(0,o.gw_executeExpression)(s,e)}}n.hasOwnProperty("children")&&a(n.children)};for(var n in e)t(n)}function u(e){return!!e.context.showSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}function c(e){return!!e.api.gridOptionsWrapper.gridOptions.context.showHeaderSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}},function(e,t,n){"use strict";function r(e){if(void 0===r.expressionCache&&(r.expressionCache=[]),r.expressionCache[e])return r.expressionCache[e];var t=null;t=e.indexOf("return")>=0?e:"return "+e+";";var n=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup",t);return r.expressionCache[e]=n,n}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_compileExpression=r,t.gw_executeExpression=function(e,t){try{var n=r(e),o=n(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup);return o}catch(n){return console.log("Processing of the expression failed"),console.log("Expression = "+e),console.log("Params =",t),console.log("Exception = "+n),null}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setQuickFilter=function(e,t){(0,r.gw_getGrid)(e).options.api.setQuickFilter(t)},t.gw_expandAll=function(e){(0,r.gw_getGrid)(e).options.api.expandAll()},t.gw_collapseAll=function(e){(0,r.gw_getGrid)(e).options.api.collapseAll()},t.gw_ensureIndexVisible=function(e,t,n){var o=(0,r.gw_getGrid)(e).options.api,i=o.getRowNode(t);i?o.ensureNodeVisible(i,n):o.ensureIndexVisible(Number(t),n)},t.gw_navigateToNextRow=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=t.previousCellPosition,i=t.nextCellPosition;switch(t.key){case 40:if(i&&!i.rowPinned)if(o.rowPinned){var a=n.api.getDisplayedRowAtIndex(n.api.getFirstDisplayedRow());a&&a.setSelected(!0)}else n.api.forEachNode(function(e){o.rowIndex+1===e.rowIndex&&e.setSelected(!0)});return i;case 38:if(i&&!i.rowPinned)if(o.rowPinned){var u=n.api.getDisplayedRowAtIndex(n.api.getLastDisplayedRow());u&&u.setSelected(!0)}else n.api.forEachNode(function(e){o.rowIndex-1===e.rowIndex&&e.setSelected(!0)});return i;case 37:case 39:return i;default:throw new Error("You have super strange keyboard")}},t.gw_getRowNodeId=function(e,t){return t[(0,r.gw_getGrid)(e).options.context.getRowNodeId]},t.gw_setRowData=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.setRowData(t),n.rowData=t},t.gw_updateRowData=function(e,t,n){var o=(0,r.gw_getGrid)(e).options;if(t.remove.length){var i=[];t.remove.forEach(function(e){i.push(o.api.getRowNode(e).data)}),t.remove=i}n?o.api.applyTransactionAsync(t):o.api.applyTransaction(t)},t.gw_setRowsHeight=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNode(function(e){e.setRowHeight(t)}),n.onRowHeightChanged()},t.gw_setRowHeight=function(e,t,n){var o=(0,r.gw_getGrid)(e).options,i=o.api,a=i.getRowNode(t)||i.getDisplayedRowAtIndex(t);a?(a.setRowHeight(n),o.api.onRowHeightChanged()):console.warn("Failed to set height for row ".concat(t,". Row cannot be found"))},t.gw_resetRowHeights=function(e){(0,r.gw_getGrid)(e).options.api.resetRowHeights()},t.gw_setSelectedRows=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNodeAfterFilterAndSort(function(e){(t.indexOf(String(e.rowIndex))>-1||t.indexOf(String(e.id))>-1)&&(e.setSelected(!0),e.expanded=!0)}),n.onGroupExpandedOrCollapsed()},t.gw_selectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.selectAllFiltered():n.api.selectAll()},t.gw_deselectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.deselectAllFiltered():n.api.deselectAll()},t.gw_getSelectedRows=a,t.gw_getSelectedRow=function(e){var t=JSON.parse(a(e));if(t.length)return JSON.stringify(t[t.length-1]);return""},t.gw_getRow=function(e,t){var n=(0,r.gw_getGrid)(e).options;return JSON.stringify((0,o.gw_parseNode)(n.api.getRowNode(t),n.context))},t.gw_getRows=function(e,t,n){var a=(0,r.gw_getGrid)(e).options,u=[];return a.api[t](function(e){e.group||(n?(0,i.gw_executeExpression)(n,{value:e.data,context:a.context,oldValue:null,newValue:null,node:e,data:e.data,colDef:null,rowIndex:e.rowIndex,api:e.gridApi,columnApi:e.columnApi,getValue:function(){return e.data},column:null,columnGroup:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:""})&&u.push((0,o.gw_parseNode)(e,a.context)):u.push((0,o.gw_parseNode)(e,a.context)))}),JSON.stringify(u)},t.gw_redrawRows=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setPinnedTopRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedTopRowData(t)},t.gw_setPinnedBottomRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedBottomRowData(t)};var r=n(0),o=n(1),i=n(17);function a(e){var t=(0,r.gw_getGrid)(e).options,n=[];return t.api.getSelectedNodes().forEach(function(e){n.push((0,o.gw_parseNode)(e,t.context))}),JSON.stringify(n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getChartToolbarItems=function(e){return e.api.gridOptionsWrapper.gridOptions.context.chartToolbarItems||[]},t.gw_addChartRange=function(e,t){var n=(0,r.gw_getGrid)(e),a=n.options,u=i(JSON.stringify(t));u.cellRange=(0,o.gw_parseAddCellRange)(a,u.cellRange);var c=a.api.createRangeChart(u),l=(0,r.gw_uuid)();return n.created_charts=n.created_charts||{},n.created_charts[l]=c,l},t.gw_destroyChart=function(e,t){var n=(0,r.gw_getGrid)(e);if(t)n.hasOwnProperty("created_charts")&&n.created_charts.hasOwnProperty(t)&&n.created_charts[t].destroyChart();else if(n.hasOwnProperty("created_charts"))for(var o in n.created_charts)if(n.created_charts.hasOwnProperty(o)){var i=n.created_charts[o];i.destroyChart()}};var r=n(0),o=n(20),i=n(6).deepParseJson},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_startEditingCell=function(e,t,n,o,i,a){var u=(0,r.gw_getGrid)(e).options,c=u.api,l=c.getRowNode(t)||c.getDisplayedRowAtIndex(t);u.api.startEditingCell({rowIndex:l.rowIndex,keyPress:Number(o),colKey:n,charPress:i,rowPinned:a})},t.gw_stopEditing=function(e,t){(0,r.gw_getGrid)(e).options.api.stopEditing(t)},t.gw_tabToNextCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToNextCell()},t.gw_tabToPreviousCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToPreviousCell()},t.gw_setFocusedCell=function(e,t,n){var o,i,a,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=(0,r.gw_getGrid)(e).options;if(c.api.getEditingCells().length>0)return;if(-1==t){var l=c.api.getFocusedCell();l?(o=l.rowIndex,i=l.column.colId,a=l.rowPinned):(o=0,i=c.columnApi.getAllGridColumns()[0].colId,a=u)}else o=t?Number.isInteger(+t)?+t:c.api.getRowNode(t).rowIndex:0,i=n||c.columnApi.getAllGridColumns()[0].colId,a=u;(0,r.gw_getGrid)(e).options.api.setFocusedCell(o,i,a)},t.gw_getRangeSelections=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.context,i=t.api,a=i.getCellRanges(),u=i.getModel(),c=[];return a.forEach(function(e){for(var t=e.columns.reduce(function(e,t){return"ag-Grid-AutoColumn"!==t.colId&&e.push(t.colId),e},[]).filter(Boolean),r=Math.min(e.startRow.rowIndex,e.endRow.rowIndex),i=Math.max(e.startRow.rowIndex,e.endRow.rowIndex),a=[],l=r;l<=i;l++){var s=u.getRow(l);if(s){var d=(0,o.gw_parseNode)(s,n);d&&a.push(d)}}a.length&&t.length&&c.push({r:a,c:t})}),JSON.stringify(c)},t.gw_parseAddCellRange=a,t.gw_addCellRange=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.addCellRange(a(n,t))},t.gw_clearRangeSelection=function(e){(0,r.gw_getGrid)(e).options.api.clearRangeSelection()};var r=n(0),o=n(1),i=n(6).deepParseJson;function a(e,t){var n=i(JSON.stringify(t)),r=n.start?Number.isInteger(+n.start)?+n.start:e.api.getRowNode(n.start).rowIndex:0,o=n.end?Number.isInteger(+n.end)?+n.end:e.api.getRowNode(n.end).rowIndex:e.rowData.length-1;return{rowStartIndex:Math.abs(r),rowEndIndex:Math.abs(o),columns:n.columns}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=h(n(62)),o=h(n(91)),i=h(n(94)),a=h(n(95)),u=h(n(96)),c=h(n(35)),l=h(n(29)),s=h(n(97)),d=h(n(38)),f=h(n(100)),p=h(n(39));function h(e){return e&&e.__esModule?e:{default:e}}var g=/\b__p \+= '';/g,b=/\b(__p \+=) '' \+/g,y=/(__e\(.*?\)|\b__t\)) \+\n'';/g,m=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,v=/($^)/,_=/['\n\r\u2028\u2029\\]/g,w=Object.prototype.hasOwnProperty;var k=function(e,t,n){var h=f.default.imports._.templateSettings||f.default;n&&(0,l.default)(e,t,n)&&(t=void 0),e=(0,p.default)(e),t=(0,r.default)({},t,h,a.default);var k,O,C=(0,r.default)({},t.imports,h.imports,a.default),x=(0,s.default)(C),D=(0,i.default)(C,x),E=0,S=t.interpolate||v,j="__p += '",M=RegExp((t.escape||v).source+"|"+S.source+"|"+(S===d.default?m:v).source+"|"+(t.evaluate||v).source+"|$","g"),P=w.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";e.replace(M,function(t,n,r,o,i,a){return r||(r=o),j+=e.slice(E,a).replace(_,u.default),n&&(k=!0,j+="' +\n__e("+n+") +\n'"),i&&(O=!0,j+="';\n"+i+";\n__p += '"),r&&(j+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),E=a+t.length,t}),j+="';\n";var T=w.call(t,"variable")&&t.variable;T||(j="with (obj) {\n"+j+"\n}\n"),j=(O?j.replace(g,""):j).replace(b,"$1").replace(y,"$1;"),j="function("+(T||"obj")+") {\n"+(T?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(k?", __e = _.escape":"")+(O?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+j+"return __p\n}";var I=(0,o.default)(function(){return Function(x,P+"return "+j).apply(void 0,D)});if(I.source=j,(0,c.default)(I))throw I;return I};t.default=k},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(23));var o=function(e,t,n){"__proto__"==t&&r.default?(0,r.default)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(65));var o=function(){try{var e=(0,r.default)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}var a="[object AsyncFunction]",u="[object Function]",c="[object GeneratorFunction]",l="[object Proxy]";var s=function(e){if(!(0,o.default)(e))return!1;var t=(0,r.default)(e);return t==u||t==c||t==a||t==l};t.default=s},function(e,t,n){"use strict";(function(e){function n(e){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.default=r}).call(this,n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(27)),o=a(n(74)),i=a(n(75));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e,t){return(0,i.default)((0,o.default)(e,t,r.default),e+"")};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(11)),o=u(n(12)),i=u(n(31)),a=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e,t,n){if(!(0,a.default)(n))return!1;var u=c(t);return!!("number"==u?(0,o.default)(n)&&(0,i.default)(t,n.length):"string"==u&&t in n)&&(0,r.default)(n[t],e)};t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=9007199254740991;var o=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r};t.default=o},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=9007199254740991,i=/^(?:0|[1-9]\d*)$/;var a=function(e,t){var n=r(e);return!!(t=null==t?o:t)&&("number"==n||"symbol"!=n&&i.test(e))&&e>-1&&e%1==0&&e/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(104));var o=function(e){return null==e?"":(0,r.default)(e)};t.default=o},function(e,t,n){e.exports=n(41)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(42),n(44),n(48),n(50);var r=n(52);Object.keys(r).forEach(function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===r[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return r[e]}}))});var o=n(53);Object.keys(o).forEach(function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return o[e]}}))}),n(119),n(122),n(124)},function(e,t,n){(function(t){t.BBj||(t.BBj={}),e.exports=t.BBj.Masks=n(43)}).call(this,n(2))},function(e,t,n){"use strict";(function(e){var n,r,o;function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(a,u){"object"===i(t)&&"object"===i(e)?e.exports=u():(r=[],void 0===(o="function"==typeof(n=u)?n.apply(t,r):n)||(e.exports=o))}("undefined"!=typeof self&&self,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t,n){t.a=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);if(isNaN(t))return t;return t<0?Math.ceil(t):Math.floor(t)}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7);n.d(t,"e",function(){return r.e}),n.d(t,"g",function(){return r.g}),n.d(t,"h",function(){return r.h}),n.d(t,"a",function(){return r.a}),n.d(t,"b",function(){return r.b}),n.d(t,"d",function(){return r.d}),n.d(t,"f",function(){return r.f}),t.c=r.c},function(e,t,n){t.a=function(e,t){var n,c,l;if(n=a.timezoneZ.exec(e))return 0;if(n=a.timezoneHH.exec(e))return u(l=parseInt(n[2],10))?(c=l*o,"+"===n[1]?-c:c):NaN;if(n=a.timezoneHHMM.exec(e)){l=parseInt(n[2],10);var s=parseInt(n[3],10);return u(l,s)?(c=l*o+s*i,"+"===n[1]?-c:c):NaN}if(n=a.timezoneIANA.exec(e)){var d=Object(r.a)(t,e),f=Date.UTC(d[0],d[1]-1,d[2],d[3],d[4],d[5]),p=t.getTime()-t.getTime()%1e3;return-(f-p)}return 0};var r=n(9),o=36e5,i=6e4,a={timezone:/([Z+-].*)$/,timezoneZ:/^(Z)$/,timezoneHH:/^([+-])(\d{2})$/,timezoneHHMM:/^([+-])(\d{2}):?(\d{2})$/,timezoneIANA:/(UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function u(e,t){return null==t||!(t<0||t>59)}},function(e,t,n){var r=n(19);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Utils",function(){return u});var r=n(1),o=n(2),i=n(4),a=n(20);n.d(t,"Types",function(){return a.a}),n.d(t,"NumberMask",function(){return r.a}),n.d(t,"DateMask",function(){return o.c}),n.d(t,"StringMask",function(){return i.a});var u={Dates:{getDayOfYear:o.e,getWeekNumber:o.g,getWeekStartByLocale:o.h,IS_DATE_REGEX:o.a,IS_TIME_REGEX:o.b,fixShortISO:o.d,getTimezoneOrOffset:o.f}};t.default=a.a},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",k=0,O=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[O]=r:(M[O]=_,s||(C=P)),++O;break;case"-":j||" "!=w?M[O]=D?"-":_:(D&&(w="-"),M[O]=_,C=s?-1:P),++O;break;case"+":j||" "!=w?M[O]=D?"-":"+":(w=D?"-":"+",M[O]=_,C=s?-1:P),++O;break;case"$":j||" "!=w?M[O]="$":(w="$",M[O]=_,C=s?-1:P),++O;break;case"(":j||" "!=w?M[O]=D?"(":s?" ":_:(D&&(w="("),M[O]=_,C=s?-1:P),++O;break;case")":M[O]=D?")":s?" ":_,++O;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.a=o},function(e,t,n){n.d(t,"b",function(){return a}),n.d(t,"a",function(){return u}),n.d(t,"h",function(){return c}),n.d(t,"e",function(){return l}),n.d(t,"d",function(){return s}),n.d(t,"f",function(){return d}),n.d(t,"g",function(){return f});var r=n(8),o=n(15);function i(e,t){for(var n=0;n12?"PM":"AM",pp:e.hours24>12?"pm":"am",p:e.hours24>12?"pm":"am",Jz:1==String(e.dayOfYear).length?"0"+e.dayOfYear:e.dayOfYear,Js:e.dayOfYear,Jl:e.dayOfYear,Jd:e.dayOfYear,J:e.dayOfYear,Wz:1==String(e.dayOfWeek).length?"0"+e.dayOfWeek:e.dayOfWeek,Ws:e.dayOfWeek,Wl:e.dayOfWeek,Wp:String.fromCharCode(e.dayOfWeek),Wd:e.dayOfWeek,W:e.dayOfWeek,wz:1==String(e.weekNumber).length?"0"+e.weekNumber:e.weekNumber,ws:e.weekNumber,wl:e.weekNumber,wp:String.fromCharCode(e.weekNumber),wd:e.weekNumber,w:e.weekNumber}}}]),e}();t.c=p},function(e,t,n){t.a=function(e,t,n){var a=Object(i.a)(e,n),u=new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds()),c=Object(r.a)(t,a);return c?Object(o.a)(u,c):u};var r=n(3),o=n(10),i=n(13)},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5};var o={}},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(0),o=n(11)},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(o.a)(e).getTime(),i=Object(r.a)(t);return new Date(n+i)};var r=n(0),o=n(12)},function(e,t,n){t.a=function(e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===i(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===i(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length)));if(t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),m=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=m.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),o=parseInt(n[1],10)-1,g(t,o)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return i=parseInt(n[1],10)-1,b(t,i)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(t,i,c)?d(t,i,c):new Date(NaN)}return null}(m.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,k=_.getTime(),O=0;if(p.time&&(O=function(e){var t,n,r;if(t=s.HH.exec(e))return y(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),y(n,r)?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return y(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(O)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(a.a)(p.timezone||n.timeZone,new Date(k+O)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(k+O)),w=Object(o.a)(new Date(k+O+w));return new Date(k+O+w)}return new Date(NaN)};var r=n(0),o=n(14),a=n(3),u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function y(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var o=t.getTime()%r;return n*r+o};var r=6e4},function(e,t,n){n.d(t,"a",function(){return a});var r=n(16),o=n(17),i=n(18);function a(e){return Object(r.a)(e,o.a,i.a)}},function(e,t,n){function r(e,t){var n=t["string"==typeof e?e.toUpperCase():e];return"number"==typeof n?n:1}function o(e,t,n){if(e){var o,i=e.toLowerCase().split(/[-_]/),a=i[0];if(i[1]&&4===i[1].length?(a+="_"+i[1],o=i[2]):o=i[1],o||(o=t[a]),o)return r(o.match(/^\d+$/)?Number(o):o,n)}return 1}n.d(t,"b",function(){return r}),n.d(t,"a",function(){return o})},function(e,t,n){t.a={en:"US",zh:"CN",zh_hans:"CN",hans:"CN",wuu:"CN",hsn:"CN",hak:"CN",nan:"CN",gan:"CN",hi:"IN",te:"IN",mr:"IN",ta:"IN",gu:"IN",kn:"IN",or:"IN",ml:"IN",pa_guru:"IN",bho:"IN",awa:"IN",as:"IN",mwr:"IN",mai:"IN",mag:"IN",bgc:"IN",hne:"IN",dcc:"IN",dz:"BT",tn:"BW",am:"ET",om:"ET",quc:"GT",id:"ID",jv:"ID",su:"ID",mad:"ID",ms_arab:"ID",ga:"IE",he:"IL",jam:"JM",ja:"JP",km:"KH",ko:"KR",lo:"LA",mh:"MH",my:"MM",mt:"MT",ne:"NP",fil:"PH",ceb:"PH",ilo:"PH",ur:"PK",pa:"PK",pa_arab:"PK",arab:"PK",lah:"PK",ps:"PK",sd:"PK",sd_arab:"PK",skr:"PK",gn:"PY",th:"TH",tts:"TH",aeb:"TN",zh_hant:"TW",hant:"TW",sm:"WS",zu:"ZA",sn:"ZW",arq:"DZ",ar:"EG",arz:"EG",fa:"IR",az_arab:"IR",ary:"MA",bn:"BD",rkt:"BD",dv:"MV"}},function(e,t,n){t.a={AG:0,ATG:0,28:0,AR:0,ARG:0,32:0,AS:0,ASM:0,16:0,AU:0,AUS:0,36:0,BR:0,BRA:0,76:0,BS:0,BHS:0,44:0,BT:0,BTN:0,64:0,BW:0,BWA:0,72:0,BZ:0,BLZ:0,84:0,CA:0,CAN:0,124:0,CN:0,CHN:0,156:0,CO:0,COL:0,170:0,DM:0,DMA:0,212:0,DO:0,DOM:0,214:0,ET:0,ETH:0,231:0,GT:0,GTM:0,320:0,GU:0,GUM:0,316:0,HK:0,HKG:0,344:0,HN:0,HND:0,340:0,ID:0,IDN:0,360:0,IE:0,IRL:0,372:0,IL:0,ISR:0,376:0,IN:0,IND:0,356:0,JM:0,JAM:0,388:0,JP:0,JPN:0,392:0,KE:0,KEN:0,404:0,KH:0,KHM:0,116:0,KR:0,KOR:0,410:0,LA:0,LA0:0,418:0,MH:0,MHL:0,584:0,MM:0,MMR:0,104:0,MO:0,MAC:0,446:0,MT:0,MLT:0,470:0,MX:0,MEX:0,484:0,MZ:0,MOZ:0,508:0,NI:0,NIC:0,558:0,NP:0,NPL:0,524:0,NZ:0,NZL:0,554:0,PA:0,PAN:0,591:0,PE:0,PER:0,604:0,PH:0,PHL:0,608:0,PK:0,PAK:0,586:0,PR:0,PRI:0,630:0,PY:0,PRY:0,600:0,SA:0,SAU:0,682:0,SG:0,SGP:0,702:0,SV:0,SLV:0,222:0,TH:0,THA:0,764:0,TN:0,TUN:0,788:0,TT:0,TTO:0,780:0,TW:0,TWN:0,158:0,UM:0,UMI:0,581:0,US:0,USA:0,840:0,VE:0,VEN:0,862:0,VI:0,VIR:0,850:0,WS:0,WSM:0,882:0,YE:0,YEM:0,887:0,ZA:0,ZAF:0,710:0,ZW:0,ZWE:0,716:0,AE:6,ARE:6,784:6,AF:6,AFG:6,4:6,BH:6,BHR:6,48:6,DJ:6,DJI:6,262:6,DZ:6,DZA:6,12:6,EG:6,EGY:6,818:6,IQ:6,IRQ:6,368:6,IR:6,IRN:6,364:6,JO:6,JOR:6,400:6,KW:6,KWT:6,414:6,LY:6,LBY:6,434:6,MA:6,MAR:6,504:6,OM:6,OMN:6,512:6,QA:6,QAT:6,634:6,SD:6,SDN:6,729:6,SY:6,SYR:6,760:6,BD:5,BGD:5,50:5,MV:5,MDV:5,462:5}},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return r.a.mask(e,t,n,o,i,a)}},{key:"date",value:function(e,t,n,r){return o.c.mask(e,t,n,r)}},{key:"string",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return i.a.mask(e,t,n)}}]),e}();t.a=u}])})}).call(this,n(5)(e))},function(e,t,n){(function(t){t.Basis||(t.Basis={}),e.exports=t.Basis.InputMasking=n(45)}).call(this,n(2))},function(module,exports,__webpack_require__){"use strict";(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(e){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e,t){"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=t(__webpack_require__(14),__webpack_require__(15)):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__(14),__webpack_require__(15)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}("undefined"!=typeof self&&self,function(__WEBPACK_EXTERNAL_MODULE_0__,__WEBPACK_EXTERNAL_MODULE_7__){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_0__},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(5);n.d(t,"TextInput",function(){return r.a}),n.d(t,"NumberInput",function(){return o.a})},function(e,t,n){var r=n(3);t.a=r.a},function(e,t,n){var r=n(0),o=n.n(r),i=n(4);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),o=e.dataset.mask||"",a=e.pattern,u=Object(i.b)(o),c=a||u,l=null,s=null;return t?s=(l=e.parentNode).querySelector(".textInputMask__unmaskedInput"):(l=this.options.doc.createElement("span"),s=this.options.doc.createElement("input")),e.value=Object(i.c)(e.value,o),e.pattern=c,e.classList.add("textInputMask__textInput"),e.dataset.mask=o,e.dataset.valueUnmasked=Object(i.d)(e.value,o),a&&a!==u&&(e.dataset.isCustomPattern=!0),t||(e.hasAttribute("readonly")||e.hasAttribute("disable")||(e.addEventListener("keyup",this._onKeystroke),e.addEventListener("keypress",this._onKeystroke),e.addEventListener("paste",this._onKeystroke),e.addEventListener("focusin",this._onFocus),e.addEventListener("click",this._onFocus)),e.parentNode.insertBefore(l,e)),this._validateInput(e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),s.setAttribute("aria-hidden","true"),s.setAttribute("type","hidden"),s.classList.add("textInputMask__unmaskedInput"),s.value=e.dataset.valueUnmasked,n&&s.setAttribute("id","".concat(n,"-unmasked")),r&&s.setAttribute("name","".concat(r,"-unmasked")),t||(l.setAttribute("class","textInputMask__wrap"),l.appendChild(s),l.appendChild(e)),l}},{key:"_unwrap",value:function(e){e.removeChild(e.querySelector(".textInputMask__unmaskedInput"));var t=e.querySelector(".textInputMask__textInput");t.removeEventListener("keyup",this._onKeystroke),t.removeEventListener("keypress",this._onKeystroke),t.removeEventListener("paste",this._onKeystroke),t.removeEventListener("focusin",this._onFocus),t.removeEventListener("click",this._onFocus),delete t.dataset.valueUnmasked,t.dataset.isCustomPattern||(t.removeAttribute("pattern"),delete t.dataset.isCustomPattern),t.classList.remove(this.options.cssClassError),e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_onKeystroke",value:function(e){if(!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)){13!==e.keyCode&&e.preventDefault();var t=e.target,n=t.dataset.mask||this.options.mask,r=e.type;t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),t.setCustomValidity("");var a,u,c=t.value,l=e.keyCode,s=e.key||e.code.replace(/[^0-9]/g,""),d=s?s.length>1?"":s:"",f=Object(i.a)(c,n),p=!1;switch(r){case"paste":a=Object(i.c)((e.clipboardData||window.clipboardData).getData("Text"),n);break;case"keyup":a=c;break;case"keypress":var h=t.selectionStart;h!==f&&(f=h),a=c.substr(0,f)+d+c.substr(f)}if(u=Object(i.d)(a,n),-1===[35,36,37,38,39,40].indexOf(l)){try{t.value=o.a.mask(u,n,!1),this._validateInput(t)&&(t.dataset.valueUnmasked=u,this.options.doc.querySelector("#".concat(t.getAttribute("id"),"-unmasked")).value=u,this.__applyCssClassState(t,"success"),this.__fireOnUpdate(t.value,t.dataset.valueUnmasked,t)),p=!1}catch(e){this.__applyCssClassState(t,"error"),this.__fireOnInvalid(e,t),p=!0}this._updateCaretPosition(t,n)}p||this._validateInput(t)}}},{key:"_onFocus",value:function(e){var t=e.target,n=t.dataset.mask||this.options.mask;this._updateCaretPosition(t,n)}},{key:"_updateCaretPosition",value:function(e,t){setTimeout(function(){var n=Object(i.a)(e.value,t);e.setSelectionRange(n,n)},0)}},{key:"_validateInput",value:function(e){var t=e.checkValidity();return t?(this.__applyCssClassState(e,"success"),e.setCustomValidity("")):(this.__applyCssClassState(e,"error"),this.__fireOnInvalid(e.validationMessage,e)),t}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t){e.hasAttribute("readonly")||e.hasAttribute("disabled")?(e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===t&&(e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===t&&(e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,"c",function(){return maskIfNotMasked}),__webpack_require__.d(__webpack_exports__,"d",function(){return unmask}),__webpack_require__.d(__webpack_exports__,"a",function(){return findCaretPosition}),__webpack_require__.d(__webpack_exports__,"b",function(){return generatePatternFromMask});var __WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__=__webpack_require__(0),__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__),SUPPORTED_MASKS=["X","a","A","0","z","Z","U"],IS_UNICODE_PROPERTY_SUPPORTED=!1;try{eval("/\\p{L}/u"),IS_UNICODE_PROPERTY_SUPPORTED=!0}catch(e){IS_UNICODE_PROPERTY_SUPPORTED=!1}var isMaskedValue=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=unmask(t,n);e.__CACHE__[r]=t===__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(o,n)}return e.__CACHE__[r]},maskIfNotMasked=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r])if(isMaskedValue(t,n))e.__CACHE__[r]=t;else try{e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(t,n,!1)}catch(t){e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask("",n)}return e.__CACHE__[r]},generatePatternFromMask=function e(t){void 0===e.__CACHE__&&(e.__CACHE__={});var n=t;if(!e.__CACHE__[n]){var r="";t.split("").forEach(function(e){switch(e){case"X":r+="([^ -~])";break;case"a":case"A":r+=IS_UNICODE_PROPERTY_SUPPORTED?"\\p{L}":"((?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"0":r+="([0-9])";break;case"z":case"Z":r+=IS_UNICODE_PROPERTY_SUPPORTED?"([0-9]|\\p{L})":"([0-9]|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"U":r+=IS_UNICODE_PROPERTY_SUPPORTED?"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(\\p{L}))":"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;default:r+=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}),e.__CACHE__[n]=r}return e.__CACHE__[n]},unmask=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){for(var o=n.split(""),i=t.split(""),a="",u=0;u-1){if(!new RegExp(generatePatternFromMask(l),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(c))break;a+=c}}e.__CACHE__[r]=a.toLocaleLowerCase()}return e.__CACHE__[r]},findCaretPosition=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=n.split(""),i=t.split("");i.length-1)if(!new RegExp(generatePatternFromMask(c),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(i[u])){a=u;break}}e.__CACHE__[r]=a<0?i.length:a}return e.__CACHE__[r]}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7),o=n.n(r);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),i=e.dataset.step||null,a=e.dataset.max||null,u=e.dataset.min||null,l=e.dataset.groupingSeparator||",",s=e.dataset.decimalSeparator||".",d=e.dataset.forceTrailingZeros||null,f=e.dataset.mask||"",p=e.getAttribute("class"),h=e.getAttribute("required")||null,g=null,b=null;if(t?b=(g=e.parentNode).querySelector(".numberInputMask__unmaskedInput"):(g=this.options.doc.createElement("span"),b=this.options.doc.createElement("input")),t||(e.parentNode.insertBefore(g,e),e.hasAttribute("readonly")||e.hasAttribute("disabled")||(e.addEventListener("click",this._actualInputHandler),e.addEventListener("focusin",this._actualInputHandler))),e.dataset.valueUnmasked=e.value||0,e.dataset.groupingSeparator=l,e.dataset.decimalSeparator=s,e.dataset.forceTrailingZeros=d,e.value=o.a.mask(e.dataset.valueUnmasked,f,l,s,d).trim(),e.classList.add("numberInputMask__textInput",this.options.cssClassSuccess),b.value=e.dataset.valueUnmasked,b.setAttribute("aria-hidden","true"),b.setAttribute("type","hidden"),b.setAttribute("class",p),n&&b.setAttribute("id","".concat(n,"-unmasked")),r&&b.setAttribute("name","".concat(r,"-unmasked")),h&&b.setAttribute("required","required"),i)b.setAttribute("step",i);else{var y=c(b.value),m="1";y>0&&(m=".".concat(Array(y).join("0"),"1")),b.setAttribute("step",m)}return u&&b.setAttribute("min",u),a&&b.setAttribute("max",a),b.dataset.inputId=n,b.dataset.mask=f,b.dataset.groupingSeparator=l,b.dataset.decimalSeparator=s,d&&(b.dataset.forceTrailingZeros=d),t||(b.classList.add("numberInputMask__unmaskedInput"),b.addEventListener("keydown",this._unmaskedInputHandler),b.addEventListener("keyup",this._unmaskedInputHandler),b.addEventListener("focusout",this._unmaskedInputHandler),g.setAttribute("class","numberInputMask__wrap"),g.appendChild(b),g.appendChild(e)),isNaN(Number(e.dataset.valueUnmasked))?e.classList.add(this.options.cssClassError):this._validateInput(b,e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),g}},{key:"_unwrap",value:function(e){var t=e.querySelector(".numberInputMask__textInput"),n=t.id,r=e.querySelector("#".concat(n,"-unmasked"));r.removeEventListener("keyup",this._unmaskedInputHandler),r.removeEventListener("keypress",this._unmaskedInputHandler),r.removeEventListener("focusout",this._unmaskedInputHandler),e.removeChild(r),t.removeEventListener("click",this._actualInputHandler),t.removeEventListener("focusin",this._actualInputHandler),t.classList.remove("numberInputMask__textInput"),t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),delete t.dataset.valueUnmasked,e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_actualInputHandler",value:function(e){var t=e.target,n=t.id,r=this.options.doc.querySelector("#".concat(n,"-unmasked"));t.setAttribute("aria-hidden","true"),t.setAttribute("type","hidden"),r.removeAttribute("aria-hidden"),r.setAttribute("type","number"),this._validateInput(r,t),setTimeout(function(){r.focus();var e=String(r.value).length;r.type="text",r.setSelectionRange(e,e),r.type="number"},0)}},{key:"_unmaskedInputHandler",value:function(e){var t,n,r=e.target,i=e.keyCode,a=r.dataset.mask,u=r.dataset.groupingSeparator,c=r.dataset.decimalSeparator,l=r.dataset.forceTrailingZeros,s=r.dataset.inputId,d=this.options.doc.querySelector("#".concat(s)),f=!1,p=this._validateInput(r,d);try{f=o.a.mask(r.value||0,a,u,c,l,!1).trim()}catch(e){f=!1,this.__applyCssClassState(r,d,"error"),this.__fireOnInvalid(e,d)}t=[13,27].indexOf(i)>-1||"focusout"===e.type,n=f&&p,t&&(r.classList.remove(this.options.cssClassError),r.classList.remove(this.options.cssClassSuccess),r.setAttribute("aria-hidden","true"),r.setAttribute("type","hidden"),d.removeAttribute("aria-hidden"),d.setAttribute("type","text"),d.classList.add(this.options.cssClassSuccess),n?(d.value=f,d.dataset.valueUnmasked=r.value,this.__fireOnUpdate(f,r.value,d)):(r.value=d.dataset.valueUnmasked,this.__applyCssClassState(r,d,"success")))}},{key:"_validateInput",value:function(e,t){var n=!0,r=Number(e.value);if("hidden"!==e.getAttribute("type")||isNaN(r))n=e.checkValidity();else{var o=e.getAttribute("max"),i=e.getAttribute("min"),a=e.getAttribute("step");i&&(n=n&&r>=Number(i)),o&&(n=n&&r<=Number(o)),a&&(n=n&&c(a)===c(e.value))}return n?this.__applyCssClassState(e,t,"success"):(this.__applyCssClassState(e,t,"error"),this.__fireOnInvalid(e.validationMessage||"Validity check fails",t)),n}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t,n){t.hasAttribute("readonly")||t.hasAttribute("disabled")?(t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===n&&(t.classList.remove(this.options.cssClassError),t.classList.add(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===n&&(t.classList.add(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_7__}])})}).call(this,__webpack_require__(5)(module))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",k=0,O=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[O]=r:(M[O]=_,s||(C=P)),++O;break;case"-":j||" "!=w?M[O]=D?"-":_:(D&&(w="-"),M[O]=_,C=s?-1:P),++O;break;case"+":j||" "!=w?M[O]=D?"-":"+":(w=D?"-":"+",M[O]=_,C=s?-1:P),++O;break;case"$":j||" "!=w?M[O]="$":(w="$",M[O]=_,C=s?-1:P),++O;break;case"(":j||" "!=w?M[O]=D?"(":s?" ":_:(D&&(w="("),M[O]=_,C=s?-1:P),++O;break;case")":M[O]=D?")":s?" ":_,++O;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.default=o},function(e,t,n){(function(t){e.exports=t.flatpickr=n(49)}).call(this,n(2))},function(e,t,n){"use strict";var r,o;function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} +!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=40)}([function(e,t,n){"use strict";function r(e){window.BBjGridExWidget=window.BBjGridExWidget||{};var t=window.BBjGridExWidget[e]||null;if(!t){var n=JSON.stringify(Object.keys(window.BBjGridExWidget));throw new TypeError("\n\n[Grid Not Found] The method asked for non-existent grid instance.\n-------------------------------------------------------------------\nRequired Grid Id : ".concat(e," \nRegistered Grids : ").concat(n,"\n"))}return t}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getDocument=function(){return"undefined"!=typeof $doc?$doc:document},t.gw_getWindow=function(){return"undefined"!=typeof $wnd?$wnd:window},t.gw_escape=function(e){return null!==e&&void 0!==e?e:""},t.gw_uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0,n="x"==e?t:3&t|8;return n.toString(16)})},t.gw_getGrid=r,t.gw_addGrid=function(e,t){return window.BBjGridExWidget=window.BBjGridExWidget||{},window.BBjGridExWidget[e]=t,r(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_debounce=function(e,t,n){var r;return function(){var o=this,i=arguments,a=n&&!r;clearTimeout(r),r=setTimeout(function(){r=null,n||e.apply(o,i)},t),a&&e.apply(o,i)}},t.gw_sendEvent=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if((e.interests||[]).includes(n)){var o=(0,r.gw_getDocument)().getElementById("".concat(e.id));window.basisDispatchCustomEvent(o,t)}},t.gw_parseNode=o,t.gw_parseNodeFromEvent=function(e){return o(e.node,e.context)};var r=n(0);function o(e,t){if(!0===e.group)return!1;var n=e.rowPinned?"__ROW_INDEX":t.getRowNodeId;return{i:t.hasOwnProperty("getRowNodeId")&&e.data[n]?e.data[n]:e.id,x:e.rowIndex,p:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:"",c:e.rowPinned?-1:e.childIndex,s:Boolean(e.selected),cr:t.hasOwnProperty("includeClientRowData")&&!0===t.includeClientRowData?e.data:null,pp:e.rowPinned}}},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(9)),o=a(n(68)),i=a(n(69));function a(e){return e&&e.__esModule?e:{default:e}}var u="[object Null]",c="[object Undefined]",l=r.default?r.default.toStringTag:void 0;var s=function(e){return null==e?void 0===e?c:u:l&&l in Object(e)?(0,o.default)(e):(0,i.default)(e)};t.default=s},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){return null!=e&&"object"==r(e)};t.default=o},function(e,t,n){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GW_EVENT_FILTER_CHANGED=t.GW_EVENT_KEYPRESS=t.GW_EVENT_RANGE_SELECTION_CHANGED=t.GW_EVENT_GRID_STATE_CHANGE=t.GW_EVENT_ROW_VALUE_CHANGED=t.GW_EVENT_ROW_EDITING_STOPPED=t.GW_EVENT_ROW_EDITING_STARTED=t.GW_EVENT_CELL_VALUE_CHANGED=t.GW_EVENT_CELL_EDITING_STOPPED=t.GW_EVENT_CELL_EDITING_STARTED=t.GW_EVENT_CELL_DOUBLE_CLICK=t.GW_EVENT_CELL_CLICK=t.GW_EVENT_ROW_DOUBLE_CLICK=t.GW_EVENT_ROW_CLICK=t.GW_EVENT_ROW_SELECT=void 0;t.GW_EVENT_ROW_SELECT=69;t.GW_EVENT_ROW_CLICK=5011;t.GW_EVENT_ROW_DOUBLE_CLICK=52;t.GW_EVENT_CELL_CLICK=5001;t.GW_EVENT_CELL_DOUBLE_CLICK=5002;t.GW_EVENT_CELL_EDITING_STARTED=5003;t.GW_EVENT_CELL_EDITING_STOPPED=5004;t.GW_EVENT_CELL_VALUE_CHANGED=5005;t.GW_EVENT_ROW_EDITING_STARTED=5006;t.GW_EVENT_ROW_EDITING_STOPPED=5007;t.GW_EVENT_ROW_VALUE_CHANGED=5012;t.GW_EVENT_GRID_STATE_CHANGE=5008;t.GW_EVENT_RANGE_SELECTION_CHANGED=5009;t.GW_EVENT_KEYPRESS=5010;t.GW_EVENT_FILTER_CHANGED=5013},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports={deepParseJson:function e(t){if("string"!=typeof t)return Array.isArray(t)?t.map(function(t){return e(t)}):"object"===r(t)&&null!==t?Object.keys(t).reduce(function(n,r){return n[r]=e(t[r]),n},{}):t;try{return e(JSON.parse(t))}catch(e){return t}}}},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){var t=r(e);return null!=e&&("object"==t||"function"==t)};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(10)).default.Symbol;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(25));function o(e){"@babel/helpers - typeof";return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i="object"==("undefined"==typeof self?"undefined":o(self))&&self&&self.Object===Object&&self,a=r.default||i||Function("return this")();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){return e===t||e!=e&&t!=t};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(24)),o=i(n(30));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(e){return null!=e&&(0,o.default)(e.length)&&!(0,r.default)(e)};t.default=a},function(e,t,n){var r={},o=function(e){var t;return function(){return void 0===t&&(t=e.apply(this,arguments)),t}}(function(){return window&&document&&document.all&&!window.atob}),i=function(e){var t={};return function(e){if("function"==typeof e)return e();if(void 0===t[e]){var n=function(e){return document.querySelector(e)}.call(this,e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}}(),a=null,u=0,c=[],l=n(122);function s(e,t){for(var n=0;n=0&&c.splice(t,1)}function h(e){var t=document.createElement("style");return e.attrs.type="text/css",g(t,e.attrs),f(e,t),t}function g(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function b(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var c=u++;n=a||(a=h(t)),r=m.bind(null,n,c,!1),o=m.bind(null,n,c,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",g(t,e.attrs),f(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=l(r));o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){p(n),n.href&&URL.revokeObjectURL(n.href)}):(n=h(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){p(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=d(e,t);return s(n,t),function(e){for(var o=[],i=0;i1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(0,r.gw_getGrid)(e).options.columnApi;if(n&&n.length)o.autoSizeColumns(n,Boolean(t));else{var i=[];o.getAllColumns().forEach(function(e){i.push(e.colId)}),o.autoSizeColumns(i,Boolean(t))}},t.gw_ensureColumnVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.ensureColumnVisible(t)},t.gw_setColumnWidth=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnWidth(t,Number(n))},t.gw_pinColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnPinned(t,n)},t.gw_moveColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.moveColumn(t,n)},t.gw_isShowSelectionCheckbox=u,t.gw_isHeaderCheckboxSelection=c,t.gw_addRowGroupColumn=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setRowGroupColumns":"addRowGroupColumns"](t.split(",").map(function(e){return e.trim()}))},t.gw_removeRowGroupColumn=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeRowGroupColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_getPivotMode=function(e){return(0,r.gw_getGrid)(e).options.columnApi.isPivotMode()},t.gw_setPivotMode=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.setPivotMode(!!Number(t))},t.gw_addPivotColumns=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi[n?"setPivotColumns":"addPivotColumns"](t.split(",").map(function(e){return e.trim()}))},t.gw_removePivotColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removePivotColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_addValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.addValueColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_removeValueColumns=function(e,t){(0,r.gw_getGrid)(e).options.columnApi.removeValueColumns(t.split(",").map(function(e){return e.trim()}))},t.gw_setSortModel=function(e,t){var n=[];JSON.parse(t).forEach(function(e){for(var t in e)n.push({colId:t,sort:e[t]})}),(0,r.gw_getGrid)(e).options.api.setSortModel(n)},t.gw_refreshHeader=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setColumnVisible=function(e,t,n){(0,r.gw_getGrid)(e).options.columnApi.setColumnsVisible(t.split(","),Boolean(n))};var r=n(0),o=n(17),i=n(7).deepParseJson;function a(e){var t=function(t){var n=e[t];n.checkboxSelection=n.checkboxSelection||u,n.headerCheckboxSelection=n.headerCheckboxSelection||c;var r=n.tooltipValueGetter;if(r&&(n.tooltipValueGetter=function(e){return(0,o.gw_executeExpression)(r,e)}),n.tooltipComponent="HTMLTooltip",n.hasOwnProperty("editable")&&"string"==typeof n.editable){var i=n.editable;n.editable=function(e){return(0,o.gw_executeExpression)(i,e)}}if(n.hasOwnProperty("rowSpan")&&"string"==typeof n.rowSpan){var l=n.rowSpan;n.rowSpan=function(e){return(0,o.gw_executeExpression)(l,e)}}if(n.hasOwnProperty("colSpan")&&"string"==typeof n.colSpan){var s=n.colSpan;n.colSpan=function(e){return(0,o.gw_executeExpression)(s,e)}}n.hasOwnProperty("children")&&a(n.children)};for(var n in e)t(n)}function u(e){return!!e.context.showSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}function c(e){return!!e.api.gridOptionsWrapper.gridOptions.context.showHeaderSelectionCheckbox&&e.columnApi.getAllGridColumns()[0].colDef.field===e.colDef.field}},function(e,t,n){"use strict";function r(e){if(void 0===r.expressionCache&&(r.expressionCache=[]),r.expressionCache[e])return r.expressionCache[e];var t=null;t=e.indexOf("return")>=0?e:"return "+e+";";var n=new Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup",t);return r.expressionCache[e]=n,n}Object.defineProperty(t,"__esModule",{value:!0}),t.gw_compileExpression=r,t.gw_executeExpression=function(e,t){try{var n=r(e),o=n(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup);return o}catch(n){return console.log("Processing of the expression failed"),console.log("Expression = "+e),console.log("Params =",t),console.log("Exception = "+n),null}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setQuickFilter=function(e,t){(0,r.gw_getGrid)(e).options.api.setQuickFilter(t)},t.gw_expandAll=function(e){(0,r.gw_getGrid)(e).options.api.expandAll()},t.gw_collapseAll=function(e){(0,r.gw_getGrid)(e).options.api.collapseAll()},t.gw_ensureIndexVisible=function(e,t,n){var o=(0,r.gw_getGrid)(e).options.api,i=o.getRowNode(t);i?o.ensureNodeVisible(i,n):o.ensureIndexVisible(Number(t),n)},t.gw_navigateToNextRow=function(e,t){var n=(0,r.gw_getGrid)(e).options,o=t.previousCellPosition,i=t.nextCellPosition;switch(t.key){case 40:if(i&&!i.rowPinned)if(o.rowPinned){var a=n.api.getDisplayedRowAtIndex(n.api.getFirstDisplayedRow());a&&a.setSelected(!0)}else n.api.forEachNode(function(e){o.rowIndex+1===e.rowIndex&&e.setSelected(!0)});return i;case 38:if(i&&!i.rowPinned)if(o.rowPinned){var u=n.api.getDisplayedRowAtIndex(n.api.getLastDisplayedRow());u&&u.setSelected(!0)}else n.api.forEachNode(function(e){o.rowIndex-1===e.rowIndex&&e.setSelected(!0)});return i;case 37:case 39:return i;default:throw new Error("You have super strange keyboard")}},t.gw_getRowNodeId=function(e,t){return t[(0,r.gw_getGrid)(e).options.context.getRowNodeId]},t.gw_setRowData=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.setRowData(t),n.rowData=t},t.gw_updateRowData=function(e,t,n){var o=(0,r.gw_getGrid)(e).options;if(t.remove.length){var i=[];t.remove.forEach(function(e){i.push(o.api.getRowNode(e).data)}),t.remove=i}n?o.api.applyTransactionAsync(t):o.api.applyTransaction(t)},t.gw_setRowsHeight=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNode(function(e){e.setRowHeight(t)}),n.onRowHeightChanged()},t.gw_setRowHeight=function(e,t,n){var o=(0,r.gw_getGrid)(e).options,i=o.api,a=i.getRowNode(t)||i.getDisplayedRowAtIndex(t);a?(a.setRowHeight(n),o.api.onRowHeightChanged()):console.warn("Failed to set height for row ".concat(t,". Row cannot be found"))},t.gw_resetRowHeights=function(e){(0,r.gw_getGrid)(e).options.api.resetRowHeights()},t.gw_setSelectedRows=function(e,t){var n=(0,r.gw_getGrid)(e).options.api;n.forEachNodeAfterFilterAndSort(function(e){(t.indexOf(String(e.rowIndex))>-1||t.indexOf(String(e.id))>-1)&&(e.setSelected(!0),e.expanded=!0)}),n.onGroupExpandedOrCollapsed()},t.gw_selectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.selectAllFiltered():n.api.selectAll()},t.gw_deselectAll=function(e,t){var n=(0,r.gw_getGrid)(e).options;1===t?n.api.deselectAllFiltered():n.api.deselectAll()},t.gw_getSelectedRows=a,t.gw_getSelectedRow=function(e){var t=JSON.parse(a(e));if(t.length)return JSON.stringify(t[t.length-1]);return""},t.gw_getRow=function(e,t){var n=(0,r.gw_getGrid)(e).options;return JSON.stringify((0,o.gw_parseNode)(n.api.getRowNode(t),n.context))},t.gw_getRows=function(e,t,n){var a=(0,r.gw_getGrid)(e).options,u=[];return a.api[t](function(e){e.group||(n?(0,i.gw_executeExpression)(n,{value:e.data,context:a.context,oldValue:null,newValue:null,node:e,data:e.data,colDef:null,rowIndex:e.rowIndex,api:e.gridApi,columnApi:e.columnApi,getValue:function(){return e.data},column:null,columnGroup:e.hasOwnProperty("parent")&&e.parent.hasOwnProperty("key")?e.parent.key:""})&&u.push((0,o.gw_parseNode)(e,a.context)):u.push((0,o.gw_parseNode)(e,a.context)))}),JSON.stringify(u)},t.gw_redrawRows=function(e){(0,r.gw_getGrid)(e).options.api.redrawRows()},t.gw_setPinnedTopRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedTopRowData(t)},t.gw_setPinnedBottomRowData=function(e,t){(0,r.gw_getGrid)(e).options.api.setPinnedBottomRowData(t)};var r=n(0),o=n(1),i=n(17);function a(e){var t=(0,r.gw_getGrid)(e).options,n=[];return t.api.getSelectedNodes().forEach(function(e){n.push((0,o.gw_parseNode)(e,t.context))}),JSON.stringify(n)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_getChartToolbarItems=function(e){return e.api.gridOptionsWrapper.gridOptions.context.chartToolbarItems||[]},t.gw_addChartRange=function(e,t){var n=(0,r.gw_getGrid)(e),a=n.options,u=i(JSON.stringify(t));u.cellRange=(0,o.gw_parseAddCellRange)(a,u.cellRange);var c=a.api.createRangeChart(u),l=(0,r.gw_uuid)();return n.created_charts=n.created_charts||{},n.created_charts[l]=c,l},t.gw_destroyChart=function(e,t){var n=(0,r.gw_getGrid)(e);if(t)n.hasOwnProperty("created_charts")&&n.created_charts.hasOwnProperty(t)&&n.created_charts[t].destroyChart();else if(n.hasOwnProperty("created_charts"))for(var o in n.created_charts)if(n.created_charts.hasOwnProperty(o)){var i=n.created_charts[o];i.destroyChart()}};var r=n(0),o=n(20),i=n(7).deepParseJson},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_startEditingCell=function(e,t,n,o,i,a){var u=(0,r.gw_getGrid)(e).options,c=u.api,l=c.getRowNode(t)||c.getDisplayedRowAtIndex(t);u.api.startEditingCell({rowIndex:l.rowIndex,keyPress:Number(o),colKey:n,charPress:i,rowPinned:a})},t.gw_stopEditing=function(e,t){(0,r.gw_getGrid)(e).options.api.stopEditing(t)},t.gw_tabToNextCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToNextCell()},t.gw_tabToPreviousCell=function(e){(0,r.gw_getGrid)(e).options.api.tabToPreviousCell()},t.gw_setFocusedCell=function(e,t,n){var o,i,a,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=(0,r.gw_getGrid)(e).options;if(c.api.getEditingCells().length>0)return;if(-1==t){var l=c.api.getFocusedCell();l?(o=l.rowIndex,i=l.column.colId,a=l.rowPinned):(o=0,i=c.columnApi.getAllGridColumns()[0].colId,a=u)}else o=t?Number.isInteger(+t)?+t:c.api.getRowNode(t).rowIndex:0,i=n||c.columnApi.getAllGridColumns()[0].colId,a=u;(0,r.gw_getGrid)(e).options.api.setFocusedCell(o,i,a)},t.gw_getRangeSelections=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.context,i=t.api,a=i.getCellRanges(),u=i.getModel(),c=[];return a.forEach(function(e){for(var t=e.columns.reduce(function(e,t){return"ag-Grid-AutoColumn"!==t.colId&&e.push(t.colId),e},[]).filter(Boolean),r=Math.min(e.startRow.rowIndex,e.endRow.rowIndex),i=Math.max(e.startRow.rowIndex,e.endRow.rowIndex),a=[],l=r;l<=i;l++){var s=u.getRow(l);if(s){var d=(0,o.gw_parseNode)(s,n);d&&a.push(d)}}a.length&&t.length&&c.push({r:a,c:t})}),JSON.stringify(c)},t.gw_parseAddCellRange=a,t.gw_addCellRange=function(e,t){var n=(0,r.gw_getGrid)(e).options;n.api.addCellRange(a(n,t))},t.gw_clearRangeSelection=function(e){(0,r.gw_getGrid)(e).options.api.clearRangeSelection()};var r=n(0),o=n(1),i=n(7).deepParseJson;function a(e,t){var n=i(JSON.stringify(t)),r=n.start?Number.isInteger(+n.start)?+n.start:e.api.getRowNode(n.start).rowIndex:0,o=n.end?Number.isInteger(+n.end)?+n.end:e.api.getRowNode(n.end).rowIndex:e.rowData.length-1;return{rowStartIndex:Math.abs(r),rowEndIndex:Math.abs(o),columns:n.columns}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=h(n(63)),o=h(n(92)),i=h(n(95)),a=h(n(96)),u=h(n(97)),c=h(n(35)),l=h(n(29)),s=h(n(98)),d=h(n(38)),f=h(n(101)),p=h(n(39));function h(e){return e&&e.__esModule?e:{default:e}}var g=/\b__p \+= '';/g,b=/\b(__p \+=) '' \+/g,y=/(__e\(.*?\)|\b__t\)) \+\n'';/g,m=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,v=/($^)/,_=/['\n\r\u2028\u2029\\]/g,w=Object.prototype.hasOwnProperty;var k=function(e,t,n){var h=f.default.imports._.templateSettings||f.default;n&&(0,l.default)(e,t,n)&&(t=void 0),e=(0,p.default)(e),t=(0,r.default)({},t,h,a.default);var k,O,C=(0,r.default)({},t.imports,h.imports,a.default),x=(0,s.default)(C),D=(0,i.default)(C,x),E=0,S=t.interpolate||v,j="__p += '",M=RegExp((t.escape||v).source+"|"+S.source+"|"+(S===d.default?m:v).source+"|"+(t.evaluate||v).source+"|$","g"),P=w.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";e.replace(M,function(t,n,r,o,i,a){return r||(r=o),j+=e.slice(E,a).replace(_,u.default),n&&(k=!0,j+="' +\n__e("+n+") +\n'"),i&&(O=!0,j+="';\n"+i+";\n__p += '"),r&&(j+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),E=a+t.length,t}),j+="';\n";var T=w.call(t,"variable")&&t.variable;T||(j="with (obj) {\n"+j+"\n}\n"),j=(O?j.replace(g,""):j).replace(b,"$1").replace(y,"$1;"),j="function("+(T||"obj")+") {\n"+(T?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(k?", __e = _.escape":"")+(O?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+j+"return __p\n}";var I=(0,o.default)(function(){return Function(x,P+"return "+j).apply(void 0,D)});if(I.source=j,(0,c.default)(I))throw I;return I};t.default=k},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(23));var o=function(e,t,n){"__proto__"==t&&r.default?(0,r.default)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n};t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(66));var o=function(){try{var e=(0,r.default)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(8));function i(e){return e&&e.__esModule?e:{default:e}}var a="[object AsyncFunction]",u="[object Function]",c="[object GeneratorFunction]",l="[object Proxy]";var s=function(e){if(!(0,o.default)(e))return!1;var t=(0,r.default)(e);return t==u||t==c||t==a||t==l};t.default=s},function(e,t,n){"use strict";(function(e){function n(e){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.default=r}).call(this,n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(27)),o=a(n(75)),i=a(n(76));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e,t){return(0,i.default)((0,o.default)(e,t,r.default),e+"")};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(11)),o=u(n(12)),i=u(n(31)),a=u(n(8));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var l=function(e,t,n){if(!(0,a.default)(n))return!1;var u=c(t);return!!("number"==u?(0,o.default)(n)&&(0,i.default)(t,n.length):"string"==u&&t in n)&&(0,r.default)(n[t],e)};t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=9007199254740991;var o=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r};t.default=o},function(e,t,n){"use strict";function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=9007199254740991,i=/^(?:0|[1-9]\d*)$/;var a=function(e,t){var n=r(e);return!!(t=null==t?o:t)&&("number"==n||"symbol"!=n&&i.test(e))&&e>-1&&e%1==0&&e/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(105));var o=function(e){return null==e?"":(0,r.default)(e)};t.default=o},function(e,t,n){e.exports=n(41)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(42),n(44),n(48),n(50);var r=n(52);Object.keys(r).forEach(function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===r[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return r[e]}}))});var o=n(53);Object.keys(o).forEach(function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return o[e]}}))}),n(120),n(123),n(125)},function(e,t,n){(function(t){t.BBj||(t.BBj={}),e.exports=t.BBj.Masks=n(43)}).call(this,n(2))},function(e,t,n){"use strict";(function(e){var n,r,o;function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(a,u){"object"===i(t)&&"object"===i(e)?e.exports=u():(r=[],void 0===(o="function"==typeof(n=u)?n.apply(t,r):n)||(e.exports=o))}("undefined"!=typeof self&&self,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t,n){t.a=function(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);if(isNaN(t))return t;return t<0?Math.ceil(t):Math.floor(t)}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7);n.d(t,"e",function(){return r.e}),n.d(t,"g",function(){return r.g}),n.d(t,"h",function(){return r.h}),n.d(t,"a",function(){return r.a}),n.d(t,"b",function(){return r.b}),n.d(t,"d",function(){return r.d}),n.d(t,"f",function(){return r.f}),t.c=r.c},function(e,t,n){t.a=function(e,t){var n,c,l;if(n=a.timezoneZ.exec(e))return 0;if(n=a.timezoneHH.exec(e))return u(l=parseInt(n[2],10))?(c=l*o,"+"===n[1]?-c:c):NaN;if(n=a.timezoneHHMM.exec(e)){l=parseInt(n[2],10);var s=parseInt(n[3],10);return u(l,s)?(c=l*o+s*i,"+"===n[1]?-c:c):NaN}if(n=a.timezoneIANA.exec(e)){var d=Object(r.a)(t,e),f=Date.UTC(d[0],d[1]-1,d[2],d[3],d[4],d[5]),p=t.getTime()-t.getTime()%1e3;return-(f-p)}return 0};var r=n(9),o=36e5,i=6e4,a={timezone:/([Z+-].*)$/,timezoneZ:/^(Z)$/,timezoneHH:/^([+-])(\d{2})$/,timezoneHHMM:/^([+-])(\d{2}):?(\d{2})$/,timezoneIANA:/(UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function u(e,t){return null==t||!(t<0||t>59)}},function(e,t,n){var r=n(19);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"Utils",function(){return u});var r=n(1),o=n(2),i=n(4),a=n(20);n.d(t,"Types",function(){return a.a}),n.d(t,"NumberMask",function(){return r.a}),n.d(t,"DateMask",function(){return o.c}),n.d(t,"StringMask",function(){return i.a});var u={Dates:{getDayOfYear:o.e,getWeekNumber:o.g,getWeekStartByLocale:o.h,IS_DATE_REGEX:o.a,IS_TIME_REGEX:o.b,fixShortISO:o.d,getTimezoneOrOffset:o.f}};t.default=a.a},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",k=0,O=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[O]=r:(M[O]=_,s||(C=P)),++O;break;case"-":j||" "!=w?M[O]=D?"-":_:(D&&(w="-"),M[O]=_,C=s?-1:P),++O;break;case"+":j||" "!=w?M[O]=D?"-":"+":(w=D?"-":"+",M[O]=_,C=s?-1:P),++O;break;case"$":j||" "!=w?M[O]="$":(w="$",M[O]=_,C=s?-1:P),++O;break;case"(":j||" "!=w?M[O]=D?"(":s?" ":_:(D&&(w="("),M[O]=_,C=s?-1:P),++O;break;case")":M[O]=D?")":s?" ":_,++O;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.a=o},function(e,t,n){n.d(t,"b",function(){return a}),n.d(t,"a",function(){return u}),n.d(t,"h",function(){return c}),n.d(t,"e",function(){return l}),n.d(t,"d",function(){return s}),n.d(t,"f",function(){return d}),n.d(t,"g",function(){return f});var r=n(8),o=n(15);function i(e,t){for(var n=0;n12?"PM":"AM",pp:e.hours24>12?"pm":"am",p:e.hours24>12?"pm":"am",Jz:1==String(e.dayOfYear).length?"0"+e.dayOfYear:e.dayOfYear,Js:e.dayOfYear,Jl:e.dayOfYear,Jd:e.dayOfYear,J:e.dayOfYear,Wz:1==String(e.dayOfWeek).length?"0"+e.dayOfWeek:e.dayOfWeek,Ws:e.dayOfWeek,Wl:e.dayOfWeek,Wp:String.fromCharCode(e.dayOfWeek),Wd:e.dayOfWeek,W:e.dayOfWeek,wz:1==String(e.weekNumber).length?"0"+e.weekNumber:e.weekNumber,ws:e.weekNumber,wl:e.weekNumber,wp:String.fromCharCode(e.weekNumber),wd:e.weekNumber,w:e.weekNumber}}}]),e}();t.c=p},function(e,t,n){t.a=function(e,t,n){var a=Object(i.a)(e,n),u=new Date(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds()),c=Object(r.a)(t,a);return c?Object(o.a)(u,c):u};var r=n(3),o=n(10),i=n(13)},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5};var o={}},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(0),o=n(11)},function(e,t,n){t.a=function(e,t){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var n=Object(o.a)(e).getTime(),i=Object(r.a)(t);return new Date(n+i)};var r=n(0),o=n(12)},function(e,t,n){t.a=function(e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===i(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===i(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length)));if(t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),m=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=m.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),o=parseInt(n[1],10)-1,g(t,o)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return i=parseInt(n[1],10)-1,b(t,i)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(t,i,c)?d(t,i,c):new Date(NaN)}return null}(m.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,k=_.getTime(),O=0;if(p.time&&(O=function(e){var t,n,r;if(t=s.HH.exec(e))return y(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),y(n,r)?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return y(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(O)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(a.a)(p.timezone||n.timeZone,new Date(k+O)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(k+O)),w=Object(o.a)(new Date(k+O+w));return new Date(k+O+w)}return new Date(NaN)};var r=n(0),o=n(14),a=n(3),u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function y(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var o=t.getTime()%r;return n*r+o};var r=6e4},function(e,t,n){n.d(t,"a",function(){return a});var r=n(16),o=n(17),i=n(18);function a(e){return Object(r.a)(e,o.a,i.a)}},function(e,t,n){function r(e,t){var n=t["string"==typeof e?e.toUpperCase():e];return"number"==typeof n?n:1}function o(e,t,n){if(e){var o,i=e.toLowerCase().split(/[-_]/),a=i[0];if(i[1]&&4===i[1].length?(a+="_"+i[1],o=i[2]):o=i[1],o||(o=t[a]),o)return r(o.match(/^\d+$/)?Number(o):o,n)}return 1}n.d(t,"b",function(){return r}),n.d(t,"a",function(){return o})},function(e,t,n){t.a={en:"US",zh:"CN",zh_hans:"CN",hans:"CN",wuu:"CN",hsn:"CN",hak:"CN",nan:"CN",gan:"CN",hi:"IN",te:"IN",mr:"IN",ta:"IN",gu:"IN",kn:"IN",or:"IN",ml:"IN",pa_guru:"IN",bho:"IN",awa:"IN",as:"IN",mwr:"IN",mai:"IN",mag:"IN",bgc:"IN",hne:"IN",dcc:"IN",dz:"BT",tn:"BW",am:"ET",om:"ET",quc:"GT",id:"ID",jv:"ID",su:"ID",mad:"ID",ms_arab:"ID",ga:"IE",he:"IL",jam:"JM",ja:"JP",km:"KH",ko:"KR",lo:"LA",mh:"MH",my:"MM",mt:"MT",ne:"NP",fil:"PH",ceb:"PH",ilo:"PH",ur:"PK",pa:"PK",pa_arab:"PK",arab:"PK",lah:"PK",ps:"PK",sd:"PK",sd_arab:"PK",skr:"PK",gn:"PY",th:"TH",tts:"TH",aeb:"TN",zh_hant:"TW",hant:"TW",sm:"WS",zu:"ZA",sn:"ZW",arq:"DZ",ar:"EG",arz:"EG",fa:"IR",az_arab:"IR",ary:"MA",bn:"BD",rkt:"BD",dv:"MV"}},function(e,t,n){t.a={AG:0,ATG:0,28:0,AR:0,ARG:0,32:0,AS:0,ASM:0,16:0,AU:0,AUS:0,36:0,BR:0,BRA:0,76:0,BS:0,BHS:0,44:0,BT:0,BTN:0,64:0,BW:0,BWA:0,72:0,BZ:0,BLZ:0,84:0,CA:0,CAN:0,124:0,CN:0,CHN:0,156:0,CO:0,COL:0,170:0,DM:0,DMA:0,212:0,DO:0,DOM:0,214:0,ET:0,ETH:0,231:0,GT:0,GTM:0,320:0,GU:0,GUM:0,316:0,HK:0,HKG:0,344:0,HN:0,HND:0,340:0,ID:0,IDN:0,360:0,IE:0,IRL:0,372:0,IL:0,ISR:0,376:0,IN:0,IND:0,356:0,JM:0,JAM:0,388:0,JP:0,JPN:0,392:0,KE:0,KEN:0,404:0,KH:0,KHM:0,116:0,KR:0,KOR:0,410:0,LA:0,LA0:0,418:0,MH:0,MHL:0,584:0,MM:0,MMR:0,104:0,MO:0,MAC:0,446:0,MT:0,MLT:0,470:0,MX:0,MEX:0,484:0,MZ:0,MOZ:0,508:0,NI:0,NIC:0,558:0,NP:0,NPL:0,524:0,NZ:0,NZL:0,554:0,PA:0,PAN:0,591:0,PE:0,PER:0,604:0,PH:0,PHL:0,608:0,PK:0,PAK:0,586:0,PR:0,PRI:0,630:0,PY:0,PRY:0,600:0,SA:0,SAU:0,682:0,SG:0,SGP:0,702:0,SV:0,SLV:0,222:0,TH:0,THA:0,764:0,TN:0,TUN:0,788:0,TT:0,TTO:0,780:0,TW:0,TWN:0,158:0,UM:0,UMI:0,581:0,US:0,USA:0,840:0,VE:0,VEN:0,862:0,VI:0,VIR:0,850:0,WS:0,WSM:0,882:0,YE:0,YEM:0,887:0,ZA:0,ZAF:0,710:0,ZW:0,ZWE:0,716:0,AE:6,ARE:6,784:6,AF:6,AFG:6,4:6,BH:6,BHR:6,48:6,DJ:6,DJI:6,262:6,DZ:6,DZA:6,12:6,EG:6,EGY:6,818:6,IQ:6,IRQ:6,368:6,IR:6,IRN:6,364:6,JO:6,JOR:6,400:6,KW:6,KWT:6,414:6,LY:6,LBY:6,434:6,MA:6,MAR:6,504:6,OM:6,OMN:6,512:6,QA:6,QAT:6,634:6,SD:6,SDN:6,729:6,SY:6,SYR:6,760:6,BD:5,BGD:5,50:5,MV:5,MDV:5,462:5}},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return r.a.mask(e,t,n,o,i,a)}},{key:"date",value:function(e,t,n,r){return o.c.mask(e,t,n,r)}},{key:"string",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return i.a.mask(e,t,n)}}]),e}();t.a=u}])})}).call(this,n(5)(e))},function(e,t,n){(function(t){t.Basis||(t.Basis={}),e.exports=t.Basis.InputMasking=n(45)}).call(this,n(2))},function(module,exports,__webpack_require__){"use strict";(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(e){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e,t){"object"===_typeof(exports)&&"object"===_typeof(module)?module.exports=t(__webpack_require__(14),__webpack_require__(15)):(__WEBPACK_AMD_DEFINE_ARRAY__=[__webpack_require__(14),__webpack_require__(15)],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}("undefined"!=typeof self&&self,function(__WEBPACK_EXTERNAL_MODULE_0__,__WEBPACK_EXTERNAL_MODULE_7__){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_0__},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(5);n.d(t,"TextInput",function(){return r.a}),n.d(t,"NumberInput",function(){return o.a})},function(e,t,n){var r=n(3);t.a=r.a},function(e,t,n){var r=n(0),o=n.n(r),i=n(4);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),o=e.dataset.mask||"",a=e.pattern,u=Object(i.b)(o),c=a||u,l=null,s=null;return t?s=(l=e.parentNode).querySelector(".textInputMask__unmaskedInput"):(l=this.options.doc.createElement("span"),s=this.options.doc.createElement("input")),e.value=Object(i.c)(e.value,o),e.pattern=c,e.classList.add("textInputMask__textInput"),e.dataset.mask=o,e.dataset.valueUnmasked=Object(i.d)(e.value,o),a&&a!==u&&(e.dataset.isCustomPattern=!0),t||(e.hasAttribute("readonly")||e.hasAttribute("disable")||(e.addEventListener("keyup",this._onKeystroke),e.addEventListener("keypress",this._onKeystroke),e.addEventListener("paste",this._onKeystroke),e.addEventListener("focusin",this._onFocus),e.addEventListener("click",this._onFocus)),e.parentNode.insertBefore(l,e)),this._validateInput(e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),s.setAttribute("aria-hidden","true"),s.setAttribute("type","hidden"),s.classList.add("textInputMask__unmaskedInput"),s.value=e.dataset.valueUnmasked,n&&s.setAttribute("id","".concat(n,"-unmasked")),r&&s.setAttribute("name","".concat(r,"-unmasked")),t||(l.setAttribute("class","textInputMask__wrap"),l.appendChild(s),l.appendChild(e)),l}},{key:"_unwrap",value:function(e){e.removeChild(e.querySelector(".textInputMask__unmaskedInput"));var t=e.querySelector(".textInputMask__textInput");t.removeEventListener("keyup",this._onKeystroke),t.removeEventListener("keypress",this._onKeystroke),t.removeEventListener("paste",this._onKeystroke),t.removeEventListener("focusin",this._onFocus),t.removeEventListener("click",this._onFocus),delete t.dataset.valueUnmasked,t.dataset.isCustomPattern||(t.removeAttribute("pattern"),delete t.dataset.isCustomPattern),t.classList.remove(this.options.cssClassError),e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_onKeystroke",value:function(e){if(!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)){13!==e.keyCode&&e.preventDefault();var t=e.target,n=t.dataset.mask||this.options.mask,r=e.type;t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),t.setCustomValidity("");var a,u,c=t.value,l=e.keyCode,s=e.key||e.code.replace(/[^0-9]/g,""),d=s?s.length>1?"":s:"",f=Object(i.a)(c,n),p=!1;switch(r){case"paste":a=Object(i.c)((e.clipboardData||window.clipboardData).getData("Text"),n);break;case"keyup":a=c;break;case"keypress":var h=t.selectionStart;h!==f&&(f=h),a=c.substr(0,f)+d+c.substr(f)}if(u=Object(i.d)(a,n),-1===[35,36,37,38,39,40].indexOf(l)){try{t.value=o.a.mask(u,n,!1),this._validateInput(t)&&(t.dataset.valueUnmasked=u,this.options.doc.querySelector("#".concat(t.getAttribute("id"),"-unmasked")).value=u,this.__applyCssClassState(t,"success"),this.__fireOnUpdate(t.value,t.dataset.valueUnmasked,t)),p=!1}catch(e){this.__applyCssClassState(t,"error"),this.__fireOnInvalid(e,t),p=!0}this._updateCaretPosition(t,n)}p||this._validateInput(t)}}},{key:"_onFocus",value:function(e){var t=e.target,n=t.dataset.mask||this.options.mask;this._updateCaretPosition(t,n)}},{key:"_updateCaretPosition",value:function(e,t){setTimeout(function(){var n=Object(i.a)(e.value,t);e.setSelectionRange(n,n)},0)}},{key:"_validateInput",value:function(e){var t=e.checkValidity();return t?(this.__applyCssClassState(e,"success"),e.setCustomValidity("")):(this.__applyCssClassState(e,"error"),this.__fireOnInvalid(e.validationMessage,e)),t}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t){e.hasAttribute("readonly")||e.hasAttribute("disabled")?(e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===t&&(e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===t&&(e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,"c",function(){return maskIfNotMasked}),__webpack_require__.d(__webpack_exports__,"d",function(){return unmask}),__webpack_require__.d(__webpack_exports__,"a",function(){return findCaretPosition}),__webpack_require__.d(__webpack_exports__,"b",function(){return generatePatternFromMask});var __WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__=__webpack_require__(0),__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask__),SUPPORTED_MASKS=["X","a","A","0","z","Z","U"],IS_UNICODE_PROPERTY_SUPPORTED=!1;try{eval("/\\p{L}/u"),IS_UNICODE_PROPERTY_SUPPORTED=!0}catch(e){IS_UNICODE_PROPERTY_SUPPORTED=!1}var isMaskedValue=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=unmask(t,n);e.__CACHE__[r]=t===__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(o,n)}return e.__CACHE__[r]},maskIfNotMasked=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r])if(isMaskedValue(t,n))e.__CACHE__[r]=t;else try{e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask(t,n,!1)}catch(t){e.__CACHE__[r]=__WEBPACK_IMPORTED_MODULE_0_bbj_masks_src_StringMask___default.a.mask("",n)}return e.__CACHE__[r]},generatePatternFromMask=function e(t){void 0===e.__CACHE__&&(e.__CACHE__={});var n=t;if(!e.__CACHE__[n]){var r="";t.split("").forEach(function(e){switch(e){case"X":r+="([^ -~])";break;case"a":case"A":r+=IS_UNICODE_PROPERTY_SUPPORTED?"\\p{L}":"((?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"0":r+="([0-9])";break;case"z":case"Z":r+=IS_UNICODE_PROPERTY_SUPPORTED?"([0-9]|\\p{L})":"([0-9]|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;case"U":r+=IS_UNICODE_PROPERTY_SUPPORTED?"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(\\p{L}))":"(([0-9])|(\\s)|([.,/#!$%^&*;:{}=-_`~()])|(?:[A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿯ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-Ᶎꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭧꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf40\udf42-\udf49\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872\ud874-\ud879][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0\udfe1\udfe3]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]))";break;default:r+=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}),e.__CACHE__[n]=r}return e.__CACHE__[n]},unmask=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){for(var o=n.split(""),i=t.split(""),a="",u=0;u-1){if(!new RegExp(generatePatternFromMask(l),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(c))break;a+=c}}e.__CACHE__[r]=a.toLocaleLowerCase()}return e.__CACHE__[r]},findCaretPosition=function e(t,n){void 0===e.__CACHE__&&(e.__CACHE__={});var r="".concat(t,"-").concat(n);if(!e.__CACHE__[r]){var o=n.split(""),i=t.split("");i.length-1)if(!new RegExp(generatePatternFromMask(c),IS_UNICODE_PROPERTY_SUPPORTED?"u":"").test(i[u])){a=u;break}}e.__CACHE__[r]=a<0?i.length:a}return e.__CACHE__[r]}},function(e,t,n){var r=n(6);t.a=r.a},function(e,t,n){var r=n(7),o=n.n(r);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options=function(e){for(var t=1;t-1;this._wrap(e,o)}else console.warn("BBjMasking: Invalid input element. The element will be ignored",e)}},{key:"destroy",value:function(){for(var e,t,n="string"==typeof this.options.elements?this.options.doc.querySelectorAll(this.options.elements):this.options.elements,r=0;r-1&&this._unwrap(e)}},{key:"_wrap",value:function(e,t){var n=e.getAttribute("id"),r=e.getAttribute("name"),i=e.dataset.step||null,a=e.dataset.max||null,u=e.dataset.min||null,l=e.dataset.groupingSeparator||",",s=e.dataset.decimalSeparator||".",d=e.dataset.forceTrailingZeros||null,f=e.dataset.mask||"",p=e.getAttribute("class"),h=e.getAttribute("required")||null,g=null,b=null;if(t?b=(g=e.parentNode).querySelector(".numberInputMask__unmaskedInput"):(g=this.options.doc.createElement("span"),b=this.options.doc.createElement("input")),t||(e.parentNode.insertBefore(g,e),e.hasAttribute("readonly")||e.hasAttribute("disabled")||(e.addEventListener("click",this._actualInputHandler),e.addEventListener("focusin",this._actualInputHandler))),e.dataset.valueUnmasked=e.value||0,e.dataset.groupingSeparator=l,e.dataset.decimalSeparator=s,e.dataset.forceTrailingZeros=d,e.value=o.a.mask(e.dataset.valueUnmasked,f,l,s,d).trim(),e.classList.add("numberInputMask__textInput",this.options.cssClassSuccess),b.value=e.dataset.valueUnmasked,b.setAttribute("aria-hidden","true"),b.setAttribute("type","hidden"),b.setAttribute("class",p),n&&b.setAttribute("id","".concat(n,"-unmasked")),r&&b.setAttribute("name","".concat(r,"-unmasked")),h&&b.setAttribute("required","required"),i)b.setAttribute("step",i);else{var y=c(b.value),m="1";y>0&&(m=".".concat(Array(y).join("0"),"1")),b.setAttribute("step",m)}return u&&b.setAttribute("min",u),a&&b.setAttribute("max",a),b.dataset.inputId=n,b.dataset.mask=f,b.dataset.groupingSeparator=l,b.dataset.decimalSeparator=s,d&&(b.dataset.forceTrailingZeros=d),t||(b.classList.add("numberInputMask__unmaskedInput"),b.addEventListener("keydown",this._unmaskedInputHandler),b.addEventListener("keyup",this._unmaskedInputHandler),b.addEventListener("focusout",this._unmaskedInputHandler),g.setAttribute("class","numberInputMask__wrap"),g.appendChild(b),g.appendChild(e)),isNaN(Number(e.dataset.valueUnmasked))?e.classList.add(this.options.cssClassError):this._validateInput(b,e)&&this.__fireOnUpdate(e.value,e.dataset.valueUnmasked,e),g}},{key:"_unwrap",value:function(e){var t=e.querySelector(".numberInputMask__textInput"),n=t.id,r=e.querySelector("#".concat(n,"-unmasked"));r.removeEventListener("keyup",this._unmaskedInputHandler),r.removeEventListener("keypress",this._unmaskedInputHandler),r.removeEventListener("focusout",this._unmaskedInputHandler),e.removeChild(r),t.removeEventListener("click",this._actualInputHandler),t.removeEventListener("focusin",this._actualInputHandler),t.classList.remove("numberInputMask__textInput"),t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),delete t.dataset.valueUnmasked,e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e)}},{key:"_actualInputHandler",value:function(e){var t=e.target,n=t.id,r=this.options.doc.querySelector("#".concat(n,"-unmasked"));t.setAttribute("aria-hidden","true"),t.setAttribute("type","hidden"),r.removeAttribute("aria-hidden"),r.setAttribute("type","number"),this._validateInput(r,t),setTimeout(function(){r.focus();var e=String(r.value).length;r.type="text",r.setSelectionRange(e,e),r.type="number"},0)}},{key:"_unmaskedInputHandler",value:function(e){var t,n,r=e.target,i=e.keyCode,a=r.dataset.mask,u=r.dataset.groupingSeparator,c=r.dataset.decimalSeparator,l=r.dataset.forceTrailingZeros,s=r.dataset.inputId,d=this.options.doc.querySelector("#".concat(s)),f=!1,p=this._validateInput(r,d);try{f=o.a.mask(r.value||0,a,u,c,l,!1).trim()}catch(e){f=!1,this.__applyCssClassState(r,d,"error"),this.__fireOnInvalid(e,d)}t=[13,27].indexOf(i)>-1||"focusout"===e.type,n=f&&p,t&&(r.classList.remove(this.options.cssClassError),r.classList.remove(this.options.cssClassSuccess),r.setAttribute("aria-hidden","true"),r.setAttribute("type","hidden"),d.removeAttribute("aria-hidden"),d.setAttribute("type","text"),d.classList.add(this.options.cssClassSuccess),n?(d.value=f,d.dataset.valueUnmasked=r.value,this.__fireOnUpdate(f,r.value,d)):(r.value=d.dataset.valueUnmasked,this.__applyCssClassState(r,d,"success")))}},{key:"_validateInput",value:function(e,t){var n=!0,r=Number(e.value);if("hidden"!==e.getAttribute("type")||isNaN(r))n=e.checkValidity();else{var o=e.getAttribute("max"),i=e.getAttribute("min"),a=e.getAttribute("step");i&&(n=n&&r>=Number(i)),o&&(n=n&&r<=Number(o)),a&&(n=n&&c(a)===c(e.value))}return n?this.__applyCssClassState(e,t,"success"):(this.__applyCssClassState(e,t,"error"),this.__fireOnInvalid(e.validationMessage||"Validity check fails",t)),n}},{key:"__fireOnUpdate",value:function(e,t,n){this.options.onUpdate&&this.options.onUpdate(e,t,n)}},{key:"__fireOnInvalid",value:function(e,t){this.options.onInvalid&&this.options.onInvalid(e,t)}},{key:"__applyCssClassState",value:function(e,t,n){t.hasAttribute("readonly")||t.hasAttribute("disabled")?(t.classList.remove(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)):("success"===n&&(t.classList.remove(this.options.cssClassError),t.classList.add(this.options.cssClassSuccess),e.classList.remove(this.options.cssClassError),e.classList.add(this.options.cssClassSuccess)),"error"===n&&(t.classList.add(this.options.cssClassError),t.classList.remove(this.options.cssClassSuccess),e.classList.add(this.options.cssClassError),e.classList.remove(this.options.cssClassSuccess)))}}]),e}();t.a=l},function(e,t){e.exports=__WEBPACK_EXTERNAL_MODULE_7__}])})}).call(this,__webpack_require__(5)(module))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2])||arguments[2];e=String(e);var r=(t=String(t)).length,l=e.length;if(l>r){if(n)return e;throw{name:"MaskIsTooShortError",message:"MaskIsTooShortError: Mask is shorter than the passed string"}}for(var s=new Array(r),d=0,f="",p=0;p?@[]^_`{|}~".indexOf(v)>-1?s[p]=v:c(n,s,p,e)}else s[p]=" ";++d;break;default:s[p]=f}if(d2&&void 0!==arguments[2]?arguments[2]:",",o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".",i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],u=n.length;if(0===u){if(a)return str;throw{name:"MaskError",message:"MaskError: Mask is empty"}}for(var c=0,l=0,s=!1,d=0;dc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}if(y>l){p=e._round(p,l),g=(h=e._toCharArray(p)).length,b=0,y=0,s=!1;for(var v=0;vc){if(a)return t.toString();throw{name:"MaskError",message:"MaskError: Number is too large for mask"}}}var _=" ",w=" ",k=0,O=0,C=0;"*"==n.charAt(0)&&(_="*");var x=_,D=e._getSign(p)<0,E=g>0||n.indexOf("0")>=0,S=!1,j=!1;s=!1;for(var M=new Array(u),P=0;P0?M[O]=r:(M[O]=_,s||(C=P)),++O;break;case"-":j||" "!=w?M[O]=D?"-":_:(D&&(w="-"),M[O]=_,C=s?-1:P),++O;break;case"+":j||" "!=w?M[O]=D?"-":"+":(w=D?"-":"+",M[O]=_,C=s?-1:P),++O;break;case"$":j||" "!=w?M[O]="$":(w="$",M[O]=_,C=s?-1:P),++O;break;case"(":j||" "!=w?M[O]=D?"(":s?" ":_:(D&&(w="("),M[O]=_,C=s?-1:P),++O;break;case")":M[O]=D?")":s?" ":_,++O;break;case"C":P=u;)--C;M[C]==x&&(M[C]=w)}return M.join("")}},{key:"_shift",value:function(e,t,n){n&&(t=-t);var r=(""+e).split("e");return+(r[0]+"e"+(r[1]?+r[1]+t:t))}},{key:"_round",value:function(t,n){return e._shift(Math.round(e._shift(t,n,!1)),n,!0)}},{key:"_toCharArray",value:function(t){var n=e._getSign(t),r=[];if(0!==n){var o=n<0?"".concat(-1*t.toString()):t.toString();o.length>1&&"0"==o.charAt(0)&&(o=o.substring(1)),r=o.split("")}return r}},{key:"_getSign",value:function(e){return(e>0)-(e<0)||+e}}]),e}();t.default=o},function(e,t,n){(function(t){e.exports=t.flatpickr=n(49)}).call(this,n(2))},function(e,t,n){"use strict";var r,o;function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)} /* flatpickr v4.6.6, @license MIT */ /* flatpickr v4.6.6, @license MIT */ !function(a,u){"object"===i(t)&&void 0!==e?e.exports=u():void 0===(o="function"==typeof(r=u)?r.call(t,n,t,e):r)||(e.exports=o)}(0,function(){ @@ -14,4 +14,4 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ -var e=function(){return(e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},o={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},a=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},u=function(e){return!0===e?1:0};function c(e,t,n){var r;return void 0===n&&(n=!1),function(){var o=this,i=arguments;null!==r&&clearTimeout(r),r=window.setTimeout(function(){r=null,n||e.apply(o,i)},t),n&&!r&&e.apply(o,i)}}var l=function(e){return e instanceof Array?e:[e]};function s(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function d(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function f(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function p(e,t){var n=d("div","numInputWrapper"),r=d("input","numInput "+e),o=d("span","arrowUp"),i=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var a in t)r.setAttribute(a,t[a]);return n.appendChild(r),n.appendChild(o),n.appendChild(i),n}function h(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}var g=function(){},b=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},y={D:g,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*u(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),o=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return o.setDate(o.getDate()-o.getDay()+n.firstDayOfWeek),o},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:g,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:g,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},m={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},v={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[v.w(e,t,n)]},F:function(e,t,n){return b(v.n(e,t,n)-1,!1,t)},G:function(e,t,n){return a(v.h(e,t,n))},H:function(e){return a(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[u(e.getHours()>11)]},M:function(e,t){return b(e.getMonth(),!0,t)},S:function(e){return a(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return a(e.getFullYear(),4)},d:function(e){return a(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return a(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return a(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},_=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i,u=e.isMobile,c=void 0!==u&&u;return function(e,t,r){var o=r||a;return void 0===n.formatDate||c?t.split("").map(function(t,r,i){return v[t]&&"\\"!==i[r-1]?v[t](e,o,n):"\\"!==t?t:""}).join(""):n.formatDate(e,t,o)}},w=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i;return function(e,t,o,i){if(0===e||e){var u,c=i||a,l=e;if(e instanceof Date)u=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)u=new Date(e);else if("string"==typeof e){var s=t||(n||r).dateFormat,d=String(e).trim();if("today"===d)u=new Date,o=!0;else if(/Z$/.test(d)||/GMT$/.test(d))u=new Date(e);else if(n&&n.parseDate)u=n.parseDate(e,s);else{u=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,p=[],h=0,g=0,b="";hMath.min(t,n)&&ei&&(d=r===v.hourElement?d-i-u(!v.amPM):o,p&&G(void 0,1,v.hourElement)),v.amPM&&f&&(1===c?d+l===23:Math.abs(d-l)>c)&&(v.amPM.textContent=v.l10n.amPM[u(v.amPM.textContent===v.l10n.amPM[0])]),r.value=a(d)}}(e);var c=v._input.value;M(),ke(),v._input.value!==c&&v._debouncedChange()}function M(){if(void 0!==v.hourElement&&void 0!==v.minuteElement){var e=(parseInt(v.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(v.minuteElement.value,10)||0)%60,n=void 0!==v.secondElement?(parseInt(v.secondElement.value,10)||0)%60:0;void 0!==v.amPM&&(e=function(e,t){return e%12+12*u(t===v.l10n.amPM[1])}(e,v.amPM.textContent));var r=void 0!==v.config.minTime||v.config.minDate&&v.minDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.minDate,!0);if(void 0!==v.config.maxTime||v.config.maxDate&&v.maxDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.maxDate,!0)){var o=void 0!==v.config.maxTime?v.config.maxTime:v.config.maxDate;(e=Math.min(e,o.getHours()))===o.getHours()&&(t=Math.min(t,o.getMinutes())),t===o.getMinutes()&&(n=Math.min(n,o.getSeconds()))}if(r){var i=void 0!==v.config.minTime?v.config.minTime:v.config.minDate;(e=Math.max(e,i.getHours()))===i.getHours()&&(t=Math.max(t,i.getMinutes())),t===i.getMinutes()&&(n=Math.max(n,i.getSeconds()))}I(e,t,n)}}function P(e){var t=e||v.latestSelectedDateObj;t&&I(t.getHours(),t.getMinutes(),t.getSeconds())}function T(){var e=v.config.defaultHour,t=v.config.defaultMinute,n=v.config.defaultSeconds;if(void 0!==v.config.minDate){var r=v.config.minDate.getHours(),o=v.config.minDate.getMinutes();(e=Math.max(e,r))===r&&(t=Math.max(o,t)),e===r&&t===o&&(n=v.config.minDate.getSeconds())}if(void 0!==v.config.maxDate){var i=v.config.maxDate.getHours(),a=v.config.maxDate.getMinutes();(e=Math.min(e,i))===i&&(t=Math.min(a,t)),e===i&&t===a&&(n=v.config.maxDate.getSeconds())}return{hours:e,minutes:t,seconds:n}}function I(e,t,n){void 0!==v.latestSelectedDateObj&&v.latestSelectedDateObj.setHours(e%24,t,n||0,0),v.hourElement&&v.minuteElement&&!v.isMobile&&(v.hourElement.value=a(v.config.time_24hr?e:(12+e)%12+12*u(e%12==0)),v.minuteElement.value=a(t),void 0!==v.amPM&&(v.amPM.textContent=v.l10n.amPM[u(e>=12)]),void 0!==v.secondElement&&(v.secondElement.value=a(n)))}function N(e){var t=h(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&ee(n)}function A(e,t,n,r){return t instanceof Array?t.forEach(function(t){return A(e,t,n,r)}):e instanceof Array?e.forEach(function(e){return A(e,t,n,r)}):(e.addEventListener(t,n,r),void v._handlers.push({element:e,event:t,handler:n,options:r}))}function R(){ye("onChange")}function L(e,t){var n=void 0!==e?v.parseDate(e):v.latestSelectedDateObj||(v.config.minDate&&v.config.minDate>v.now?v.config.minDate:v.config.maxDate&&v.config.maxDate=0&&k(e,v.selectedDates[1])<=0}(t)&&!ve(t)&&i.classList.add("inRange"),v.weekNumbers&&1===v.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&v.weekNumbers.insertAdjacentHTML("beforeend",""+v.config.getWeek(t)+""),ye("onDayCreate",i),i}function U(e){e.focus(),"range"===v.config.mode&&ie(e)}function W(e){for(var t=e>0?0:v.config.showMonths-1,n=e>0?v.config.showMonths:-1,r=t;r!=n;r+=e)for(var o=v.daysContainer.children[r],i=e>0?0:o.children.length-1,a=e>0?o.children.length:-1,u=i;u!=a;u+=e){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&te(c.dateObj))return c}}function z(e,t){var n=ne(document.activeElement||document.body),r=void 0!==e?e:n?document.activeElement:void 0!==v.selectedDateElem&&ne(v.selectedDateElem)?v.selectedDateElem:void 0!==v.todayDateElem&&ne(v.todayDateElem)?v.todayDateElem:W(t>0?1:-1);void 0===r?v._input.focus():n?function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():v.currentMonth,r=t>0?v.config.showMonths:-1,o=t>0?1:-1,i=n-v.currentMonth;i!=r;i+=o)for(var a=v.daysContainer.children[i],u=n-v.currentMonth===i?e.$i+t:t<0?a.children.length-1:0,c=a.children.length,l=u;l>=0&&l0?c:-1);l+=o){var s=a.children[l];if(-1===s.className.indexOf("hidden")&&te(s.dateObj)&&Math.abs(e.$i-l)>=Math.abs(t))return U(s)}v.changeMonth(o),z(W(o),0)}(r,t):U(r)}function B(e,t){for(var n=(new Date(e,t,1).getDay()-v.l10n.firstDayOfWeek+7)%7,r=v.utils.getDaysInMonth((t-1+12)%12,e),o=v.utils.getDaysInMonth(t,e),i=window.document.createDocumentFragment(),a=v.config.showMonths>1,u=a?"prevMonthDay hidden":"prevMonthDay",c=a?"nextMonthDay hidden":"nextMonthDay",l=r+1-n,s=0;l<=r;l++,s++)i.appendChild(H(u,new Date(e,t-1,l),l,s));for(l=1;l<=o;l++,s++)i.appendChild(H("",new Date(e,t,l),l,s));for(var f=o+1;f<=42-n&&(1===v.config.showMonths||s%7!=0);f++,s++)i.appendChild(H(c,new Date(e,t+1,f%o),f,s));var p=d("div","dayContainer");return p.appendChild(i),p}function Y(){if(void 0!==v.daysContainer){f(v.daysContainer),v.weekNumbers&&f(v.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==v.config.monthSelectorType)){var e=function(e){return!(void 0!==v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&ev.config.maxDate.getMonth())};v.monthsDropdownContainer.tabIndex=-1,v.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=d("option","flatpickr-monthDropdown-month");n.value=new Date(v.currentYear,t).getMonth().toString(),n.textContent=b(t,v.config.shorthandCurrentMonth,v.l10n),n.tabIndex=-1,v.currentMonth===t&&(n.selected=!0),v.monthsDropdownContainer.appendChild(n)}}}function K(){var e,t=d("div","flatpickr-month"),n=window.document.createDocumentFragment();v.config.showMonths>1||"static"===v.config.monthSelectorType?e=d("span","cur-month"):(v.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),v.monthsDropdownContainer.setAttribute("aria-label",v.l10n.monthAriaLabel),A(v.monthsDropdownContainer,"change",function(e){var t=h(e),n=parseInt(t.value,10);v.changeMonth(n-v.currentMonth),ye("onMonthChange")}),V(),e=v.monthsDropdownContainer);var r=p("cur-year",{tabindex:"-1"}),o=r.getElementsByTagName("input")[0];o.setAttribute("aria-label",v.l10n.yearAriaLabel),v.config.minDate&&o.setAttribute("min",v.config.minDate.getFullYear().toString()),v.config.maxDate&&(o.setAttribute("max",v.config.maxDate.getFullYear().toString()),o.disabled=!!v.config.minDate&&v.config.minDate.getFullYear()===v.config.maxDate.getFullYear());var i=d("div","flatpickr-current-month");return i.appendChild(e),i.appendChild(r),n.appendChild(i),t.appendChild(n),{container:t,yearElement:o,monthElement:e}}function $(){f(v.monthNav),v.monthNav.appendChild(v.prevMonthNav),v.config.showMonths&&(v.yearElements=[],v.monthElements=[]);for(var e=v.config.showMonths;e--;){var t=K();v.yearElements.push(t.yearElement),v.monthElements.push(t.monthElement),v.monthNav.appendChild(t.container)}v.monthNav.appendChild(v.nextMonthNav)}function q(){v.weekdayContainer?f(v.weekdayContainer):v.weekdayContainer=d("div","flatpickr-weekdays");for(var e=v.config.showMonths;e--;){var t=d("div","flatpickr-weekdaycontainer");v.weekdayContainer.appendChild(t)}return J(),v.weekdayContainer}function J(){if(v.weekdayContainer){var e=v.l10n.firstDayOfWeek,n=t(v.l10n.weekdays.shorthand);e>0&&e\n "+n.join("")+"\n \n "}}function Z(e,t){void 0===t&&(t=!0);var n=t?e:e-v.currentMonth;n<0&&!0===v._hidePrevMonthArrow||n>0&&!0===v._hideNextMonthArrow||(v.currentMonth+=n,(v.currentMonth<0||v.currentMonth>11)&&(v.currentYear+=v.currentMonth>11?1:-1,v.currentMonth=(v.currentMonth+12)%12,ye("onYearChange"),V()),Y(),ye("onMonthChange"),_e())}function X(e){return!(!v.config.appendTo||!v.config.appendTo.contains(e))||v.calendarContainer.contains(e)}function Q(e){if(v.isOpen&&!v.config.inline){var t=h(e),n=X(t),r=t===v.input||t===v.altInput||v.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(v.input)||~e.path.indexOf(v.altInput)),o="blur"===e.type?r&&e.relatedTarget&&!X(e.relatedTarget):!r&&!n&&!X(e.relatedTarget),i=!v.config.ignoredFocusElements.some(function(e){return e.contains(t)});o&&i&&(void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&""!==v.input.value&&void 0!==v.input.value&&j(),v.close(),v.config&&"range"===v.config.mode&&1===v.selectedDates.length&&(v.clear(!1),v.redraw()))}}function ee(e){if(!(!e||v.config.minDate&&ev.config.maxDate.getFullYear())){var t=e,n=v.currentYear!==t;v.currentYear=t||v.currentYear,v.config.maxDate&&v.currentYear===v.config.maxDate.getFullYear()?v.currentMonth=Math.min(v.config.maxDate.getMonth(),v.currentMonth):v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&(v.currentMonth=Math.max(v.config.minDate.getMonth(),v.currentMonth)),n&&(v.redraw(),ye("onYearChange"),V())}}function te(e,t){void 0===t&&(t=!0);var n=v.parseDate(e,void 0,t);if(v.config.minDate&&n&&k(n,v.config.minDate,void 0!==t?t:!v.minDateHasTime)<0||v.config.maxDate&&n&&k(n,v.config.maxDate,void 0!==t?t:!v.maxDateHasTime)>0)return!1;if(0===v.config.enable.length&&0===v.config.disable.length)return!0;if(void 0===n)return!1;for(var r=v.config.enable.length>0,o=r?v.config.enable:v.config.disable,a=0,u=void 0;a=u.from.getTime()&&n.getTime()<=u.to.getTime())return r}return!r}function ne(e){return void 0!==v.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&v.daysContainer.contains(e))}function re(e){!(e.target===v._input)||e.relatedTarget&&X(e.relatedTarget)||v.setDate(v._input.value,!0,e.target===v.altInput?v.config.altFormat:v.config.dateFormat)}function oe(e){var t=h(e),n=v.config.wrap?g.contains(t):t===v._input,r=v.config.allowInput,o=v.isOpen&&(!r||!n),i=v.config.inline&&n&&!r;if(13===e.keyCode&&n){if(r)return v.setDate(v._input.value,!0,t===v.altInput?v.config.altFormat:v.config.dateFormat),t.blur();v.open()}else if(X(t)||o||i){var a=!!v.timeContainer&&v.timeContainer.contains(t);switch(e.keyCode){case 13:a?(e.preventDefault(),j(),fe()):pe(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:n&&!v.config.allowInput&&(e.preventDefault(),v.clear());break;case 37:case 39:if(a||n)v.hourElement&&v.hourElement.focus();else if(e.preventDefault(),void 0!==v.daysContainer&&(!1===r||document.activeElement&&ne(document.activeElement))){var u=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(u),z(W(1),0)):z(void 0,u)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;v.daysContainer&&void 0!==t.$i||t===v.input||t===v.altInput?e.ctrlKey?(e.stopPropagation(),ee(v.currentYear-c),z(W(1),0)):a||z(void 0,7*c):t===v.currentYearElement?ee(v.currentYear-c):v.config.enableTime&&(!a&&v.hourElement&&v.hourElement.focus(),j(e),v._debouncedChange());break;case 9:if(a){var l=[v.hourElement,v.minuteElement,v.secondElement,v.amPM].concat(v.pluginElements).filter(function(e){return e}),s=l.indexOf(t);if(-1!==s){var d=l[s+(e.shiftKey?-1:1)];e.preventDefault(),(d||v._input).focus()}}else!v.config.noCalendar&&v.daysContainer&&v.daysContainer.contains(t)&&e.shiftKey&&(e.preventDefault(),v._input.focus())}}if(void 0!==v.amPM&&t===v.amPM)switch(e.key){case v.l10n.amPM[0].charAt(0):case v.l10n.amPM[0].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[0],M(),ke();break;case v.l10n.amPM[1].charAt(0):case v.l10n.amPM[1].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[1],M(),ke()}(n||X(t))&&ye("onKeyDown",e)}function ie(e){if(1===v.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():v.days.firstElementChild.dateObj.getTime(),n=v.parseDate(v.selectedDates[0],void 0,!0).getTime(),r=Math.min(t,v.selectedDates[0].getTime()),o=Math.max(t,v.selectedDates[0].getTime()),i=!1,a=0,u=0,c=r;cr&&ca)?a=c:c>n&&(!u||c0&&l0&&l>u;return d?(c.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){c.classList.remove(e)}),"continue"):i&&!d?"continue":(["startRange","inRange","endRange","notAllowed"].forEach(function(e){c.classList.remove(e)}),void(void 0!==e&&(e.classList.add(t<=v.selectedDates[0].getTime()?"startRange":"endRange"),nt&&l===n&&c.classList.add("endRange"),l>=a&&(0===u||l<=u)&&O(l,n,t)&&c.classList.add("inRange"))))},f=0,p=s.children.length;f0||n.getMinutes()>0||n.getSeconds()>0),v.selectedDates&&(v.selectedDates=v.selectedDates.filter(function(e){return te(e)}),v.selectedDates.length||"min"!==e||P(n),ke()),v.daysContainer&&(de(),void 0!==n?v.currentYearElement[e]=n.getFullYear().toString():v.currentYearElement.removeAttribute(e),v.currentYearElement.disabled=!!r&&void 0!==n&&r.getFullYear()===n.getFullYear())}}function ce(){return v.config.wrap?g.querySelector("[data-input]"):g}function le(){"object"!==i(v.config.locale)&&void 0===S.l10ns[v.config.locale]&&v.config.errorHandler(new Error("flatpickr: invalid locale "+v.config.locale)),v.l10n=e(e({},S.l10ns.default),"object"===i(v.config.locale)?v.config.locale:"default"!==v.config.locale?S.l10ns[v.config.locale]:void 0),m.K="("+v.l10n.amPM[0]+"|"+v.l10n.amPM[1]+"|"+v.l10n.amPM[0].toLowerCase()+"|"+v.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},y),JSON.parse(JSON.stringify(g.dataset||{}))).time_24hr&&void 0===S.defaultConfig.time_24hr&&(v.config.time_24hr=v.l10n.time_24hr),v.formatDate=_(v),v.parseDate=w({config:v.config,l10n:v.l10n})}function se(e){if(void 0!==v.calendarContainer){ye("onPreCalendarPosition");var t=e||v._positionElement,n=Array.prototype.reduce.call(v.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),r=v.calendarContainer.offsetWidth,o=v.config.position.split(" "),i=o[0],a=o.length>1?o[1]:null,u=t.getBoundingClientRect(),c=window.innerHeight-u.bottom,l="above"===i||"below"!==i&&cn,d=window.pageYOffset+u.top+(l?-n-2:t.offsetHeight+2);if(s(v.calendarContainer,"arrowTop",!l),s(v.calendarContainer,"arrowBottom",l),!v.config.inline){var f=window.pageXOffset+u.left,p=!1,h=!1;"center"===a?(f-=(r-u.width)/2,p=!0):"right"===a&&(f-=r-u.width,h=!0),s(v.calendarContainer,"arrowLeft",!p&&!h),s(v.calendarContainer,"arrowCenter",p),s(v.calendarContainer,"arrowRight",h);var g=window.document.body.offsetWidth-(window.pageXOffset+u.right),b=f+r>window.document.body.offsetWidth,y=g+r>window.document.body.offsetWidth;if(s(v.calendarContainer,"rightMost",b),!v.config.static)if(v.calendarContainer.style.top=d+"px",b)if(y){var m=function(){for(var e=null,t=0;tv.currentMonth+v.config.showMonths-1)&&"range"!==v.config.mode;if(v.selectedDateElem=n,"single"===v.config.mode)v.selectedDates=[r];else if("multiple"===v.config.mode){var i=ve(r);i?v.selectedDates.splice(parseInt(i),1):v.selectedDates.push(r)}else"range"===v.config.mode&&(2===v.selectedDates.length&&v.clear(!1,!1),v.latestSelectedDateObj=r,v.selectedDates.push(r),0!==k(r,v.selectedDates[0],!0)&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(M(),o){var a=v.currentYear!==r.getFullYear();v.currentYear=r.getFullYear(),v.currentMonth=r.getMonth(),a&&(ye("onYearChange"),V()),ye("onMonthChange")}if(_e(),Y(),ke(),o||"range"===v.config.mode||1!==v.config.showMonths?void 0!==v.selectedDateElem&&void 0===v.hourElement&&v.selectedDateElem&&v.selectedDateElem.focus():U(n),void 0!==v.hourElement&&void 0!==v.hourElement&&v.hourElement.focus(),v.config.closeOnSelect){var u="single"===v.config.mode&&!v.config.enableTime,c="range"===v.config.mode&&2===v.selectedDates.length&&!v.config.enableTime;(u||c)&&fe()}R()}}v.parseDate=w({config:v.config,l10n:v.l10n}),v._handlers=[],v.pluginElements=[],v.loadedPlugins=[],v._bind=A,v._setHoursFromDate=P,v._positionCalendar=se,v.changeMonth=Z,v.changeYear=ee,v.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);v.input.value="",void 0!==v.altInput&&(v.altInput.value="");void 0!==v.mobileInput&&(v.mobileInput.value="");v.selectedDates=[],v.latestSelectedDateObj=void 0,!0===t&&(v.currentYear=v._initialDate.getFullYear(),v.currentMonth=v._initialDate.getMonth());if(!0===v.config.enableTime){var n=T(),r=n.hours,o=n.minutes,i=n.seconds;I(r,o,i)}v.redraw(),e&&ye("onChange")},v.close=function(){v.isOpen=!1,v.isMobile||(void 0!==v.calendarContainer&&v.calendarContainer.classList.remove("open"),void 0!==v._input&&v._input.classList.remove("active"));ye("onClose")},v._createElement=d,v.destroy=function(){void 0!==v.config&&ye("onDestroy");for(var e=v._handlers.length;e--;){var t=v._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(v._handlers=[],v.mobileInput)v.mobileInput.parentNode&&v.mobileInput.parentNode.removeChild(v.mobileInput),v.mobileInput=void 0;else if(v.calendarContainer&&v.calendarContainer.parentNode)if(v.config.static&&v.calendarContainer.parentNode){var n=v.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else v.calendarContainer.parentNode.removeChild(v.calendarContainer);v.altInput&&(v.input.type="text",v.altInput.parentNode&&v.altInput.parentNode.removeChild(v.altInput),delete v.altInput);v.input&&(v.input.type=v.input._type,v.input.classList.remove("flatpickr-input"),v.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete v[e]}catch(e){}})},v.isEnabled=te,v.jumpToDate=L,v.open=function(e,t){void 0===t&&(t=v._positionElement);if(!0===v.isMobile){if(e){e.preventDefault();var n=h(e);n&&n.blur()}return void 0!==v.mobileInput&&(v.mobileInput.focus(),v.mobileInput.click()),void ye("onOpen")}if(v._input.disabled||v.config.inline)return;var r=v.isOpen;v.isOpen=!0,r||(v.calendarContainer.classList.add("open"),v._input.classList.add("active"),ye("onOpen"),se(t));!0===v.config.enableTime&&!0===v.config.noCalendar&&(!1!==v.config.allowInput||void 0!==e&&v.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return v.hourElement.select()},50))},v.redraw=de,v.set=function(e,t){if(null!==e&&"object"===i(e))for(var r in Object.assign(v.config,e),e)void 0!==he[r]&&he[r].forEach(function(e){return e()});else v.config[e]=t,void 0!==he[e]?he[e].forEach(function(e){return e()}):n.indexOf(e)>-1&&(v.config[e]=l(t));v.redraw(),ke(!0)},v.setDate=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=v.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return v.clear(t);ge(e,n),v.latestSelectedDateObj=v.selectedDates[v.selectedDates.length-1],v.redraw(),L(void 0,t),P(),0===v.selectedDates.length&&v.clear(!1);ke(t),t&&ye("onChange")},v.toggle=function(e){if(!0===v.isOpen)return v.close();v.open(e)};var he={locale:[le,J],showMonths:[$,E,q],minDate:[L],maxDate:[L]};function ge(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return v.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[v.parseDate(e,t)];else if("string"==typeof e)switch(v.config.mode){case"single":case"time":n=[v.parseDate(e,t)];break;case"multiple":n=e.split(v.config.conjunction).map(function(e){return v.parseDate(e,t)});break;case"range":n=e.split(v.l10n.rangeSeparator).map(function(e){return v.parseDate(e,t)})}else v.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));v.selectedDates=v.config.allowInvalidPreload?n:n.filter(function(e){return e instanceof Date&&te(e,!1)}),"range"===v.config.mode&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function be(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?v.parseDate(e,void 0,!0):e&&"object"===i(e)&&e.from&&e.to?{from:v.parseDate(e.from,void 0),to:v.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function ye(e,t){if(void 0!==v.config){var n=v.config[e];if(void 0!==n&&n.length>0)for(var r=0;n[r]&&r1||"static"===v.config.monthSelectorType?v.monthElements[t].textContent=b(n.getMonth(),v.config.shorthandCurrentMonth,v.l10n)+" ":v.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),v._hidePrevMonthArrow=void 0!==v.config.minDate&&(v.currentYear===v.config.minDate.getFullYear()?v.currentMonth<=v.config.minDate.getMonth():v.currentYearv.config.maxDate.getMonth():v.currentYear>v.config.maxDate.getFullYear()))}function we(e){return v.selectedDates.map(function(t){return v.formatDate(t,e)}).filter(function(e,t,n){return"range"!==v.config.mode||v.config.enableTime||n.indexOf(e)===t}).join("range"!==v.config.mode?v.config.conjunction:v.l10n.rangeSeparator)}function ke(e){void 0===e&&(e=!0),void 0!==v.mobileInput&&v.mobileFormatStr&&(v.mobileInput.value=void 0!==v.latestSelectedDateObj?v.formatDate(v.latestSelectedDateObj,v.mobileFormatStr):""),v.input.value=we(v.config.dateFormat),void 0!==v.altInput&&(v.altInput.value=we(v.config.altFormat)),!1!==e&&ye("onValueUpdate")}function Oe(e){var t=h(e),n=v.prevMonthNav.contains(t),r=v.nextMonthNav.contains(t);n||r?Z(n?-1:1):v.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?v.changeYear(v.currentYear+1):t.classList.contains("arrowDown")&&v.changeYear(v.currentYear-1)}return function(){v.element=v.input=g,v.isOpen=!1,function(){var t=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=e(e({},JSON.parse(JSON.stringify(g.dataset||{}))),y),i={};v.config.parseDate=o.parseDate,v.config.formatDate=o.formatDate,Object.defineProperty(v.config,"enable",{get:function(){return v.config._enable},set:function(e){v.config._enable=be(e)}}),Object.defineProperty(v.config,"disable",{get:function(){return v.config._disable},set:function(e){v.config._disable=be(e)}});var a="time"===o.mode;if(!o.dateFormat&&(o.enableTime||a)){var u=S.defaultConfig.dateFormat||r.dateFormat;i.dateFormat=o.noCalendar||a?"H:i"+(o.enableSeconds?":S":""):u+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||a)&&!o.altFormat){var c=S.defaultConfig.altFormat||r.altFormat;i.altFormat=o.noCalendar||a?"h:i"+(o.enableSeconds?":S K":" K"):c+" h:i"+(o.enableSeconds?":S":"")+" K"}Object.defineProperty(v.config,"minDate",{get:function(){return v.config._minDate},set:ue("min")}),Object.defineProperty(v.config,"maxDate",{get:function(){return v.config._maxDate},set:ue("max")});var s=function(e){return function(t){v.config["min"===e?"_minTime":"_maxTime"]=v.parseDate(t,"H:i:S")}};Object.defineProperty(v.config,"minTime",{get:function(){return v.config._minTime},set:s("min")}),Object.defineProperty(v.config,"maxTime",{get:function(){return v.config._maxTime},set:s("max")}),"time"===o.mode&&(v.config.noCalendar=!0,v.config.enableTime=!0),Object.assign(v.config,i,o);for(var d=0;d-1?v.config[p]=l(f[p]).map(D).concat(v.config[p]):void 0===o[p]&&(v.config[p]=f[p])}o.altInputClass||(v.config.altInputClass=ce().className+" "+v.config.altInputClass),ye("onParseConfig")}(),le(),v.input=ce(),v.input?(v.input._type=v.input.type,v.input.type="text",v.input.classList.add("flatpickr-input"),v._input=v.input,v.config.altInput&&(v.altInput=d(v.input.nodeName,v.config.altInputClass),v._input=v.altInput,v.altInput.placeholder=v.input.placeholder,v.altInput.disabled=v.input.disabled,v.altInput.required=v.input.required,v.altInput.tabIndex=v.input.tabIndex,v.altInput.type="text",v.input.setAttribute("type","hidden"),!v.config.static&&v.input.parentNode&&v.input.parentNode.insertBefore(v.altInput,v.input.nextSibling)),v.config.allowInput||v._input.setAttribute("readonly","readonly"),v._positionElement=v.config.positionElement||v._input):v.config.errorHandler(new Error("Invalid input element specified")),function(){v.selectedDates=[],v.now=v.parseDate(v.config.now)||new Date;var e=v.config.defaultDate||("INPUT"!==v.input.nodeName&&"TEXTAREA"!==v.input.nodeName||!v.input.placeholder||v.input.value!==v.input.placeholder?v.input.value:null);e&&ge(e,v.config.dateFormat),v._initialDate=v.selectedDates.length>0?v.selectedDates[0]:v.config.minDate&&v.config.minDate.getTime()>v.now.getTime()?v.config.minDate:v.config.maxDate&&v.config.maxDate.getTime()0&&(v.latestSelectedDateObj=v.selectedDates[0]),void 0!==v.config.minTime&&(v.config.minTime=v.parseDate(v.config.minTime,"H:i")),void 0!==v.config.maxTime&&(v.config.maxTime=v.parseDate(v.config.maxTime,"H:i")),v.minDateHasTime=!!v.config.minDate&&(v.config.minDate.getHours()>0||v.config.minDate.getMinutes()>0||v.config.minDate.getSeconds()>0),v.maxDateHasTime=!!v.config.maxDate&&(v.config.maxDate.getHours()>0||v.config.maxDate.getMinutes()>0||v.config.maxDate.getSeconds()>0)}(),v.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=v.currentMonth),void 0===t&&(t=v.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:v.l10n.daysInMonth[e]}},v.isMobile||function(){var e=window.document.createDocumentFragment();if(v.calendarContainer=d("div","flatpickr-calendar"),v.calendarContainer.tabIndex=-1,!v.config.noCalendar){if(e.appendChild((v.monthNav=d("div","flatpickr-months"),v.yearElements=[],v.monthElements=[],v.prevMonthNav=d("span","flatpickr-prev-month"),v.prevMonthNav.innerHTML=v.config.prevArrow,v.nextMonthNav=d("span","flatpickr-next-month"),v.nextMonthNav.innerHTML=v.config.nextArrow,$(),Object.defineProperty(v,"_hidePrevMonthArrow",{get:function(){return v.__hidePrevMonthArrow},set:function(e){v.__hidePrevMonthArrow!==e&&(s(v.prevMonthNav,"flatpickr-disabled",e),v.__hidePrevMonthArrow=e)}}),Object.defineProperty(v,"_hideNextMonthArrow",{get:function(){return v.__hideNextMonthArrow},set:function(e){v.__hideNextMonthArrow!==e&&(s(v.nextMonthNav,"flatpickr-disabled",e),v.__hideNextMonthArrow=e)}}),v.currentYearElement=v.yearElements[0],_e(),v.monthNav)),v.innerContainer=d("div","flatpickr-innerContainer"),v.config.weekNumbers){var t=function(){v.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",v.l10n.weekAbbreviation));var t=d("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,r=t.weekNumbers;v.innerContainer.appendChild(n),v.weekNumbers=r,v.weekWrapper=n}v.rContainer=d("div","flatpickr-rContainer"),v.rContainer.appendChild(q()),v.daysContainer||(v.daysContainer=d("div","flatpickr-days"),v.daysContainer.tabIndex=-1),Y(),v.rContainer.appendChild(v.daysContainer),v.innerContainer.appendChild(v.rContainer),e.appendChild(v.innerContainer)}v.config.enableTime&&e.appendChild(function(){v.calendarContainer.classList.add("hasTime"),v.config.noCalendar&&v.calendarContainer.classList.add("noCalendar"),v.timeContainer=d("div","flatpickr-time"),v.timeContainer.tabIndex=-1;var e=d("span","flatpickr-time-separator",":"),t=p("flatpickr-hour",{"aria-label":v.l10n.hourAriaLabel});v.hourElement=t.getElementsByTagName("input")[0];var n=p("flatpickr-minute",{"aria-label":v.l10n.minuteAriaLabel});if(v.minuteElement=n.getElementsByTagName("input")[0],v.hourElement.tabIndex=v.minuteElement.tabIndex=-1,v.hourElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getHours():v.config.time_24hr?v.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(v.config.defaultHour)),v.minuteElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getMinutes():v.config.defaultMinute),v.hourElement.setAttribute("step",v.config.hourIncrement.toString()),v.minuteElement.setAttribute("step",v.config.minuteIncrement.toString()),v.hourElement.setAttribute("min",v.config.time_24hr?"0":"1"),v.hourElement.setAttribute("max",v.config.time_24hr?"23":"12"),v.minuteElement.setAttribute("min","0"),v.minuteElement.setAttribute("max","59"),v.timeContainer.appendChild(t),v.timeContainer.appendChild(e),v.timeContainer.appendChild(n),v.config.time_24hr&&v.timeContainer.classList.add("time24hr"),v.config.enableSeconds){v.timeContainer.classList.add("hasSeconds");var r=p("flatpickr-second");v.secondElement=r.getElementsByTagName("input")[0],v.secondElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getSeconds():v.config.defaultSeconds),v.secondElement.setAttribute("step",v.minuteElement.getAttribute("step")),v.secondElement.setAttribute("min","0"),v.secondElement.setAttribute("max","59"),v.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),v.timeContainer.appendChild(r)}return v.config.time_24hr||(v.amPM=d("span","flatpickr-am-pm",v.l10n.amPM[u((v.latestSelectedDateObj?v.hourElement.value:v.config.defaultHour)>11)]),v.amPM.title=v.l10n.toggleTitle,v.amPM.tabIndex=-1,v.timeContainer.appendChild(v.amPM)),v.timeContainer}()),s(v.calendarContainer,"rangeMode","range"===v.config.mode),s(v.calendarContainer,"animate",!0===v.config.animate),s(v.calendarContainer,"multiMonth",v.config.showMonths>1),v.calendarContainer.appendChild(e);var o=void 0!==v.config.appendTo&&void 0!==v.config.appendTo.nodeType;if((v.config.inline||v.config.static)&&(v.calendarContainer.classList.add(v.config.inline?"inline":"static"),v.config.inline&&(!o&&v.element.parentNode?v.element.parentNode.insertBefore(v.calendarContainer,v._input.nextSibling):void 0!==v.config.appendTo&&v.config.appendTo.appendChild(v.calendarContainer)),v.config.static)){var i=d("div","flatpickr-wrapper");v.element.parentNode&&v.element.parentNode.insertBefore(i,v.element),i.appendChild(v.element),v.altInput&&i.appendChild(v.altInput),i.appendChild(v.calendarContainer)}v.config.static||v.config.inline||(void 0!==v.config.appendTo?v.config.appendTo:window.document.body).appendChild(v.calendarContainer)}(),function(){if(v.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(v.element.querySelectorAll("[data-"+e+"]"),function(t){return A(t,"click",v[e])})}),v.isMobile)!function(){var e=v.config.enableTime?v.config.noCalendar?"time":"datetime-local":"date";v.mobileInput=d("input",v.input.className+" flatpickr-mobile"),v.mobileInput.tabIndex=1,v.mobileInput.type=e,v.mobileInput.disabled=v.input.disabled,v.mobileInput.required=v.input.required,v.mobileInput.placeholder=v.input.placeholder,v.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",v.selectedDates.length>0&&(v.mobileInput.defaultValue=v.mobileInput.value=v.formatDate(v.selectedDates[0],v.mobileFormatStr)),v.config.minDate&&(v.mobileInput.min=v.formatDate(v.config.minDate,"Y-m-d")),v.config.maxDate&&(v.mobileInput.max=v.formatDate(v.config.maxDate,"Y-m-d")),v.input.getAttribute("step")&&(v.mobileInput.step=String(v.input.getAttribute("step"))),v.input.type="hidden",void 0!==v.altInput&&(v.altInput.type="hidden");try{v.input.parentNode&&v.input.parentNode.insertBefore(v.mobileInput,v.input.nextSibling)}catch(e){}A(v.mobileInput,"change",function(e){v.setDate(h(e).value,!1,v.mobileFormatStr),ye("onChange"),ye("onClose")})}();else{var e=c(ae,50);v._debouncedChange=c(R,x),v.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(v.daysContainer,"mouseover",function(e){"range"===v.config.mode&&ie(h(e))}),A(window.document.body,"keydown",oe),v.config.inline||v.config.static||A(window,"resize",e),void 0!==window.ontouchstart?A(window.document,"touchstart",Q):A(window.document,"click",Q),A(window.document,"focus",Q,{capture:!0}),!0===v.config.clickOpens&&(A(v._input,"focus",v.open),A(v._input,"click",v.open)),void 0!==v.daysContainer&&(A(v.monthNav,"click",Oe),A(v.monthNav,["keyup","increment"],N),A(v.daysContainer,"click",pe)),void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&(A(v.timeContainer,["increment"],j),A(v.timeContainer,"blur",j,{capture:!0}),A(v.timeContainer,"click",F),A([v.hourElement,v.minuteElement],["focus","click"],function(e){return h(e).select()}),void 0!==v.secondElement&&A(v.secondElement,"focus",function(){return v.secondElement&&v.secondElement.select()}),void 0!==v.amPM&&A(v.amPM,"click",function(e){j(e),R()})),v.config.allowInput&&A(v._input,"blur",re)}}(),(v.selectedDates.length||v.config.noCalendar)&&(v.config.enableTime&&P(v.config.noCalendar?v.latestSelectedDateObj||v.config.minDate:void 0),ke(!1)),E();var t=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!v.isMobile&&t&&se(),ye("onReady")}(),v}function E(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),r=[],o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:t.key)+(arguments.length>2?arguments[2]:void 0)})}},{key:"key",get:function(){return this.childDescriptor.key}},{key:"parentNotation",get:function(){return"".concat(this.parentKlass.constructor.name,"#").concat(this.parentPropertySignature)}},{key:"childNotation",get:function(){return"".concat(this.childKlass.constructor.name,"#").concat(this.childPropertySignature)}},{key:"parentTopic",get:function(){return this._getTopic(this.parentDescriptor)}},{key:"childTopic",get:function(){return this._getTopic(this.childDescriptor)}},{key:"parentPropertySignature",get:function(){return this._extractTopicSignature(this.parentTopic)}},{key:"childPropertySignature",get:function(){return this._extractTopicSignature(this.childTopic)}}]),a(e,[{key:"assert",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";!0!==e&&this.error("{child} does not properly override {parent}"+t)}},{key:"error",value:function(e){var t=this;throw e=e.replace("{parent}",function(e){return t.parentNotation}).replace("{child}",function(e){return t.childNotation}),new SyntaxError(e)}}]),e}();function l(e){return e.hasOwnProperty("value")?"data":e.hasOwnProperty("get")||e.hasOwnProperty("set")?"accessor":"data"}function s(e,t,n){n.assert(e.length===t.length)}function d(e,t,n){var r=l(e),i=l(t);switch(r!==i&&n.error('descriptor types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"data":!function(e,t,n){var r=o(e.value),i=o(t.value);switch("undefined"===r&&"undefined"===i&&n.error("descriptor values are both undefined. (class properties are are not currently supported)'"),r!==i&&("function"===i&&void 0===r||void 0!==r)&&n.error('value types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"function":s(e.value,t.value,n);break;default:n.error('Unexpected error. Please file a bug with: {parent} is "'.concat(r,'", {child} is "').concat(i,'"'))}}(e,t,n);break;case"accessor":!function(e,t,n){var r="function"==typeof e.get,o="function"==typeof t.get,i="function"==typeof e.set,a="function"==typeof t.set;(r||o)&&(!r&&i&&n.error("{parent} is setter but {child} is getter"),!o&&a&&n.error("{parent} is getter but {child} is setter"),s(e.get,t.get,n)),(i||a)&&(!i&&r&&n.error("{parent} is getter but {child} is setter"),!a&&o&&n.error("{parent} is setter but {child} is getter"),s(e.set,t.set,n))}(e,t,n)}}var f=[function(e){return e.toLowerCase()},function(e){return e.toUpperCase()},function(e){return e+"s"},function(e){return e.slice(0,-1)},function(e){return e.slice(1,e.length)}];function p(e,t,n){n.key=t;var r=Object.getPrototypeOf(e),o=Object.getOwnPropertyDescriptor(r,t),i=new c(r,e,o,n);if(void 0===o){var a=function(e,t){for(var n=0,r=f.length;n=0&&l.splice(t,1)}function g(e){var t=document.createElement("style");return e.attrs.type="text/css",b(t,e.attrs),p(e,t),t}function b(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=c++;n=u||(u=g(t)),r=v.bind(null,n,a,!1),o=v.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",b(t,e.attrs),p(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=s(r));o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){h(n),n.href&&URL.revokeObjectURL(n.href)}):(n=g(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){h(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!==("undefined"==typeof document?"undefined":i(document)))throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"===i(t.attrs)?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=f(e,t);return d(n,t),function(e){for(var o=[],i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?"s":"")+" required, but only "+t.length+" present")}},function(e,t,n){var r=n(46);t.a=r.a},function(e,t,n){var r=n(65);t.a=r.a},function(e,t,n){var r=n(18);t.a=function(e,t,n){"__proto__"==t&&r.a?Object(r.a)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(70),o=function(){try{var e=Object(r.a)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.a=o},function(e,t,n){var r=n(5),o=n(8),i="[object AsyncFunction]",a="[object Function]",u="[object GeneratorFunction]",c="[object Proxy]";t.a=function(e){if(!Object(o.a)(e))return!1;var t=Object(r.a)(e);return t==a||t==u||t==i||t==c}},function(e,t,n){(function(e){function n(e){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.a=r}).call(t,n(21))},function(e,t){function n(e){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){var r=n(23),o=n(79),i=n(80);t.a=function(e,t){return Object(i.a)(Object(o.a)(e,t,r.a),e+"")}},function(e,t,n){t.a=function(e){return e}},function(e,t,n){t.a=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(11),o=n(12),i=n(27),a=n(8);function u(e){"@babel/helpers - typeof";return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}t.a=function(e,t,n){if(!Object(a.a)(n))return!1;var c=u(t);return!!("number"==c?Object(o.a)(n)&&Object(i.a)(t,n.length):"string"==c&&t in n)&&Object(r.a)(n[t],e)}},function(e,t,n){var r=9007199254740991;t.a=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o=9007199254740991,i=/^(?:0|[1-9]\d*)$/;t.a=function(e,t){var n=r(e);return!!(t=null==t?o:t)&&("number"==n||"symbol"!=n&&i.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){var r=n(109);t.a=function(e){return null==e?"":Object(r.a)(e)}},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n59)}},function(e,t,n){var r=n(123);n.d(t,"a",function(){return r.b});r.a},function(e,t,n){var r=n(124);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),o=n(51),i=n(53),a=n(57),u=n(61),c=n(16),l=n(113),s=n(115),d=n(129);n.d(t,"BooleanEditor",function(){return r.a}),n.d(t,"BooleanRenderer",function(){return o.a}),n.d(t,"BooleanFilter",function(){return i.a}),n.d(t,"NumberEditor",function(){return a.a}),n.d(t,"TextEditor",function(){return u.a}),n.d(t,"TemplateRenderer",function(){return c.a}),n.d(t,"ImageRenderer",function(){return l.a}),n.d(t,"DateTimeFilter",function(){return s.a}),n.d(t,"DateTimeEditor",function(){return d.a})},function(e,t,n){var r=n(44);t.a=r.a},function(e,t,n){var r=n(0),o=n(15);function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){for(var n=0;n-1||!(n.indexOf(r)>-1)&&e}}]),n}();t.a=s},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(t&&t.hasOwnProperty(e)&&null!==t[e])n=t[e];else if(t.hasOwnProperty("colDef")&&t.colDef.hasOwnProperty(e)&&null!==t.colDef[e])n=t.colDef[e];else{var o=null;if(t.hasOwnProperty("context")&&(o=t.context.AGridComponentsMetaConfig||t.context.meta),o&&o.hasOwnProperty(t.column.colId)&&o[t.column.colId].hasOwnProperty(e)&&null!==o[t.column.colId][e])n=o[t.column.colId][e];else if(o&&o.hasOwnProperty(e)&&null!==o[e])n=o[e];else{var i=t.context;n=i&&i.hasOwnProperty(e)&&null!==i[e]?i[e]:r}}return void 0!==n?n:r}},{key:"getWin",value:function(e){var t=this.getOption("window",e)||window||null;if(!t)throw new Error("Current environment does not support window");return t}},{key:"getDoc",value:function(e){var t=this.getOption("document",e)||document||null;if(!t)throw new Error("Current environment does not support document");return t}}]),e}();t.a=o},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(48);n.n(u);function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).setChecked(r),e.setListener(o),e.setDisabled(!1),e}return function(e,t,n){t&&l(e.prototype,t),n&&l(e,n)}(n,[{key:"init",value:function(e){this._params=e,this._onClick=this._onClick.bind(this),this._onKeydown=this._onKeydown.bind(this),this._gui=this.getDoc(e).createElement("div"),this._gui.className="boolSwitch__wrapper",this._gui.tabIndex=-1,this.render()}},{key:"render",value:function(){var e=this.getDoc(this._params),t=document.createElement("div");t.className="boolSwitch",this._input=e.createElement("input"),this._input.id="el-".concat(Math.random()),this._input.name="checkbox",this._input.className="boolSwitch__checkbox",this._input.type="checkbox",this._input.checked=this.isChecked(),this._input.disabled=this.isDisabled(),this._input.tabIndex="0";var n=document.createElement("label");n.className="boolSwitch__label",n.for=this._input.id,n.innerHTML='\n \n \n ',t.appendChild(this._input),t.appendChild(n),t.addEventListener("click",this._onClick),this._gui.addEventListener("keydown",this._onKeydown),this._gui.appendChild(t)}},{key:"destroy",value:function(){this._gui.querySelector(".boolSwitch").removeEventListener("click",this._onClick),this._gui.removeEventListener("keydown",this._onKeydown)}},{key:"focus",value:function(){this._gui.focus(),this._input.focus()}},{key:"setListener",value:function(e){this._listener=e}},{key:"getListener",value:function(){return this._listener}},{key:"setChecked",value:function(e){this._checked=e,this._input&&(this._input.checked=e)}},{key:"isChecked",value:function(){return this._checked}},{key:"toggle",value:function(){this.setChecked(!this.isChecked())}},{key:"setDisabled",value:function(e){this._disabled=e,this._input&&(this._input.disabled=e)}},{key:"isDisabled",value:function(){return this._disabled}},{key:"_onClick",value:function(e){if(this._disabled)return!1;this.toggle(),this._listener&&this._listener(this)}},{key:"_onKeydown",value:function(e){if(this._disabled)return!1;var t=e.which||e.keyCode;32==t?(this.toggle(),this._listener&&this._listener(this),e.stopPropagation()):39==t?(this.setChecked(!0),this._listener&&this._listener(this),e.stopPropagation()):37==t&&(this.setChecked(!1),this._listener&&this._listener(this),e.stopPropagation())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_onClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onClick"),r.prototype),p(r.prototype,"_onKeydown",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onKeydown"),r.prototype),r);t.a=h},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n-1)if(r.length&&"switch"!==r)this._gui.innerHTML=r;else{var u=this._getSwitcher(e);u.setChecked(!0),this._gui.innerHTML="",this._gui.appendChild(u.getGui())}else if(a.indexOf(n)>-1)if(o.length&&"switch"!==o)this._gui.innerHTML=o;else{var c=this._getSwitcher(e);c.setChecked(!1),this._gui.innerHTML="",this._gui.appendChild(c.getGui())}else this._gui.innerHTML=n}return!0}},{key:"_getSwitcher",value:function(e){return this._switcher||(this._switcher=new o.a,this._switcher.setDisabled(!0),this._switcher.init(e)),this._switcher}}]),n}();t.a=s},function(e,t,n){var r=n(54);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(55);n.n(u);function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n\n \n\n\n \n \n ").concat(r?"":'\n \n ")," \n \n "),i.addEventListener("change",this._onRadioChange),this._gui.appendChild(i);var a=document.createElement("div");a.className="booleanFilter__body__applyPanel ag-filter-apply-panel ag-hidden",a.innerHTML='\n \n \n \n "),(n||r||o)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a)}},{key:"destroy",value:function(){this._gui.querySelector(".booleanFilter__body__labels").removeEventListener("change",this._onRadioChange),this._gui.querySelector(".booleanFilter__body__applyPanel").removeEventListener("click",this._ApplyFilterPanelButtonClick)}},{key:"doesFilterPass",value:function(e){var t=String(this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter(e):this._params.valueGetter(e));return"true"===this._filterText?this._trueValue.indexOf(t)>-1:this._falseValue.indexOf(t)>-1}},{key:"isFilterActive",value:function(){return null!==this._filterText&&void 0!==this._filterText&&""!==this._filterText}},{key:"getModel",value:function(){return this.isFilterActive()?{value:this._filterText,filterType:"boolean"}:null}},{key:"setModel",value:function(e){this._filterText=e&&e.hasOwnProperty("value")?e.value:"";var t=String(this._filterText);this._gui.querySelector(".booleanFilter__body").querySelectorAll('input[type="radio"]').forEach(function(e){e.value==t?e.checked=!0:e.checked=!1})}},{key:"getModelAsString",value:function(e){return e?function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}("true"===e.value?this._booleanFilterTranslation.true:this._booleanFilterTranslation.false):""}},{key:"reset",value:function(){var e=this._gui.querySelector(".booleanFilter__body");e.querySelectorAll('input[type="radio"]').forEach(function(e){e.checked=!1}),e.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),e.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{e.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(e){}this._filterText=null}},{key:"_onRadioChange",value:function(e,t){var n=t.target;this._filterText=n.value;var r=this._gui.querySelector(".booleanFilter__body");if(r)if(n.classList.contains("true-input")){r.querySelector(".ag-wrapper-true").classList.add("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else if(n.classList.contains("false-input")){r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.add("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else{r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.add("ag-checked")}catch(t){}}!1===e&&this._params.filterChangedCallback()}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_ApplyFilterPanelButtonClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_ApplyFilterPanelButtonClick"),r.prototype),r);t.a=g},function(e,t,n){var r=n(56);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".booleanFilter__body__labels label{display:block;padding:6px}.booleanFilter__body__labels label{display:block;padding:6px 0}.booleanFilter__body__labels label span{padding-left:6px}\n",""])},function(e,t,n){var r=n(58);t.a=r.a},function(e,t,n){var r,o=n(0),i=n(1),a=n(2),u=n(59);n.n(u);function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&Object(o.a)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(28),o=n(94),i=n(12);t.a=function(e){return Object(i.a)(e)?Object(r.a)(e,!0):Object(o.a)(e)}},function(e,t,n){t.a=function(e,t){for(var n=-1,r=Array(e);++n"']/g,a=RegExp(i.source);t.a=function(e){return(e=Object(o.a)(e))&&a.test(e)?e.replace(i,r.a):e}},function(e,t,n){var r=n(108),o=Object(r.a)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.a=o},function(e,t,n){t.a=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){var r=n(9),o=n(34),i=n(29),a=n(110),u=1/0,c=r.a?r.a.prototype:void 0,l=c?c.toString:void 0;t.a=function e(t){if("string"==typeof t)return t;if(Object(i.a)(t))return Object(o.a)(t,e)+"";if(Object(a.a)(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-u?"-0":n}},function(e,t,n){var r=n(5),o=n(6);function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var a="[object Symbol]";t.a=function(e){return"symbol"==i(e)||Object(o.a)(e)&&Object(r.a)(e)==a}},function(e,t,n){t.a=/<%-([\s\S]+?)%>/g},function(e,t,n){t.a=/<%([\s\S]+?)%>/g},function(e,t,n){var r=n(114);t.a=r.a},function(e,t,n){var r=n(16);function o(e){"@babel/helpers - typeof";return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n\n '):e.renderTemplate=r,a(l(n.prototype),"refresh",this).call(this,e,t)}}]),n}();t.a=s},function(e,t,n){var r=n(116);t.a=r.a},function(e,t,n){var r,o,i,a,u,c,l,s,d,f,p,h,g,b=n(1),y=n(2),m=n(37),v=n(38),_=n(40),w=n(41),k=n(0),O=n(127);n.n(O);function C(e){"@babel/helpers - typeof";return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var n=0;n-1?R:this._filterOptions[0]),this.state.type=this._defaultOption;var i=(x(t={},R,o(R,"Equals")),x(t,L,o(R,"Not equal")),x(t,F,o(F,"Less than")),x(t,G,o(G,"Greater than")),x(t,H,o(H,"In range")),t);this._gui=document.createElement("div"),this._gui.className="dateTimeFilter ag-filter-body-wrapper",this._gui.innerHTML='\n \n
\n
\n
\n
\n
\n
\n '),this._filterTimeInput.init(e),this._filterTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filter=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._filterToDateTimeInput.init(e),this._filterToDateTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filterTo=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._gui.querySelector(".ag-filter-date-from").appendChild(this._filterTimeInput.getGui()),this._gui.querySelector(".ag-filter-date-to").appendChild(this._filterToDateTimeInput.getGui()),this._gui.querySelector(".ag-filter-select").addEventListener("change",this._onTypeChange),this.setState(this._state)}},{key:"destroy",value:function(){this.off(n.ON_CONDITION_CHANGED),this._filterTimeInput.destroy(),this._filterToDateTimeInput.destroy(),this._gui.querySelector(".ag-filter-select").removeEventListener("change",this._onTypeChange),this.reset()}},{key:"reset",value:function(){this.state.filter=null,this.state.filterTo=null,this._filterTimeInput.reset(),this._filterToDateTimeInput.reset(),this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){e=e||{},this.state.filter=e.filter||null,this.state.filterTo=e.filterTo||null,this.state.type=e.type||this._defaultOption;var t=this._gui,r=this._filterOptions,o=t.querySelector(".ag-filter-select"),i=this._filterTimeInput,a=this._filterToDateTimeInput;if(o.selectedIndex=r.indexOf(this.state.type),i.setDate(this.state.filter),a.setDate(this.state.filterTo),"createEvent"in document){var u=document.createEvent("HTMLEvents");u.initEvent("change",!1,!0),o.dispatchEvent(u)}else o.fireEvent("onchange");this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"_onTypeChange",value:function(e){var t=e.target,r=this._gui.querySelector(".ag-filter-date-to");this.state.type=t.options[t.selectedIndex].value,this.state.type===H?r.classList.remove("ag-hidden"):r.classList.add("ag-hidden"),this.notify(n.ON_CONDITION_CHANGED,this.state)}}]),n}(),u.ON_CONDITION_CHANGED="ConditionPanel.ON_CONDITION_CHANGED",A(o=c,"ON_CONDITION_CHANGED",[m.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_CONDITION_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),a=A(o.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{type:R,filter:null,filterTo:null}}}),A(o.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),A(o.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),A(o.prototype,"_onTypeChange",[b.a],Object.getOwnPropertyDescriptor(o.prototype,"_onTypeChange"),o.prototype),r=o))||r,B=Object(_.a)((h=p=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i \n ').concat(t("andCondition","AND"),'\n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n '),this._gui.appendChild(this._operatorPanel),this._operatorPanel.addEventListener("change",this._onOperatorChanged),this._gui.appendChild(this._secondConditionPanel.getGui())}},{key:"destroy",value:function(){this._firstConditionPanel.destroy(),this._secondConditionPanel.destroy(),this._operatorPanel.removeEventListener("change",this._onOperatorChanged),this.off(n.ON_JOIN_CONDITION_CHANGED),this.reset()}},{key:"reset",value:function(){this._firstConditionPanel.reset(),this._secondConditionPanel.reset(),this.notify(z.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){var t=this;e=e||{},this.state.operator=e.operator||W,this.state.condition1=e.condition1||null,this.state.condition2=e.condition2||null,this._firstConditionPanel.setState(this.state.condition1),this._secondConditionPanel.setState(this.state.condition2),this._operatorPanel.querySelectorAll("input").forEach(function(e){e.classList.contains(t.state.operator)?e.checked=!0:e.checked=!1}),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onOperatorChanged",value:function(e){var t=e.target;this.state.operator=t.value,t.classList.contains("OR")?(this._operatorPanel.querySelector(".ag-wrapper-or").classList.add("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.remove("ag-checked")):(this._operatorPanel.querySelector(".ag-wrapper-or").classList.remove("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.add("ag-checked")),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onFirstConditionChanged",value:function(e){if(this.state.condition1=e,!this.getOption("suppressAndOrCondition",this._params,!1)){var t=this.state.condition1,r=t.filter,o=t.filterTo,i=t.type,a=this._secondConditionPanel.getGui(),u=this._operatorPanel;(i===H?!r||!o:!r)?(a.classList.add("ag-hidden"),u.classList.add("ag-hidden")):(a.classList.remove("ag-hidden"),u.classList.remove("ag-hidden"))}this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onSecondConditionChanged",value:function(e){this.state.condition2=e,this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}}]),n}(),p.ON_JOIN_CONDITION_CHANGED="JoinConditionPanel.ON_JOIN_CONDITION_CHANGED",A(s=h,"ON_JOIN_CONDITION_CHANGED",[m.a],(d=(d=Object.getOwnPropertyDescriptor(s,"ON_JOIN_CONDITION_CHANGED"))?d.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return d}}),s),f=A(s.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{condition1:{},condition2:{},operator:W}}}),A(s.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"init"),s.prototype),A(s.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"destroy"),s.prototype),A(s.prototype,"_onOperatorChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onOperatorChanged"),s.prototype),A(s.prototype,"_onFirstConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onFirstConditionChanged"),s.prototype),A(s.prototype,"_onSecondConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onSecondConditionChanged"),s.prototype),l=s))||l,Y=(A((g=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i').concat(n("clearFilter","Clear Filter"),'\n \n \n "),(r||o||i)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a),this._state=this._JoinConditionPanel.state,this._params=e,this._doesFilterPassOptions={enableTime:this.getOption("dateTimeEnableTime",this._params,!0),inRangeInclusive:this.getOption("inRangeInclusive",this._params,!1),valueGetter:this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter:this._params.valueGetter}}},{key:"destroy",value:function(){this._JoinConditionPanel.destroy()}},{key:"doesFilterPass",value:function(e){var t=this._doesFilterPassOptions.valueGetter(e),n=this._state,r=n.condition1,o=n.condition2,i=n.operator,a=this._doesPassCondition(r,t),u=this._doesPassCondition(o,t);return i===W?a||u:a&&u}},{key:"isFilterActive",value:function(){var e=this._state.condition1;return!(!e||!e.filter)&&(e.filterTo&&e.type===H?null!==e.filter&&null!==e.filterTo:null!==e.filter)}},{key:"getModel",value:function(){var e=this,t=JSON.parse(JSON.stringify(this._state));return[t.condition1,t.condition2].forEach(function(t,n){t.filter&&(t.filter=e._state["condition".concat(n+1)].filter.toISOString()),t.filterTo&&(t.filterTo=e._state["condition".concat(n+1)].filterTo.toISOString())}),t.filterType="datetime",t.condition1.filterType="datetime",t.condition2.filterType="datetime",t.hasOwnProperty("condition2")&&t.condition2.hasOwnProperty("filter")&&t.condition2.filter?t:t.condition1}},{key:"setModel",value:function(e){!e||e.hasOwnProperty("condition1")||e.hasOwnProperty("condition2")||(e={condition1:e}),this.__disableStateChangeListener=!0,this._JoinConditionPanel.setState(e),this.__disableStateChangeListener=!1,this._state=this._JoinConditionPanel.state,[this._state.condition1,this._state.condition2].forEach(function(e){e.filter&&(e.filter=new Date(e.filter)),e.filterTo&&(e.filterTo=new Date(e.filterTo))})}},{key:"getModelAsString",value:function(e){if(!e)return"";var t=this.getOption("dateTimeMask",this._params,this._JoinConditionPanel._firstConditionPanel._filterTimeInput.picker.config.dateFormat),n=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US"),r=JSON.parse(JSON.stringify(e)),o=r.condition1,i=r.condition2,a=r.operator;[o,i].forEach(function(e){e.filter&&(e.filter=BBj.Masks.DateMask.mask(e.filter,t,n)),e.filterTo&&(e.filterTo=BBj.Masks.DateMask.mask(e.filterTo,t,n))});var u="".concat(o.filter||""," ").concat(o.filterTo?"→ "+o.filterTo:""),c="".concat(i.filter||""," ").concat(i.filterTo?"→ "+i.filterTo:""),l="".concat(i.filter&&a?a:"");return"".concat(u," ").concat(l," ").concat(c).trim()}},{key:"_doesPassCondition",value:function(e,t){if(!e.filter||!t)return!1;var n=e.filter,r=e.filterTo,o=e.type,i=BBj.Masks.Utils.Dates.getTimezoneOrOffset(),a=this._doesFilterPassOptions.inRangeInclusive,u=this._doesFilterPassOptions.enableTime,c=!1;return BBj.Masks.Utils.Dates.IS_TIME_REGEX.test(t)?(t=t=BBj.Masks.Utils.Dates.fixShortISO(t),[n,r].forEach(function(e){e instanceof Date&&(e.setFullYear(1970),e.setMonth(0),e.setDate(1))})):BBj.Masks.Utils.Dates.IS_DATE_REGEX.test(t)&&(t=BBj.Masks.Utils.Dates.fixShortISO(t)),t=Object(v.a)(t,i),u||[t,n,r].forEach(function(e){e instanceof Date&&(e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0))}),o===R?c=n>t==!1&&nt==!1&&nt:o===H&&r&&(c=a?(nt==!1&&nt||r>t==!1&&rt),c}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this._JoinConditionPanel.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this._JoinConditionPanel.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}},{key:"_onJoinConditionPanelStateChanged",value:function(e,t){this._state=e,!1===t&&this._params.filterChangedCallback()}}]),n}()).prototype,"init",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"init"),g.prototype),A(g.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"destroy"),g.prototype),A(g.prototype,"_ApplyFilterPanelButtonClick",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_ApplyFilterPanelButtonClick"),g.prototype),A(g.prototype,"_onJoinConditionPanelStateChanged",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_onJoinConditionPanelStateChanged"),g.prototype),g);t.a=Y},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5};var o={}},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(13),o=n(119),i=n(14)},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(o.a)(e).getTime(),a=Object(r.a)(t);return new Date(n+a)};var r=n(13),o=n(120),i=n(14)},function(e,t,n){t.a=function(e){Object(r.a)(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===o(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))};var r=n(14);function o(e){"@babel/helpers - typeof";return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length)));if(t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),m=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=m.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),o=parseInt(n[1],10)-1,g(t,o)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return i=parseInt(n[1],10)-1,b(t,i)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(t,i,c)?d(t,i,c):new Date(NaN)}return null}(m.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,k=_.getTime(),O=0;if(p.time&&(O=function(e){var t,n,r;if(t=s.HH.exec(e))return y(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),y(n,r)?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return y(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(O)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O)),isNaN(w))return new Date(NaN);if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O+w)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(k+O)),w=Object(o.a)(new Date(k+O+w));return new Date(k+O+w)}return new Date(NaN)};var r=n(13),o=n(122),i=n(39);function a(e){"@babel/helpers - typeof";return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function y(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var i=n>0?(r+o(t))%r:o(t);return n*r+i};var r=6e4;function o(e){return e.getTime()%r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).picker=null,e.selectedDate=null,e._params={},e._gui=document.createElement("div"),e._gui.className="ag-cell-edit-wrapper",e._gui.innerHTML='\n
\n
\n \n \n \n \n
\n
\n '),e}return function(e,t,n){t&&g(e.prototype,t),n&&g(e,n)}(n,[{key:"init",value:function(e){this._params=e;var t=this.getOption("dateTimeEnableTime",e,!0),n=this.getOption("dateTimeEnable24HR",e,!0),r=this.getOption("dateTimeEnableSeconds",e,!1),o=!this.getOption("dateTimeEnableCalendar",e,!0),i=this.getOption("dateTimeMask",e);i||(i=o?"":"%Y/%Mz/%Dz",t&&(i+=n?" %Hz:%mz":" %hz:%mz",r&&(i+=":%sz"))),i=i.trim(),this.picker=flatpickr(this._gui,{wrap:!0,allowInput:!1,onChange:this._onDateChanged,formatDate:this.formatDate,maxDate:this.getOption("dateTimeMax",e,null),minDate:this.getOption("dateTimeMin",e,null),defaultHour:this.getOption("dateTimeDefaultHour",e,12),defaultMinute:this.getOption("dateTimeDefaultMinute",e,0),disableMobile:this.getOption("dateTimeDisableMobile",e,!1),weekNumbers:this.getOption("dateTimeEnableWeekNumber",e,!1),locale:this._getPickerLocale(),noCalendar:o,dateFormat:i,enableTime:t,enableSeconds:r,time_24hr:n}),this.picker.calendarContainer.classList.add("ag-custom-component-popup")}},{key:"destroy",value:function(){this.picker.destroy(),this.off(n.ON_DATE_CHANGED)}},{key:"setDate",value:function(e){this.picker.setDate(e,!0)}},{key:"open",value:function(){this.picker.open(),this._gui.querySelector("input").focus()}},{key:"close",value:function(){this.picker.close()}},{key:"reset",value:function(){this.picker.config&&this.picker.clear()}},{key:"formatDate",value:function(e,t){var n=this.getOption("dateTimeFormatter",this._params),r=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US");if(!n){if(!t||t&&t.indexOf("%")<0)return;return BBj.Masks.DateMask.mask(e,t,r)}var o=n;switch(h(n)){case"string":return o.indexOf("return")>=0||(o="return "+o+";"),new Function("date","format","locale","DateMask",o)(e,t,r,BBj.Masks.DateMask);case"function":return n(e,t,r,BBj.Masks.DateMask);default:throw new Error('Invalid dateTimeFormatter defined for column "'.concat(this._params.colDef.field,'". The formatter should be an expression or plain function'))}}},{key:"_onDateChanged",value:function(e){this.selectedDate=e[0]||null,this.notify(n.ON_DATE_CHANGED,this.selectedDate)}},{key:"_getPickerLocale",value:function(){for(var e=Intl.DateTimeFormat().resolvedOptions().locale||"en-US",t=[],n=[],r=4;r<11;r++){var o=new Date(1970,0,r);t.push(o.toLocaleString(e,{weekday:"short"}).split(",")[0]),n.push(o.toLocaleString(e,{weekday:"long"}).split(",")[0])}for(var i=[],a=[],u=0;u<12;u++){var c=new Date(1970,u,4);i.push(c.toLocaleString(e,{month:"short"})),a.push(c.toLocaleString(e,{month:"long"}))}return{weekdays:{shorthand:t,longhand:n},months:{shorthand:i,longhand:a},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:BBj.Masks.Utils.Dates.getWeekStartByLocale(e),ordinal:function(e){return""},rangeSeparator:" ",weekAbbreviation:"",scrollTitle:"",toggleTitle:"",amPM:["AM","PM"],yearAriaLabel:"",hourAriaLabel:"",minuteAriaLabel:""}}}]),n}(),a.ON_DATE_CHANGED="DateTimeInput.ON_DATE_CHANGED",v(o=u,"ON_DATE_CHANGED",[s.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_DATE_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),v(o.prototype,"init",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),v(o.prototype,"destroy",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),v(o.prototype,"formatDate",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"formatDate"),o.prototype),v(o.prototype,"_onDateChanged",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"_onDateChanged"),o.prototype),r=o))||r;t.a=_},function(e,t,n){var r=n(126);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".datetime__input{display:flex;align-items:center;width:100%;height:100%;overflow:hidden;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));border-radius:3px}.datetime__input:focus,.datetime__input:active,.datetime__input:hover{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input__input{flex:1;padding:6px;border:none;outline:none;background-color:var(--ag-background-color);color:inherit}.ag-theme-alpine .datetime__input__input,.ag-theme-balham .datetime__input__input,.ag-theme-material .datetime__input__input{background-color:var(--ag-background-color, #fff)}.ag-theme-alpine-dark .datetime__input__input,.ag-theme-balham-dark .datetime__input__input{background-color:var(--ag-background-color, #2d3436)}.datetime__input__clear{margin-left:1px;margin-top:1px;padding:6px;text-align:center;border:none;outline:none;cursor:pointer;color:inherit}.datetime__input--editor{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input--editor .datetime__input__input{padding:0;padding-left:6px}\n",""])},function(e,t,n){var r=n(128);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".dateTimeFilter select{margin-bottom:9px;padding:6px;border-radius:3px;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));color:inherit}.dateTimeFilter select:focus,.dateTimeFilter select:active{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.dateTimeFilter select option{text-indent:6px}\n",""])},function(e,t,n){var r=n(130);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(38),u=n(41),c=n(0);function l(e){"@babel/helpers - typeof";return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&(0,o.default)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(32)),o=a(n(89)),i=a(n(12));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e){return(0,i.default)(e)?(0,r.default)(e,!0):(0,o.default)(e)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){for(var n=-1,r=Array(e);++n"']/g,u=RegExp(a.source);var c=function(e){return(e=(0,o.default)(e))&&u.test(e)?e.replace(a,r.default):e};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=(0,function(e){return e&&e.__esModule?e:{default:e}}(n(103)).default)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return function(t){return null==e?void 0:e[t]}};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(9)),o=u(n(37)),i=u(n(33)),a=u(n(105));function u(e){return e&&e.__esModule?e:{default:e}}var c=1/0,l=r.default?r.default.prototype:void 0,s=l?l.toString:void 0;var d=function e(t){if("string"==typeof t)return t;if((0,i.default)(t))return(0,o.default)(t,e)+"";if((0,a.default)(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-c?"-0":n};t.default=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(4));function i(e){return e&&e.__esModule?e:{default:e}}function a(e){"@babel/helpers - typeof";return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u="[object Symbol]";var c=function(e){return"symbol"==a(e)||(0,o.default)(e)&&(0,r.default)(e)==u};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%-([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t0){var t=e[0],n=t.previousElementSibling;if(n&&-1!==n.className.indexOf("group")&&!n.previousElementSibling&&(t=n),t.offsetTopi&&(o.scrollTop+=r-i)}}}()}function w(){m()&&_()}function k(){w()}function O(e){e.target!==o?w():e.preventDefault()}function C(e){for(var t=e.which||e.keyCode||0,n=0,r=[38,13,27,39,37,16,17,18,20,91,9];n=112&&t<=123||40===t&&m()||E(0)}function x(n){var r=n.which||n.keyCode||0;if(38===r||40===r||27===r){var o=m();if(27===r)v();else{if(!m||d.length<1)return;38===r?function(){if(d.length<1)t=void 0;else if(t===d[0])t=d[d.length-1];else for(var e=d.length-1;e>0;e--)if(t===d[e]||1===e){t=d[e-1];break}}():function(){if(d.length<1&&(t=void 0),t&&t!==d[d.length-1]){for(var e=0;e=p||1===r?(y(),n=window.setTimeout(function(){e.fetch(i,function(e){g===o&&e&&(f=i,t=(d=e).length>0?d[0]:void 0,_())},0)},0===r?c:0)):v()}function S(){setTimeout(function(){r.activeElement!==b&&v()},200)}return o.className="autocomplete "+(e.className||""),i.position="absolute",o.addEventListener("mousedown",function(e){e.stopPropagation(),e.preventDefault()}),o.addEventListener("focus",function(){return b.focus()}),b.addEventListener("keydown",x),b.addEventListener(s,C),b.addEventListener("blur",S),b.addEventListener("focus",D),window.addEventListener("resize",k),r.addEventListener("scroll",O,!0),{destroy:function(){b.removeEventListener("focus",D),b.removeEventListener("keydown",x),b.removeEventListener(s,C),b.removeEventListener("blur",S),window.removeEventListener("resize",k),r.removeEventListener("scroll",O,!0),y(),v()}}}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setState=function(e,t){var n=(0,r.gw_getGrid)(e).options;try{n.columnApi.setColumnState(t.columns),n.columnApi.setColumnGroupState(t.groups),n.api.setSortModel(t.sort),n.api.setFilterModel(t.filters)}catch(e){console.warn("Failed to parse grid state from JSON",e)}},t.gw_getState=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.columnApi.getColumnState(),o=t.columnApi.getColumnGroupState(),i=t.api.getSortModel(),a=t.api.getFilterModel();try{return JSON.stringify({columns:n,groups:o,sort:i,filters:a})}catch(e){console.warn("Failed to convert the grid state to json",e)}};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setSideBarVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.setSideBarVisible(Boolean(t))},t.gw_openToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.openToolPanel(t)},t.gw_closeToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.closeToolPanel(t)},t.gw_setFunctionsReadOnly=function(e,t){(0,r.gw_getGrid)(e).options.api.setFunctionsReadOnly(Boolean(t))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStatusbarComponentVisibility=function(e,t,n){(0,r.gw_getGrid)(e).options.api.getStatusPanel(t).setVisible(Boolean(n))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_showLoadingOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showLoadingOverlay()},t.gw_showNoRowsOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showNoRowsOverlay()},t.gw_hideOverlay=function(e){(0,r.gw_getGrid)(e).options.api.hideOverlay()};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_updateContext=function(e,t){(0,r.gw_getGrid)(e).options.context=t};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStyle=function(e,t){jss.forDocument((0,r.gw_getDocument)()).set(e,JSON.parse(t))},t.gw_removeStyle=function(e){jss.forDocument((0,r.gw_getDocument)()).remove(e)},n(117);var r=n(0)},function(e,t,n){(function(t){e.exports=t.jss=n(118)}).call(this,n(2))},function(e,t,n){"use strict";var r=function(){var e,t=/((?:\.|#)[^\.\s#]+)((?:\.|#)[^\.\s#]+)/g,n=/(::)(before|after|first-line|first-letter|selection)/,r=/([^:])(:)(before|after|first-line|first-letter|selection)/;function o(e,t){var n=e.cssRules||e.rules||[],r=[];t=t.toLowerCase();for(var o=0;o0?e.style.setProperty(n,r.substr(0,o),"important"):e.style.setProperty(n,r)}}function b(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}function y(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var m=function(e){this.doc=e,this.head=this.doc.head||this.doc.getElementsByTagName("head")[0],this.sheets=this.doc.styleSheets||[]};m.prototype={get:function(e){if(!this.defaultSheet)return{};if(e)return d(o(this.defaultSheet,e));var t=function(e){for(var t=e.cssRules||e.rules||[],n={},r=0;r\n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value,\n.gw-alignment-cell-right .templateRenderer {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value,\n.gw-alignment-cell-center .templateRenderer {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.gw-alignment-header-center .ag-header-cell-text {\n margin-left: -16px !important;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n"},function(e,t,n){var r=n(125);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(13)(r,o);r.locals&&(e.exports=r.locals)},function(e,t){e.exports=".autocompleteInputWrapper__input {\n padding-left: 6px;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-radius: 3px;\n background-color: var(--ag-background-color);\n color: inherit;\n outline: none;\n}\n\n.ag-theme-alpine .autocompleteInputWrapper__input,\n.ag-theme-balham .autocompleteInputWrapper__input,\n.ag-theme-material .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #fff);\n}\n\n.ag-theme-alpine-dark .autocompleteInputWrapper__input,\n.ag-theme-balham-dark .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #2d3436);\n}\n\n.autocomplete {\n background-color: var(--ag-background-color, #fff);\n z-index: 1000;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-top: 0;\n border-radius: 3px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n overflow: auto;\n -webkit-box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n}\n\n.autocomplete.dark {\n background-color: var(--ag-background-color, #2d3436);\n color: var(--ag-data-color, var(--ag-foreground-color, #fff));\n}\n\n.autocomplete .suggestion-group {\n background: #eee;\n padding: 5px 6px;\n font-weight: bold;\n}\n\n.autocomplete.dark .suggestion-group {\n background: var(--ag-background-color, #181d1f);\n}\n\n.autocomplete .suggestion-item {\n padding: 10px;\n cursor: pointer;\n}\n\n.autocomplete .suggestion-item:hover {\n background-color: var(--ag-row-hover-color, rgba(33, 150, 244, 0.1));\n}\n\n.autocomplete .suggestion-item.selected {\n background-color: var(\n --ag-selected-row-background-color,\n rgba(33, 150, 243, 0.3)\n );\n}\n\n.autocomplete .empty {\n padding: 8px 6px;\n}\n\n.autocomplete-input-error {\n -webkit-box-shadow: 0 -2px 0 #e91e63 inset;\n box-shadow: 0 -2px 0 #e91e63 inset;\n}\n\n.autocomplete-input-success {\n -webkit-box-shadow: 0 -2px 0 #4caf50 inset;\n box-shadow: 0 -2px 0 #4caf50 inset;\n}\n"}])); \ No newline at end of file +var e=function(){return(e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},o={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},a=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},u=function(e){return!0===e?1:0};function c(e,t,n){var r;return void 0===n&&(n=!1),function(){var o=this,i=arguments;null!==r&&clearTimeout(r),r=window.setTimeout(function(){r=null,n||e.apply(o,i)},t),n&&!r&&e.apply(o,i)}}var l=function(e){return e instanceof Array?e:[e]};function s(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function d(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function f(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function p(e,t){var n=d("div","numInputWrapper"),r=d("input","numInput "+e),o=d("span","arrowUp"),i=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var a in t)r.setAttribute(a,t[a]);return n.appendChild(r),n.appendChild(o),n.appendChild(i),n}function h(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}var g=function(){},b=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},y={D:g,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*u(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),o=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return o.setDate(o.getDate()-o.getDay()+n.firstDayOfWeek),o},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:g,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:g,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},m={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},v={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[v.w(e,t,n)]},F:function(e,t,n){return b(v.n(e,t,n)-1,!1,t)},G:function(e,t,n){return a(v.h(e,t,n))},H:function(e){return a(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[u(e.getHours()>11)]},M:function(e,t){return b(e.getMonth(),!0,t)},S:function(e){return a(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return a(e.getFullYear(),4)},d:function(e){return a(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return a(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return a(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},_=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i,u=e.isMobile,c=void 0!==u&&u;return function(e,t,r){var o=r||a;return void 0===n.formatDate||c?t.split("").map(function(t,r,i){return v[t]&&"\\"!==i[r-1]?v[t](e,o,n):"\\"!==t?t:""}).join(""):n.formatDate(e,t,o)}},w=function(e){var t=e.config,n=void 0===t?r:t,i=e.l10n,a=void 0===i?o:i;return function(e,t,o,i){if(0===e||e){var u,c=i||a,l=e;if(e instanceof Date)u=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)u=new Date(e);else if("string"==typeof e){var s=t||(n||r).dateFormat,d=String(e).trim();if("today"===d)u=new Date,o=!0;else if(/Z$/.test(d)||/GMT$/.test(d))u=new Date(e);else if(n&&n.parseDate)u=n.parseDate(e,s);else{u=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,p=[],h=0,g=0,b="";hMath.min(t,n)&&ei&&(d=r===v.hourElement?d-i-u(!v.amPM):o,p&&G(void 0,1,v.hourElement)),v.amPM&&f&&(1===c?d+l===23:Math.abs(d-l)>c)&&(v.amPM.textContent=v.l10n.amPM[u(v.amPM.textContent===v.l10n.amPM[0])]),r.value=a(d)}}(e);var c=v._input.value;M(),ke(),v._input.value!==c&&v._debouncedChange()}function M(){if(void 0!==v.hourElement&&void 0!==v.minuteElement){var e=(parseInt(v.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(v.minuteElement.value,10)||0)%60,n=void 0!==v.secondElement?(parseInt(v.secondElement.value,10)||0)%60:0;void 0!==v.amPM&&(e=function(e,t){return e%12+12*u(t===v.l10n.amPM[1])}(e,v.amPM.textContent));var r=void 0!==v.config.minTime||v.config.minDate&&v.minDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.minDate,!0);if(void 0!==v.config.maxTime||v.config.maxDate&&v.maxDateHasTime&&v.latestSelectedDateObj&&0===k(v.latestSelectedDateObj,v.config.maxDate,!0)){var o=void 0!==v.config.maxTime?v.config.maxTime:v.config.maxDate;(e=Math.min(e,o.getHours()))===o.getHours()&&(t=Math.min(t,o.getMinutes())),t===o.getMinutes()&&(n=Math.min(n,o.getSeconds()))}if(r){var i=void 0!==v.config.minTime?v.config.minTime:v.config.minDate;(e=Math.max(e,i.getHours()))===i.getHours()&&(t=Math.max(t,i.getMinutes())),t===i.getMinutes()&&(n=Math.max(n,i.getSeconds()))}I(e,t,n)}}function P(e){var t=e||v.latestSelectedDateObj;t&&I(t.getHours(),t.getMinutes(),t.getSeconds())}function T(){var e=v.config.defaultHour,t=v.config.defaultMinute,n=v.config.defaultSeconds;if(void 0!==v.config.minDate){var r=v.config.minDate.getHours(),o=v.config.minDate.getMinutes();(e=Math.max(e,r))===r&&(t=Math.max(o,t)),e===r&&t===o&&(n=v.config.minDate.getSeconds())}if(void 0!==v.config.maxDate){var i=v.config.maxDate.getHours(),a=v.config.maxDate.getMinutes();(e=Math.min(e,i))===i&&(t=Math.min(a,t)),e===i&&t===a&&(n=v.config.maxDate.getSeconds())}return{hours:e,minutes:t,seconds:n}}function I(e,t,n){void 0!==v.latestSelectedDateObj&&v.latestSelectedDateObj.setHours(e%24,t,n||0,0),v.hourElement&&v.minuteElement&&!v.isMobile&&(v.hourElement.value=a(v.config.time_24hr?e:(12+e)%12+12*u(e%12==0)),v.minuteElement.value=a(t),void 0!==v.amPM&&(v.amPM.textContent=v.l10n.amPM[u(e>=12)]),void 0!==v.secondElement&&(v.secondElement.value=a(n)))}function N(e){var t=h(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&ee(n)}function A(e,t,n,r){return t instanceof Array?t.forEach(function(t){return A(e,t,n,r)}):e instanceof Array?e.forEach(function(e){return A(e,t,n,r)}):(e.addEventListener(t,n,r),void v._handlers.push({element:e,event:t,handler:n,options:r}))}function R(){ye("onChange")}function L(e,t){var n=void 0!==e?v.parseDate(e):v.latestSelectedDateObj||(v.config.minDate&&v.config.minDate>v.now?v.config.minDate:v.config.maxDate&&v.config.maxDate=0&&k(e,v.selectedDates[1])<=0}(t)&&!ve(t)&&i.classList.add("inRange"),v.weekNumbers&&1===v.config.showMonths&&"prevMonthDay"!==e&&n%7==1&&v.weekNumbers.insertAdjacentHTML("beforeend",""+v.config.getWeek(t)+""),ye("onDayCreate",i),i}function U(e){e.focus(),"range"===v.config.mode&&ie(e)}function W(e){for(var t=e>0?0:v.config.showMonths-1,n=e>0?v.config.showMonths:-1,r=t;r!=n;r+=e)for(var o=v.daysContainer.children[r],i=e>0?0:o.children.length-1,a=e>0?o.children.length:-1,u=i;u!=a;u+=e){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&te(c.dateObj))return c}}function z(e,t){var n=ne(document.activeElement||document.body),r=void 0!==e?e:n?document.activeElement:void 0!==v.selectedDateElem&&ne(v.selectedDateElem)?v.selectedDateElem:void 0!==v.todayDateElem&&ne(v.todayDateElem)?v.todayDateElem:W(t>0?1:-1);void 0===r?v._input.focus():n?function(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():v.currentMonth,r=t>0?v.config.showMonths:-1,o=t>0?1:-1,i=n-v.currentMonth;i!=r;i+=o)for(var a=v.daysContainer.children[i],u=n-v.currentMonth===i?e.$i+t:t<0?a.children.length-1:0,c=a.children.length,l=u;l>=0&&l0?c:-1);l+=o){var s=a.children[l];if(-1===s.className.indexOf("hidden")&&te(s.dateObj)&&Math.abs(e.$i-l)>=Math.abs(t))return U(s)}v.changeMonth(o),z(W(o),0)}(r,t):U(r)}function B(e,t){for(var n=(new Date(e,t,1).getDay()-v.l10n.firstDayOfWeek+7)%7,r=v.utils.getDaysInMonth((t-1+12)%12,e),o=v.utils.getDaysInMonth(t,e),i=window.document.createDocumentFragment(),a=v.config.showMonths>1,u=a?"prevMonthDay hidden":"prevMonthDay",c=a?"nextMonthDay hidden":"nextMonthDay",l=r+1-n,s=0;l<=r;l++,s++)i.appendChild(H(u,new Date(e,t-1,l),l,s));for(l=1;l<=o;l++,s++)i.appendChild(H("",new Date(e,t,l),l,s));for(var f=o+1;f<=42-n&&(1===v.config.showMonths||s%7!=0);f++,s++)i.appendChild(H(c,new Date(e,t+1,f%o),f,s));var p=d("div","dayContainer");return p.appendChild(i),p}function Y(){if(void 0!==v.daysContainer){f(v.daysContainer),v.weekNumbers&&f(v.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==v.config.monthSelectorType)){var e=function(e){return!(void 0!==v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&ev.config.maxDate.getMonth())};v.monthsDropdownContainer.tabIndex=-1,v.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var n=d("option","flatpickr-monthDropdown-month");n.value=new Date(v.currentYear,t).getMonth().toString(),n.textContent=b(t,v.config.shorthandCurrentMonth,v.l10n),n.tabIndex=-1,v.currentMonth===t&&(n.selected=!0),v.monthsDropdownContainer.appendChild(n)}}}function K(){var e,t=d("div","flatpickr-month"),n=window.document.createDocumentFragment();v.config.showMonths>1||"static"===v.config.monthSelectorType?e=d("span","cur-month"):(v.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),v.monthsDropdownContainer.setAttribute("aria-label",v.l10n.monthAriaLabel),A(v.monthsDropdownContainer,"change",function(e){var t=h(e),n=parseInt(t.value,10);v.changeMonth(n-v.currentMonth),ye("onMonthChange")}),V(),e=v.monthsDropdownContainer);var r=p("cur-year",{tabindex:"-1"}),o=r.getElementsByTagName("input")[0];o.setAttribute("aria-label",v.l10n.yearAriaLabel),v.config.minDate&&o.setAttribute("min",v.config.minDate.getFullYear().toString()),v.config.maxDate&&(o.setAttribute("max",v.config.maxDate.getFullYear().toString()),o.disabled=!!v.config.minDate&&v.config.minDate.getFullYear()===v.config.maxDate.getFullYear());var i=d("div","flatpickr-current-month");return i.appendChild(e),i.appendChild(r),n.appendChild(i),t.appendChild(n),{container:t,yearElement:o,monthElement:e}}function $(){f(v.monthNav),v.monthNav.appendChild(v.prevMonthNav),v.config.showMonths&&(v.yearElements=[],v.monthElements=[]);for(var e=v.config.showMonths;e--;){var t=K();v.yearElements.push(t.yearElement),v.monthElements.push(t.monthElement),v.monthNav.appendChild(t.container)}v.monthNav.appendChild(v.nextMonthNav)}function q(){v.weekdayContainer?f(v.weekdayContainer):v.weekdayContainer=d("div","flatpickr-weekdays");for(var e=v.config.showMonths;e--;){var t=d("div","flatpickr-weekdaycontainer");v.weekdayContainer.appendChild(t)}return J(),v.weekdayContainer}function J(){if(v.weekdayContainer){var e=v.l10n.firstDayOfWeek,n=t(v.l10n.weekdays.shorthand);e>0&&e\n "+n.join("")+"\n \n "}}function Z(e,t){void 0===t&&(t=!0);var n=t?e:e-v.currentMonth;n<0&&!0===v._hidePrevMonthArrow||n>0&&!0===v._hideNextMonthArrow||(v.currentMonth+=n,(v.currentMonth<0||v.currentMonth>11)&&(v.currentYear+=v.currentMonth>11?1:-1,v.currentMonth=(v.currentMonth+12)%12,ye("onYearChange"),V()),Y(),ye("onMonthChange"),_e())}function X(e){return!(!v.config.appendTo||!v.config.appendTo.contains(e))||v.calendarContainer.contains(e)}function Q(e){if(v.isOpen&&!v.config.inline){var t=h(e),n=X(t),r=t===v.input||t===v.altInput||v.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(v.input)||~e.path.indexOf(v.altInput)),o="blur"===e.type?r&&e.relatedTarget&&!X(e.relatedTarget):!r&&!n&&!X(e.relatedTarget),i=!v.config.ignoredFocusElements.some(function(e){return e.contains(t)});o&&i&&(void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&""!==v.input.value&&void 0!==v.input.value&&j(),v.close(),v.config&&"range"===v.config.mode&&1===v.selectedDates.length&&(v.clear(!1),v.redraw()))}}function ee(e){if(!(!e||v.config.minDate&&ev.config.maxDate.getFullYear())){var t=e,n=v.currentYear!==t;v.currentYear=t||v.currentYear,v.config.maxDate&&v.currentYear===v.config.maxDate.getFullYear()?v.currentMonth=Math.min(v.config.maxDate.getMonth(),v.currentMonth):v.config.minDate&&v.currentYear===v.config.minDate.getFullYear()&&(v.currentMonth=Math.max(v.config.minDate.getMonth(),v.currentMonth)),n&&(v.redraw(),ye("onYearChange"),V())}}function te(e,t){void 0===t&&(t=!0);var n=v.parseDate(e,void 0,t);if(v.config.minDate&&n&&k(n,v.config.minDate,void 0!==t?t:!v.minDateHasTime)<0||v.config.maxDate&&n&&k(n,v.config.maxDate,void 0!==t?t:!v.maxDateHasTime)>0)return!1;if(0===v.config.enable.length&&0===v.config.disable.length)return!0;if(void 0===n)return!1;for(var r=v.config.enable.length>0,o=r?v.config.enable:v.config.disable,a=0,u=void 0;a=u.from.getTime()&&n.getTime()<=u.to.getTime())return r}return!r}function ne(e){return void 0!==v.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&v.daysContainer.contains(e))}function re(e){!(e.target===v._input)||e.relatedTarget&&X(e.relatedTarget)||v.setDate(v._input.value,!0,e.target===v.altInput?v.config.altFormat:v.config.dateFormat)}function oe(e){var t=h(e),n=v.config.wrap?g.contains(t):t===v._input,r=v.config.allowInput,o=v.isOpen&&(!r||!n),i=v.config.inline&&n&&!r;if(13===e.keyCode&&n){if(r)return v.setDate(v._input.value,!0,t===v.altInput?v.config.altFormat:v.config.dateFormat),t.blur();v.open()}else if(X(t)||o||i){var a=!!v.timeContainer&&v.timeContainer.contains(t);switch(e.keyCode){case 13:a?(e.preventDefault(),j(),fe()):pe(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:n&&!v.config.allowInput&&(e.preventDefault(),v.clear());break;case 37:case 39:if(a||n)v.hourElement&&v.hourElement.focus();else if(e.preventDefault(),void 0!==v.daysContainer&&(!1===r||document.activeElement&&ne(document.activeElement))){var u=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(u),z(W(1),0)):z(void 0,u)}break;case 38:case 40:e.preventDefault();var c=40===e.keyCode?1:-1;v.daysContainer&&void 0!==t.$i||t===v.input||t===v.altInput?e.ctrlKey?(e.stopPropagation(),ee(v.currentYear-c),z(W(1),0)):a||z(void 0,7*c):t===v.currentYearElement?ee(v.currentYear-c):v.config.enableTime&&(!a&&v.hourElement&&v.hourElement.focus(),j(e),v._debouncedChange());break;case 9:if(a){var l=[v.hourElement,v.minuteElement,v.secondElement,v.amPM].concat(v.pluginElements).filter(function(e){return e}),s=l.indexOf(t);if(-1!==s){var d=l[s+(e.shiftKey?-1:1)];e.preventDefault(),(d||v._input).focus()}}else!v.config.noCalendar&&v.daysContainer&&v.daysContainer.contains(t)&&e.shiftKey&&(e.preventDefault(),v._input.focus())}}if(void 0!==v.amPM&&t===v.amPM)switch(e.key){case v.l10n.amPM[0].charAt(0):case v.l10n.amPM[0].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[0],M(),ke();break;case v.l10n.amPM[1].charAt(0):case v.l10n.amPM[1].charAt(0).toLowerCase():v.amPM.textContent=v.l10n.amPM[1],M(),ke()}(n||X(t))&&ye("onKeyDown",e)}function ie(e){if(1===v.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():v.days.firstElementChild.dateObj.getTime(),n=v.parseDate(v.selectedDates[0],void 0,!0).getTime(),r=Math.min(t,v.selectedDates[0].getTime()),o=Math.max(t,v.selectedDates[0].getTime()),i=!1,a=0,u=0,c=r;cr&&ca)?a=c:c>n&&(!u||c0&&l0&&l>u;return d?(c.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){c.classList.remove(e)}),"continue"):i&&!d?"continue":(["startRange","inRange","endRange","notAllowed"].forEach(function(e){c.classList.remove(e)}),void(void 0!==e&&(e.classList.add(t<=v.selectedDates[0].getTime()?"startRange":"endRange"),nt&&l===n&&c.classList.add("endRange"),l>=a&&(0===u||l<=u)&&O(l,n,t)&&c.classList.add("inRange"))))},f=0,p=s.children.length;f0||n.getMinutes()>0||n.getSeconds()>0),v.selectedDates&&(v.selectedDates=v.selectedDates.filter(function(e){return te(e)}),v.selectedDates.length||"min"!==e||P(n),ke()),v.daysContainer&&(de(),void 0!==n?v.currentYearElement[e]=n.getFullYear().toString():v.currentYearElement.removeAttribute(e),v.currentYearElement.disabled=!!r&&void 0!==n&&r.getFullYear()===n.getFullYear())}}function ce(){return v.config.wrap?g.querySelector("[data-input]"):g}function le(){"object"!==i(v.config.locale)&&void 0===S.l10ns[v.config.locale]&&v.config.errorHandler(new Error("flatpickr: invalid locale "+v.config.locale)),v.l10n=e(e({},S.l10ns.default),"object"===i(v.config.locale)?v.config.locale:"default"!==v.config.locale?S.l10ns[v.config.locale]:void 0),m.K="("+v.l10n.amPM[0]+"|"+v.l10n.amPM[1]+"|"+v.l10n.amPM[0].toLowerCase()+"|"+v.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},y),JSON.parse(JSON.stringify(g.dataset||{}))).time_24hr&&void 0===S.defaultConfig.time_24hr&&(v.config.time_24hr=v.l10n.time_24hr),v.formatDate=_(v),v.parseDate=w({config:v.config,l10n:v.l10n})}function se(e){if(void 0!==v.calendarContainer){ye("onPreCalendarPosition");var t=e||v._positionElement,n=Array.prototype.reduce.call(v.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),r=v.calendarContainer.offsetWidth,o=v.config.position.split(" "),i=o[0],a=o.length>1?o[1]:null,u=t.getBoundingClientRect(),c=window.innerHeight-u.bottom,l="above"===i||"below"!==i&&cn,d=window.pageYOffset+u.top+(l?-n-2:t.offsetHeight+2);if(s(v.calendarContainer,"arrowTop",!l),s(v.calendarContainer,"arrowBottom",l),!v.config.inline){var f=window.pageXOffset+u.left,p=!1,h=!1;"center"===a?(f-=(r-u.width)/2,p=!0):"right"===a&&(f-=r-u.width,h=!0),s(v.calendarContainer,"arrowLeft",!p&&!h),s(v.calendarContainer,"arrowCenter",p),s(v.calendarContainer,"arrowRight",h);var g=window.document.body.offsetWidth-(window.pageXOffset+u.right),b=f+r>window.document.body.offsetWidth,y=g+r>window.document.body.offsetWidth;if(s(v.calendarContainer,"rightMost",b),!v.config.static)if(v.calendarContainer.style.top=d+"px",b)if(y){var m=function(){for(var e=null,t=0;tv.currentMonth+v.config.showMonths-1)&&"range"!==v.config.mode;if(v.selectedDateElem=n,"single"===v.config.mode)v.selectedDates=[r];else if("multiple"===v.config.mode){var i=ve(r);i?v.selectedDates.splice(parseInt(i),1):v.selectedDates.push(r)}else"range"===v.config.mode&&(2===v.selectedDates.length&&v.clear(!1,!1),v.latestSelectedDateObj=r,v.selectedDates.push(r),0!==k(r,v.selectedDates[0],!0)&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(M(),o){var a=v.currentYear!==r.getFullYear();v.currentYear=r.getFullYear(),v.currentMonth=r.getMonth(),a&&(ye("onYearChange"),V()),ye("onMonthChange")}if(_e(),Y(),ke(),o||"range"===v.config.mode||1!==v.config.showMonths?void 0!==v.selectedDateElem&&void 0===v.hourElement&&v.selectedDateElem&&v.selectedDateElem.focus():U(n),void 0!==v.hourElement&&void 0!==v.hourElement&&v.hourElement.focus(),v.config.closeOnSelect){var u="single"===v.config.mode&&!v.config.enableTime,c="range"===v.config.mode&&2===v.selectedDates.length&&!v.config.enableTime;(u||c)&&fe()}R()}}v.parseDate=w({config:v.config,l10n:v.l10n}),v._handlers=[],v.pluginElements=[],v.loadedPlugins=[],v._bind=A,v._setHoursFromDate=P,v._positionCalendar=se,v.changeMonth=Z,v.changeYear=ee,v.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);v.input.value="",void 0!==v.altInput&&(v.altInput.value="");void 0!==v.mobileInput&&(v.mobileInput.value="");v.selectedDates=[],v.latestSelectedDateObj=void 0,!0===t&&(v.currentYear=v._initialDate.getFullYear(),v.currentMonth=v._initialDate.getMonth());if(!0===v.config.enableTime){var n=T(),r=n.hours,o=n.minutes,i=n.seconds;I(r,o,i)}v.redraw(),e&&ye("onChange")},v.close=function(){v.isOpen=!1,v.isMobile||(void 0!==v.calendarContainer&&v.calendarContainer.classList.remove("open"),void 0!==v._input&&v._input.classList.remove("active"));ye("onClose")},v._createElement=d,v.destroy=function(){void 0!==v.config&&ye("onDestroy");for(var e=v._handlers.length;e--;){var t=v._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(v._handlers=[],v.mobileInput)v.mobileInput.parentNode&&v.mobileInput.parentNode.removeChild(v.mobileInput),v.mobileInput=void 0;else if(v.calendarContainer&&v.calendarContainer.parentNode)if(v.config.static&&v.calendarContainer.parentNode){var n=v.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else v.calendarContainer.parentNode.removeChild(v.calendarContainer);v.altInput&&(v.input.type="text",v.altInput.parentNode&&v.altInput.parentNode.removeChild(v.altInput),delete v.altInput);v.input&&(v.input.type=v.input._type,v.input.classList.remove("flatpickr-input"),v.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete v[e]}catch(e){}})},v.isEnabled=te,v.jumpToDate=L,v.open=function(e,t){void 0===t&&(t=v._positionElement);if(!0===v.isMobile){if(e){e.preventDefault();var n=h(e);n&&n.blur()}return void 0!==v.mobileInput&&(v.mobileInput.focus(),v.mobileInput.click()),void ye("onOpen")}if(v._input.disabled||v.config.inline)return;var r=v.isOpen;v.isOpen=!0,r||(v.calendarContainer.classList.add("open"),v._input.classList.add("active"),ye("onOpen"),se(t));!0===v.config.enableTime&&!0===v.config.noCalendar&&(!1!==v.config.allowInput||void 0!==e&&v.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return v.hourElement.select()},50))},v.redraw=de,v.set=function(e,t){if(null!==e&&"object"===i(e))for(var r in Object.assign(v.config,e),e)void 0!==he[r]&&he[r].forEach(function(e){return e()});else v.config[e]=t,void 0!==he[e]?he[e].forEach(function(e){return e()}):n.indexOf(e)>-1&&(v.config[e]=l(t));v.redraw(),ke(!0)},v.setDate=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=v.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return v.clear(t);ge(e,n),v.latestSelectedDateObj=v.selectedDates[v.selectedDates.length-1],v.redraw(),L(void 0,t),P(),0===v.selectedDates.length&&v.clear(!1);ke(t),t&&ye("onChange")},v.toggle=function(e){if(!0===v.isOpen)return v.close();v.open(e)};var he={locale:[le,J],showMonths:[$,E,q],minDate:[L],maxDate:[L]};function ge(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return v.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[v.parseDate(e,t)];else if("string"==typeof e)switch(v.config.mode){case"single":case"time":n=[v.parseDate(e,t)];break;case"multiple":n=e.split(v.config.conjunction).map(function(e){return v.parseDate(e,t)});break;case"range":n=e.split(v.l10n.rangeSeparator).map(function(e){return v.parseDate(e,t)})}else v.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));v.selectedDates=v.config.allowInvalidPreload?n:n.filter(function(e){return e instanceof Date&&te(e,!1)}),"range"===v.config.mode&&v.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function be(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?v.parseDate(e,void 0,!0):e&&"object"===i(e)&&e.from&&e.to?{from:v.parseDate(e.from,void 0),to:v.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function ye(e,t){if(void 0!==v.config){var n=v.config[e];if(void 0!==n&&n.length>0)for(var r=0;n[r]&&r1||"static"===v.config.monthSelectorType?v.monthElements[t].textContent=b(n.getMonth(),v.config.shorthandCurrentMonth,v.l10n)+" ":v.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),v._hidePrevMonthArrow=void 0!==v.config.minDate&&(v.currentYear===v.config.minDate.getFullYear()?v.currentMonth<=v.config.minDate.getMonth():v.currentYearv.config.maxDate.getMonth():v.currentYear>v.config.maxDate.getFullYear()))}function we(e){return v.selectedDates.map(function(t){return v.formatDate(t,e)}).filter(function(e,t,n){return"range"!==v.config.mode||v.config.enableTime||n.indexOf(e)===t}).join("range"!==v.config.mode?v.config.conjunction:v.l10n.rangeSeparator)}function ke(e){void 0===e&&(e=!0),void 0!==v.mobileInput&&v.mobileFormatStr&&(v.mobileInput.value=void 0!==v.latestSelectedDateObj?v.formatDate(v.latestSelectedDateObj,v.mobileFormatStr):""),v.input.value=we(v.config.dateFormat),void 0!==v.altInput&&(v.altInput.value=we(v.config.altFormat)),!1!==e&&ye("onValueUpdate")}function Oe(e){var t=h(e),n=v.prevMonthNav.contains(t),r=v.nextMonthNav.contains(t);n||r?Z(n?-1:1):v.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?v.changeYear(v.currentYear+1):t.classList.contains("arrowDown")&&v.changeYear(v.currentYear-1)}return function(){v.element=v.input=g,v.isOpen=!1,function(){var t=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=e(e({},JSON.parse(JSON.stringify(g.dataset||{}))),y),i={};v.config.parseDate=o.parseDate,v.config.formatDate=o.formatDate,Object.defineProperty(v.config,"enable",{get:function(){return v.config._enable},set:function(e){v.config._enable=be(e)}}),Object.defineProperty(v.config,"disable",{get:function(){return v.config._disable},set:function(e){v.config._disable=be(e)}});var a="time"===o.mode;if(!o.dateFormat&&(o.enableTime||a)){var u=S.defaultConfig.dateFormat||r.dateFormat;i.dateFormat=o.noCalendar||a?"H:i"+(o.enableSeconds?":S":""):u+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||a)&&!o.altFormat){var c=S.defaultConfig.altFormat||r.altFormat;i.altFormat=o.noCalendar||a?"h:i"+(o.enableSeconds?":S K":" K"):c+" h:i"+(o.enableSeconds?":S":"")+" K"}Object.defineProperty(v.config,"minDate",{get:function(){return v.config._minDate},set:ue("min")}),Object.defineProperty(v.config,"maxDate",{get:function(){return v.config._maxDate},set:ue("max")});var s=function(e){return function(t){v.config["min"===e?"_minTime":"_maxTime"]=v.parseDate(t,"H:i:S")}};Object.defineProperty(v.config,"minTime",{get:function(){return v.config._minTime},set:s("min")}),Object.defineProperty(v.config,"maxTime",{get:function(){return v.config._maxTime},set:s("max")}),"time"===o.mode&&(v.config.noCalendar=!0,v.config.enableTime=!0),Object.assign(v.config,i,o);for(var d=0;d-1?v.config[p]=l(f[p]).map(D).concat(v.config[p]):void 0===o[p]&&(v.config[p]=f[p])}o.altInputClass||(v.config.altInputClass=ce().className+" "+v.config.altInputClass),ye("onParseConfig")}(),le(),v.input=ce(),v.input?(v.input._type=v.input.type,v.input.type="text",v.input.classList.add("flatpickr-input"),v._input=v.input,v.config.altInput&&(v.altInput=d(v.input.nodeName,v.config.altInputClass),v._input=v.altInput,v.altInput.placeholder=v.input.placeholder,v.altInput.disabled=v.input.disabled,v.altInput.required=v.input.required,v.altInput.tabIndex=v.input.tabIndex,v.altInput.type="text",v.input.setAttribute("type","hidden"),!v.config.static&&v.input.parentNode&&v.input.parentNode.insertBefore(v.altInput,v.input.nextSibling)),v.config.allowInput||v._input.setAttribute("readonly","readonly"),v._positionElement=v.config.positionElement||v._input):v.config.errorHandler(new Error("Invalid input element specified")),function(){v.selectedDates=[],v.now=v.parseDate(v.config.now)||new Date;var e=v.config.defaultDate||("INPUT"!==v.input.nodeName&&"TEXTAREA"!==v.input.nodeName||!v.input.placeholder||v.input.value!==v.input.placeholder?v.input.value:null);e&&ge(e,v.config.dateFormat),v._initialDate=v.selectedDates.length>0?v.selectedDates[0]:v.config.minDate&&v.config.minDate.getTime()>v.now.getTime()?v.config.minDate:v.config.maxDate&&v.config.maxDate.getTime()0&&(v.latestSelectedDateObj=v.selectedDates[0]),void 0!==v.config.minTime&&(v.config.minTime=v.parseDate(v.config.minTime,"H:i")),void 0!==v.config.maxTime&&(v.config.maxTime=v.parseDate(v.config.maxTime,"H:i")),v.minDateHasTime=!!v.config.minDate&&(v.config.minDate.getHours()>0||v.config.minDate.getMinutes()>0||v.config.minDate.getSeconds()>0),v.maxDateHasTime=!!v.config.maxDate&&(v.config.maxDate.getHours()>0||v.config.maxDate.getMinutes()>0||v.config.maxDate.getSeconds()>0)}(),v.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=v.currentMonth),void 0===t&&(t=v.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:v.l10n.daysInMonth[e]}},v.isMobile||function(){var e=window.document.createDocumentFragment();if(v.calendarContainer=d("div","flatpickr-calendar"),v.calendarContainer.tabIndex=-1,!v.config.noCalendar){if(e.appendChild((v.monthNav=d("div","flatpickr-months"),v.yearElements=[],v.monthElements=[],v.prevMonthNav=d("span","flatpickr-prev-month"),v.prevMonthNav.innerHTML=v.config.prevArrow,v.nextMonthNav=d("span","flatpickr-next-month"),v.nextMonthNav.innerHTML=v.config.nextArrow,$(),Object.defineProperty(v,"_hidePrevMonthArrow",{get:function(){return v.__hidePrevMonthArrow},set:function(e){v.__hidePrevMonthArrow!==e&&(s(v.prevMonthNav,"flatpickr-disabled",e),v.__hidePrevMonthArrow=e)}}),Object.defineProperty(v,"_hideNextMonthArrow",{get:function(){return v.__hideNextMonthArrow},set:function(e){v.__hideNextMonthArrow!==e&&(s(v.nextMonthNav,"flatpickr-disabled",e),v.__hideNextMonthArrow=e)}}),v.currentYearElement=v.yearElements[0],_e(),v.monthNav)),v.innerContainer=d("div","flatpickr-innerContainer"),v.config.weekNumbers){var t=function(){v.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",v.l10n.weekAbbreviation));var t=d("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),n=t.weekWrapper,r=t.weekNumbers;v.innerContainer.appendChild(n),v.weekNumbers=r,v.weekWrapper=n}v.rContainer=d("div","flatpickr-rContainer"),v.rContainer.appendChild(q()),v.daysContainer||(v.daysContainer=d("div","flatpickr-days"),v.daysContainer.tabIndex=-1),Y(),v.rContainer.appendChild(v.daysContainer),v.innerContainer.appendChild(v.rContainer),e.appendChild(v.innerContainer)}v.config.enableTime&&e.appendChild(function(){v.calendarContainer.classList.add("hasTime"),v.config.noCalendar&&v.calendarContainer.classList.add("noCalendar"),v.timeContainer=d("div","flatpickr-time"),v.timeContainer.tabIndex=-1;var e=d("span","flatpickr-time-separator",":"),t=p("flatpickr-hour",{"aria-label":v.l10n.hourAriaLabel});v.hourElement=t.getElementsByTagName("input")[0];var n=p("flatpickr-minute",{"aria-label":v.l10n.minuteAriaLabel});if(v.minuteElement=n.getElementsByTagName("input")[0],v.hourElement.tabIndex=v.minuteElement.tabIndex=-1,v.hourElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getHours():v.config.time_24hr?v.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(v.config.defaultHour)),v.minuteElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getMinutes():v.config.defaultMinute),v.hourElement.setAttribute("step",v.config.hourIncrement.toString()),v.minuteElement.setAttribute("step",v.config.minuteIncrement.toString()),v.hourElement.setAttribute("min",v.config.time_24hr?"0":"1"),v.hourElement.setAttribute("max",v.config.time_24hr?"23":"12"),v.minuteElement.setAttribute("min","0"),v.minuteElement.setAttribute("max","59"),v.timeContainer.appendChild(t),v.timeContainer.appendChild(e),v.timeContainer.appendChild(n),v.config.time_24hr&&v.timeContainer.classList.add("time24hr"),v.config.enableSeconds){v.timeContainer.classList.add("hasSeconds");var r=p("flatpickr-second");v.secondElement=r.getElementsByTagName("input")[0],v.secondElement.value=a(v.latestSelectedDateObj?v.latestSelectedDateObj.getSeconds():v.config.defaultSeconds),v.secondElement.setAttribute("step",v.minuteElement.getAttribute("step")),v.secondElement.setAttribute("min","0"),v.secondElement.setAttribute("max","59"),v.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),v.timeContainer.appendChild(r)}return v.config.time_24hr||(v.amPM=d("span","flatpickr-am-pm",v.l10n.amPM[u((v.latestSelectedDateObj?v.hourElement.value:v.config.defaultHour)>11)]),v.amPM.title=v.l10n.toggleTitle,v.amPM.tabIndex=-1,v.timeContainer.appendChild(v.amPM)),v.timeContainer}()),s(v.calendarContainer,"rangeMode","range"===v.config.mode),s(v.calendarContainer,"animate",!0===v.config.animate),s(v.calendarContainer,"multiMonth",v.config.showMonths>1),v.calendarContainer.appendChild(e);var o=void 0!==v.config.appendTo&&void 0!==v.config.appendTo.nodeType;if((v.config.inline||v.config.static)&&(v.calendarContainer.classList.add(v.config.inline?"inline":"static"),v.config.inline&&(!o&&v.element.parentNode?v.element.parentNode.insertBefore(v.calendarContainer,v._input.nextSibling):void 0!==v.config.appendTo&&v.config.appendTo.appendChild(v.calendarContainer)),v.config.static)){var i=d("div","flatpickr-wrapper");v.element.parentNode&&v.element.parentNode.insertBefore(i,v.element),i.appendChild(v.element),v.altInput&&i.appendChild(v.altInput),i.appendChild(v.calendarContainer)}v.config.static||v.config.inline||(void 0!==v.config.appendTo?v.config.appendTo:window.document.body).appendChild(v.calendarContainer)}(),function(){if(v.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(v.element.querySelectorAll("[data-"+e+"]"),function(t){return A(t,"click",v[e])})}),v.isMobile)!function(){var e=v.config.enableTime?v.config.noCalendar?"time":"datetime-local":"date";v.mobileInput=d("input",v.input.className+" flatpickr-mobile"),v.mobileInput.tabIndex=1,v.mobileInput.type=e,v.mobileInput.disabled=v.input.disabled,v.mobileInput.required=v.input.required,v.mobileInput.placeholder=v.input.placeholder,v.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",v.selectedDates.length>0&&(v.mobileInput.defaultValue=v.mobileInput.value=v.formatDate(v.selectedDates[0],v.mobileFormatStr)),v.config.minDate&&(v.mobileInput.min=v.formatDate(v.config.minDate,"Y-m-d")),v.config.maxDate&&(v.mobileInput.max=v.formatDate(v.config.maxDate,"Y-m-d")),v.input.getAttribute("step")&&(v.mobileInput.step=String(v.input.getAttribute("step"))),v.input.type="hidden",void 0!==v.altInput&&(v.altInput.type="hidden");try{v.input.parentNode&&v.input.parentNode.insertBefore(v.mobileInput,v.input.nextSibling)}catch(e){}A(v.mobileInput,"change",function(e){v.setDate(h(e).value,!1,v.mobileFormatStr),ye("onChange"),ye("onClose")})}();else{var e=c(ae,50);v._debouncedChange=c(R,x),v.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(v.daysContainer,"mouseover",function(e){"range"===v.config.mode&&ie(h(e))}),A(window.document.body,"keydown",oe),v.config.inline||v.config.static||A(window,"resize",e),void 0!==window.ontouchstart?A(window.document,"touchstart",Q):A(window.document,"click",Q),A(window.document,"focus",Q,{capture:!0}),!0===v.config.clickOpens&&(A(v._input,"focus",v.open),A(v._input,"click",v.open)),void 0!==v.daysContainer&&(A(v.monthNav,"click",Oe),A(v.monthNav,["keyup","increment"],N),A(v.daysContainer,"click",pe)),void 0!==v.timeContainer&&void 0!==v.minuteElement&&void 0!==v.hourElement&&(A(v.timeContainer,["increment"],j),A(v.timeContainer,"blur",j,{capture:!0}),A(v.timeContainer,"click",F),A([v.hourElement,v.minuteElement],["focus","click"],function(e){return h(e).select()}),void 0!==v.secondElement&&A(v.secondElement,"focus",function(){return v.secondElement&&v.secondElement.select()}),void 0!==v.amPM&&A(v.amPM,"click",function(e){j(e),R()})),v.config.allowInput&&A(v._input,"blur",re)}}(),(v.selectedDates.length||v.config.noCalendar)&&(v.config.enableTime&&P(v.config.noCalendar?v.latestSelectedDateObj||v.config.minDate:void 0),ke(!1)),E();var t=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!v.isMobile&&t&&se(),ye("onReady")}(),v}function E(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),r=[],o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:t.key)+(arguments.length>2?arguments[2]:void 0)})}},{key:"key",get:function(){return this.childDescriptor.key}},{key:"parentNotation",get:function(){return"".concat(this.parentKlass.constructor.name,"#").concat(this.parentPropertySignature)}},{key:"childNotation",get:function(){return"".concat(this.childKlass.constructor.name,"#").concat(this.childPropertySignature)}},{key:"parentTopic",get:function(){return this._getTopic(this.parentDescriptor)}},{key:"childTopic",get:function(){return this._getTopic(this.childDescriptor)}},{key:"parentPropertySignature",get:function(){return this._extractTopicSignature(this.parentTopic)}},{key:"childPropertySignature",get:function(){return this._extractTopicSignature(this.childTopic)}}]),a(e,[{key:"assert",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";!0!==e&&this.error("{child} does not properly override {parent}"+t)}},{key:"error",value:function(e){var t=this;throw e=e.replace("{parent}",function(e){return t.parentNotation}).replace("{child}",function(e){return t.childNotation}),new SyntaxError(e)}}]),e}();function l(e){return e.hasOwnProperty("value")?"data":e.hasOwnProperty("get")||e.hasOwnProperty("set")?"accessor":"data"}function s(e,t,n){n.assert(e.length===t.length)}function d(e,t,n){var r=l(e),i=l(t);switch(r!==i&&n.error('descriptor types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"data":!function(e,t,n){var r=o(e.value),i=o(t.value);switch("undefined"===r&&"undefined"===i&&n.error("descriptor values are both undefined. (class properties are are not currently supported)'"),r!==i&&("function"===i&&void 0===r||void 0!==r)&&n.error('value types do not match. {parent} is "'.concat(r,'", {child} is "').concat(i,'"')),i){case"function":s(e.value,t.value,n);break;default:n.error('Unexpected error. Please file a bug with: {parent} is "'.concat(r,'", {child} is "').concat(i,'"'))}}(e,t,n);break;case"accessor":!function(e,t,n){var r="function"==typeof e.get,o="function"==typeof t.get,i="function"==typeof e.set,a="function"==typeof t.set;(r||o)&&(!r&&i&&n.error("{parent} is setter but {child} is getter"),!o&&a&&n.error("{parent} is getter but {child} is setter"),s(e.get,t.get,n)),(i||a)&&(!i&&r&&n.error("{parent} is getter but {child} is setter"),!a&&o&&n.error("{parent} is setter but {child} is getter"),s(e.set,t.set,n))}(e,t,n)}}var f=[function(e){return e.toLowerCase()},function(e){return e.toUpperCase()},function(e){return e+"s"},function(e){return e.slice(0,-1)},function(e){return e.slice(1,e.length)}];function p(e,t,n){n.key=t;var r=Object.getPrototypeOf(e),o=Object.getOwnPropertyDescriptor(r,t),i=new c(r,e,o,n);if(void 0===o){var a=function(e,t){for(var n=0,r=f.length;n=0&&l.splice(t,1)}function g(e){var t=document.createElement("style");return e.attrs.type="text/css",b(t,e.attrs),p(e,t),t}function b(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(e,t){var n,r,o,i;if(t.transform&&e.css){if(!(i=t.transform(e.css)))return function(){};e.css=i}if(t.singleton){var a=c++;n=u||(u=g(t)),r=v.bind(null,n,a,!1),o=v.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return e.attrs.type="text/css",e.attrs.rel="stylesheet",b(t,e.attrs),p(e,t),t}(t),r=function(e,t,n){var r=n.css,o=n.sourceMap,i=void 0===t.convertToAbsoluteUrls&&o;(t.convertToAbsoluteUrls||i)&&(r=s(r));o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),u=e.href;e.href=URL.createObjectURL(a),u&&URL.revokeObjectURL(u)}.bind(null,n,t),o=function(){h(n),n.href&&URL.revokeObjectURL(n.href)}):(n=g(t),r=function(e,t){var n=t.css,r=t.media;r&&e.setAttribute("media",r);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){h(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!==("undefined"==typeof document?"undefined":i(document)))throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"===i(t.attrs)?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=f(e,t);return d(n,t),function(e){for(var o=[],i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?"s":"")+" required, but only "+t.length+" present")}},function(e,t,n){var r=n(46);t.a=r.a},function(e,t,n){var r=n(65);t.a=r.a},function(e,t,n){var r=n(18);t.a=function(e,t,n){"__proto__"==t&&r.a?Object(r.a)(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(70),o=function(){try{var e=Object(r.a)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.a=o},function(e,t,n){var r=n(5),o=n(8),i="[object AsyncFunction]",a="[object Function]",u="[object GeneratorFunction]",c="[object Proxy]";t.a=function(e){if(!Object(o.a)(e))return!1;var t=Object(r.a)(e);return t==a||t==u||t==i||t==c}},function(e,t,n){(function(e){function n(e){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r="object"==(void 0===e?"undefined":n(e))&&e&&e.Object===Object&&e;t.a=r}).call(t,n(21))},function(e,t){function n(e){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){var r=n(23),o=n(79),i=n(80);t.a=function(e,t){return Object(i.a)(Object(o.a)(e,t,r.a),e+"")}},function(e,t,n){t.a=function(e){return e}},function(e,t,n){t.a=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var r=n(11),o=n(12),i=n(27),a=n(8);function u(e){"@babel/helpers - typeof";return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}t.a=function(e,t,n){if(!Object(a.a)(n))return!1;var c=u(t);return!!("number"==c?Object(o.a)(n)&&Object(i.a)(t,n.length):"string"==c&&t in n)&&Object(r.a)(n[t],e)}},function(e,t,n){var r=9007199254740991;t.a=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o=9007199254740991,i=/^(?:0|[1-9]\d*)$/;t.a=function(e,t){var n=r(e);return!!(t=null==t?o:t)&&("number"==n||"symbol"!=n&&i.test(e))&&e>-1&&e%1==0&&e/g},function(e,t,n){var r=n(109);t.a=function(e){return null==e?"":Object(r.a)(e)}},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n59)}},function(e,t,n){var r=n(123);n.d(t,"a",function(){return r.b});r.a},function(e,t,n){var r=n(124);t.a=r.a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(43),o=n(51),i=n(53),a=n(57),u=n(61),c=n(16),l=n(113),s=n(115),d=n(129);n.d(t,"BooleanEditor",function(){return r.a}),n.d(t,"BooleanRenderer",function(){return o.a}),n.d(t,"BooleanFilter",function(){return i.a}),n.d(t,"NumberEditor",function(){return a.a}),n.d(t,"TextEditor",function(){return u.a}),n.d(t,"TemplateRenderer",function(){return c.a}),n.d(t,"ImageRenderer",function(){return l.a}),n.d(t,"DateTimeFilter",function(){return s.a}),n.d(t,"DateTimeEditor",function(){return d.a})},function(e,t,n){var r=n(44);t.a=r.a},function(e,t,n){var r=n(0),o=n(15);function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){for(var n=0;n-1||!(n.indexOf(r)>-1)&&e}}]),n}();t.a=s},function(e,t,n){function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(t&&t.hasOwnProperty(e)&&null!==t[e])n=t[e];else if(t.hasOwnProperty("colDef")&&t.colDef.hasOwnProperty(e)&&null!==t.colDef[e])n=t.colDef[e];else{var o=null;if(t.hasOwnProperty("context")&&(o=t.context.AGridComponentsMetaConfig||t.context.meta),o&&o.hasOwnProperty(t.column.colId)&&o[t.column.colId].hasOwnProperty(e)&&null!==o[t.column.colId][e])n=o[t.column.colId][e];else if(o&&o.hasOwnProperty(e)&&null!==o[e])n=o[e];else{var i=t.context;n=i&&i.hasOwnProperty(e)&&null!==i[e]?i[e]:r}}return void 0!==n?n:r}},{key:"getWin",value:function(e){var t=this.getOption("window",e)||window||null;if(!t)throw new Error("Current environment does not support window");return t}},{key:"getDoc",value:function(e){var t=this.getOption("document",e)||document||null;if(!t)throw new Error("Current environment does not support document");return t}}]),e}();t.a=o},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(48);n.n(u);function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).setChecked(r),e.setListener(o),e.setDisabled(!1),e}return function(e,t,n){t&&l(e.prototype,t),n&&l(e,n)}(n,[{key:"init",value:function(e){this._params=e,this._onClick=this._onClick.bind(this),this._onKeydown=this._onKeydown.bind(this),this._gui=this.getDoc(e).createElement("div"),this._gui.className="boolSwitch__wrapper",this._gui.tabIndex=-1,this.render()}},{key:"render",value:function(){var e=this.getDoc(this._params),t=document.createElement("div");t.className="boolSwitch",this._input=e.createElement("input"),this._input.id="el-".concat(Math.random()),this._input.name="checkbox",this._input.className="boolSwitch__checkbox",this._input.type="checkbox",this._input.checked=this.isChecked(),this._input.disabled=this.isDisabled(),this._input.tabIndex="0";var n=document.createElement("label");n.className="boolSwitch__label",n.for=this._input.id,n.innerHTML='\n \n \n ',t.appendChild(this._input),t.appendChild(n),t.addEventListener("click",this._onClick),this._gui.addEventListener("keydown",this._onKeydown),this._gui.appendChild(t)}},{key:"destroy",value:function(){this._gui.querySelector(".boolSwitch").removeEventListener("click",this._onClick),this._gui.removeEventListener("keydown",this._onKeydown)}},{key:"focus",value:function(){this._gui.focus(),this._input.focus()}},{key:"setListener",value:function(e){this._listener=e}},{key:"getListener",value:function(){return this._listener}},{key:"setChecked",value:function(e){this._checked=e,this._input&&(this._input.checked=e)}},{key:"isChecked",value:function(){return this._checked}},{key:"toggle",value:function(){this.setChecked(!this.isChecked())}},{key:"setDisabled",value:function(e){this._disabled=e,this._input&&(this._input.disabled=e)}},{key:"isDisabled",value:function(){return this._disabled}},{key:"_onClick",value:function(e){if(this._disabled)return!1;this.toggle(),this._listener&&this._listener(this)}},{key:"_onKeydown",value:function(e){if(this._disabled)return!1;var t=e.which||e.keyCode;32==t?(this.toggle(),this._listener&&this._listener(this),e.stopPropagation()):39==t?(this.setChecked(!0),this._listener&&this._listener(this),e.stopPropagation()):37==t&&(this.setChecked(!1),this._listener&&this._listener(this),e.stopPropagation())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_onClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onClick"),r.prototype),p(r.prototype,"_onKeydown",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_onKeydown"),r.prototype),r);t.a=h},function(e,t,n){t.a=function(){for(var e=arguments.length,t=new Array(e),n=0;n-1)if(r.length&&"switch"!==r)this._gui.innerHTML=r;else{var u=this._getSwitcher(e);u.setChecked(!0),this._gui.innerHTML="",this._gui.appendChild(u.getGui())}else if(a.indexOf(n)>-1)if(o.length&&"switch"!==o)this._gui.innerHTML=o;else{var c=this._getSwitcher(e);c.setChecked(!1),this._gui.innerHTML="",this._gui.appendChild(c.getGui())}else this._gui.innerHTML=n}return!0}},{key:"_getSwitcher",value:function(e){return this._switcher||(this._switcher=new o.a,this._switcher.setDisabled(!0),this._switcher.init(e)),this._switcher}}]),n}();t.a=s},function(e,t,n){var r=n(54);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(0),u=n(55);n.n(u);function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n\n \n\n\n \n \n ").concat(r?"":'\n \n ")," \n \n "),i.addEventListener("change",this._onRadioChange),this._gui.appendChild(i);var a=document.createElement("div");a.className="booleanFilter__body__applyPanel ag-filter-apply-panel ag-hidden",a.innerHTML='\n \n \n \n "),(n||r||o)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a)}},{key:"destroy",value:function(){this._gui.querySelector(".booleanFilter__body__labels").removeEventListener("change",this._onRadioChange),this._gui.querySelector(".booleanFilter__body__applyPanel").removeEventListener("click",this._ApplyFilterPanelButtonClick)}},{key:"doesFilterPass",value:function(e){var t=String(this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter(e):this._params.valueGetter(e));return"true"===this._filterText?this._trueValue.indexOf(t)>-1:this._falseValue.indexOf(t)>-1}},{key:"isFilterActive",value:function(){return null!==this._filterText&&void 0!==this._filterText&&""!==this._filterText}},{key:"getModel",value:function(){return this.isFilterActive()?{value:this._filterText,filterType:"boolean"}:null}},{key:"setModel",value:function(e){this._filterText=e&&e.hasOwnProperty("value")?e.value:"";var t=String(this._filterText);this._gui.querySelector(".booleanFilter__body").querySelectorAll('input[type="radio"]').forEach(function(e){e.value==t?e.checked=!0:e.checked=!1})}},{key:"getModelAsString",value:function(e){return e?function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}("true"===e.value?this._booleanFilterTranslation.true:this._booleanFilterTranslation.false):""}},{key:"reset",value:function(){var e=this._gui.querySelector(".booleanFilter__body");e.querySelectorAll('input[type="radio"]').forEach(function(e){e.checked=!1}),e.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),e.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{e.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(e){}this._filterText=null}},{key:"_onRadioChange",value:function(e,t){var n=t.target;this._filterText=n.value;var r=this._gui.querySelector(".booleanFilter__body");if(r)if(n.classList.contains("true-input")){r.querySelector(".ag-wrapper-true").classList.add("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else if(n.classList.contains("false-input")){r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.add("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.remove("ag-checked")}catch(t){}}else{r.querySelector(".ag-wrapper-true").classList.remove("ag-checked"),r.querySelector(".ag-wrapper-false").classList.remove("ag-checked");try{r.querySelector(".ag-wrapper-reset").classList.add("ag-checked")}catch(t){}}!1===e&&this._params.filterChangedCallback()}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}}]),n}()).prototype,"init",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"init"),r.prototype),p(r.prototype,"destroy",[i.a],Object.getOwnPropertyDescriptor(r.prototype,"destroy"),r.prototype),p(r.prototype,"_ApplyFilterPanelButtonClick",[o.a],Object.getOwnPropertyDescriptor(r.prototype,"_ApplyFilterPanelButtonClick"),r.prototype),r);t.a=g},function(e,t,n){var r=n(56);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".booleanFilter__body__labels label{display:block;padding:6px}.booleanFilter__body__labels label{display:block;padding:6px 0}.booleanFilter__body__labels label span{padding-left:6px}\n",""])},function(e,t,n){var r=n(58);t.a=r.a},function(e,t,n){var r,o=n(0),i=n(1),a=n(2),u=n(59);n.n(u);function c(e){"@babel/helpers - typeof";return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&Object(o.a)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(28),o=n(94),i=n(12);t.a=function(e){return Object(i.a)(e)?Object(r.a)(e,!0):Object(o.a)(e)}},function(e,t,n){t.a=function(e,t){for(var n=-1,r=Array(e);++n"']/g,a=RegExp(i.source);t.a=function(e){return(e=Object(o.a)(e))&&a.test(e)?e.replace(i,r.a):e}},function(e,t,n){var r=n(108),o=Object(r.a)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.a=o},function(e,t,n){t.a=function(e){return function(t){return null==e?void 0:e[t]}}},function(e,t,n){var r=n(9),o=n(34),i=n(29),a=n(110),u=1/0,c=r.a?r.a.prototype:void 0,l=c?c.toString:void 0;t.a=function e(t){if("string"==typeof t)return t;if(Object(i.a)(t))return Object(o.a)(t,e)+"";if(Object(a.a)(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-u?"-0":n}},function(e,t,n){var r=n(5),o=n(6);function i(e){"@babel/helpers - typeof";return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var a="[object Symbol]";t.a=function(e){return"symbol"==i(e)||Object(o.a)(e)&&Object(r.a)(e)==a}},function(e,t,n){t.a=/<%-([\s\S]+?)%>/g},function(e,t,n){t.a=/<%([\s\S]+?)%>/g},function(e,t,n){var r=n(114);t.a=r.a},function(e,t,n){var r=n(16);function o(e){"@babel/helpers - typeof";return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n\n '):e.renderTemplate=r,a(l(n.prototype),"refresh",this).call(this,e,t)}}]),n}();t.a=s},function(e,t,n){var r=n(116);t.a=r.a},function(e,t,n){var r,o,i,a,u,c,l,s,d,f,p,h,g,b=n(1),y=n(2),m=n(37),v=n(38),_=n(40),w=n(41),k=n(0),O=n(127);n.n(O);function C(e){"@babel/helpers - typeof";return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var n=0;n-1?R:this._filterOptions[0]),this.state.type=this._defaultOption;var i=(x(t={},R,o(R,"Equals")),x(t,L,o(R,"Not equal")),x(t,F,o(F,"Less than")),x(t,G,o(G,"Greater than")),x(t,H,o(H,"In range")),t);this._gui=document.createElement("div"),this._gui.className="dateTimeFilter ag-filter-body-wrapper",this._gui.innerHTML='\n \n
\n
\n
\n
\n
\n
\n '),this._filterTimeInput.init(e),this._filterTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filter=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._filterToDateTimeInput.init(e),this._filterToDateTimeInput.on(w.a.ON_DATE_CHANGED,function(e){r.state.filterTo=e,r.notify(n.ON_CONDITION_CHANGED,r.state)}),this._gui.querySelector(".ag-filter-date-from").appendChild(this._filterTimeInput.getGui()),this._gui.querySelector(".ag-filter-date-to").appendChild(this._filterToDateTimeInput.getGui()),this._gui.querySelector(".ag-filter-select").addEventListener("change",this._onTypeChange),this.setState(this._state)}},{key:"destroy",value:function(){this.off(n.ON_CONDITION_CHANGED),this._filterTimeInput.destroy(),this._filterToDateTimeInput.destroy(),this._gui.querySelector(".ag-filter-select").removeEventListener("change",this._onTypeChange),this.reset()}},{key:"reset",value:function(){this.state.filter=null,this.state.filterTo=null,this._filterTimeInput.reset(),this._filterToDateTimeInput.reset(),this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){e=e||{},this.state.filter=e.filter||null,this.state.filterTo=e.filterTo||null,this.state.type=e.type||this._defaultOption;var t=this._gui,r=this._filterOptions,o=t.querySelector(".ag-filter-select"),i=this._filterTimeInput,a=this._filterToDateTimeInput;if(o.selectedIndex=r.indexOf(this.state.type),i.setDate(this.state.filter),a.setDate(this.state.filterTo),"createEvent"in document){var u=document.createEvent("HTMLEvents");u.initEvent("change",!1,!0),o.dispatchEvent(u)}else o.fireEvent("onchange");this.notify(n.ON_CONDITION_CHANGED,this.state)}},{key:"_onTypeChange",value:function(e){var t=e.target,r=this._gui.querySelector(".ag-filter-date-to");this.state.type=t.options[t.selectedIndex].value,this.state.type===H?r.classList.remove("ag-hidden"):r.classList.add("ag-hidden"),this.notify(n.ON_CONDITION_CHANGED,this.state)}}]),n}(),u.ON_CONDITION_CHANGED="ConditionPanel.ON_CONDITION_CHANGED",A(o=c,"ON_CONDITION_CHANGED",[m.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_CONDITION_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),a=A(o.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{type:R,filter:null,filterTo:null}}}),A(o.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),A(o.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),A(o.prototype,"_onTypeChange",[b.a],Object.getOwnPropertyDescriptor(o.prototype,"_onTypeChange"),o.prototype),r=o))||r,B=Object(_.a)((h=p=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i \n ').concat(t("andCondition","AND"),'\n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n '),this._gui.appendChild(this._operatorPanel),this._operatorPanel.addEventListener("change",this._onOperatorChanged),this._gui.appendChild(this._secondConditionPanel.getGui())}},{key:"destroy",value:function(){this._firstConditionPanel.destroy(),this._secondConditionPanel.destroy(),this._operatorPanel.removeEventListener("change",this._onOperatorChanged),this.off(n.ON_JOIN_CONDITION_CHANGED),this.reset()}},{key:"reset",value:function(){this._firstConditionPanel.reset(),this._secondConditionPanel.reset(),this.notify(z.ON_CONDITION_CHANGED,this.state)}},{key:"setState",value:function(e){var t=this;e=e||{},this.state.operator=e.operator||W,this.state.condition1=e.condition1||null,this.state.condition2=e.condition2||null,this._firstConditionPanel.setState(this.state.condition1),this._secondConditionPanel.setState(this.state.condition2),this._operatorPanel.querySelectorAll("input").forEach(function(e){e.classList.contains(t.state.operator)?e.checked=!0:e.checked=!1}),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onOperatorChanged",value:function(e){var t=e.target;this.state.operator=t.value,t.classList.contains("OR")?(this._operatorPanel.querySelector(".ag-wrapper-or").classList.add("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.remove("ag-checked")):(this._operatorPanel.querySelector(".ag-wrapper-or").classList.remove("ag-checked"),this._operatorPanel.querySelector(".ag-wrapper-and").classList.add("ag-checked")),this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onFirstConditionChanged",value:function(e){if(this.state.condition1=e,!this.getOption("suppressAndOrCondition",this._params,!1)){var t=this.state.condition1,r=t.filter,o=t.filterTo,i=t.type,a=this._secondConditionPanel.getGui(),u=this._operatorPanel;(i===H?!r||!o:!r)?(a.classList.add("ag-hidden"),u.classList.add("ag-hidden")):(a.classList.remove("ag-hidden"),u.classList.remove("ag-hidden"))}this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}},{key:"_onSecondConditionChanged",value:function(e){this.state.condition2=e,this.notify(n.ON_JOIN_CONDITION_CHANGED,this.state)}}]),n}(),p.ON_JOIN_CONDITION_CHANGED="JoinConditionPanel.ON_JOIN_CONDITION_CHANGED",A(s=h,"ON_JOIN_CONDITION_CHANGED",[m.a],(d=(d=Object.getOwnPropertyDescriptor(s,"ON_JOIN_CONDITION_CHANGED"))?d.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return d}}),s),f=A(s.prototype,"state",[m.a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{condition1:{},condition2:{},operator:W}}}),A(s.prototype,"init",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"init"),s.prototype),A(s.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(s.prototype,"destroy"),s.prototype),A(s.prototype,"_onOperatorChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onOperatorChanged"),s.prototype),A(s.prototype,"_onFirstConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onFirstConditionChanged"),s.prototype),A(s.prototype,"_onSecondConditionChanged",[b.a],Object.getOwnPropertyDescriptor(s.prototype,"_onSecondConditionChanged"),s.prototype),l=s))||l,Y=(A((g=function(e){M(n,k["a"]);var t=T(n);function n(){var e;E(this,n);for(var r=arguments.length,o=new Array(r),i=0;i').concat(n("clearFilter","Clear Filter"),'\n \n \n "),(r||o||i)&&a.classList.remove("ag-hidden"),a.addEventListener("click",this._ApplyFilterPanelButtonClick),this._gui.appendChild(a),this._state=this._JoinConditionPanel.state,this._params=e,this._doesFilterPassOptions={enableTime:this.getOption("dateTimeEnableTime",this._params,!0),inRangeInclusive:this.getOption("inRangeInclusive",this._params,!1),valueGetter:this._params.hasOwnProperty("filterValueGetter")?this._params.filterValueGetter:this._params.valueGetter}}},{key:"destroy",value:function(){this._JoinConditionPanel.destroy()}},{key:"doesFilterPass",value:function(e){var t=this._doesFilterPassOptions.valueGetter(e),n=this._state,r=n.condition1,o=n.condition2,i=n.operator,a=this._doesPassCondition(r,t),u=this._doesPassCondition(o,t);return i===W?a||u:a&&u}},{key:"isFilterActive",value:function(){var e=this._state.condition1;return!(!e||!e.filter)&&(e.filterTo&&e.type===H?null!==e.filter&&null!==e.filterTo:null!==e.filter)}},{key:"getModel",value:function(){var e=this,t=JSON.parse(JSON.stringify(this._state));return[t.condition1,t.condition2].forEach(function(t,n){t.filter&&(t.filter=e._state["condition".concat(n+1)].filter.toISOString()),t.filterTo&&(t.filterTo=e._state["condition".concat(n+1)].filterTo.toISOString())}),t.filterType="datetime",t.condition1.filterType="datetime",t.condition2.filterType="datetime",t.hasOwnProperty("condition2")&&t.condition2.hasOwnProperty("filter")&&t.condition2.filter?t:t.condition1}},{key:"setModel",value:function(e){!e||e.hasOwnProperty("condition1")||e.hasOwnProperty("condition2")||(e={condition1:e}),this.__disableStateChangeListener=!0,this._JoinConditionPanel.setState(e),this.__disableStateChangeListener=!1,this._state=this._JoinConditionPanel.state,[this._state.condition1,this._state.condition2].forEach(function(e){e.filter&&(e.filter=new Date(e.filter)),e.filterTo&&(e.filterTo=new Date(e.filterTo))})}},{key:"getModelAsString",value:function(e){if(!e)return"";var t=this.getOption("dateTimeMask",this._params,this._JoinConditionPanel._firstConditionPanel._filterTimeInput.picker.config.dateFormat),n=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US"),r=JSON.parse(JSON.stringify(e)),o=r.condition1,i=r.condition2,a=r.operator;[o,i].forEach(function(e){e.filter&&(e.filter=BBj.Masks.DateMask.mask(e.filter,t,n)),e.filterTo&&(e.filterTo=BBj.Masks.DateMask.mask(e.filterTo,t,n))});var u="".concat(o.filter||""," ").concat(o.filterTo?"→ "+o.filterTo:""),c="".concat(i.filter||""," ").concat(i.filterTo?"→ "+i.filterTo:""),l="".concat(i.filter&&a?a:"");return"".concat(u," ").concat(l," ").concat(c).trim()}},{key:"_doesPassCondition",value:function(e,t){if(!e.filter||!t)return!1;var n=e.filter,r=e.filterTo,o=e.type,i=BBj.Masks.Utils.Dates.getTimezoneOrOffset(),a=this._doesFilterPassOptions.inRangeInclusive,u=this._doesFilterPassOptions.enableTime,c=!1;return BBj.Masks.Utils.Dates.IS_TIME_REGEX.test(t)?(t=t=BBj.Masks.Utils.Dates.fixShortISO(t),[n,r].forEach(function(e){e instanceof Date&&(e.setFullYear(1970),e.setMonth(0),e.setDate(1))})):BBj.Masks.Utils.Dates.IS_DATE_REGEX.test(t)&&(t=BBj.Masks.Utils.Dates.fixShortISO(t)),t=Object(v.a)(t,i),u||[t,n,r].forEach(function(e){e instanceof Date&&(e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0))}),o===R?c=n>t==!1&&nt==!1&&nt:o===H&&r&&(c=a?(nt==!1&&nt||r>t==!1&&rt),c}},{key:"_ApplyFilterPanelButtonClick",value:function(e){var t=e.target;"BUTTON"===t.nodeName&&(t.classList.contains("reset")?(this._JoinConditionPanel.reset(),this._params.filterChangedCallback()):t.classList.contains("clear")?this._JoinConditionPanel.reset():t.classList.contains("apply")&&this._params.filterChangedCallback())}},{key:"_onJoinConditionPanelStateChanged",value:function(e,t){this._state=e,!1===t&&this._params.filterChangedCallback()}}]),n}()).prototype,"init",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"init"),g.prototype),A(g.prototype,"destroy",[y.a],Object.getOwnPropertyDescriptor(g.prototype,"destroy"),g.prototype),A(g.prototype,"_ApplyFilterPanelButtonClick",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_ApplyFilterPanelButtonClick"),g.prototype),A(g.prototype,"_onJoinConditionPanelStateChanged",[b.a],Object.getOwnPropertyDescriptor(g.prototype,"_onJoinConditionPanelStateChanged"),g.prototype),g);t.a=Y},function(e,t,n){t.a=function(e,t){var n=function(e){if(!o[e]){var t=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:"America/New_York",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date("2014-06-25T04:00:00.123Z")),n="06/25/2014, 00:00:00"===t||"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00"===t;o[e]=n?new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}return o[e]}(t);return n.formatToParts?function(e,t){for(var n=e.formatToParts(t),o=[],i=0;i=0&&(o[a]=parseInt(n[i].value,10))}return o}(n,e):function(e,t){var n=e.format(t).replace(/\u200E/g,""),r=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(n);return[r[3],r[1],r[2],r[4],r[5],r[6]]}(n,e)};var r={year:0,month:1,day:2,hour:3,minute:4,second:5};var o={}},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(r.a)(t);return Object(o.a)(e,-n)};var r=n(13),o=n(119),i=n(14)},function(e,t,n){t.a=function(e,t){Object(i.a)(2,arguments);var n=Object(o.a)(e).getTime(),a=Object(r.a)(t);return new Date(n+a)};var r=n(13),o=n(120),i=n(14)},function(e,t,n){t.a=function(e){Object(r.a)(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===o(e)&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))};var r=n(14);function o(e){"@babel/helpers - typeof";return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}},function(e,t,n){t.a=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},f=null==n.additionalDigits?l:Object(r.a)(n.additionalDigits);if(2!==f&&1!==f&&0!==f)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"===a(e)&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var p=function(e){var t,n={},r=e.split(s.dateTimeDelimeter);s.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],n.timezone=r[2],s.timeZoneDelimeter.test(n.date)&&(n.date=e.split(s.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length)));if(t){var o=s.timezone.exec(t);o?(n.time=t.replace(o[1],""),n.timezone=o[1]):n.time=t}return n}(e),m=function(e,t){var n,r=s.YYY[t],o=s.YYYYY[t];if(n=s.YYYY.exec(e)||o.exec(e)){var i=n[1];return{year:parseInt(i,10),restDateString:e.slice(i.length)}}if(n=s.YY.exec(e)||r.exec(e)){var a=n[1];return{year:100*parseInt(a,10),restDateString:e.slice(a.length)}}return{year:null}}(p.date,f),v=m.year,_=function(e,t){if(null===t)return null;var n,r,o,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=s.MM.exec(e))return r=new Date(0),o=parseInt(n[1],10)-1,g(t,o)?(r.setUTCFullYear(t,o),r):new Date(NaN);if(n=s.DDD.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=h(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,a)?(r.setUTCFullYear(t,0,a),r):new Date(NaN)}if(n=s.MMDD.exec(e)){r=new Date(0),o=parseInt(n[1],10)-1;var u=parseInt(n[2],10);return g(t,o,u)?(r.setUTCFullYear(t,o,u),r):new Date(NaN)}if(n=s.Www.exec(e))return i=parseInt(n[1],10)-1,b(t,i)?d(t,i):new Date(NaN);if(n=s.WwwD.exec(e)){i=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return b(t,i,c)?d(t,i,c):new Date(NaN)}return null}(m.restDateString,v);if(isNaN(_))return new Date(NaN);if(_){var w,k=_.getTime(),O=0;if(p.time&&(O=function(e){var t,n,r;if(t=s.HH.exec(e))return y(n=parseFloat(t[1].replace(",",".")))?n%24*u:NaN;if(t=s.HHMM.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),y(n,r)?n%24*u+r*c:NaN;if(t=s.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var o=parseFloat(t[3].replace(",","."));return y(n,r,o)?n%24*u+r*c+1e3*o:NaN}return null}(p.time),isNaN(O)))return new Date(NaN);if(p.timezone||n.timeZone){if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O)),isNaN(w))return new Date(NaN);if(w=Object(i.a)(p.timezone||n.timeZone,new Date(k+O+w)),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(k+O)),w=Object(o.a)(new Date(k+O+w));return new Date(k+O+w)}return new Date(NaN)};var r=n(13),o=n(122),i=n(39);function a(e){"@babel/helpers - typeof";return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u=36e5,c=6e4,l=2,s={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*| UTC|(?:[a-zA-Z]+\/[a-zA-Z_]+(?:\/[a-zA-Z_]+)?))$/};function d(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var o=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+o),r}var f=[31,28,31,30,31,30,31,31,30,31,30,31],p=[31,29,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400==0||e%4==0&&e%100!=0}function g(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=h(e);if(r&&n>p[t])return!1;if(!r&&n>f[t])return!1}return!0}function b(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function y(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}},function(e,t,n){t.a=function(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());t.setSeconds(0,0);var i=n>0?(r+o(t))%r:o(t);return n*r+i};var r=6e4;function o(e){return e.getTime()%r}},function(e,t,n){function r(e){"@babel/helpers - typeof";return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),(e=t.call(this)).picker=null,e.selectedDate=null,e._params={},e._gui=document.createElement("div"),e._gui.className="ag-cell-edit-wrapper",e._gui.innerHTML='\n
\n
\n \n \n \n \n
\n
\n '),e}return function(e,t,n){t&&g(e.prototype,t),n&&g(e,n)}(n,[{key:"init",value:function(e){this._params=e;var t=this.getOption("dateTimeEnableTime",e,!0),n=this.getOption("dateTimeEnable24HR",e,!0),r=this.getOption("dateTimeEnableSeconds",e,!1),o=!this.getOption("dateTimeEnableCalendar",e,!0),i=this.getOption("dateTimeMask",e);i||(i=o?"":"%Y/%Mz/%Dz",t&&(i+=n?" %Hz:%mz":" %hz:%mz",r&&(i+=":%sz"))),i=i.trim(),this.picker=flatpickr(this._gui,{wrap:!0,allowInput:!1,onChange:this._onDateChanged,formatDate:this.formatDate,maxDate:this.getOption("dateTimeMax",e,null),minDate:this.getOption("dateTimeMin",e,null),defaultHour:this.getOption("dateTimeDefaultHour",e,12),defaultMinute:this.getOption("dateTimeDefaultMinute",e,0),disableMobile:this.getOption("dateTimeDisableMobile",e,!1),weekNumbers:this.getOption("dateTimeEnableWeekNumber",e,!1),locale:this._getPickerLocale(),noCalendar:o,dateFormat:i,enableTime:t,enableSeconds:r,time_24hr:n}),this.picker.calendarContainer.classList.add("ag-custom-component-popup")}},{key:"destroy",value:function(){this.picker.destroy(),this.off(n.ON_DATE_CHANGED)}},{key:"setDate",value:function(e){this.picker.setDate(e,!0)}},{key:"open",value:function(){this.picker.open(),this._gui.querySelector("input").focus()}},{key:"close",value:function(){this.picker.close()}},{key:"reset",value:function(){this.picker.config&&this.picker.clear()}},{key:"formatDate",value:function(e,t){var n=this.getOption("dateTimeFormatter",this._params),r=this.getOption("dateTimeLocale",this._params,Intl.DateTimeFormat().resolvedOptions().locale||"en-US");if(!n){if(!t||t&&t.indexOf("%")<0)return;return BBj.Masks.DateMask.mask(e,t,r)}var o=n;switch(h(n)){case"string":return o.indexOf("return")>=0||(o="return "+o+";"),new Function("date","format","locale","DateMask",o)(e,t,r,BBj.Masks.DateMask);case"function":return n(e,t,r,BBj.Masks.DateMask);default:throw new Error('Invalid dateTimeFormatter defined for column "'.concat(this._params.colDef.field,'". The formatter should be an expression or plain function'))}}},{key:"_onDateChanged",value:function(e){this.selectedDate=e[0]||null,this.notify(n.ON_DATE_CHANGED,this.selectedDate)}},{key:"_getPickerLocale",value:function(){for(var e=Intl.DateTimeFormat().resolvedOptions().locale||"en-US",t=[],n=[],r=4;r<11;r++){var o=new Date(1970,0,r);t.push(o.toLocaleString(e,{weekday:"short"}).split(",")[0]),n.push(o.toLocaleString(e,{weekday:"long"}).split(",")[0])}for(var i=[],a=[],u=0;u<12;u++){var c=new Date(1970,u,4);i.push(c.toLocaleString(e,{month:"short"})),a.push(c.toLocaleString(e,{month:"long"}))}return{weekdays:{shorthand:t,longhand:n},months:{shorthand:i,longhand:a},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:BBj.Masks.Utils.Dates.getWeekStartByLocale(e),ordinal:function(e){return""},rangeSeparator:" ",weekAbbreviation:"",scrollTitle:"",toggleTitle:"",amPM:["AM","PM"],yearAriaLabel:"",hourAriaLabel:"",minuteAriaLabel:""}}}]),n}(),a.ON_DATE_CHANGED="DateTimeInput.ON_DATE_CHANGED",v(o=u,"ON_DATE_CHANGED",[s.a],(i=(i=Object.getOwnPropertyDescriptor(o,"ON_DATE_CHANGED"))?i.value:void 0,{enumerable:!0,configurable:!0,writable:!0,initializer:function(){return i}}),o),v(o.prototype,"init",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"init"),o.prototype),v(o.prototype,"destroy",[l.a],Object.getOwnPropertyDescriptor(o.prototype,"destroy"),o.prototype),v(o.prototype,"formatDate",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"formatDate"),o.prototype),v(o.prototype,"_onDateChanged",[c.a],Object.getOwnPropertyDescriptor(o.prototype,"_onDateChanged"),o.prototype),r=o))||r;t.a=_},function(e,t,n){var r=n(126);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".datetime__input{display:flex;align-items:center;width:100%;height:100%;overflow:hidden;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));border-radius:3px}.datetime__input:focus,.datetime__input:active,.datetime__input:hover{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input__input{flex:1;padding:6px;border:none;outline:none;background-color:var(--ag-background-color);color:inherit}.ag-theme-alpine .datetime__input__input,.ag-theme-balham .datetime__input__input,.ag-theme-material .datetime__input__input{background-color:var(--ag-background-color, #fff)}.ag-theme-alpine-dark .datetime__input__input,.ag-theme-balham-dark .datetime__input__input{background-color:var(--ag-background-color, #2d3436)}.datetime__input__clear{margin-left:1px;margin-top:1px;padding:6px;text-align:center;border:none;outline:none;cursor:pointer;color:inherit}.datetime__input--editor{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.datetime__input--editor .datetime__input__input{padding:0;padding-left:6px}\n",""])},function(e,t,n){var r=n(128);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(4)(r,o);r.locals&&(e.exports=r.locals)},function(e,t,n){(e.exports=n(3)(!1)).push([e.i,".dateTimeFilter select{margin-bottom:9px;padding:6px;border-radius:3px;border:1px solid var(--ag-input-border-color, var(--ag-border-color, #babfc7));color:inherit}.dateTimeFilter select:focus,.dateTimeFilter select:active{border-color:var(--ag-input-focus-border-color, rgba(33,150,243,0.4))}.dateTimeFilter select option{text-indent:6px}\n",""])},function(e,t,n){var r=n(130);t.a=r.a},function(e,t,n){var r,o=n(1),i=n(2),a=n(38),u=n(41),c=n(0);function l(e){"@babel/helpers - typeof";return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,u&&(0,o.default)(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(32)),o=a(n(90)),i=a(n(12));function a(e){return e&&e.__esModule?e:{default:e}}var u=function(e){return(0,i.default)(e)?(0,r.default)(e,!0):(0,o.default)(e)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e,t){for(var n=-1,r=Array(e);++n"']/g,u=RegExp(a.source);var c=function(e){return(e=(0,o.default)(e))&&u.test(e)?e.replace(a,r.default):e};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=(0,function(e){return e&&e.__esModule?e:{default:e}}(n(104)).default)({"&":"&","<":"<",">":">",'"':""","'":"'"});t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return function(t){return null==e?void 0:e[t]}};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(9)),o=u(n(37)),i=u(n(33)),a=u(n(106));function u(e){return e&&e.__esModule?e:{default:e}}var c=1/0,l=r.default?r.default.prototype:void 0,s=l?l.toString:void 0;var d=function e(t){if("string"==typeof t)return t;if((0,i.default)(t))return(0,o.default)(t,e)+"";if((0,a.default)(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-c?"-0":n};t.default=d},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(3)),o=i(n(4));function i(e){return e&&e.__esModule?e:{default:e}}function a(e){"@babel/helpers - typeof";return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var u="[object Symbol]";var c=function(e){return"symbol"==a(e)||(0,o.default)(e)&&(0,r.default)(e)==u};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%-([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=/<%([\s\S]+?)%>/g;t.default=r},function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t0){var t=e[0],n=t.previousElementSibling;if(n&&-1!==n.className.indexOf("group")&&!n.previousElementSibling&&(t=n),t.offsetTopi&&(o.scrollTop+=r-i)}}}()}function w(){m()&&_()}function k(){w()}function O(e){e.target!==o?w():e.preventDefault()}function C(e){for(var t=e.which||e.keyCode||0,n=0,r=[38,13,27,39,37,16,17,18,20,91,9];n=112&&t<=123||40===t&&m()||E(0)}function x(n){var r=n.which||n.keyCode||0;if(38===r||40===r||27===r){var o=m();if(27===r)v();else{if(!m||d.length<1)return;38===r?function(){if(d.length<1)t=void 0;else if(t===d[0])t=d[d.length-1];else for(var e=d.length-1;e>0;e--)if(t===d[e]||1===e){t=d[e-1];break}}():function(){if(d.length<1&&(t=void 0),t&&t!==d[d.length-1]){for(var e=0;e=p||1===r?(y(),n=window.setTimeout(function(){e.fetch(i,function(e){g===o&&e&&(f=i,t=(d=e).length>0?d[0]:void 0,_())},0)},0===r?c:0)):v()}function S(){setTimeout(function(){r.activeElement!==b&&v()},200)}return o.className="autocomplete "+(e.className||""),i.position="absolute",o.addEventListener("mousedown",function(e){e.stopPropagation(),e.preventDefault()}),o.addEventListener("focus",function(){return b.focus()}),b.addEventListener("keydown",x),b.addEventListener(s,C),b.addEventListener("blur",S),b.addEventListener("focus",D),window.addEventListener("resize",k),r.addEventListener("scroll",O,!0),{destroy:function(){b.removeEventListener("focus",D),b.removeEventListener("keydown",x),b.removeEventListener(s,C),b.removeEventListener("blur",S),window.removeEventListener("resize",k),r.removeEventListener("scroll",O,!0),y(),v()}}}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setState=function(e,t){var n=(0,r.gw_getGrid)(e).options;try{n.columnApi.setColumnState(t.columns),n.columnApi.setColumnGroupState(t.groups),n.api.setSortModel(t.sort),n.api.setFilterModel(t.filters)}catch(e){console.warn("Failed to parse grid state from JSON",e)}},t.gw_getState=function(e){var t=(0,r.gw_getGrid)(e).options,n=t.columnApi.getColumnState(),o=t.columnApi.getColumnGroupState(),i=t.api.getSortModel(),a=t.api.getFilterModel();try{return JSON.stringify({columns:n,groups:o,sort:i,filters:a})}catch(e){console.warn("Failed to convert the grid state to json",e)}};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setSideBarVisible=function(e,t){(0,r.gw_getGrid)(e).options.api.setSideBarVisible(Boolean(t))},t.gw_openToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.openToolPanel(t)},t.gw_closeToolpanel=function(e,t){(0,r.gw_getGrid)(e).options.api.closeToolPanel(t)},t.gw_setFunctionsReadOnly=function(e,t){(0,r.gw_getGrid)(e).options.api.setFunctionsReadOnly(Boolean(t))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStatusbarComponentVisibility=function(e,t,n){(0,r.gw_getGrid)(e).options.api.getStatusPanel(t).setVisible(Boolean(n))};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_showLoadingOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showLoadingOverlay()},t.gw_showNoRowsOverlay=function(e){(0,r.gw_getGrid)(e).options.api.showNoRowsOverlay()},t.gw_hideOverlay=function(e){(0,r.gw_getGrid)(e).options.api.hideOverlay()};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_updateContext=function(e,t){(0,r.gw_getGrid)(e).options.context=t};var r=n(0)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.gw_setStyle=function(e,t){jss.forDocument((0,r.gw_getDocument)()).set(e,JSON.parse(t))},t.gw_removeStyle=function(e){jss.forDocument((0,r.gw_getDocument)()).remove(e)},n(118);var r=n(0)},function(e,t,n){(function(t){e.exports=t.jss=n(119)}).call(this,n(2))},function(e,t,n){"use strict";var r=function(){var e,t=/((?:\.|#)[^\.\s#]+)((?:\.|#)[^\.\s#]+)/g,n=/(::)(before|after|first-line|first-letter|selection)/,r=/([^:])(:)(before|after|first-line|first-letter|selection)/;function o(e,t){var n=e.cssRules||e.rules||[],r=[];t=t.toLowerCase();for(var o=0;o0?e.style.setProperty(n,r.substr(0,o),"important"):e.style.setProperty(n,r)}}function b(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}function y(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var m=function(e){this.doc=e,this.head=this.doc.head||this.doc.getElementsByTagName("head")[0],this.sheets=this.doc.styleSheets||[]};m.prototype={get:function(e){if(!this.defaultSheet)return{};if(e)return d(o(this.defaultSheet,e));var t=function(e){for(var t=e.cssRules||e.rules||[],n={},r=0;r\n*\n* For the full copyright and license information, please view the LICENSE\n* file that was distributed with this source code.\n*/\n\n.gw-alignment-cell-right,\n.gw-alignment-cell-right .ag-cell-value,\n.gw-alignment-cell-right .templateRenderer {\n text-align: right;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-cell-center,\n.gw-alignment-cell-center .ag-cell-value,\n.gw-alignment-cell-center .templateRenderer {\n text-align: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.gw-alignment-header-right .ag-header-cell-label {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.gw-alignment-header-center .ag-header-cell-label {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.gw-alignment-header-center .ag-header-cell-text {\n margin-left: -16px !important;\n}\n\n.gw-alignment-header-right .ag-cell-label-container,\n.gw-alignment-header-center .ag-cell-label-container {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.gw-tooltip {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n -webkit-transition: opacity 1s;\n transition: opacity 1s;\n border-radius: 3.1px;\n padding: 10px;\n -webkit-transition: opacity 260ms;\n transition: opacity 260ms;\n}\n\n.gw-tooltip-light {\n background-color: white;\n -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n\n.gw-tooltip-dark {\n background-color: #1c1f20;\n -webkit-box-shadow: 0 0 6px #5c5c5c;\n box-shadow: 0 0 6px #5c5c5c;\n color: white;\n}\n"},function(e,t,n){var r=n(126);"string"==typeof r&&(r=[[e.i,r,""]]);var o={hmr:!0,transform:void 0,insertInto:function(){return window.parent.document.head}};n(13)(r,o);r.locals&&(e.exports=r.locals)},function(e,t){e.exports=".autocompleteInputWrapper__input {\n padding-left: 6px;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-radius: 3px;\n background-color: var(--ag-background-color);\n color: inherit;\n outline: none;\n}\n\n.ag-theme-alpine .autocompleteInputWrapper__input,\n.ag-theme-balham .autocompleteInputWrapper__input,\n.ag-theme-material .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #fff);\n}\n\n.ag-theme-alpine-dark .autocompleteInputWrapper__input,\n.ag-theme-balham-dark .autocompleteInputWrapper__input {\n background-color: var(--ag-background-color, #2d3436);\n}\n\n.autocomplete {\n background-color: var(--ag-background-color, #fff);\n z-index: 1000;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: thin solid var(--ag-input-focus-border-color, rgba(33, 150, 243, 0.4));\n border-top: 0;\n border-radius: 3px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n overflow: auto;\n -webkit-box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);\n}\n\n.autocomplete.dark {\n background-color: var(--ag-background-color, #2d3436);\n color: var(--ag-data-color, var(--ag-foreground-color, #fff));\n}\n\n.autocomplete .suggestion-group {\n background: #eee;\n padding: 5px 6px;\n font-weight: bold;\n}\n\n.autocomplete.dark .suggestion-group {\n background: var(--ag-background-color, #181d1f);\n}\n\n.autocomplete .suggestion-item {\n padding: 10px;\n cursor: pointer;\n}\n\n.autocomplete .suggestion-item:hover {\n background-color: var(--ag-row-hover-color, rgba(33, 150, 244, 0.1));\n}\n\n.autocomplete .suggestion-item.selected {\n background-color: var(\n --ag-selected-row-background-color,\n rgba(33, 150, 243, 0.3)\n );\n}\n\n.autocomplete .empty {\n padding: 8px 6px;\n}\n\n.autocomplete-input-error {\n -webkit-box-shadow: 0 -2px 0 #e91e63 inset;\n box-shadow: 0 -2px 0 #e91e63 inset;\n}\n\n.autocomplete-input-success {\n -webkit-box-shadow: 0 -2px 0 #4caf50 inset;\n box-shadow: 0 -2px 0 #4caf50 inset;\n}\n"}])); \ No newline at end of file diff --git a/client/dist/report.html b/client/dist/report.html index fb0ce009..a3ecc631 100644 --- a/client/dist/report.html +++ b/client/dist/report.html @@ -3,7 +3,7 @@ - bbj-grid-widget [17 Nov 2020 at 11:20] + bbj-grid-widget [20 Nov 2020 at 10:20] diff --git a/client/src/api/init.js b/client/src/api/init.js index 5182cd19..73470e57 100644 --- a/client/src/api/init.js +++ b/client/src/api/init.js @@ -20,6 +20,7 @@ import { gw_onCellEditingEvent, gw_onRowEditingEvent, gw_onReadyEvent, + gw_onFilterChanged, gw_debounce, } from 'events' import template from 'lodash-es/template' @@ -99,6 +100,9 @@ function gw_parseOptions(options) { onGridReady: e => { gw_onReadyEvent(id, e) }, + onFilterChanged: e => { + gw_onFilterChanged(id, e) + }, getRowNodeId: data => gw_getRowNodeId(id, data), getContextMenuItems: params => gw_getContextMenu(id, params), getChartToolbarItems: gw_getChartToolbarItems, diff --git a/client/src/events/constants.js b/client/src/events/constants.js index cccf185e..aceb731f 100644 --- a/client/src/events/constants.js +++ b/client/src/events/constants.js @@ -29,3 +29,6 @@ export const GW_EVENT_RANGE_SELECTION_CHANGED = 5009 // keyboard events export const GW_EVENT_KEYPRESS = 5010 + +// filters +export const GW_EVENT_FILTER_CHANGED = 5013 diff --git a/client/src/events/filters.js b/client/src/events/filters.js new file mode 100644 index 00000000..44e844cc --- /dev/null +++ b/client/src/events/filters.js @@ -0,0 +1,32 @@ +/* + * This file is part of the BBjGridExWidget plugin. + * (c) Basis Europe + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import { gw_sendEvent } from './utilities' +import { GW_EVENT_FILTER_CHANGED } from './constants' + +/** + * An handler for the grid `filterChanged` event + * + * @param {String} the grid's id + * @param {Object} e The event's payload + * + * @listens agGrid.filterChanged + * @fires gw.filterChanged + */ +export function gw_onFilterChanged(id, e) { + const context = e.api.gridOptionsWrapper.gridOptions.context + + gw_sendEvent( + context, + { + type: 'gw.filterChanged', + detail: {}, + }, + GW_EVENT_FILTER_CHANGED + ) +} diff --git a/client/src/events/index.js b/client/src/events/index.js index 1a694b85..38f4d4a3 100644 --- a/client/src/events/index.js +++ b/client/src/events/index.js @@ -13,12 +13,10 @@ import { gw_onCellClickEvent, gw_onRangeSelectionChanged, } from './selections' - import { gw_onCellEditingEvent, gw_onRowEditingEvent } from './editing' - import { gw_onReadyEvent } from './ready' - import { gw_debounce } from './utilities' +import { gw_onFilterChanged } from './filters' export { gw_onRowClicked, @@ -30,4 +28,5 @@ export { gw_onRowEditingEvent, gw_onReadyEvent, gw_debounce, + gw_onFilterChanged, }