@phenixrts/sdk 2023.2.2-beta.69 → 2023.2.4-beta.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/channels/debug/channels.js +74 -18
- package/channels/debug/package.json +1 -1
- package/channels/debug.private/channels.js +74 -18
- package/channels/debug.private/package.json +1 -1
- package/channels/es5.debug.private/channels.js +71 -18
- package/channels/es5.debug.private/package.json +1 -1
- package/channels/min/channels.js +1 -1
- package/channels/min/channels.js.map +1 -1
- package/channels/min/package.json +1 -1
- package/channels/min.private/channels.js +1 -1
- package/channels/min.private/channels.js.map +1 -1
- package/channels/min.private/package.json +1 -1
- package/channels/package.json +1 -1
- package/full/debug/full.js +74 -18
- package/full/debug/package.json +1 -1
- package/full/debug.private/full.js +74 -18
- package/full/debug.private/package.json +1 -1
- package/full/min/full.js +1 -1
- package/full/min/full.js.map +1 -1
- package/full/min/package.json +1 -1
- package/full/min.private/full.js +1 -1
- package/full/min.private/full.js.map +1 -1
- package/full/min.private/package.json +1 -1
- package/full/package.json +1 -1
- package/package.json +1 -1
- package/publish/debug/package.json +1 -1
- package/publish/debug/publish.js +68 -8
- package/publish/debug.private/package.json +1 -1
- package/publish/debug.private/publish.js +68 -8
- package/publish/min/package.json +1 -1
- package/publish/min/publish.js +1 -1
- package/publish/min/publish.js.map +1 -1
- package/publish/min.private/package.json +1 -1
- package/publish/min.private/publish.js +1 -1
- package/publish/min.private/publish.js.map +1 -1
- package/publish/package.json +1 -1
- package/types/environment/Parameters.d.ts +9 -0
- package/types/sdk/channels/Channel.d.ts +3 -1
- package/types/sdk/channels/Channels.d.ts +3 -1
- package/types/sdk/context/ChannelContext.d.ts +6 -2
- package/types/sdk/streaming/InsertableStreams.d.ts +3 -1
package/full/debug/full.js
CHANGED
|
@@ -1644,6 +1644,60 @@ var FeatureEnablement = /*#__PURE__*/function () {
|
|
|
1644
1644
|
}();
|
|
1645
1645
|
|
|
1646
1646
|
|
|
1647
|
+
/***/ }),
|
|
1648
|
+
|
|
1649
|
+
/***/ "./src/environment/Parameters.ts":
|
|
1650
|
+
/*!***************************************!*
|
|
1651
|
+
!*** ./src/environment/Parameters.ts ***!
|
|
1652
|
+
\***************************************/
|
|
1653
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1654
|
+
|
|
1655
|
+
"use strict";
|
|
1656
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1657
|
+
/* harmony export */ "default": () => /* binding */ Parameters
|
|
1658
|
+
/* harmony export */ });
|
|
1659
|
+
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
|
|
1660
|
+
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
1661
|
+
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
|
|
1662
|
+
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
1663
|
+
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
|
|
1664
|
+
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
1665
|
+
|
|
1666
|
+
|
|
1667
|
+
|
|
1668
|
+
/**
|
|
1669
|
+
* Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
|
|
1670
|
+
*/
|
|
1671
|
+
var Parameters = /*#__PURE__*/function () {
|
|
1672
|
+
function Parameters() {
|
|
1673
|
+
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default()(this, Parameters);
|
|
1674
|
+
}
|
|
1675
|
+
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(Parameters, null, [{
|
|
1676
|
+
key: "discoveryParameters",
|
|
1677
|
+
get: function get() {
|
|
1678
|
+
return this._discoveryParameters;
|
|
1679
|
+
}
|
|
1680
|
+
}, {
|
|
1681
|
+
key: "applyParameters",
|
|
1682
|
+
value: function applyParameters() {
|
|
1683
|
+
try {
|
|
1684
|
+
var parameters = {"discovery":{"intentions":"contribution,distribution"}};
|
|
1685
|
+
this._discoveryParameters = 'discovery' in parameters ? parameters.discovery : {
|
|
1686
|
+
intentions: ''
|
|
1687
|
+
};
|
|
1688
|
+
} catch (e) {
|
|
1689
|
+
this._discoveryParameters = {
|
|
1690
|
+
intentions: ''
|
|
1691
|
+
};
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
}]);
|
|
1695
|
+
return Parameters;
|
|
1696
|
+
}();
|
|
1697
|
+
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(Parameters, "_discoveryParameters", void 0);
|
|
1698
|
+
|
|
1699
|
+
Parameters.applyParameters();
|
|
1700
|
+
|
|
1647
1701
|
/***/ }),
|
|
1648
1702
|
|
|
1649
1703
|
/***/ "./src/lang/Disposable.ts":
|
|
@@ -5603,7 +5657,7 @@ var Channel = /*#__PURE__*/function () {
|
|
|
5603
5657
|
_context5.next = 23;
|
|
5604
5658
|
break;
|
|
5605
5659
|
}
|
|
5606
|
-
if (this._channelContext.videoStreamTransformCallback
|
|
5660
|
+
if (this._channelContext.videoStreamTransformCallback) {
|
|
5607
5661
|
_context5.next = 15;
|
|
5608
5662
|
break;
|
|
5609
5663
|
}
|
|
@@ -5626,7 +5680,7 @@ var Channel = /*#__PURE__*/function () {
|
|
|
5626
5680
|
_context5.next = 29;
|
|
5627
5681
|
break;
|
|
5628
5682
|
case 23:
|
|
5629
|
-
if (!this._channelContext.videoStreamTransformCallback
|
|
5683
|
+
if (!this._channelContext.videoStreamTransformCallback) {
|
|
5630
5684
|
_context5.next = 29;
|
|
5631
5685
|
break;
|
|
5632
5686
|
}
|
|
@@ -6144,7 +6198,6 @@ var ChannelContext = /*#__PURE__*/function () {
|
|
|
6144
6198
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "rtcAudioStatistic", void 0);
|
|
6145
6199
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "rtcVideoStatistic", void 0);
|
|
6146
6200
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "clearFailureCountTimeout", void 0);
|
|
6147
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6148
6201
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "videoStreamTransformCallback", void 0);
|
|
6149
6202
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "hasInsertableStreams", void 0);
|
|
6150
6203
|
this.disposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
|
|
@@ -6169,8 +6222,7 @@ var ChannelContext = /*#__PURE__*/function () {
|
|
|
6169
6222
|
this.endPoint = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(null);
|
|
6170
6223
|
this.stream = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(null);
|
|
6171
6224
|
this.rtcStatistics = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(null);
|
|
6172
|
-
|
|
6173
|
-
this.videoStreamTransformCallback = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(options === null || options === void 0 ? void 0 : options.videoStreamTransformCallback);
|
|
6225
|
+
this.videoStreamTransformCallback = options === null || options === void 0 ? void 0 : options.videoStreamTransformCallback;
|
|
6174
6226
|
this.hasInsertableStreams = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(!!(options !== null && options !== void 0 && options.hasInsertableStreams));
|
|
6175
6227
|
}
|
|
6176
6228
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(ChannelContext, [{
|
|
@@ -6780,6 +6832,7 @@ var DiscoveryService = /*#__PURE__*/function () {
|
|
|
6780
6832
|
/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../defaults */ "./src/sdk/defaults.ts");
|
|
6781
6833
|
/* harmony import */ var _rx_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../rx/Subject */ "./src/rx/Subject.ts");
|
|
6782
6834
|
/* harmony import */ var _version_VersionManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../version/VersionManager */ "./src/sdk/version/VersionManager.ts");
|
|
6835
|
+
/* harmony import */ var _environment_Parameters__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../environment/Parameters */ "./src/environment/Parameters.ts");
|
|
6783
6836
|
|
|
6784
6837
|
|
|
6785
6838
|
|
|
@@ -6790,6 +6843,7 @@ var DiscoveryService = /*#__PURE__*/function () {
|
|
|
6790
6843
|
|
|
6791
6844
|
|
|
6792
6845
|
|
|
6846
|
+
|
|
6793
6847
|
var DiscoveryUri = /*#__PURE__*/function () {
|
|
6794
6848
|
function DiscoveryUri() {
|
|
6795
6849
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default()(this, DiscoveryUri);
|
|
@@ -6805,7 +6859,8 @@ var DiscoveryUri = /*#__PURE__*/function () {
|
|
|
6805
6859
|
value: function buildDiscoveryUrl(uri) {
|
|
6806
6860
|
var url = new URL(uri.toString());
|
|
6807
6861
|
var sdkVersion = _version_VersionManager__WEBPACK_IMPORTED_MODULE_5__.default.sdkVersion;
|
|
6808
|
-
|
|
6862
|
+
var intentions = _environment_Parameters__WEBPACK_IMPORTED_MODULE_6__.default.discoveryParameters.intentions;
|
|
6863
|
+
url.search = "?".concat(new URLSearchParams([['version', sdkVersion], ['intentions', intentions], ['_', "".concat(Date.now())]]).toString());
|
|
6809
6864
|
if (url.pathname === '/') {
|
|
6810
6865
|
url.pathname = '/pcast/endPoints';
|
|
6811
6866
|
}
|
|
@@ -6844,8 +6899,9 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
|
|
|
6844
6899
|
/* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
|
|
6845
6900
|
/* harmony import */ var _edgeAuth_EdgeAuthParser__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../edgeAuth/EdgeAuthParser */ "./src/edgeAuth/EdgeAuthParser.ts");
|
|
6846
6901
|
/* harmony import */ var _version_VersionManager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../version/VersionManager */ "./src/sdk/version/VersionManager.ts");
|
|
6847
|
-
/* harmony import */ var
|
|
6848
|
-
/* harmony import */ var
|
|
6902
|
+
/* harmony import */ var _environment_Parameters__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../environment/Parameters */ "./src/environment/Parameters.ts");
|
|
6903
|
+
/* harmony import */ var _BitrateModeMapping__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BitrateModeMapping */ "./src/sdk/discovery/BitrateModeMapping.ts");
|
|
6904
|
+
/* harmony import */ var _BitrateStateMapping__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./BitrateStateMapping */ "./src/sdk/discovery/BitrateStateMapping.ts");
|
|
6849
6905
|
/* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
|
|
6850
6906
|
|
|
6851
6907
|
|
|
@@ -6861,6 +6917,7 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
|
|
|
6861
6917
|
|
|
6862
6918
|
|
|
6863
6919
|
|
|
6920
|
+
|
|
6864
6921
|
var apiVersion = 7;
|
|
6865
6922
|
var EndPoint = /*#__PURE__*/function () {
|
|
6866
6923
|
function EndPoint(uri, timeout) {
|
|
@@ -7251,8 +7308,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7251
7308
|
sharedSecret: stream.sharedSecret,
|
|
7252
7309
|
elapsedInMilliseconds: elapsedInMilliseconds,
|
|
7253
7310
|
bitrateInBitsPerSecond: bitrateInBitsPerSecond,
|
|
7254
|
-
bitrateState:
|
|
7255
|
-
bitrateMode:
|
|
7311
|
+
bitrateState: _BitrateStateMapping__WEBPACK_IMPORTED_MODULE_11__.default.convertBitrateStateToBitrateStateType(bitrateState),
|
|
7312
|
+
bitrateMode: _BitrateModeMapping__WEBPACK_IMPORTED_MODULE_10__.default.convertBitrateModeToBitrateModeType(bitrateMode)
|
|
7256
7313
|
};
|
|
7257
7314
|
formData.append('jsonBody', JSON.stringify(body));
|
|
7258
7315
|
start = Date.now();
|
|
@@ -7515,7 +7572,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7515
7572
|
value: function buildPingUrl() {
|
|
7516
7573
|
var uri = new URL(this._uri);
|
|
7517
7574
|
var sdkVersion = _version_VersionManager__WEBPACK_IMPORTED_MODULE_8__.default.sdkVersion;
|
|
7518
|
-
|
|
7575
|
+
var intentions = _environment_Parameters__WEBPACK_IMPORTED_MODULE_9__.default.discoveryParameters.intentions;
|
|
7576
|
+
uri.search = "?".concat(new URLSearchParams([['type', 'http'], ['version', sdkVersion], ['intentions', intentions], ['_', "".concat(Date.now())]]).toString());
|
|
7519
7577
|
return uri.toString();
|
|
7520
7578
|
}
|
|
7521
7579
|
}, {
|
|
@@ -9342,9 +9400,7 @@ var InsertableStreams = /*#__PURE__*/function () {
|
|
|
9342
9400
|
}
|
|
9343
9401
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(InsertableStreams, null, [{
|
|
9344
9402
|
key: "setupMediaStreamTrackTransform",
|
|
9345
|
-
value:
|
|
9346
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9347
|
-
function setupMediaStreamTrackTransform(transform, stream) {
|
|
9403
|
+
value: function setupMediaStreamTrackTransform(transform, stream) {
|
|
9348
9404
|
var videoTrack = stream.getVideoTracks()[0];
|
|
9349
9405
|
if (videoTrack) {
|
|
9350
9406
|
var transformer = new TransformStream({
|
|
@@ -9795,8 +9851,8 @@ var RealTimeStream = /*#__PURE__*/function () {
|
|
|
9795
9851
|
}, defaultStreamSetupTimeout);
|
|
9796
9852
|
peerConnection.ontrack = function (e) {
|
|
9797
9853
|
var stream = e.streams[0];
|
|
9798
|
-
if (_this._channelContext.videoStreamTransformCallback
|
|
9799
|
-
stream = _InsertableStreams__WEBPACK_IMPORTED_MODULE_16__.default.setupMediaStreamTrackTransform(_this._channelContext.videoStreamTransformCallback
|
|
9854
|
+
if (_this._channelContext.videoStreamTransformCallback) {
|
|
9855
|
+
stream = _InsertableStreams__WEBPACK_IMPORTED_MODULE_16__.default.setupMediaStreamTrackTransform(_this._channelContext.videoStreamTransformCallback, stream);
|
|
9800
9856
|
}
|
|
9801
9857
|
clearTimeout(_timeoutId);
|
|
9802
9858
|
resolve(stream);
|
|
@@ -10425,7 +10481,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
10425
10481
|
key: "sdkVersion",
|
|
10426
10482
|
get: function get() {
|
|
10427
10483
|
try {
|
|
10428
|
-
return "2023-06-
|
|
10484
|
+
return "2023-06-13T15:38:44.392Z (2023.2.4-beta.71)";
|
|
10429
10485
|
} catch (e) {
|
|
10430
10486
|
return this._defaultVersion;
|
|
10431
10487
|
}
|
|
@@ -11354,4 +11410,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
|
|
|
11354
11410
|
/******/ })()
|
|
11355
11411
|
;
|
|
11356
11412
|
});
|
|
11357
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNQdWJsaXNoTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZnVsbC9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUmVhbFRpbWVQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTGl2ZVN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJTdWJqZWN0IiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiUmVhZE9ubHlTdWJqZWN0IiwiZGV0ZWN0VGFiRm9jdXNDaGFuZ2UiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXQiLCJ2YWx1ZSIsImdldFRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiZGlzcG9zZSIsIl9kaXNwb3NhYmxlcyIsIl90aGlzIiwiaGlkZGVuIiwidmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50IiwiX3R5cGVvZiIsIm1zSGlkZGVuIiwid2Via2l0SGlkZGVuIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImlzRm9yZWdyb3VuZCIsInNldEZvY3VzU3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkIiwiRGlzcG9zYWJsZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzIiwiY2FsbCIsIl90aGlzMiIsIl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImhhc0ZvY3VzIiwiY2xlYXJJbnRlcnZhbCIsIkJyb3dzZXJEZXRlY3RvciIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiaW5jbHVkZXMiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIm1ldGFWYWx1ZSIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZVVSSVBhcmFtZXRlck5hbWUiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsInVuZGVmaW5lZCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiVVJMIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsIkVycm9yIiwicmFuZG9tIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwiTWF0aCIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJhc3NlcnRVbnJlYWNoYWJsZSIsIngiLCJBcHBlbmRlcnMiLCJfYXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJyZW1vdmUiLCJpdGVtcyIsIml0ZW0iLCJDb25zb2xlQXBwZW5kZXIiLCJ0aHJlc2hvbGQiLCJfdGhyZXNob2xkIiwibG9nIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiZnVsbE1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsIkxvZ2dpbmdMZXZlbCIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJXYXJuIiwiX2xlbjQiLCJfa2V5NCIsIl9sZW41IiwiX2tleTUiLCJmYXRhbCIsIkZhdGFsIiwiX2xlbjYiLCJfa2V5NiIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiT2JqZWN0IiwiYXJndW1lbnQiLCJkYXRhIiwidG9TdHJpbmdTdHIiLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImdldExvZ2dlciIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImJpbmQiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwiX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUiLCJsb2dnaW5nTGV2ZWwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIm1ldHJpY3MiLCJfbWV0cmljcyIsImdldFRlbGVtZXRyeUxldmVsIiwiVGVsZW1ldHJ5TGV2ZWwiLCJNZXRyaWNzQ29uZmlndXJhdGlvbiIsIl91cmwiLCJzZXQiLCJ1cmwiLCJtZXRyaWNzVXJsIiwicGF0aG5hbWUiLCJfZW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsIl90ZW5hbmN5IiwidGVuYW5jeSIsIl9zZXNzaW9uSWQiLCJzZXNzaW9uSWQiLCJNZXRyaWNzRmFjdG9yeSIsImdldE1ldHJpY3NTZXJ2aWNlIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzU2VydmljZSIsInNldFRlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWwiLCJ2YWx1ZXMiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwiaG9zdG5hbWUiLCJfbWV0cmljc0NvbmZpZ3VyYXRpb24iLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwiVmVyc2lvbk1hbmFnZXIiLCJpZ25vcmVkIiwic2VuZE1ldHJpY3NJZkFibGUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJGb3JtRGF0YSIsImFwcGVuZCIsInJlY29yZHMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwic2V0VGltZW91dCIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImNvbmZpZ3VyYXRpb24iLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJSdGNQdWJsaXNoTW9uaXRvciIsInBhcnNlZExvY2FsRGVzY3JpcHRpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsInBhcnNlZFJlbW90ZURlc2NyaXB0aW9uIiwiX2F2YWlsYWJsZVRyYWNrcyIsImF1ZGlvIiwiaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVmlkZW9UcmFja0VuYWJsZWQiLCJsYXN0UGFja2V0U2VudFRpbWVzdGFtcCIsImJ5dGVzU2VudCIsInByZXZpb3VzQnl0ZXNTZW50IiwicGFja2V0c1NlbnQiLCJyZXRyYW5zbWl0dGVkQnl0ZXNTZW50IiwiZmlyQ291bnQiLCJmcmFtZUhlaWdodCIsImZyYW1lV2lkdGgiLCJmcmFtZXNFbmNvZGVkIiwiZnJhbWVzU2VudCIsImhlYWRlckJ5dGVzU2VudCIsImh1Z2VGcmFtZXNTZW50IiwicGxpQ291bnQiLCJxcFN1bSIsInRvdGFsRW5jb2RlVGltZSIsInRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJfY3JlYXRlT2ZmZXIiLCJfY3JlYXRlQW5zd2VyIiwiY3JlYXRlQW5zd2VyIiwiX3gyIiwiX3NldExvY2FsRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJfeDMiLCJfc2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfY2FsbGVlNCIsIl9kZXNjcmlwdGlvbiRzZHAiLCJoYXNDcnlwdG8iLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsImdldFNlbmRlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsIl9pbmhlcml0cyIsIl9zdXBlciIsIl9jcmVhdGVTdXBlciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImdldEVudmlyb25tZW50RnJvbVVybCIsImJhc2VVUkwiLCJvcmlnaW4iLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJfdG9rZW5Db250ZXh0IiwiVG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50IiwiX25hdmlnYXRvciIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiUHVibGlzaGVycyIsIlB1Ymxpc2hlclN0YXRlIiwib25lSG91ckluTWlsbGlzZWNvbmRzIiwibWF4UmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiUHVibGlzaGVyIiwiX3B1Ymxpc2hlckNvbnRleHQiLCJQdWJsaXNoZXJDb250ZXh0IiwiX3B1Ymxpc2hlclN0YXJ0VGltZSIsIl9yZWFkT25seVB1Ymxpc2hpbmciLCJwdWJsaXNoaW5nIiwicHVibGlzaGVyRGlzcG9zYWJsZXMiLCJzZXRNZWRpYVN0cmVhbSIsIm1lZGlhVHJhY2siLCJzZW5kZXIiLCJfc2VuZGVyJHRyYWNrIiwicmVwbGFjZVRyYWNrIiwic3RyZWFtUHVibGlzaGVyIiwiUmVhbFRpbWVQdWJsaXNoZXIiLCJzdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzIiwicmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCIsInB1Ymxpc2hlckluaXRpYWxpemF0aW9uIiwiZ2VuZXJhdGVTY3JlZW5OYW1lIiwibWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzIiwiY3JlYXRlUHVibGlzaGVyIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJzb2Z0UmVzdGFydEludGVydmFsIiwicHVibGlzaGVyQ29udGV4dCIsInBlZXJDb25uZWN0aW9uQ29udGV4dCIsIm9uTGluZSIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjIkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiX3JlZjMiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsIl9yZWY0IiwicmV0cnlDYWxsYmFjayIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiYW5zd2VyIiwiX3JlZjUiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvUHVibGlzaGVyU3RhdHVzIiwicnRjUHVibGlzaE1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJzdGF0aXN0aWNzIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX29iamVjdFNwcmVhZCIsIl9wZWVyQ29ubmVjdGlvbiRjdXJyZSIsImlzQ2xpZW50T2ZmZXJGbG93IiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0IiwiaWNlUmVzdGFydCIsIm9mZmVyIiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJtZWRpYSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiYnVmZmVyZWQiLCJlbmQiLCJzdHJlYW1Db250cm9sbGVyIiwidHJ1ZUN1cnJlbnRUaW1lIiwibWF4IiwiZGVzdHJveSIsIkluc2VydGFibGVTdHJlYW1zIiwic2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwidmlkZW9UcmFjayIsImdldFZpZGVvVHJhY2tzIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJNZWRpYVN0cmVhbSIsImdldEF1ZGlvVHJhY2tzIiwiYXVkaW9UcmFjayIsIl9obHNQbGF5ZXIiLCJfcGhlbml4V2ViUGxheWVyIiwiX3NoYWthIiwibG9hZGVkIiwiX3BlbmRpbmciLCJQbGF5ZXIiLCJkYXNoTWFuaWZlc3RVcmxNYXRjaCIsImhsc01hbmlmZXN0VXJsTWF0Y2giLCJtYW5pZmVzdFVybCIsInBsYXlsaXN0VXJsIiwicHJlZmVyTmF0aXZlIiwic2hvdWxkVXNlTmF0aXZlSGxzIiwiV2ViUGxheWVyIiwiU2hha2FQbGF5ZXIiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIl9zZW5kTG9nc0lmQWJsZSIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwiZHVyYXRpb24iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwib2Zmc2V0IiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwicG93IiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtaW4iLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJmbG9hdCIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsImV2ZW50Iiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTC9GO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNIN0YsdUJBQXVCLG1CQUFPLENBQUMsd0ZBQXVCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNKaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7Ozs7QUNOcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxJQUFJLE9BQU87QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQzlCL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNMN0Ysb0JBQW9CLG1CQUFPLENBQUMsa0ZBQW9CO0FBQ2hEO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNB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RUFBRSxJQUFJLENBQUNpM0IsZ0JBQWdCLEdBQUc7VUFBQ3QrQixNQUFNLEVBQUUsSUFBSSxDQUFDcytCO1FBQWdCLENBQUMsR0FBR3hrQyxTQUFTO1FBQ2xGeUIsUUFBUSxFQUFFLElBQUksQ0FBQ20zQjtNQUNqQixDQUFDLENBQUM7TUFFRixJQUFJLENBQUM0TCxnQkFBZ0IsR0FBR0QsYUFBYTtJQUN2QztFQUFDO0VBQUEsT0FBQXZlLGNBQUE7QUFBQTs7Ozs7OztVQzFNSDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJmdWxsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5Jyk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjUHVibGlzaFN0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjUHVibGlzaFN0YXRpc3RpYyB7XG4gIGxhc3RQYWNrZXRTZW50VGltZXN0YW1wPzogbnVtYmVyO1xuICBzc3JjOiBzdHJpbmc7XG4gIG1lZGlhVHlwZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNTZW50OiBudW1iZXI7XG4gIHBhY2tldHNTZW50OiBudW1iZXI7XG4gIHJldHJhbnNtaXR0ZWRCeXRlc1NlbnQ/OiBudW1iZXI7XG4gIGZpckNvdW50PzogbnVtYmVyO1xuICBmcmFtZUhlaWdodD86IG51bWJlcjtcbiAgZnJhbWVXaWR0aD86IG51bWJlcjtcbiAgZnJhbWVzRW5jb2RlZD86IG51bWJlcjtcbiAgZnJhbWVzU2VudD86IG51bWJlcjtcbiAgaGVhZGVyQnl0ZXNTZW50PzogbnVtYmVyO1xuICBodWdlRnJhbWVzU2VudD86IG51bWJlcjtcbiAgcGxpQ291bnQ/OiBudW1iZXI7XG4gIHFwU3VtPzogbnVtYmVyO1xuICB0b3RhbEVuY29kZVRpbWU/OiBudW1iZXI7XG4gIHRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0PzogbnVtYmVyO1xuICBjb2RlYzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y1B1Ymxpc2hNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9hdmFpbGFibGVUcmFja3M6IHtcbiAgICBhdWRpbzogYm9vbGVhbjtcbiAgICB2aWRlbzogYm9vbGVhbjtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGNvbnN0IHBhcnNlZExvY2FsRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uLnNkcCk7XG4gICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjO1xuICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWM7XG5cbiAgICAgIHRoaXMuX2F2YWlsYWJsZVRyYWNrcyA9IHtcbiAgICAgICAgYXVkaW86IHBhcnNlZExvY2FsRGVzY3JpcHRpb24uaXNBdWRpb1RyYWNrRW5hYmxlZCAmJiBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5pc0F1ZGlvVHJhY2tFbmFibGVkLFxuICAgICAgICB2aWRlbzogcGFyc2VkTG9jYWxEZXNjcmlwdGlvbi5pc1ZpZGVvVHJhY2tFbmFibGVkICYmIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmlzVmlkZW9UcmFja0VuYWJsZWRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB7XG4gICAgICAgIGF1ZGlvOiAwLFxuICAgICAgICB2aWRlbzogMFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgPSBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ291dGJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl9hdmFpbGFibGVUcmFja3Nba2luZF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1NlbnQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzU2VudCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1NlbnQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzU2VudDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1NlbnQ6IHJlcG9ydC5ieXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzU2VudDogcmVwb3J0LnBhY2tldHNTZW50LFxuICAgICAgICAgICAgICAgICAgcmV0cmFuc21pdHRlZEJ5dGVzU2VudDogcmVwb3J0LnJldHJhbnNtaXR0ZWRCeXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmaXJDb3VudCddID0gcmVwb3J0LmZpckNvdW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVIZWlnaHQnXSA9IHJlcG9ydC5mcmFtZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lV2lkdGgnXSA9IHJlcG9ydC5mcmFtZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRW5jb2RlZCddID0gcmVwb3J0LmZyYW1lc0VuY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNTZW50J10gPSByZXBvcnQuZnJhbWVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2hlYWRlckJ5dGVzU2VudCddID0gcmVwb3J0LmhlYWRlckJ5dGVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2h1Z2VGcmFtZXNTZW50J10gPSByZXBvcnQuaHVnZUZyYW1lc1NlbnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydwbGlDb3VudCddID0gcmVwb3J0LnBsaUNvdW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsncXBTdW0nXSA9IHJlcG9ydC5xcFN1bTtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3RvdGFsRW5jb2RlVGltZSddID0gcmVwb3J0LnRvdGFsRW5jb2RlVGltZTtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3RvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0J10gPSByZXBvcnQudG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRW5jb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNFbmNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoJ209Jyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGAke2Jhc2VVUklWYWx1ZX0vcGNhc3QvZW5kUG9pbnRzYDtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJlxuICAgICAgICBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICBTREsuZGlzcG9zZSgpO1xufSk7XG5cblNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0YXRlQ29udGV4dCA9IG5ldyBTdGF0ZUNvbnRleHQoKTtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlWaWRlb0VsZW1lbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVBsYXlpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seVRhcmdldExhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0KTtcbiAgICB0aGlzLl9yZWFkT25seVJlc29sdXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4odGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh0aGlzLnZpZGVvRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlID0gdmlkZW9FbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBuZXcgRGltZW5zaW9uKHZpZGVvRWxlbWVudC52aWRlb1dpZHRoLCB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFbmNvZGVkRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IG1pc3NpbmcgY2FsbGJhY2sgZnVuY3Rpb24gQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaycpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIFN0cmVhbSBUcmFjayBBUEknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQsIGJ1dCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIHZpYSBpbnNlcnRhYmxlLXN0cmVhbXMgY2FwYWJpbGl0eScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50ICYmIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBFcnJvclxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBDaGFubmVsLCB7Q2hhbm5lbE9wdGlvbnN9IGZyb20gJy4vQ2hhbm5lbCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2tcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG4gIGhhc0luc2VydGFibGVTdHJlYW1zPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxDb250ZXh0IHtcbiAgY2hhbm5lbEluaXRpYWxpemF0aW9uOiBEYXRlO1xuICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIGNoYW5uZWxEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHJlbmRlcmVyRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICB2aWRlb0VsZW1lbnQ6IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgdmlkZW9UZWxlbWV0cnk6IFZpZGVvVGVsZW1ldHJ5O1xuICBydGNBdWRpb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgcnRjVmlkZW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBTdWJqZWN0PFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+PjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHRoaXMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG5ldyBTdWJqZWN0PFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+PihvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oISFvcHRpb25zPy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5jb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5LnByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5cbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMjAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRGlzY292ZXJ5Jyk7XG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfdXJpOiBVUkw7XG5cbiAgY29uc3RydWN0b3IodXJpOiBVUkwpIHtcbiAgICBpZiAoIXVyaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdXJpJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZSh1cmkudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJOZWFyYnlFbmRQb2ludHModXJpOiBVUkwsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8RW5kUG9pbnRbXT4ge1xuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdGltZW91dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaXNjb3ZlcnkgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBVUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmwuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoUmVzcG9uc2UsXG4gIElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0LFxuICBQdWJsaXNoU3RhdHVzXG59IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDc7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFsndXBsb2FkJ10sXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbJ3VwbG9hZCddLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IFB1Ymxpc2hlcnMgZnJvbSAnLi4vcHVibGlzaC9QdWJsaXNoZXJzJztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuLi9wdWJsaXNoL1B1Ymxpc2hlclN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlLFxuICBQdWJsaXNoZXJzLFxuICBQdWJsaXNoZXJTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGUsXG4gIFB1Ymxpc2hlcnMsXG4gIFB1Ymxpc2hlclN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuL1B1Ymxpc2hlclN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IFB1Ymxpc2hlckNvbnRleHQgZnJvbSAnLi9QdWJsaXNoZXJDb250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFJlYWxUaW1lUHVibGlzaGVyIGZyb20gJy4vUmVhbFRpbWVQdWJsaXNoZXInO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuY29uc3Qgb25lSG91ckluTWlsbGlzZWNvbmRzID0gMzYwMCAqIDEwMDA7XG5jb25zdCBtYXhSZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAyICogb25lSG91ckluTWlsbGlzZWNvbmRzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXIgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQdWJsaXNoZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1Ymxpc2hlckNvbnRleHQ6IFB1Ymxpc2hlckNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1Ymxpc2hlclN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8UHVibGlzaGVyU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVB1Ymxpc2hpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG5cbiAgY29uc3RydWN0b3IobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQgPSBuZXcgUHVibGlzaGVyQ29udGV4dChuYW1lKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8UHVibGlzaGVyU3RhdGU+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVB1Ymxpc2hpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hlckRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFbmNvZGVkRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxQdWJsaXNoZXJTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwdWJsaXNoaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UHVibGlzaGluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgc2V0TWVkaWFTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKG1lZGlhVHJhY2sgPT4ge1xuICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUuZ2V0U2VuZGVycygpLmZvckVhY2goc2VuZGVyID0+IHtcbiAgICAgICAgICBpZiAobWVkaWFUcmFjay5raW5kID09PSBzZW5kZXI/LnRyYWNrPy5raW5kICYmIG1lZGlhVHJhY2suaWQgIT09IHNlbmRlci50cmFjay5pZCkge1xuICAgICAgICAgICAgc2VuZGVyLnJlcGxhY2VUcmFjayhtZWRpYVRyYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVB1Ymxpc2hlciA9IG5ldyBSZWFsVGltZVB1Ymxpc2hlcih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICByZXR1cm4gc3RyZWFtUHVibGlzaGVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBwdWJsaXNoaW5nJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID09PSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCA9IDA7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgaWYgKCF0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCA9IERhdGUubm93KCkgLSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHM7XG5cbiAgICAgICAgaWYgKG1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA8PSByZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXSBbJXNdIGFmdGVyIGV4Y2VlZGluZyB0aW1lb3V0JywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSwgUHVibGlzaGVyU3RhdGVbdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlLCBQdWJsaXNoZXJTdGF0ZVt0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHB1Ymxpc2hpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCBkdWUgdG8gY2hhbm5lbCBub3QgZm91bmQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtQdWJsaXNoU3RhdHVzfSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi8uLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IHtJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNQdWJsaXNoTW9uaXRvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlckNvbnRleHQge1xuICBwdWJsaXNoZXJJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBwdWJsaXNoZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHN0YXRlOiBTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaXNoaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPjtcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIHN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5wdWJsaXNoZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucHVibGlzaGVySW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxQdWJsaXNoZXJTdGF0ZT4oUHVibGlzaGVyU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucHVibGlzaGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lICYmIG5hbWUubGVuZ3RoID8gbmFtZSA6IHRoaXMuZ2VuZXJhdGVTY3JlZW5OYW1lKCk7XG4gICAgdGhpcy5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogUHVibGlzaFN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBtYXBQdWJsaXNoU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzOiBQdWJsaXNoU3RhdHVzKTogUHVibGlzaGVyU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVTY3JlZW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZ3MucmFuZG9tKDEyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBQdWJsaXNoZXJTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUHVibGlzaGluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgTm90Rm91bmQsXG4gIEVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hlclN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IFB1Ymxpc2hlciBmcm9tICcuL1B1Ymxpc2hlcic7XG5cbnR5cGUgQ3JlYXRlUHVibGlzaGVyT3B0aW9ucyA9IHtcbiAgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtO1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgbmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlcnMge1xuICBzdGF0aWMgY3JlYXRlUHVibGlzaGVyKG9wdGlvbnM6IENyZWF0ZVB1Ymxpc2hlck9wdGlvbnMpOiBQdWJsaXNoZXIge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHVibGlzaGVyKG9wdGlvbnMubWVkaWFTdHJlYW0sIG9wdGlvbnMudG9rZW4sIG9wdGlvbnMubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUHVibGlzaGVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBSdGNQdWJsaXNoTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjUHVibGlzaE1vbml0b3InO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5pbXBvcnQgUHVibGlzaGVyQ29udGV4dCBmcm9tICcuL1B1Ymxpc2hlckNvbnRleHQnO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IHNvZnRSZXN0YXJ0SW50ZXJ2YWwgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVB1Ymxpc2hlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVB1Ymxpc2hlcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQgPSBwdWJsaXNoZXJDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5PZmZsaW5lO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcignc2VuZG9ubHknKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHwgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPiAwKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQucHVibGlzaCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm5hbWUsIHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlfSkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gUHVibGlzaCBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5tYXBQdWJsaXNoU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZFN0cmVhbSh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYW5zd2VyID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIuc2RwKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nO1xuICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y1B1Ymxpc2hNb25pdG9yID0gbmV3IFJ0Y1B1Ymxpc2hNb25pdG9yKHBlZXJDb25uZWN0aW9uLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjUHVibGlzaE1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICB9LCBzb2Z0UmVzdGFydEludGVydmFsKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBjbGVhclRpbWVvdXQocmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0KSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnIHx8IHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0sIHNvZnRSZXN0YXJ0SW50ZXJ2YWwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gY2xlYXJUaW1lb3V0KHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogUHVibGlzaGVyU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaGFubmVsU3RhdGV9IGZyb20gJy4uL2NoYW5uZWxzJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0xpdmVTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RyZWFtU3RhdGlzdGljcyA9IExpdmVTdHJlYW1pbmcuZ2V0U3RhdHMoKTtcblxuICAgICAgaWYgKHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNikge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzID0gbmV3U3RyZWFtU3RhdGlzdGljcztcbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBsaXZlQmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0YXRpYyBzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odHJhbnNmb3JtOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Piwgc3RyZWFtOiBNZWRpYVN0cmVhbSkge1xuICAgIGNvbnN0IHZpZGVvVHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcblxuICAgIGlmICh2aWRlb1RyYWNrKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybX0pO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogJ3ZpZGVvJ30pO1xuICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgc291cmNlXG4gICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goYXVkaW9UcmFjayA9PiB7XG4gICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGF1ZGlvVHJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMaXZlU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuL0luc2VydGFibGVTdHJlYW1zJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW0sIGNhbmRpZGF0ZXMsIGRpc2NvdmVyeUNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHtzdGF0dXMsIG9wdGlvbnN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBzdHJlYW0gPSBlLnN0cmVhbXNbMF07XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IEluc2VydGFibGVTdHJlYW1zLnNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlLCBzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbnR5cGUgU2hha2FPcHRpb25zID0ge1xuICBhYnI6IHtcbiAgICBkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IG51bWJlcjtcbiAgfTtcbiAgbWFuaWZlc3Q6IHtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBzdHJlYW1pbmc6IHtcbiAgICByZWJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygncnRtcCcpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1NESyBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCA9ICF0aGlzLl9sYXN0UmVsb2FkVGltZSB8fCBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFJlbG9hZFRpbWUgPiBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZDtcblxuICAgIHJldHVybiB0aGlzLl92aWRlb0VsZW1lbnQgJiYgdGhpcy5fcGxheWVyICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGggIT09IDAgJiYgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZElmQWJsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSB0aGF0IHdhcyBhY3RpdmUgZm9yIGF0IGxlYXN0IFslc10gc2Vjb25kcycsIHRoaXMuX3N0cmVhbUlkLCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCAvIDEwMDApO1xuXG4gICAgdGhpcy5fbGFzdFJlbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fU0RLVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19TREtWRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9mdWxsL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
11413
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNQdWJsaXNoTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZnVsbC9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUmVhbFRpbWVQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTGl2ZVN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJTdWJqZWN0IiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiUmVhZE9ubHlTdWJqZWN0IiwiZGV0ZWN0VGFiRm9jdXNDaGFuZ2UiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXQiLCJ2YWx1ZSIsImdldFRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiZGlzcG9zZSIsIl9kaXNwb3NhYmxlcyIsIl90aGlzIiwiaGlkZGVuIiwidmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50IiwiX3R5cGVvZiIsIm1zSGlkZGVuIiwid2Via2l0SGlkZGVuIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImlzRm9yZWdyb3VuZCIsInNldEZvY3VzU3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkIiwiRGlzcG9zYWJsZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzIiwiY2FsbCIsIl90aGlzMiIsIl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImhhc0ZvY3VzIiwiY2xlYXJJbnRlcnZhbCIsIkJyb3dzZXJEZXRlY3RvciIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiaW5jbHVkZXMiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIm1ldGFWYWx1ZSIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZVVSSVBhcmFtZXRlck5hbWUiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsInVuZGVmaW5lZCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiVVJMIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJFcnJvciIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJjYXRjaCIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInByb3RvdHlwZSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsInNldFRpbWVvdXQiLCJQcm9taXNlSGFuZGxlciIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJfcmVmIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJjb25maWd1cmF0aW9uIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdGlzdGljcyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwiZmxvb3IiLCJzc3JjIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImZwcyIsInJvdW5kIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiUnRjUHVibGlzaE1vbml0b3IiLCJwYXJzZWRMb2NhbERlc2NyaXB0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiIsIl9hdmFpbGFibGVUcmFja3MiLCJhdWRpbyIsImlzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1ZpZGVvVHJhY2tFbmFibGVkIiwibGFzdFBhY2tldFNlbnRUaW1lc3RhbXAiLCJieXRlc1NlbnQiLCJwcmV2aW91c0J5dGVzU2VudCIsInBhY2tldHNTZW50IiwicmV0cmFuc21pdHRlZEJ5dGVzU2VudCIsImZpckNvdW50IiwiZnJhbWVIZWlnaHQiLCJmcmFtZVdpZHRoIiwiZnJhbWVzRW5jb2RlZCIsImZyYW1lc1NlbnQiLCJoZWFkZXJCeXRlc1NlbnQiLCJodWdlRnJhbWVzU2VudCIsInBsaUNvdW50IiwicXBTdW0iLCJ0b3RhbEVuY29kZVRpbWUiLCJ0b3RhbEVuY29kZWRCeXRlc1RhcmdldCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInVzZWRDb2RlY0xpbmUiLCJzZHBMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJfaW5oZXJpdHMiLCJfc3VwZXIiLCJfY3JlYXRlU3VwZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJiYXNlVVJMIiwib3JpZ2luIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJEaXNjb3ZlcnlVcmkiLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJpbml0IiwiX2luaXRpYWxpemVkIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsImVuZHNXaXRoIiwiam9pbiIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwiY2hhbm5lbENvbnRleHRPcHRpb25zIiwidGFyZ2V0TGFnIiwidmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImhhc0luc2VydGFibGVTdHJlYW1zIiwiX3Rva2VuQ29udGV4dCIsIlRva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIkNoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJfZXhwb25lbnRpYWxCYWNrb2ZmIiwiRXhwb25lbnRpYWxCYWNrb2ZmIiwiX2NoYW5uZWxTdGFydFRpbWUiLCJfcmVhZE9ubHlWaWRlb0VsZW1lbnQiLCJfcmVhZE9ubHlUb2tlbiIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiY2hhbm5lbERpc3Bvc2FibGVzIiwiX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciIsImhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkIiwicmVuZGVyZXJEaXNwb3NhYmxlcyIsInZpZGVvVGVsZW1ldHJ5IiwiZGF0YXNldCIsIlZpZGVvVGVsZW1ldHJ5Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIkNoYW5uZWxTdGF0ZSIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMiLCJlbGFwc2VkSW5NaWxsaXNlY29uZHMiLCJjaGFubmVsSW5pdGlhbGl6YXRpb24iLCJnZXRUaW1lIiwibGltaXRCaXRyYXRlIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsIkRpbWVuc2lvbiIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwic3RhdHVzIiwidXBkYXRlVGFyZ2V0TGFnIiwiX3N0b3AiLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwiX3Jlc3VtZSIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwicmVzdW1lIiwibXV0ZSIsIm11dGVkIiwidW5tdXRlIiwiX2Rpc3Bvc2UiLCJpc0Rpc3Bvc2VkIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9jYWxsZWU1IiwiX3RoaXM1IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJTdHJlYW1GYWN0b3J5IiwiZmluYWxseSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIkRpc2NvdmVyeSIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiRW5kUG9pbnQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJidWlsZERpc2NvdmVyeVVybCIsInNka1ZlcnNpb24iLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwicHVibGlzaCIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsIl9uYXZpZ2F0b3IiLCJzZW5kQmVhY29uIiwiX3gyMCIsIl94MjEiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDIyIiwiX3gyMyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAiLCJwdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIl94MjQiLCJfeDI1IiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJydGNwTXV4UG9saWN5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MjYiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI3IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWUxMyIsIl9jYWxsZWUxMyQiLCJfY29udGV4dDEzIiwiX3gyOCIsIlB1Ymxpc2hlcnMiLCJQdWJsaXNoZXJTdGF0ZSIsIm9uZUhvdXJJbk1pbGxpc2Vjb25kcyIsIm1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIlB1Ymxpc2hlciIsIl9wdWJsaXNoZXJDb250ZXh0IiwiUHVibGlzaGVyQ29udGV4dCIsIl9wdWJsaXNoZXJTdGFydFRpbWUiLCJfcmVhZE9ubHlQdWJsaXNoaW5nIiwicHVibGlzaGluZyIsInB1Ymxpc2hlckRpc3Bvc2FibGVzIiwic2V0TWVkaWFTdHJlYW0iLCJtZWRpYVRyYWNrIiwic2VuZGVyIiwiX3NlbmRlciR0cmFjayIsInJlcGxhY2VUcmFjayIsInN0cmVhbVB1Ymxpc2hlciIsIlJlYWxUaW1lUHVibGlzaGVyIiwic3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyIsInJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwiLCJwdWJsaXNoZXJJbml0aWFsaXphdGlvbiIsImdlbmVyYXRlU2NyZWVuTmFtZSIsIm1hcFB1Ymxpc2hTdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyIsImNyZWF0ZVB1Ymxpc2hlciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwic29mdFJlc3RhcnRJbnRlcnZhbCIsInB1Ymxpc2hlckNvbnRleHQiLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJvbkxpbmUiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYyJCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsIl9yZWYzIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJfcmVmNCIsInJldHJ5Q2FsbGJhY2siLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsImFuc3dlciIsIl9yZWY1IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyIsInJ0Y1B1Ymxpc2hNb25pdG9yIiwicnRjU3RhdGlzdGljIiwic3RhdGlzdGljcyIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCIsImljZVJlc3RhcnQiLCJvZmZlciIsIkNodW5rZWRTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiTGl2ZVN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIkhsc1BsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsIl9vcHRpb25zIiwiX3BsYXllciIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJzcmMiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsInNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInZpZGVvVHJhY2siLCJnZXRWaWRlb1RyYWNrcyIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsInRyYW5zZm9ybWVkU3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJnZXRBdWRpb1RyYWNrcyIsImF1ZGlvVHJhY2siLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwicGxheWVyT3B0aW9ucyIsImFiciIsImRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZSIsIm1hbmlmZXN0IiwicmV0cnlQYXJhbWV0ZXJzIiwic3RyZWFtaW5nIiwicmVidWZmZXJpbmdHb2FsIiwiYnVmZmVyaW5nR29hbCIsImJ1ZmZlckJlaGluZCIsIm1heEF0dGVtcHRzIiwiYmFja29mZkZhY3RvciIsImxvYWRQbGF5ZXIiLCJlc3RpbWF0ZWRCYW5kd2lkdGgiLCJwbGF5VGltZSIsInVubG9hZCIsInBsYXllckNvbmZpZyIsImNvbmZpZ3VyZSIsImxvYWQiLCJjb2RlIiwiY3JlYXRlIiwidG9rZW5DYXBhYmlsaXRpZXMiLCJiYW5kd2lkdGhUb1N0YXJ0QXQiLCJtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCIsImVycm9yT2JqZWN0IiwiY2FuUmVsb2FkIiwic2V2ZXJpdHkiLCJyZWxvYWRJZkFibGUiLCJpc05hdGl2ZSIsImRlbGl2ZXJ5VHlwZSIsImhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkIiwiX2xhc3RSZWxvYWRUaW1lIiwicmVsb2FkIiwiX19TREtWRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJfdGVsZW1ldHJ5U2VydmljZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7O0FDTnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7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O1FBQWdCLENBQUMsR0FBRy9rQyxTQUFTO1FBQ2xGeUIsUUFBUSxFQUFFLElBQUksQ0FBQzAzQjtNQUNqQixDQUFDLENBQUM7TUFFRixJQUFJLENBQUM0TCxnQkFBZ0IsR0FBR0QsYUFBYTtJQUN2QztFQUFDO0VBQUEsT0FBQXZlLGNBQUE7QUFBQTs7Ozs7OztVQzFNSDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJmdWxsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9ufSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb259KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHVuZGVmaW5lZClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGRpcmVjdGlvbiA9PT0gJ3JlY3Zvbmx5JyA/IHtcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgfSA6IHt9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzTGVnYWN5KCkudGhlbihzdGF0cyA9PiB7XG4gICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnc3NyYyddID0gcmVwb3J0LnN0YXQoJ3NzcmMnKS50b1N0cmluZygpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c0xvc3QnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzTG9zdCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3JvdW5kVHJpcFRpbWUnXSA9IHJvdW5kVHJpcFRpbWU7XG5cbiAgICAgICAgICBpZiAobWVkaWFUeXBlID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNQdWJsaXNoU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNQdWJsaXNoU3RhdGlzdGljIHtcbiAgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA/OiBudW1iZXI7XG4gIHNzcmM6IHN0cmluZztcbiAgbWVkaWFUeXBlOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1NlbnQ6IG51bWJlcjtcbiAgcGFja2V0c1NlbnQ6IG51bWJlcjtcbiAgcmV0cmFuc21pdHRlZEJ5dGVzU2VudD86IG51bWJlcjtcbiAgZmlyQ291bnQ/OiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0PzogbnVtYmVyO1xuICBmcmFtZVdpZHRoPzogbnVtYmVyO1xuICBmcmFtZXNFbmNvZGVkPzogbnVtYmVyO1xuICBmcmFtZXNTZW50PzogbnVtYmVyO1xuICBoZWFkZXJCeXRlc1NlbnQ/OiBudW1iZXI7XG4gIGh1Z2VGcmFtZXNTZW50PzogbnVtYmVyO1xuICBwbGlDb3VudD86IG51bWJlcjtcbiAgcXBTdW0/OiBudW1iZXI7XG4gIHRvdGFsRW5jb2RlVGltZT86IG51bWJlcjtcbiAgdG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQ/OiBudW1iZXI7XG4gIGNvZGVjOiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZTogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjUHVibGlzaE1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX2F2YWlsYWJsZVRyYWNrczoge1xuICAgIGF1ZGlvOiBib29sZWFuO1xuICAgIHZpZGVvOiBib29sZWFuO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgY29uc3QgcGFyc2VkTG9jYWxEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24uc2RwKTtcbiAgICAgIGNvbnN0IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmF1ZGlvQ29kZWM7XG4gICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYztcblxuICAgICAgdGhpcy5fYXZhaWxhYmxlVHJhY2tzID0ge1xuICAgICAgICBhdWRpbzogcGFyc2VkTG9jYWxEZXNjcmlwdGlvbi5pc0F1ZGlvVHJhY2tFbmFibGVkICYmIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmlzQXVkaW9UcmFja0VuYWJsZWQsXG4gICAgICAgIHZpZGVvOiBwYXJzZWRMb2NhbERlc2NyaXB0aW9uLmlzVmlkZW9UcmFja0VuYWJsZWQgJiYgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uaXNWaWRlb1RyYWNrRW5hYmxlZFxuICAgICAgfTtcblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHtcbiAgICAgICAgYXVkaW86IDAsXG4gICAgICAgIHZpZGVvOiAwXG4gICAgICB9O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnb3V0Ym91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX2F2YWlsYWJsZVRyYWNrc1traW5kXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzU2VudCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNTZW50ID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzU2VudCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNTZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzU2VudDogcmVwb3J0LmJ5dGVzU2VudCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNTZW50OiByZXBvcnQucGFja2V0c1NlbnQsXG4gICAgICAgICAgICAgICAgICByZXRyYW5zbWl0dGVkQnl0ZXNTZW50OiByZXBvcnQucmV0cmFuc21pdHRlZEJ5dGVzU2VudCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wIHx8IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wIHx8IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZpckNvdW50J10gPSByZXBvcnQuZmlyQ291bnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZUhlaWdodCddID0gcmVwb3J0LmZyYW1lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVXaWR0aCddID0gcmVwb3J0LmZyYW1lV2lkdGg7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNFbmNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRW5jb2RlZDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc1NlbnQnXSA9IHJlcG9ydC5mcmFtZXNTZW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnaGVhZGVyQnl0ZXNTZW50J10gPSByZXBvcnQuaGVhZGVyQnl0ZXNTZW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnaHVnZUZyYW1lc1NlbnQnXSA9IHJlcG9ydC5odWdlRnJhbWVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3BsaUNvdW50J10gPSByZXBvcnQucGxpQ291bnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydxcFN1bSddID0gcmVwb3J0LnFwU3VtO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsndG90YWxFbmNvZGVUaW1lJ10gPSByZXBvcnQudG90YWxFbmNvZGVUaW1lO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsndG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQnXSA9IHJlcG9ydC50b3RhbEVuY29kZWRCeXRlc1RhcmdldDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNFbmNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0VuY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCwge0lTdHJlYW1UcmFja1RyYW5zZm9ybSwgQ2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJylcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgbWlzc2luZyBjYWxsYmFjayBmdW5jdGlvbiBDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUGF1c2VkLFxuICBQbGF5aW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0YW5kQnksXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIEVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2tcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gIChjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPighIW9wdGlvbnM/Lmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFsndXBsb2FkJ10sXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2ljZVNlcnZlcnM6IFtdfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSBjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIHVybHM6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9IGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5O1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9IGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjQ29uZmlndXJhdGlvbjtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBQdWJsaXNoZXJzIGZyb20gJy4uL3B1Ymxpc2gvUHVibGlzaGVycyc7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi4vcHVibGlzaC9QdWJsaXNoZXJTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZSxcbiAgUHVibGlzaGVycyxcbiAgUHVibGlzaGVyU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlLFxuICBQdWJsaXNoZXJzLFxuICBQdWJsaXNoZXJTdGF0ZVxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBQdWJsaXNoZXJDb250ZXh0IGZyb20gJy4vUHVibGlzaGVyQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBSZWFsVGltZVB1Ymxpc2hlciBmcm9tICcuL1JlYWxUaW1lUHVibGlzaGVyJztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcbmNvbnN0IG9uZUhvdXJJbk1pbGxpc2Vjb25kcyA9IDM2MDAgKiAxMDAwO1xuY29uc3QgbWF4UmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMiAqIG9uZUhvdXJJbk1pbGxpc2Vjb25kcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVyIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUHVibGlzaGVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQdWJsaXNoaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuXG4gIGNvbnN0cnVjdG9yKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0ID0gbmV3IFB1Ymxpc2hlckNvbnRleHQobmFtZSk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0YXRlQ29udGV4dCA9IG5ldyBTdGF0ZUNvbnRleHQoKTtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gICAgdGhpcy5fcHVibGlzaGVyU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQdWJsaXNoaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8UHVibGlzaGVyU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcHVibGlzaGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVB1Ymxpc2hpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLmNsb3NlKCk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHNldE1lZGlhU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaChtZWRpYVRyYWNrID0+IHtcbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLmdldFNlbmRlcnMoKS5mb3JFYWNoKHNlbmRlciA9PiB7XG4gICAgICAgICAgaWYgKG1lZGlhVHJhY2sua2luZCA9PT0gc2VuZGVyPy50cmFjaz8ua2luZCAmJiBtZWRpYVRyYWNrLmlkICE9PSBzZW5kZXIudHJhY2suaWQpIHtcbiAgICAgICAgICAgIHNlbmRlci5yZXBsYWNlVHJhY2sobWVkaWFUcmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QdWJsaXNoZXIgPSBuZXcgUmVhbFRpbWVQdWJsaXNoZXIodGhpcy5fcHVibGlzaGVyQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHN0cmVhbVB1Ymxpc2hlci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgcHVibGlzaGluZycsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzID0gMDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwgPSAwO1xuXG4gICAgc3dpdGNoICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc6XG4gICAgICAgIGlmICghdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwgPSBEYXRlLm5vdygpIC0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIGlmIChtYXhSZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsSW5NaWxsaXNlY29uZHMgPD0gcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10gWyVzXSBhZnRlciBleGNlZWRpbmcgdGltZW91dCcsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUsIFB1Ymxpc2hlclN0YXRlW3RoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSwgUHVibGlzaGVyU3RhdGVbdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBwdWJsaXNoaW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIGNoYW5uZWwgbm90IGZvdW5kLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7UHVibGlzaFN0YXR1c30gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCB7SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjUHVibGlzaE1vbml0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJDb250ZXh0IHtcbiAgcHVibGlzaGVySW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcHVibGlzaGVyRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBzdGF0ZTogU3ViamVjdDxQdWJsaXNoZXJTdGF0ZT47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGlzaGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz47XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuICBzdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucHVibGlzaGVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnB1Ymxpc2hlckluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8UHVibGlzaGVyU3RhdGU+KFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnB1Ymxpc2hpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSAmJiBuYW1lLmxlbmd0aCA/IG5hbWUgOiB0aGlzLmdlbmVyYXRlU2NyZWVuTmFtZSgpO1xuICAgIHRoaXMuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyA9IDA7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFB1Ymxpc2hTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1czogUHVibGlzaFN0YXR1cyk6IFB1Ymxpc2hlclN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlU2NyZWVuTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmdzLnJhbmRvbSgxMik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gUHVibGlzaGVyU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFB1Ymxpc2hpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIE5vdEZvdW5kLFxuICBFcnJvclxufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoZXJTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBQdWJsaXNoZXIgZnJvbSAnLi9QdWJsaXNoZXInO1xuXG50eXBlIENyZWF0ZVB1Ymxpc2hlck9wdGlvbnMgPSB7XG4gIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbTtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJzIHtcbiAgc3RhdGljIGNyZWF0ZVB1Ymxpc2hlcihvcHRpb25zOiBDcmVhdGVQdWJsaXNoZXJPcHRpb25zKTogUHVibGlzaGVyIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFB1Ymxpc2hlcihvcHRpb25zLm1lZGlhU3RyZWFtLCBvcHRpb25zLnRva2VuLCBvcHRpb25zLm5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1B1Ymxpc2hlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgUnRjUHVibGlzaE1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y1B1Ymxpc2hNb25pdG9yJztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IFB1Ymxpc2hlckNvbnRleHQgZnJvbSAnLi9QdWJsaXNoZXJDb250ZXh0JztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBzb2Z0UmVzdGFydEludGVydmFsID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVQdWJsaXNoZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVQdWJsaXNoZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IocHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0ID0gcHVibGlzaGVyQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuT2ZmbGluZTtcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3NlbmRvbmx5JylcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID4gMCkge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnB1Ymxpc2godGhpcy5fcHVibGlzaGVyQ29udGV4dC5uYW1lLCB0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZX0pID0+IHtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFB1Ymxpc2ggY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRTdHJlYW0odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgYW5zd2VyLnNkcCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLnNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbSwgYW5zd2VyKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCh7c3RhdHVzLCBzZXNzaW9uRGVzY3JpcHRpb259KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZztcbiAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNQdWJsaXNoTW9uaXRvciA9IG5ldyBSdGNQdWJsaXNoTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcbiAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHJ0Y1B1Ymxpc2hNb25pdG9yLnJ0Y1N0YXRpc3RpYy5zdWJzY3JpYmUoc3RhdGlzdGljcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICBjb25zdCByZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgfSwgc29mdFJlc3RhcnRJbnRlcnZhbCk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gY2xlYXJUaW1lb3V0KHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCkpKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnZGlzY29ubmVjdGVkJyB8fCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9LCBzb2Z0UmVzdGFydEludGVydmFsKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IGNsZWFyVGltZW91dChyZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQpKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IFB1Ymxpc2hlclN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdMaXZlU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBMaXZlU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyICYmIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odHJhbnNmb3JtOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIHN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICBjb25zdCB2aWRlb1RyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG5cbiAgICBpZiAodmlkZW9UcmFjaykge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm19KTtcbiAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6ICd2aWRlbyd9KTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgIHNvdXJjZVxuICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG5cbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGF1ZGlvVHJhY2sgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhhdWRpb1RyYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdTREsgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvZnVsbC9pbmRleC50c1wiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|