@phenixrts/sdk 2023.2.17 → 2023.2.18-beta.136
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 +226 -357
- package/channels/debug/package.json +1 -1
- package/channels/debug.private/channels.js +221 -348
- package/channels/debug.private/package.json +1 -1
- package/channels/es5.debug.private/channels.js +221 -348
- 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 +257 -416
- package/full/debug/package.json +1 -1
- package/full/debug.private/full.js +252 -407
- 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 +158 -300
- package/publish/debug.private/package.json +1 -1
- package/publish/debug.private/publish.js +158 -300
- 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/sdk/transformation/EncodedStreamSink.d.ts +1 -1
- package/types/sdk/transformation/InsertableStreams.d.ts +1 -1
|
@@ -2835,7 +2835,7 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
|
|
|
2835
2835
|
|
|
2836
2836
|
var requestSizeLimit = 1024;
|
|
2837
2837
|
var maxBufferedRecords = 2048;
|
|
2838
|
-
var MetricsService = /*#__PURE__*/function () {
|
|
2838
|
+
var MetricsService = /*#__PURE__*/function (_sendMetrics, _sendMetricsIfAble) {
|
|
2839
2839
|
function MetricsService(metricsConfiguration) {
|
|
2840
2840
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_2___default()(this, MetricsService);
|
|
2841
2841
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_6__.default.getLogger('MetricsService'));
|
|
@@ -2886,8 +2886,8 @@ var MetricsService = /*#__PURE__*/function () {
|
|
|
2886
2886
|
}
|
|
2887
2887
|
}, {
|
|
2888
2888
|
key: "sendMetrics",
|
|
2889
|
-
value: function () {
|
|
2890
|
-
|
|
2889
|
+
value: function sendMetrics(_x) {
|
|
2890
|
+
return (_sendMetrics = _sendMetrics || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(metricsMessages) {
|
|
2891
2891
|
var formData;
|
|
2892
2892
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
|
|
2893
2893
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -2908,16 +2908,12 @@ var MetricsService = /*#__PURE__*/function () {
|
|
|
2908
2908
|
return _context.stop();
|
|
2909
2909
|
}
|
|
2910
2910
|
}, _callee, this);
|
|
2911
|
-
}));
|
|
2912
|
-
|
|
2913
|
-
return _sendMetrics.apply(this, arguments);
|
|
2914
|
-
}
|
|
2915
|
-
return sendMetrics;
|
|
2916
|
-
}()
|
|
2911
|
+
}))).apply(this, arguments);
|
|
2912
|
+
}
|
|
2917
2913
|
}, {
|
|
2918
2914
|
key: "sendMetricsIfAble",
|
|
2919
|
-
value: function () {
|
|
2920
|
-
|
|
2915
|
+
value: function sendMetricsIfAble() {
|
|
2916
|
+
return (_sendMetricsIfAble = _sendMetricsIfAble || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2() {
|
|
2921
2917
|
var _this = this;
|
|
2922
2918
|
var metricsMessages;
|
|
2923
2919
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee2$(_context2) {
|
|
@@ -2958,12 +2954,8 @@ var MetricsService = /*#__PURE__*/function () {
|
|
|
2958
2954
|
return _context2.stop();
|
|
2959
2955
|
}
|
|
2960
2956
|
}, _callee2, this);
|
|
2961
|
-
}));
|
|
2962
|
-
|
|
2963
|
-
return _sendMetricsIfAble.apply(this, arguments);
|
|
2964
|
-
}
|
|
2965
|
-
return sendMetricsIfAble;
|
|
2966
|
-
}()
|
|
2957
|
+
}))).apply(this, arguments);
|
|
2958
|
+
}
|
|
2967
2959
|
}, {
|
|
2968
2960
|
key: "isResponseStatusCodeRetryable",
|
|
2969
2961
|
value: function isResponseStatusCodeRetryable(_ref) {
|
|
@@ -3441,7 +3433,7 @@ var PromiseHandler = /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0c
|
|
|
3441
3433
|
|
|
3442
3434
|
|
|
3443
3435
|
|
|
3444
|
-
var PeerConnectionService = /*#__PURE__*/function () {
|
|
3436
|
+
var PeerConnectionService = /*#__PURE__*/function (_precacheCreatePeerConnectionOffer, _createPeerConnectionOffer) {
|
|
3445
3437
|
function PeerConnectionService() {
|
|
3446
3438
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, PeerConnectionService);
|
|
3447
3439
|
throw new Error('PeerConnectionService is a static class that may not be instantiated');
|
|
@@ -3462,8 +3454,8 @@ var PeerConnectionService = /*#__PURE__*/function () {
|
|
|
3462
3454
|
}
|
|
3463
3455
|
}, {
|
|
3464
3456
|
key: "precacheCreatePeerConnectionOffer",
|
|
3465
|
-
value: function () {
|
|
3466
|
-
|
|
3457
|
+
value: function precacheCreatePeerConnectionOffer() {
|
|
3458
|
+
return (_precacheCreatePeerConnectionOffer = _precacheCreatePeerConnectionOffer || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
|
|
3467
3459
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
3468
3460
|
while (1) switch (_context.prev = _context.next) {
|
|
3469
3461
|
case 0:
|
|
@@ -3479,16 +3471,13 @@ var PeerConnectionService = /*#__PURE__*/function () {
|
|
|
3479
3471
|
return _context.stop();
|
|
3480
3472
|
}
|
|
3481
3473
|
}, _callee);
|
|
3482
|
-
}));
|
|
3483
|
-
|
|
3484
|
-
return _precacheCreatePeerConnectionOffer.apply(this, arguments);
|
|
3485
|
-
}
|
|
3486
|
-
return precacheCreatePeerConnectionOffer;
|
|
3487
|
-
}()
|
|
3474
|
+
}))).apply(this, arguments);
|
|
3475
|
+
}
|
|
3488
3476
|
}, {
|
|
3489
3477
|
key: "createPeerConnectionOffer",
|
|
3490
|
-
value: function () {
|
|
3491
|
-
|
|
3478
|
+
value: function createPeerConnectionOffer() {
|
|
3479
|
+
return (_createPeerConnectionOffer = _createPeerConnectionOffer || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
|
|
3480
|
+
var _ref;
|
|
3492
3481
|
var direction,
|
|
3493
3482
|
encodedInsertableStreams,
|
|
3494
3483
|
value,
|
|
@@ -3510,8 +3499,8 @@ var PeerConnectionService = /*#__PURE__*/function () {
|
|
|
3510
3499
|
configuration = {
|
|
3511
3500
|
encodedInsertableStreams: encodedInsertableStreams
|
|
3512
3501
|
};
|
|
3513
|
-
return _context3.abrupt("return", PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration).then(
|
|
3514
|
-
|
|
3502
|
+
return _context3.abrupt("return", PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration).then(function (_x) {
|
|
3503
|
+
return (_ref = _ref || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(peerConnection) {
|
|
3515
3504
|
var supportsAddTransceiver, videoTransceiver, audioTransceiver, options;
|
|
3516
3505
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
|
|
3517
3506
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -3559,22 +3548,15 @@ var PeerConnectionService = /*#__PURE__*/function () {
|
|
|
3559
3548
|
return _context2.stop();
|
|
3560
3549
|
}
|
|
3561
3550
|
}, _callee2);
|
|
3562
|
-
}));
|
|
3563
|
-
|
|
3564
|
-
return _ref.apply(this, arguments);
|
|
3565
|
-
};
|
|
3566
|
-
}()));
|
|
3551
|
+
}))).apply(this, arguments);
|
|
3552
|
+
}));
|
|
3567
3553
|
case 8:
|
|
3568
3554
|
case "end":
|
|
3569
3555
|
return _context3.stop();
|
|
3570
3556
|
}
|
|
3571
3557
|
}, _callee3);
|
|
3572
|
-
}));
|
|
3573
|
-
|
|
3574
|
-
return _createPeerConnectionOffer.apply(this, arguments);
|
|
3575
|
-
}
|
|
3576
|
-
return createPeerConnectionOffer;
|
|
3577
|
-
}()
|
|
3558
|
+
}))).apply(this, arguments);
|
|
3559
|
+
}
|
|
3578
3560
|
}]);
|
|
3579
3561
|
return PeerConnectionService;
|
|
3580
3562
|
}();
|
|
@@ -3674,7 +3656,7 @@ var RtcConfigurationManager = /*#__PURE__*/function () {
|
|
|
3674
3656
|
|
|
3675
3657
|
|
|
3676
3658
|
var updateStatisticTimeout = 1000;
|
|
3677
|
-
var RtcPublishMonitor = /*#__PURE__*/function () {
|
|
3659
|
+
var RtcPublishMonitor = /*#__PURE__*/function (_updateStatistic) {
|
|
3678
3660
|
function RtcPublishMonitor(peerConnection, mediaStream, estimatedRoundTripTime) {
|
|
3679
3661
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, RtcPublishMonitor);
|
|
3680
3662
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_estimatedRoundTripTime", void 0);
|
|
@@ -3716,8 +3698,8 @@ var RtcPublishMonitor = /*#__PURE__*/function () {
|
|
|
3716
3698
|
}
|
|
3717
3699
|
}, {
|
|
3718
3700
|
key: "updateStatistic",
|
|
3719
|
-
value: function () {
|
|
3720
|
-
|
|
3701
|
+
value: function updateStatistic() {
|
|
3702
|
+
return (_updateStatistic = _updateStatistic || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
|
|
3721
3703
|
var _this = this;
|
|
3722
3704
|
var _ignored, getKindForSafari11, ignored;
|
|
3723
3705
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
@@ -3825,12 +3807,8 @@ var RtcPublishMonitor = /*#__PURE__*/function () {
|
|
|
3825
3807
|
return _context.stop();
|
|
3826
3808
|
}
|
|
3827
3809
|
}, _callee, this);
|
|
3828
|
-
}));
|
|
3829
|
-
|
|
3830
|
-
return _updateStatistic.apply(this, arguments);
|
|
3831
|
-
}
|
|
3832
|
-
return updateStatistic;
|
|
3833
|
-
}()
|
|
3810
|
+
}))).apply(this, arguments);
|
|
3811
|
+
}
|
|
3834
3812
|
}, {
|
|
3835
3813
|
key: "getCodecByType",
|
|
3836
3814
|
value: function getCodecByType(type) {
|
|
@@ -3968,7 +3946,7 @@ var SdpParser = /*#__PURE__*/function () {
|
|
|
3968
3946
|
*/
|
|
3969
3947
|
|
|
3970
3948
|
|
|
3971
|
-
var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
3949
|
+
var VanillaPeerConnection = /*#__PURE__*/function (_createOffer, _createAnswer, _setLocalDescription, _setRemoteDescription) {
|
|
3972
3950
|
function VanillaPeerConnection(configuration) {
|
|
3973
3951
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, VanillaPeerConnection);
|
|
3974
3952
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_5__.default.getLogger('VanillaPeerConnection'));
|
|
@@ -4026,8 +4004,8 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
|
4026
4004
|
}
|
|
4027
4005
|
}, {
|
|
4028
4006
|
key: "createOffer",
|
|
4029
|
-
value: function () {
|
|
4030
|
-
|
|
4007
|
+
value: function createOffer(_x) {
|
|
4008
|
+
return (_createOffer = _createOffer || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(options) {
|
|
4031
4009
|
var _this = this;
|
|
4032
4010
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
4033
4011
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -4046,16 +4024,12 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
|
4046
4024
|
return _context.stop();
|
|
4047
4025
|
}
|
|
4048
4026
|
}, _callee, this);
|
|
4049
|
-
}));
|
|
4050
|
-
|
|
4051
|
-
return _createOffer.apply(this, arguments);
|
|
4052
|
-
}
|
|
4053
|
-
return createOffer;
|
|
4054
|
-
}()
|
|
4027
|
+
}))).apply(this, arguments);
|
|
4028
|
+
}
|
|
4055
4029
|
}, {
|
|
4056
4030
|
key: "createAnswer",
|
|
4057
|
-
value: function () {
|
|
4058
|
-
|
|
4031
|
+
value: function createAnswer(_x2) {
|
|
4032
|
+
return (_createAnswer = _createAnswer || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(options) {
|
|
4059
4033
|
var _this2 = this;
|
|
4060
4034
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
|
|
4061
4035
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -4074,16 +4048,12 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
|
4074
4048
|
return _context2.stop();
|
|
4075
4049
|
}
|
|
4076
4050
|
}, _callee2, this);
|
|
4077
|
-
}));
|
|
4078
|
-
|
|
4079
|
-
return _createAnswer.apply(this, arguments);
|
|
4080
|
-
}
|
|
4081
|
-
return createAnswer;
|
|
4082
|
-
}()
|
|
4051
|
+
}))).apply(this, arguments);
|
|
4052
|
+
}
|
|
4083
4053
|
}, {
|
|
4084
4054
|
key: "setLocalDescription",
|
|
4085
|
-
value: function () {
|
|
4086
|
-
|
|
4055
|
+
value: function setLocalDescription(_x3) {
|
|
4056
|
+
return (_setLocalDescription = _setLocalDescription || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3(description) {
|
|
4087
4057
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee3$(_context3) {
|
|
4088
4058
|
while (1) switch (_context3.prev = _context3.next) {
|
|
4089
4059
|
case 0:
|
|
@@ -4093,16 +4063,12 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
|
4093
4063
|
return _context3.stop();
|
|
4094
4064
|
}
|
|
4095
4065
|
}, _callee3, this);
|
|
4096
|
-
}));
|
|
4097
|
-
|
|
4098
|
-
return _setLocalDescription.apply(this, arguments);
|
|
4099
|
-
}
|
|
4100
|
-
return setLocalDescription;
|
|
4101
|
-
}()
|
|
4066
|
+
}))).apply(this, arguments);
|
|
4067
|
+
}
|
|
4102
4068
|
}, {
|
|
4103
4069
|
key: "setRemoteDescription",
|
|
4104
|
-
value: function () {
|
|
4105
|
-
|
|
4070
|
+
value: function setRemoteDescription(_x4) {
|
|
4071
|
+
return (_setRemoteDescription = _setRemoteDescription || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4(description) {
|
|
4106
4072
|
var _description$sdp;
|
|
4107
4073
|
var hasCrypto;
|
|
4108
4074
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee4$(_context4) {
|
|
@@ -4118,12 +4084,8 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
|
4118
4084
|
return _context4.stop();
|
|
4119
4085
|
}
|
|
4120
4086
|
}, _callee4, this);
|
|
4121
|
-
}));
|
|
4122
|
-
|
|
4123
|
-
return _setRemoteDescription.apply(this, arguments);
|
|
4124
|
-
}
|
|
4125
|
-
return setRemoteDescription;
|
|
4126
|
-
}()
|
|
4087
|
+
}))).apply(this, arguments);
|
|
4088
|
+
}
|
|
4127
4089
|
}, {
|
|
4128
4090
|
key: "getSenders",
|
|
4129
4091
|
value: function getSenders() {
|
|
@@ -4260,14 +4222,14 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
|
|
|
4260
4222
|
*/
|
|
4261
4223
|
|
|
4262
4224
|
|
|
4263
|
-
var VanillaPeerConnectionFactory = /*#__PURE__*/function () {
|
|
4225
|
+
var VanillaPeerConnectionFactory = /*#__PURE__*/function (_createPeerConnection) {
|
|
4264
4226
|
function VanillaPeerConnectionFactory() {
|
|
4265
4227
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, VanillaPeerConnectionFactory);
|
|
4266
4228
|
}
|
|
4267
4229
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(VanillaPeerConnectionFactory, [{
|
|
4268
4230
|
key: "createPeerConnection",
|
|
4269
|
-
value: function () {
|
|
4270
|
-
|
|
4231
|
+
value: function createPeerConnection(_x) {
|
|
4232
|
+
return (_createPeerConnection = _createPeerConnection || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(configuration) {
|
|
4271
4233
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) {
|
|
4272
4234
|
while (1) switch (_context.prev = _context.next) {
|
|
4273
4235
|
case 0:
|
|
@@ -4277,12 +4239,8 @@ var VanillaPeerConnectionFactory = /*#__PURE__*/function () {
|
|
|
4277
4239
|
return _context.stop();
|
|
4278
4240
|
}
|
|
4279
4241
|
}, _callee);
|
|
4280
|
-
}));
|
|
4281
|
-
|
|
4282
|
-
return _createPeerConnection.apply(this, arguments);
|
|
4283
|
-
}
|
|
4284
|
-
return createPeerConnection;
|
|
4285
|
-
}()
|
|
4242
|
+
}))).apply(this, arguments);
|
|
4243
|
+
}
|
|
4286
4244
|
}]);
|
|
4287
4245
|
return VanillaPeerConnectionFactory;
|
|
4288
4246
|
}();
|
|
@@ -5224,15 +5182,15 @@ var BitrateStateMapping = /*#__PURE__*/function () {
|
|
|
5224
5182
|
|
|
5225
5183
|
|
|
5226
5184
|
var discoveryCacheInterval = 60000;
|
|
5227
|
-
var Discovery = /*#__PURE__*/function () {
|
|
5185
|
+
var Discovery = /*#__PURE__*/function (_precacheClosestEndPointDiscovery, _discoverClosestEndPointWithCaching) {
|
|
5228
5186
|
function Discovery() {
|
|
5229
5187
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, Discovery);
|
|
5230
5188
|
throw new Error('Discovery is a static class that may not be instantiated');
|
|
5231
5189
|
}
|
|
5232
5190
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(Discovery, null, [{
|
|
5233
5191
|
key: "precacheClosestEndPointDiscovery",
|
|
5234
|
-
value: function () {
|
|
5235
|
-
|
|
5192
|
+
value: function precacheClosestEndPointDiscovery() {
|
|
5193
|
+
return (_precacheClosestEndPointDiscovery = _precacheClosestEndPointDiscovery || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
|
|
5236
5194
|
var uri;
|
|
5237
5195
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
5238
5196
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -5244,16 +5202,12 @@ var Discovery = /*#__PURE__*/function () {
|
|
|
5244
5202
|
return _context.stop();
|
|
5245
5203
|
}
|
|
5246
5204
|
}, _callee);
|
|
5247
|
-
}));
|
|
5248
|
-
|
|
5249
|
-
return _precacheClosestEndPointDiscovery.apply(this, arguments);
|
|
5250
|
-
}
|
|
5251
|
-
return precacheClosestEndPointDiscovery;
|
|
5252
|
-
}()
|
|
5205
|
+
}))).apply(this, arguments);
|
|
5206
|
+
}
|
|
5253
5207
|
}, {
|
|
5254
5208
|
key: "discoverClosestEndPointWithCaching",
|
|
5255
|
-
value: function () {
|
|
5256
|
-
|
|
5209
|
+
value: function discoverClosestEndPointWithCaching(_x) {
|
|
5210
|
+
return (_discoverClosestEndPointWithCaching = _discoverClosestEndPointWithCaching || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(uri) {
|
|
5257
5211
|
var url, discoveryService, cachedValue, ignored;
|
|
5258
5212
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
|
|
5259
5213
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -5282,12 +5236,8 @@ var Discovery = /*#__PURE__*/function () {
|
|
|
5282
5236
|
return _context2.stop();
|
|
5283
5237
|
}
|
|
5284
5238
|
}, _callee2);
|
|
5285
|
-
}));
|
|
5286
|
-
|
|
5287
|
-
return _discoverClosestEndPointWithCaching.apply(this, arguments);
|
|
5288
|
-
}
|
|
5289
|
-
return discoverClosestEndPointWithCaching;
|
|
5290
|
-
}()
|
|
5239
|
+
}))).apply(this, arguments);
|
|
5240
|
+
}
|
|
5291
5241
|
}, {
|
|
5292
5242
|
key: "clearCachedClosestEndpoint",
|
|
5293
5243
|
value: function clearCachedClosestEndpoint(uri) {
|
|
@@ -5347,7 +5297,7 @@ var ignored = Discovery.precacheClosestEndPointDiscovery();
|
|
|
5347
5297
|
|
|
5348
5298
|
|
|
5349
5299
|
var defaultTimeout = 20000;
|
|
5350
|
-
var DiscoveryService = /*#__PURE__*/function () {
|
|
5300
|
+
var DiscoveryService = /*#__PURE__*/function (_discoverNearbyEndPoints, _discoverClosestEndPoint) {
|
|
5351
5301
|
function DiscoveryService(uri) {
|
|
5352
5302
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, DiscoveryService);
|
|
5353
5303
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_5__.default.getLogger('Discovery'));
|
|
@@ -5361,8 +5311,8 @@ var DiscoveryService = /*#__PURE__*/function () {
|
|
|
5361
5311
|
}
|
|
5362
5312
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(DiscoveryService, [{
|
|
5363
5313
|
key: "discoverNearbyEndPoints",
|
|
5364
|
-
value: function () {
|
|
5365
|
-
|
|
5314
|
+
value: function discoverNearbyEndPoints(_x, _x2) {
|
|
5315
|
+
return (_discoverNearbyEndPoints = _discoverNearbyEndPoints || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(uri, timeout) {
|
|
5366
5316
|
var url, response, asString, endPoints;
|
|
5367
5317
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
5368
5318
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -5410,16 +5360,12 @@ var DiscoveryService = /*#__PURE__*/function () {
|
|
|
5410
5360
|
return _context.stop();
|
|
5411
5361
|
}
|
|
5412
5362
|
}, _callee);
|
|
5413
|
-
}));
|
|
5414
|
-
|
|
5415
|
-
return _discoverNearbyEndPoints.apply(this, arguments);
|
|
5416
|
-
}
|
|
5417
|
-
return discoverNearbyEndPoints;
|
|
5418
|
-
}()
|
|
5363
|
+
}))).apply(this, arguments);
|
|
5364
|
+
}
|
|
5419
5365
|
}, {
|
|
5420
5366
|
key: "discoverClosestEndPoint",
|
|
5421
|
-
value: function () {
|
|
5422
|
-
|
|
5367
|
+
value: function discoverClosestEndPoint() {
|
|
5368
|
+
return (_discoverClosestEndPoint = _discoverClosestEndPoint || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
|
|
5423
5369
|
var _this = this;
|
|
5424
5370
|
var timeout,
|
|
5425
5371
|
url,
|
|
@@ -5474,12 +5420,8 @@ var DiscoveryService = /*#__PURE__*/function () {
|
|
|
5474
5420
|
return _context2.stop();
|
|
5475
5421
|
}
|
|
5476
5422
|
}, _callee2, this);
|
|
5477
|
-
}));
|
|
5478
|
-
|
|
5479
|
-
return _discoverClosestEndPoint.apply(this, arguments);
|
|
5480
|
-
}
|
|
5481
|
-
return discoverClosestEndPoint;
|
|
5482
|
-
}()
|
|
5423
|
+
}))).apply(this, arguments);
|
|
5424
|
+
}
|
|
5483
5425
|
}]);
|
|
5484
5426
|
return DiscoveryService;
|
|
5485
5427
|
}();
|
|
@@ -5593,7 +5535,7 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
|
|
|
5593
5535
|
|
|
5594
5536
|
|
|
5595
5537
|
var apiVersion = 7;
|
|
5596
|
-
var EndPoint = /*#__PURE__*/function () {
|
|
5538
|
+
var EndPoint = /*#__PURE__*/function (_ping, _subscribe, _publish, _setRemoteDescription, _limitBitrate, _addIceCandidates, _destroyStream, _destroyStreamOnUnmount, _convertHttpResponseToSubscribeResponse, _convertHttpResponseToPublishResponse, _convertHttpResponseToSetRemoteDescriptionResponse, _convertHttpResponseToAddIceCandidatesResponse, _convertHttpResponseToDestroyStreamResponse) {
|
|
5597
5539
|
function EndPoint(uri, timeout) {
|
|
5598
5540
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_2___default()(this, EndPoint);
|
|
5599
5541
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_6__.default.getLogger('EndPoint'));
|
|
@@ -5618,8 +5560,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
5618
5560
|
}
|
|
5619
5561
|
}, {
|
|
5620
5562
|
key: "ping",
|
|
5621
|
-
value: function () {
|
|
5622
|
-
|
|
5563
|
+
value: function ping() {
|
|
5564
|
+
return (_ping = _ping || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee() {
|
|
5623
5565
|
var _this = this;
|
|
5624
5566
|
var url, start, response, finished;
|
|
5625
5567
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
|
|
@@ -5652,16 +5594,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
5652
5594
|
return _context.stop();
|
|
5653
5595
|
}
|
|
5654
5596
|
}, _callee, this);
|
|
5655
|
-
}));
|
|
5656
|
-
|
|
5657
|
-
return _ping.apply(this, arguments);
|
|
5658
|
-
}
|
|
5659
|
-
return ping;
|
|
5660
|
-
}()
|
|
5597
|
+
}))).apply(this, arguments);
|
|
5598
|
+
}
|
|
5661
5599
|
}, {
|
|
5662
5600
|
key: "subscribe",
|
|
5663
|
-
value: function () {
|
|
5664
|
-
|
|
5601
|
+
value: function subscribe(_x, _x2, _x3) {
|
|
5602
|
+
return (_subscribe = _subscribe || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2(token, localSessionDescription, failureCount) {
|
|
5665
5603
|
var _this2 = this;
|
|
5666
5604
|
var tenancy, url, formData, clientVersion, bodyWithOffer, bodyWithoutOffer, start, httpResponse, timeout, status, finished, subscribeResponse;
|
|
5667
5605
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee2$(_context2) {
|
|
@@ -5764,16 +5702,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
5764
5702
|
return _context2.stop();
|
|
5765
5703
|
}
|
|
5766
5704
|
}, _callee2, this, [[9, 16]]);
|
|
5767
|
-
}));
|
|
5768
|
-
|
|
5769
|
-
return _subscribe.apply(this, arguments);
|
|
5770
|
-
}
|
|
5771
|
-
return subscribe;
|
|
5772
|
-
}()
|
|
5705
|
+
}))).apply(this, arguments);
|
|
5706
|
+
}
|
|
5773
5707
|
}, {
|
|
5774
5708
|
key: "publish",
|
|
5775
|
-
value: function () {
|
|
5776
|
-
|
|
5709
|
+
value: function publish(_x4, _x5, _x6, _x7) {
|
|
5710
|
+
return (_publish = _publish || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee3(name, token, localSessionDescription, failureCount) {
|
|
5777
5711
|
var _this3 = this;
|
|
5778
5712
|
var tenancy, url, formData, clientVersion, bodyWithOffer, bodyWithoutOffer, start, httpResponse, timeout, status, finished, subscribeResponse;
|
|
5779
5713
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee3$(_context3) {
|
|
@@ -5880,16 +5814,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
5880
5814
|
return _context3.stop();
|
|
5881
5815
|
}
|
|
5882
5816
|
}, _callee3, this, [[9, 16]]);
|
|
5883
|
-
}));
|
|
5884
|
-
|
|
5885
|
-
return _publish.apply(this, arguments);
|
|
5886
|
-
}
|
|
5887
|
-
return publish;
|
|
5888
|
-
}()
|
|
5817
|
+
}))).apply(this, arguments);
|
|
5818
|
+
}
|
|
5889
5819
|
}, {
|
|
5890
5820
|
key: "setRemoteDescription",
|
|
5891
|
-
value: function () {
|
|
5892
|
-
|
|
5821
|
+
value: function setRemoteDescription(_x8, _x9) {
|
|
5822
|
+
return (_setRemoteDescription = _setRemoteDescription || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee4(stream, sessionDescription) {
|
|
5893
5823
|
var _this4 = this;
|
|
5894
5824
|
var url, formData, body, start, httpResponse, timeout, status, finished, setRemoteDescriptionResponse;
|
|
5895
5825
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee4$(_context4) {
|
|
@@ -5958,16 +5888,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
5958
5888
|
return _context4.stop();
|
|
5959
5889
|
}
|
|
5960
5890
|
}, _callee4, this, [[5, 12]]);
|
|
5961
|
-
}));
|
|
5962
|
-
|
|
5963
|
-
return _setRemoteDescription.apply(this, arguments);
|
|
5964
|
-
}
|
|
5965
|
-
return setRemoteDescription;
|
|
5966
|
-
}()
|
|
5891
|
+
}))).apply(this, arguments);
|
|
5892
|
+
}
|
|
5967
5893
|
}, {
|
|
5968
5894
|
key: "limitBitrate",
|
|
5969
|
-
value: function () {
|
|
5970
|
-
|
|
5895
|
+
value: function limitBitrate(_x10, _x11, _x12, _x13, _x14) {
|
|
5896
|
+
return (_limitBitrate = _limitBitrate || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee5(stream, elapsedInMilliseconds, bitrateInBitsPerSecond, bitrateState, bitrateMode) {
|
|
5971
5897
|
var _this5 = this;
|
|
5972
5898
|
var url, formData, body, start, httpResponse, timeout, status, finished;
|
|
5973
5899
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee5$(_context5) {
|
|
@@ -6026,16 +5952,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6026
5952
|
return _context5.stop();
|
|
6027
5953
|
}
|
|
6028
5954
|
}, _callee5, this, [[5, 12]]);
|
|
6029
|
-
}));
|
|
6030
|
-
|
|
6031
|
-
return _limitBitrate.apply(this, arguments);
|
|
6032
|
-
}
|
|
6033
|
-
return limitBitrate;
|
|
6034
|
-
}()
|
|
5955
|
+
}))).apply(this, arguments);
|
|
5956
|
+
}
|
|
6035
5957
|
}, {
|
|
6036
5958
|
key: "addIceCandidates",
|
|
6037
|
-
value: function () {
|
|
6038
|
-
|
|
5959
|
+
value: function addIceCandidates(_x15, _x16, _x17) {
|
|
5960
|
+
return (_addIceCandidates = _addIceCandidates || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee6(stream, candidates, discoveryCompleted) {
|
|
6039
5961
|
var _this6 = this;
|
|
6040
5962
|
var options,
|
|
6041
5963
|
url,
|
|
@@ -6114,16 +6036,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6114
6036
|
return _context6.stop();
|
|
6115
6037
|
}
|
|
6116
6038
|
}, _callee6, this, [[6, 13]]);
|
|
6117
|
-
}));
|
|
6118
|
-
|
|
6119
|
-
return _addIceCandidates.apply(this, arguments);
|
|
6120
|
-
}
|
|
6121
|
-
return addIceCandidates;
|
|
6122
|
-
}()
|
|
6039
|
+
}))).apply(this, arguments);
|
|
6040
|
+
}
|
|
6123
6041
|
}, {
|
|
6124
6042
|
key: "destroyStream",
|
|
6125
|
-
value: function () {
|
|
6126
|
-
|
|
6043
|
+
value: function destroyStream(_x18, _x19) {
|
|
6044
|
+
return (_destroyStream = _destroyStream || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee7(stream, reason) {
|
|
6127
6045
|
var _this7 = this;
|
|
6128
6046
|
var url, formData, body, start, httpResponse, timeout, status, finished, destroyStreamResponse;
|
|
6129
6047
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee7$(_context7) {
|
|
@@ -6191,16 +6109,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6191
6109
|
return _context7.stop();
|
|
6192
6110
|
}
|
|
6193
6111
|
}, _callee7, this, [[5, 12]]);
|
|
6194
|
-
}));
|
|
6195
|
-
|
|
6196
|
-
return _destroyStream.apply(this, arguments);
|
|
6197
|
-
}
|
|
6198
|
-
return destroyStream;
|
|
6199
|
-
}()
|
|
6112
|
+
}))).apply(this, arguments);
|
|
6113
|
+
}
|
|
6200
6114
|
}, {
|
|
6201
6115
|
key: "destroyStreamOnUnmount",
|
|
6202
|
-
value: function () {
|
|
6203
|
-
|
|
6116
|
+
value: function destroyStreamOnUnmount(_x20, _x21) {
|
|
6117
|
+
return (_destroyStreamOnUnmount = _destroyStreamOnUnmount || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee8(stream, reason) {
|
|
6204
6118
|
var _navigator;
|
|
6205
6119
|
var ignored, url, formData, body;
|
|
6206
6120
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee8$(_context8) {
|
|
@@ -6224,12 +6138,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6224
6138
|
return _context8.stop();
|
|
6225
6139
|
}
|
|
6226
6140
|
}, _callee8, this);
|
|
6227
|
-
}));
|
|
6228
|
-
|
|
6229
|
-
return _destroyStreamOnUnmount.apply(this, arguments);
|
|
6230
|
-
}
|
|
6231
|
-
return destroyStreamOnUnmount;
|
|
6232
|
-
}()
|
|
6141
|
+
}))).apply(this, arguments);
|
|
6142
|
+
}
|
|
6233
6143
|
}, {
|
|
6234
6144
|
key: "buildUrl",
|
|
6235
6145
|
value: function buildUrl(path) {
|
|
@@ -6394,8 +6304,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6394
6304
|
}
|
|
6395
6305
|
}, {
|
|
6396
6306
|
key: "convertHttpResponseToSubscribeResponse",
|
|
6397
|
-
value: function () {
|
|
6398
|
-
|
|
6307
|
+
value: function convertHttpResponseToSubscribeResponse(_x22, _x23) {
|
|
6308
|
+
return (_convertHttpResponseToSubscribeResponse = _convertHttpResponseToSubscribeResponse || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee9(tenancy, response) {
|
|
6399
6309
|
var data, subscribeResponse;
|
|
6400
6310
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee9$(_context9) {
|
|
6401
6311
|
while (1) switch (_context9.prev = _context9.next) {
|
|
@@ -6439,16 +6349,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6439
6349
|
return _context9.stop();
|
|
6440
6350
|
}
|
|
6441
6351
|
}, _callee9, this);
|
|
6442
|
-
}));
|
|
6443
|
-
|
|
6444
|
-
return _convertHttpResponseToSubscribeResponse.apply(this, arguments);
|
|
6445
|
-
}
|
|
6446
|
-
return convertHttpResponseToSubscribeResponse;
|
|
6447
|
-
}()
|
|
6352
|
+
}))).apply(this, arguments);
|
|
6353
|
+
}
|
|
6448
6354
|
}, {
|
|
6449
6355
|
key: "convertHttpResponseToPublishResponse",
|
|
6450
|
-
value: function () {
|
|
6451
|
-
|
|
6356
|
+
value: function convertHttpResponseToPublishResponse(_x24, _x25) {
|
|
6357
|
+
return (_convertHttpResponseToPublishResponse = _convertHttpResponseToPublishResponse || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee10(tenancy, response) {
|
|
6452
6358
|
var data, publishResponse;
|
|
6453
6359
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee10$(_context10) {
|
|
6454
6360
|
while (1) switch (_context10.prev = _context10.next) {
|
|
@@ -6491,12 +6397,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6491
6397
|
return _context10.stop();
|
|
6492
6398
|
}
|
|
6493
6399
|
}, _callee10, this);
|
|
6494
|
-
}));
|
|
6495
|
-
|
|
6496
|
-
return _convertHttpResponseToPublishResponse.apply(this, arguments);
|
|
6497
|
-
}
|
|
6498
|
-
return convertHttpResponseToPublishResponse;
|
|
6499
|
-
}()
|
|
6400
|
+
}))).apply(this, arguments);
|
|
6401
|
+
}
|
|
6500
6402
|
}, {
|
|
6501
6403
|
key: "convertIRtcConfigurationToRTCConfiguration",
|
|
6502
6404
|
value: function convertIRtcConfigurationToRTCConfiguration(configuration) {
|
|
@@ -6530,8 +6432,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6530
6432
|
}
|
|
6531
6433
|
}, {
|
|
6532
6434
|
key: "convertHttpResponseToSetRemoteDescriptionResponse",
|
|
6533
|
-
value: function () {
|
|
6534
|
-
|
|
6435
|
+
value: function convertHttpResponseToSetRemoteDescriptionResponse(_x26) {
|
|
6436
|
+
return (_convertHttpResponseToSetRemoteDescriptionResponse = _convertHttpResponseToSetRemoteDescriptionResponse || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee11(response) {
|
|
6535
6437
|
var data, setRemoteDescriptionResponse;
|
|
6536
6438
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee11$(_context11) {
|
|
6537
6439
|
while (1) switch (_context11.prev = _context11.next) {
|
|
@@ -6552,16 +6454,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6552
6454
|
return _context11.stop();
|
|
6553
6455
|
}
|
|
6554
6456
|
}, _callee11);
|
|
6555
|
-
}));
|
|
6556
|
-
|
|
6557
|
-
return _convertHttpResponseToSetRemoteDescriptionResponse.apply(this, arguments);
|
|
6558
|
-
}
|
|
6559
|
-
return convertHttpResponseToSetRemoteDescriptionResponse;
|
|
6560
|
-
}()
|
|
6457
|
+
}))).apply(this, arguments);
|
|
6458
|
+
}
|
|
6561
6459
|
}, {
|
|
6562
6460
|
key: "convertHttpResponseToAddIceCandidatesResponse",
|
|
6563
|
-
value: function () {
|
|
6564
|
-
|
|
6461
|
+
value: function convertHttpResponseToAddIceCandidatesResponse(_x27) {
|
|
6462
|
+
return (_convertHttpResponseToAddIceCandidatesResponse = _convertHttpResponseToAddIceCandidatesResponse || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee12(response) {
|
|
6565
6463
|
var data, addIceCandidatesResponse;
|
|
6566
6464
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee12$(_context12) {
|
|
6567
6465
|
while (1) switch (_context12.prev = _context12.next) {
|
|
@@ -6585,16 +6483,12 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6585
6483
|
return _context12.stop();
|
|
6586
6484
|
}
|
|
6587
6485
|
}, _callee12);
|
|
6588
|
-
}));
|
|
6589
|
-
|
|
6590
|
-
return _convertHttpResponseToAddIceCandidatesResponse.apply(this, arguments);
|
|
6591
|
-
}
|
|
6592
|
-
return convertHttpResponseToAddIceCandidatesResponse;
|
|
6593
|
-
}()
|
|
6486
|
+
}))).apply(this, arguments);
|
|
6487
|
+
}
|
|
6594
6488
|
}, {
|
|
6595
6489
|
key: "convertHttpResponseToDestroyStreamResponse",
|
|
6596
|
-
value: function () {
|
|
6597
|
-
|
|
6490
|
+
value: function convertHttpResponseToDestroyStreamResponse(_x28) {
|
|
6491
|
+
return (_convertHttpResponseToDestroyStreamResponse = _convertHttpResponseToDestroyStreamResponse || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee13(response) {
|
|
6598
6492
|
var data, destroyStream;
|
|
6599
6493
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee13$(_context13) {
|
|
6600
6494
|
while (1) switch (_context13.prev = _context13.next) {
|
|
@@ -6612,12 +6506,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6612
6506
|
return _context13.stop();
|
|
6613
6507
|
}
|
|
6614
6508
|
}, _callee13);
|
|
6615
|
-
}));
|
|
6616
|
-
|
|
6617
|
-
return _convertHttpResponseToDestroyStreamResponse.apply(this, arguments);
|
|
6618
|
-
}
|
|
6619
|
-
return convertHttpResponseToDestroyStreamResponse;
|
|
6620
|
-
}()
|
|
6509
|
+
}))).apply(this, arguments);
|
|
6510
|
+
}
|
|
6621
6511
|
}]);
|
|
6622
6512
|
return EndPoint;
|
|
6623
6513
|
}();
|
|
@@ -6697,7 +6587,7 @@ var failureCountCleanUpIntervalInMilliseconds = 3000;
|
|
|
6697
6587
|
var standbyPollingIntervalInMilliseconds = 15000;
|
|
6698
6588
|
var oneHourInMilliseconds = 3600 * 1000;
|
|
6699
6589
|
var maxReconnectingAttemptsIntervalInMilliseconds = 2 * oneHourInMilliseconds;
|
|
6700
|
-
var Publisher = /*#__PURE__*/function () {
|
|
6590
|
+
var Publisher = /*#__PURE__*/function (_stop, _dispose, _start, _processStart, _handleStreamFailure) {
|
|
6701
6591
|
function Publisher(mediaStream, token, name) {
|
|
6702
6592
|
var _this = this;
|
|
6703
6593
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, Publisher);
|
|
@@ -6872,8 +6762,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6872
6762
|
}
|
|
6873
6763
|
}, {
|
|
6874
6764
|
key: "stop",
|
|
6875
|
-
value: function () {
|
|
6876
|
-
|
|
6765
|
+
value: function stop(_x) {
|
|
6766
|
+
return (_stop = _stop || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(reason) {
|
|
6877
6767
|
var _this2 = this;
|
|
6878
6768
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
6879
6769
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -6896,12 +6786,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6896
6786
|
return _context.stop();
|
|
6897
6787
|
}
|
|
6898
6788
|
}, _callee);
|
|
6899
|
-
}));
|
|
6900
|
-
|
|
6901
|
-
return _stop.apply(this, arguments);
|
|
6902
|
-
}
|
|
6903
|
-
return stop;
|
|
6904
|
-
}()
|
|
6789
|
+
}))).apply(this, arguments);
|
|
6790
|
+
}
|
|
6905
6791
|
}, {
|
|
6906
6792
|
key: "processStop",
|
|
6907
6793
|
value: function processStop(reason) {
|
|
@@ -6914,8 +6800,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6914
6800
|
}
|
|
6915
6801
|
}, {
|
|
6916
6802
|
key: "dispose",
|
|
6917
|
-
value: function () {
|
|
6918
|
-
|
|
6803
|
+
value: function dispose() {
|
|
6804
|
+
return (_dispose = _dispose || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
|
|
6919
6805
|
var _this3 = this;
|
|
6920
6806
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
|
|
6921
6807
|
while (1) switch (_context2.prev = _context2.next) {
|
|
@@ -6929,12 +6815,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6929
6815
|
return _context2.stop();
|
|
6930
6816
|
}
|
|
6931
6817
|
}, _callee2, this);
|
|
6932
|
-
}));
|
|
6933
|
-
|
|
6934
|
-
return _dispose.apply(this, arguments);
|
|
6935
|
-
}
|
|
6936
|
-
return dispose;
|
|
6937
|
-
}()
|
|
6818
|
+
}))).apply(this, arguments);
|
|
6819
|
+
}
|
|
6938
6820
|
}, {
|
|
6939
6821
|
key: "getUri",
|
|
6940
6822
|
value: function getUri(token) {
|
|
@@ -6947,8 +6829,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6947
6829
|
}
|
|
6948
6830
|
}, {
|
|
6949
6831
|
key: "start",
|
|
6950
|
-
value: function () {
|
|
6951
|
-
|
|
6832
|
+
value: function start() {
|
|
6833
|
+
return (_start = _start || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
|
|
6952
6834
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee3$(_context3) {
|
|
6953
6835
|
while (1) switch (_context3.prev = _context3.next) {
|
|
6954
6836
|
case 0:
|
|
@@ -6972,12 +6854,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6972
6854
|
return _context3.stop();
|
|
6973
6855
|
}
|
|
6974
6856
|
}, _callee3, this);
|
|
6975
|
-
}));
|
|
6976
|
-
|
|
6977
|
-
return _start.apply(this, arguments);
|
|
6978
|
-
}
|
|
6979
|
-
return start;
|
|
6980
|
-
}()
|
|
6857
|
+
}))).apply(this, arguments);
|
|
6858
|
+
}
|
|
6981
6859
|
}, {
|
|
6982
6860
|
key: "setMediaStream",
|
|
6983
6861
|
value: function setMediaStream(mediaStream) {
|
|
@@ -6996,8 +6874,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
6996
6874
|
}
|
|
6997
6875
|
}, {
|
|
6998
6876
|
key: "processStart",
|
|
6999
|
-
value: function () {
|
|
7000
|
-
|
|
6877
|
+
value: function processStart() {
|
|
6878
|
+
return (_processStart = _processStart || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4() {
|
|
7001
6879
|
var _this5 = this;
|
|
7002
6880
|
var token, listenOnStreamSetup, uri, handleStreamFailureCallback, streamPublisher;
|
|
7003
6881
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee4$(_context4) {
|
|
@@ -7061,12 +6939,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
7061
6939
|
return _context4.stop();
|
|
7062
6940
|
}
|
|
7063
6941
|
}, _callee4, this);
|
|
7064
|
-
}));
|
|
7065
|
-
|
|
7066
|
-
return _processStart.apply(this, arguments);
|
|
7067
|
-
}
|
|
7068
|
-
return processStart;
|
|
7069
|
-
}()
|
|
6942
|
+
}))).apply(this, arguments);
|
|
6943
|
+
}
|
|
7070
6944
|
}, {
|
|
7071
6945
|
key: "getRetryInterval",
|
|
7072
6946
|
value: function getRetryInterval() {
|
|
@@ -7096,8 +6970,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
7096
6970
|
}
|
|
7097
6971
|
}, {
|
|
7098
6972
|
key: "handleStreamFailure",
|
|
7099
|
-
value: function () {
|
|
7100
|
-
|
|
6973
|
+
value: function handleStreamFailure() {
|
|
6974
|
+
return (_handleStreamFailure = _handleStreamFailure || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee5() {
|
|
7101
6975
|
var reconnectingAttemptsInterval;
|
|
7102
6976
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee5$(_context5) {
|
|
7103
6977
|
while (1) switch (_context5.prev = _context5.next) {
|
|
@@ -7156,12 +7030,8 @@ var Publisher = /*#__PURE__*/function () {
|
|
|
7156
7030
|
return _context5.stop();
|
|
7157
7031
|
}
|
|
7158
7032
|
}, _callee5, this);
|
|
7159
|
-
}));
|
|
7160
|
-
|
|
7161
|
-
return _handleStreamFailure.apply(this, arguments);
|
|
7162
|
-
}
|
|
7163
|
-
return handleStreamFailure;
|
|
7164
|
-
}()
|
|
7033
|
+
}))).apply(this, arguments);
|
|
7034
|
+
}
|
|
7165
7035
|
}, {
|
|
7166
7036
|
key: "cleanUpResources",
|
|
7167
7037
|
value: function cleanUpResources() {
|
|
@@ -7485,7 +7355,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
7485
7355
|
|
|
7486
7356
|
var iceCandidateAccumulationInterval = 100;
|
|
7487
7357
|
var softRestartInterval = 1000;
|
|
7488
|
-
var RealTimePublisher = /*#__PURE__*/function () {
|
|
7358
|
+
var RealTimePublisher = /*#__PURE__*/function (_applyRtcConfiguration) {
|
|
7489
7359
|
function RealTimePublisher(publisherContext, peerConnectionContext, handleStreamFailure) {
|
|
7490
7360
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_2___default()(this, RealTimePublisher);
|
|
7491
7361
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_4___default()(this, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_8__.default.getLogger('RealTimePublisher'));
|
|
@@ -7701,8 +7571,8 @@ var RealTimePublisher = /*#__PURE__*/function () {
|
|
|
7701
7571
|
}
|
|
7702
7572
|
}, {
|
|
7703
7573
|
key: "applyRtcConfiguration",
|
|
7704
|
-
value: function () {
|
|
7705
|
-
|
|
7574
|
+
value: function applyRtcConfiguration(_x, _x2) {
|
|
7575
|
+
return (_applyRtcConfiguration = _applyRtcConfiguration || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(optionalPeerConnection, rtcConfiguration) {
|
|
7706
7576
|
var newRtcConfiguration;
|
|
7707
7577
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
|
|
7708
7578
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -7722,12 +7592,8 @@ var RealTimePublisher = /*#__PURE__*/function () {
|
|
|
7722
7592
|
return _context.stop();
|
|
7723
7593
|
}
|
|
7724
7594
|
}, _callee);
|
|
7725
|
-
}));
|
|
7726
|
-
|
|
7727
|
-
return _applyRtcConfiguration.apply(this, arguments);
|
|
7728
|
-
}
|
|
7729
|
-
return applyRtcConfiguration;
|
|
7730
|
-
}()
|
|
7595
|
+
}))).apply(this, arguments);
|
|
7596
|
+
}
|
|
7731
7597
|
}, {
|
|
7732
7598
|
key: "reconnectPeerConnection",
|
|
7733
7599
|
value: function reconnectPeerConnection(peerConnection, retryCallback) {
|
|
@@ -7879,7 +7745,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
7879
7745
|
key: "sdkVersion",
|
|
7880
7746
|
get: function get() {
|
|
7881
7747
|
try {
|
|
7882
|
-
return "2023-
|
|
7748
|
+
return "2023-09-14T19:20:08.023Z (2023.2.18-beta.136)";
|
|
7883
7749
|
} catch (e) {
|
|
7884
7750
|
return this._defaultVersion;
|
|
7885
7751
|
}
|
|
@@ -8059,7 +7925,7 @@ var TelemetryConfiguration = /*#__PURE__*/function () {
|
|
|
8059
7925
|
|
|
8060
7926
|
|
|
8061
7927
|
var requestSizeLimit = 8192;
|
|
8062
|
-
var TelemetryService = /*#__PURE__*/function () {
|
|
7928
|
+
var TelemetryService = /*#__PURE__*/function (_sendLogs, _sendLogsIfAble) {
|
|
8063
7929
|
function TelemetryService(telemetryConfiguration) {
|
|
8064
7930
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, TelemetryService);
|
|
8065
7931
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_telemetryConfiguration", void 0);
|
|
@@ -8091,8 +7957,8 @@ var TelemetryService = /*#__PURE__*/function () {
|
|
|
8091
7957
|
}
|
|
8092
7958
|
}, {
|
|
8093
7959
|
key: "sendLogs",
|
|
8094
|
-
value: function () {
|
|
8095
|
-
|
|
7960
|
+
value: function sendLogs(_x) {
|
|
7961
|
+
return (_sendLogs = _sendLogs || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(logMessages) {
|
|
8096
7962
|
var formData;
|
|
8097
7963
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
|
|
8098
7964
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -8113,16 +7979,12 @@ var TelemetryService = /*#__PURE__*/function () {
|
|
|
8113
7979
|
return _context.stop();
|
|
8114
7980
|
}
|
|
8115
7981
|
}, _callee, this);
|
|
8116
|
-
}));
|
|
8117
|
-
|
|
8118
|
-
return _sendLogs.apply(this, arguments);
|
|
8119
|
-
}
|
|
8120
|
-
return sendLogs;
|
|
8121
|
-
}()
|
|
7982
|
+
}))).apply(this, arguments);
|
|
7983
|
+
}
|
|
8122
7984
|
}, {
|
|
8123
7985
|
key: "sendLogsIfAble",
|
|
8124
|
-
value: function () {
|
|
8125
|
-
|
|
7986
|
+
value: function sendLogsIfAble() {
|
|
7987
|
+
return (_sendLogsIfAble = _sendLogsIfAble || _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
|
|
8126
7988
|
var _this = this;
|
|
8127
7989
|
var numberOfLogsToSend, sizeOfLogsToSend, getLogSize, logMessages;
|
|
8128
7990
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
|
|
@@ -8165,12 +8027,8 @@ var TelemetryService = /*#__PURE__*/function () {
|
|
|
8165
8027
|
return _context2.stop();
|
|
8166
8028
|
}
|
|
8167
8029
|
}, _callee2, this);
|
|
8168
|
-
}));
|
|
8169
|
-
|
|
8170
|
-
return _sendLogsIfAble.apply(this, arguments);
|
|
8171
|
-
}
|
|
8172
|
-
return sendLogsIfAble;
|
|
8173
|
-
}()
|
|
8030
|
+
}))).apply(this, arguments);
|
|
8031
|
+
}
|
|
8174
8032
|
}]);
|
|
8175
8033
|
return TelemetryService;
|
|
8176
8034
|
}();
|
|
@@ -8545,4 +8403,4 @@ var SessionTelemetry = /*#__PURE__*/function () {
|
|
|
8545
8403
|
/******/ })()
|
|
8546
8404
|
;
|
|
8547
8405
|
});
|
|
8548
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9OZXR3b3JrTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlVG9rZW4udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y1B1Ymxpc2hNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1B1Ymxpc2hlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1B1Ymxpc2hlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1JlYWxUaW1lUHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfbmF2aWdhdG9yIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfY2xhc3MiLCJpbmNsdWRlcyIsIlBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIiLCJFcnJvciIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb24iLCJGZWF0dXJlRW5hYmxlbWVudCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwidW5kZWZpbmVkIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJfUlRDUnRwUmVjZWl2ZXIiLCJfUlRDUnRwUmVjZWl2ZXIkcHJvdG8iLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImxvZ2dpbmdMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJtYXhCdWZmZXJlZFJlY29yZHMiLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y1B1Ymxpc2hNb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJwYXJzZWRMb2NhbERlc2NyaXB0aW9uIiwiU2RwUGFyc2VyIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJzZHAiLCJwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsIl9hdmFpbGFibGVUcmFja3MiLCJhdWRpbyIsImlzQXVkaW9UcmFja0VuYWJsZWQiLCJ2aWRlbyIsImlzVmlkZW9UcmFja0VuYWJsZWQiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFNlbnRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNTZW50IiwicHJldmlvdXNCeXRlc1NlbnQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsImZsb29yIiwic3NyYyIsInBhY2tldHNTZW50IiwicmV0cmFuc21pdHRlZEJ5dGVzU2VudCIsImdldENvZGVjQnlUeXBlIiwiZmlyQ291bnQiLCJmcmFtZUhlaWdodCIsImZyYW1lV2lkdGgiLCJmcmFtZXNFbmNvZGVkIiwiZnJhbWVzU2VudCIsImhlYWRlckJ5dGVzU2VudCIsImh1Z2VGcmFtZXNTZW50IiwicGxpQ291bnQiLCJxcFN1bSIsInRvdGFsRW5jb2RlVGltZSIsInRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0IiwiZnBzIiwicm91bmQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsIl9jcmVhdGVPZmZlciIsIl9jcmVhdGVBbnN3ZXIiLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIl94MyIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiZ2V0U2VuZGVycyIsImdldFJlY2VpdmVycyIsInNlbGVjdG9yIiwiZ2V0U3RhdHNMZWdhY3kiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJnZXRUcmFja3MiLCJ0cmFjayIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJTdGF0ZUNvbnRleHQiLCJpc1N0YXJ0aW5nIiwiaXNEaXNwb3NlZCIsIlRva2VuQ29udGV4dCIsInRva2VuRXhwaXJpbmciLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIkRpc2NvdmVyeSIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJtYXAiLCJlbmRQb2ludCIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJzZGtWZXJzaW9uIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsInN0YXJ0IiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJmYWlsdXJlQ291bnQiLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsImZpbmFsbHkiLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzdHJlYW0iLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIl9jYWxsZWU1IiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsIl90aGlzNSIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwibGltaXRCaXRyYXRlIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsIl9jYWxsZWU2IiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsIl90aGlzNiIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJfY2FsbGVlNyIsIl90aGlzNyIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJkZXN0cm95U3RyZWFtIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4Iiwic2VuZEJlYWNvbiIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9jYWxsZWU5IiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwianNvbiIsImxhZyIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIm9uZUhvdXJJbk1pbGxpc2Vjb25kcyIsIm1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIlB1Ymxpc2hlciIsIl90b2tlbkNvbnRleHQiLCJfcHVibGlzaGVyQ29udGV4dCIsIlB1Ymxpc2hlckNvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9wdWJsaXNoZXJTdGFydFRpbWUiLCJfcmVhZE9ubHlUb2tlbiIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UHVibGlzaGluZyIsInB1Ymxpc2hpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJwdWJsaXNoZXJEaXNwb3NhYmxlcyIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIlB1Ymxpc2hlclN0YXRlIiwiZGlzcG9zYWJsZXMiLCJfc3RvcCIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9kaXNwb3NlIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0Iiwic2V0TWVkaWFTdHJlYW0iLCJtZWRpYVRyYWNrIiwic2VuZGVyIiwiX3NlbmRlciR0cmFjayIsInJlcGxhY2VUcmFjayIsIl9wcm9jZXNzU3RhcnQiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUHVibGlzaGVyIiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlJlYWxUaW1lUHVibGlzaGVyIiwic3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsInJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwiLCJwdWJsaXNoZXJJbml0aWFsaXphdGlvbiIsImdlbmVyYXRlU2NyZWVuTmFtZSIsImFwcGx5U3RhdHVzIiwibWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzIiwiUHVibGlzaGVycyIsImNyZWF0ZVB1Ymxpc2hlciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwic29mdFJlc3RhcnRJbnRlcnZhbCIsInB1Ymxpc2hlckNvbnRleHQiLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJvbkxpbmUiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMyQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJhbnN3ZXIiLCJfcmVmNiIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMiLCJydGNQdWJsaXNoTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInN0YXRpc3RpY3MiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfb2JqZWN0U3ByZWFkIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQiLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJfX0JVSUxEX1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIl9zZW5kTG9nc0lmQWJsZSIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwiZHVyYXRpb24iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwib2Zmc2V0IiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwicG93IiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtYXgiLCJtaW4iLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNML0Y7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0g3Rix1QkFBdUIsbUJBQU8sQ0FBQyx3RkFBdUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0poRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7OztBQ05wRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILElBQUksT0FBTztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDOUIvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0w3RixvQkFBb0IsbUJBQU8sQ0FBQyxrRkFBb0I7QUFDaEQ7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsK0JBQStCLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ2xCMUYsb0JBQW9CLG1CQUFPLENBQUMsa0ZBQW9CO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ2Y3RjtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUUseUJBQXlCLFNBQVMsc0JBQXlCO0FBQ2hFO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTjdGLHFCQUFxQixtQkFBTyxDQUFDLG9GQUFxQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDakJ2RjtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFlBQVksa0VBQWtFO0FBQ3JGLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUMzQm5HO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNIOUY7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0hoRyxjQUFjLGlHQUFpQztBQUMvQyw0QkFBNEIsbUJBQU8sQ0FBQyxrR0FBNEI7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7Ozs7QUNWeEcsY0FBYyxpR0FBaUM7QUFDL0M7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLEdBQUcsRUFBRSx5QkFBeUIsU0FBUyxzQkFBeUI7QUFDaEU7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBYTtBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCx5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0Esc0NBQXNDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQy9Takc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUUseUJBQXlCLFNBQVMsc0JBQXlCO0FBQ2hFO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDUDdGLHFCQUFxQixtQkFBTyxDQUFDLG9GQUFxQjtBQUNsRCwyQkFBMkIsbUJBQU8sQ0FBQyxnR0FBMkI7QUFDOUQsaUNBQWlDLG1CQUFPLENBQUMsNEdBQWlDO0FBQzFFLHNCQUFzQixtQkFBTyxDQUFDLHNGQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDUDVGLHdCQUF3QixtQkFBTyxDQUFDLDBGQUF3QjtBQUN4RCxzQkFBc0IsbUJBQU8sQ0FBQyxzRkFBc0I7QUFDcEQsaUNBQWlDLG1CQUFPLENBQUMsNEdBQWlDO0FBQzFFLHdCQUF3QixtQkFBTyxDQUFDLDBGQUF3QjtBQUN4RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDUGhHLGNBQWMsaUdBQWlDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ1gxRixjQUFjLGlHQUFpQztBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyw4RUFBa0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTjVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUcsRUFBRSx5QkFBeUIsU0FBUyxzQkFBeUI7QUFDaEU7QUFDQSwwQkFBMEIseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDVHJGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ1R6Rzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsa0dBQStCO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RBO0FBQ0E7QUFDQTtBQUM0QztBQUNSO0FBQ2dCO0FBQ0E7QUFFcEQsSUFBTUEsbUNBQW1DLEdBQUcsSUFBSTtBQUFDLElBRTVCQywwQkFBMEI7RUFPN0MsU0FBQUEsMkJBQUEsRUFBYztJQUFBQywySUFBQSxPQUFBRCwwQkFBQTtJQUFBRSwySUFBQSx1QkFOa0MsSUFBSUMseURBQWMsQ0FBQyxDQUFDO0lBQUFELDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBLG9DQUd4QkUsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztJQUFBSCwySUFBQTtJQUlwRCxJQUFJLENBQUNJLGFBQWEsR0FBRyxJQUFJQyxnREFBTyxDQUFVLElBQUksQ0FBQztJQUMvQyxJQUFJLENBQUNDLHFCQUFxQixHQUFHLElBQUlDLHdEQUFlLENBQUMsSUFBSSxDQUFDSCxhQUFhLENBQUM7SUFDcEUsSUFBSSxDQUFDSSxvQkFBb0IsQ0FBQyxDQUFDO0VBQzdCO0VBQUNDLHdJQUFBLENBQUFYLDBCQUFBO0lBQUFZLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkM7TUFDM0MsT0FBTyxJQUFJLENBQUNMLHFCQUFxQjtJQUNuQztFQUFDO0lBQUFJLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFDLHVCQUFBLEVBQWlDO01BQy9CLE9BQU9YLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNXLHlCQUF5QjtJQUNwRDtFQUFDO0lBQUFKLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLFFBQUEsRUFBZ0I7TUFDZCxJQUFJLENBQUNDLFlBQVksQ0FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDN0I7RUFBQztJQUFBTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBSixxQkFBQSxFQUFxQztNQUFBLElBQUFTLEtBQUE7TUFDbkMsSUFBSUMsTUFBTTtNQUNWLElBQUlDLGdCQUFnQjtNQUVwQixJQUFJLFFBQU9DLFFBQVEsaUNBQUFDLG1JQUFBLENBQVJELFFBQVEsT0FBSyxRQUFRLEVBQUU7UUFDaEM7TUFDRjs7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBLElBQUksT0FBT0EsUUFBUSxDQUFDRSxRQUFRLEtBQUssV0FBVyxFQUFFO1FBQzVDSixNQUFNLEdBQUcsVUFBVTtRQUNuQkMsZ0JBQWdCLEdBQUcsb0JBQW9CO1FBQ3ZDO01BQ0YsQ0FBQyxNQUFNLElBQUksT0FBT0MsUUFBUSxDQUFDRyxZQUFZLEtBQUssV0FBVyxFQUFFO1FBQ3ZETCxNQUFNLEdBQUcsY0FBYztRQUN2QkMsZ0JBQWdCLEdBQUcsd0JBQXdCO01BQzdDLENBQUMsTUFBTSxJQUFJLE9BQU9DLFFBQVEsQ0FBQ0YsTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUFFO1FBQ25EQSxNQUFNLEdBQUcsUUFBUTtRQUNqQkMsZ0JBQWdCLEdBQUcsa0JBQWtCO01BQ3ZDO01BQ0E7O01BRUEsSUFBTUssc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBQSxFQUFlO1FBQ3pDLElBQU1DLFlBQVksR0FBRyxDQUFDTCxRQUFRLENBQUNGLE1BQU0sQ0FBQztRQUV0Q0QsS0FBSSxDQUFDUyxhQUFhLENBQUNELFlBQVksQ0FBQztNQUNsQyxDQUFDO01BRUQsSUFBSSxPQUFPTCxRQUFRLENBQUNPLGdCQUFnQixLQUFLLFdBQVcsSUFBSSxPQUFPUCxRQUFRLENBQUNGLE1BQU0sQ0FBQyxLQUFLLFdBQVcsRUFBRTtRQUMvRkUsUUFBUSxDQUFDTyxnQkFBZ0IsQ0FBQ1IsZ0JBQWdCLEVBQUVLLHNCQUFzQixFQUFFLEtBQUssQ0FBQztRQUUxRSxJQUFJLENBQUNSLFlBQVksQ0FBQ1ksR0FBRyxDQUFDLElBQUlDLHFEQUFVLENBQUMsWUFBTTtVQUN6Q1QsUUFBUSxDQUFDVSxtQkFBbUIsQ0FBQ1gsZ0JBQWdCLEVBQUVLLHNCQUFzQixFQUFFLEtBQUssQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztNQUNMLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQ08sc0JBQXNCLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDeEM7SUFDRjtFQUFDO0lBQUF0QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbUIsdUJBQUEsRUFBdUM7TUFBQSxJQUFBRSxNQUFBO01BQ3JDLElBQUksQ0FBQ0Msc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDLFlBQU07UUFDckQsSUFBTVgsWUFBWSxHQUFHTCxRQUFRLENBQUNpQixRQUFRLENBQUMsQ0FBQztRQUV4Q0osTUFBSSxDQUFDUCxhQUFhLENBQUNELFlBQVksQ0FBQztNQUNsQyxDQUFDLEVBQUU1QixtQ0FBbUMsQ0FBQztNQUV2QyxJQUFJLENBQUNtQixZQUFZLENBQUNZLEdBQUcsQ0FBQyxJQUFJQyxxREFBVSxDQUFDLFlBQU07UUFDekMsSUFBSUksTUFBSSxDQUFDQyxzQkFBc0IsRUFBRTtVQUMvQkksYUFBYSxDQUFDTCxNQUFJLENBQUNDLHNCQUFzQixDQUFDO1FBQzVDO1FBRUFELE1BQUksQ0FBQ0Msc0JBQXNCLEdBQUcsSUFBSTtNQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMO0VBQUM7SUFBQXhCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFjLGNBQXNCRCxZQUFZLEVBQVE7TUFDeEMsSUFBSSxJQUFJLENBQUNyQixhQUFhLEtBQUtxQixZQUFZLEVBQUU7UUFDdkM7TUFDRjtNQUVBLElBQUksQ0FBQ3JCLGFBQWEsQ0FBQ1EsS0FBSyxHQUFHYSxZQUFZO0lBQ3pDO0VBQUM7RUFBQSxPQUFBM0IsMEJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25HSDtBQUNBO0FBQ0E7QUFGQSxJQUdxQnlDLGVBQWU7RUFBQSxTQUFBQSxnQkFBQTtJQUFBeEMsMklBQUEsT0FBQXdDLGVBQUE7RUFBQTtFQUFBOUIsd0lBQUEsQ0FBQThCLGVBQUE7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQWVsQyxTQUFBQSxJQUFBLEVBQTJDO01BQ3pDLE9BQU80QixlQUFlLENBQUNDLHNCQUFzQjtJQUMvQztFQUFDO0lBQUE5QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU8sSUFBSSxDQUFDOEIsWUFBWTtJQUMxQjtFQUFDO0lBQUEvQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlDO01BQ3ZDLE9BQU8sSUFBSSxDQUFDK0Isb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQWhDLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTzRCLGVBQWUsQ0FBQ0ksV0FBVztJQUNwQztFQUFDO0lBQUFqQyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU80QixlQUFlLENBQUNLLFdBQVc7SUFDcEM7RUFBQztJQUFBbEMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPNEIsZUFBZSxDQUFDTSxXQUFXO0lBQ3BDO0VBQUM7SUFBQW5DLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTzRCLGVBQWUsQ0FBQ08sV0FBVztJQUNwQztFQUFDO0lBQUFwQyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU80QixlQUFlLENBQUNRLFdBQVc7SUFDcEM7RUFBQztJQUFBckMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPNEIsZUFBZSxDQUFDUyxXQUFXO0lBQ3BDO0VBQUM7SUFBQXRDLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTzRCLGVBQWUsQ0FBQ1UsV0FBVztJQUNwQztFQUFDO0lBQUF2QyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU80QixlQUFlLENBQUNXLFdBQVc7SUFDcEM7RUFBQztJQUFBeEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXVDLFNBQUEsRUFBMkI7TUFBQSxJQUFBQyxVQUFBO01BQ3pCLE9BQVEsaURBQWlELENBQUVDLElBQUksRUFBQUQsVUFBQSxHQUFDRSxTQUFTLGNBQUFGLFVBQUEsdUJBQVRBLFVBQUEsQ0FBV0csU0FBUyxDQUFDO0lBQ3ZGO0VBQUM7SUFBQTdDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE0QywyQkFBQSxFQUFvRDtNQUNsRCxJQUFJLENBQUNGLFNBQVMsSUFBSSxDQUFDQSxTQUFTLENBQUNDLFNBQVMsRUFBRTtRQUN0QyxPQUFPLEVBQUU7TUFDWDtNQUVBLElBQU1FLHFCQUFxQixHQUFHSCxTQUFTLENBQUNDLFNBQVMsQ0FBQ0csS0FBSyxDQUFDbkIsZUFBZSxDQUFDb0IsMkJBQTJCLENBQUM7TUFFcEcsSUFBSUYscUJBQXFCLElBQUlBLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JELE9BQU9BLHFCQUFxQixDQUFDLENBQUMsQ0FBQztNQUNqQztNQUVBLE9BQU9sQixlQUFlLENBQUNxQiwrQkFBK0IsQ0FBQyxDQUFDO0lBQzFEO0VBQUM7SUFBQWxELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpRCxpQkFBQSxFQUEwQztNQUN4QyxJQUFJLENBQUN0QixlQUFlLENBQUNDLHNCQUFzQixFQUFFO1FBQzNDLE9BQU8sRUFBRTtNQUNYO01BRUEsSUFBTXNCLGVBQWUsR0FBR3ZCLGVBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QixLQUFLLENBQUMsR0FBRyxDQUFDO01BRXpFLElBQUksQ0FBQ0QsZUFBZSxJQUFJLENBQUNBLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMzQyxPQUFPLEVBQUU7TUFDWDtNQUVBLE9BQU9BLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDM0I7RUFBQztJQUFBcEQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW9ELHlCQUFBLEVBQWtEO01BQ2hELElBQUksQ0FBQ3pCLGVBQWUsQ0FBQ0Msc0JBQXNCLEVBQUU7UUFDM0MsT0FBTyxDQUFDO01BQ1Y7TUFFQSxJQUFNeUIsa0JBQWtCLEdBQUcxQixlQUFlLENBQUNDLHNCQUFzQixDQUFDdUIsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUU1RSxJQUFJLENBQUNFLGtCQUFrQixJQUFJLENBQUNBLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pELE9BQU8sQ0FBQztNQUNWO01BRUEsSUFBTUMsV0FBVyxHQUFHRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFFekMsSUFBSSxDQUFDQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxDQUFDO01BQ1Y7TUFFQSxPQUFPQyxNQUFNLENBQUNELFdBQVcsQ0FBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvQztFQUFDO0lBQUFyRCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ0QsZ0NBQUEsRUFBeUQ7TUFDdkQsSUFBSSxDQUFDTixTQUFTLElBQUksQ0FBQ0EsU0FBUyxDQUFDQyxTQUFTLEVBQUU7UUFDdEMsT0FBTyxFQUFFO01BQ1g7TUFFQSxJQUFNQSxTQUFTLEdBQUdELFNBQVMsQ0FBQ0MsU0FBUztNQUNyQyxJQUFNYSxJQUFJLEdBQUdiLFNBQVMsQ0FBQ2MsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUV2QyxJQUFJRCxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ1o7UUFDQSxhQUFBRSxNQUFBLENBQWFDLFFBQVEsQ0FBQ2hCLFNBQVMsQ0FBQ2lCLFNBQVMsQ0FBQ0osSUFBSSxHQUFHLENBQUMsRUFBRWIsU0FBUyxDQUFDYyxPQUFPLENBQUMsR0FBRyxFQUFFRCxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztNQUN4RjtNQUVBLElBQU1LLE9BQU8sR0FBR2xCLFNBQVMsQ0FBQ2MsT0FBTyxDQUFDLFVBQVUsQ0FBQztNQUU3QyxJQUFJSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ2Y7UUFDQSxJQUFNQyxPQUFPLEdBQUduQixTQUFTLENBQUNjLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFeEMsYUFBQUMsTUFBQSxDQUFhQyxRQUFRLENBQUNoQixTQUFTLENBQUNpQixTQUFTLENBQUNFLE9BQU8sR0FBRyxDQUFDLEVBQUVuQixTQUFTLENBQUNjLE9BQU8sQ0FBQyxHQUFHLEVBQUVLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQzlGO01BRUEsT0FBTyxFQUFFO0lBQ1g7RUFBQztFQUFBLE9BQUFuQyxlQUFBO0FBQUE7QUFBQW9DLE1BQUEsR0F0SWtCcEMsZUFBZTtBQUFBdkMsMklBQUEsQ0FBZnVDLGVBQWUsaUNBQ29CLDRKQUE0SjtBQUFBdkMsMklBQUEsQ0FEL0x1QyxlQUFlLDRCQUVlQSxNQUFlLENBQUNpQiwwQkFBMEIsQ0FBQyxDQUFDO0FBQUF4RCwySUFBQSxDQUYxRXVDLGVBQWUsa0JBR0tBLE1BQWUsQ0FBQ3NCLGdCQUFnQixDQUFDLENBQUM7QUFBQTdELDJJQUFBLENBSHREdUMsZUFBZSwwQkFJYUEsTUFBZSxDQUFDeUIsd0JBQXdCLENBQUMsQ0FBQztBQUFBaEUsMklBQUEsQ0FKdEV1QyxlQUFlLGlCQU1JQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FOaEZ1QyxlQUFlLGlCQU9JQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FQaEZ1QyxlQUFlLGlCQVFJQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FSaEZ1QyxlQUFlLGlCQVNJQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FUaEZ1QyxlQUFlLGlCQVVJQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FWaEZ1QyxlQUFlLGlCQVdJQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FYaEZ1QyxlQUFlLGlCQVlJQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBNUUsMklBQUEsQ0FaaEZ1QyxlQUFlLGlCQWFJQSxNQUFlLENBQUNDLHNCQUFzQixDQUFDb0MsUUFBUSxDQUFDLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hCckc7QUFDQTtBQUNBO0FBQ3NFO0FBQ1g7QUFDSztBQUNWOztBQUV0RDtBQUFBLElBQ3FCQyxpQ0FBaUM7RUFBQSxTQUFBQSxrQ0FBQTtJQUFBOUUsMklBQUEsT0FBQThFLGlDQUFBO0VBQUE7RUFBQXBFLHdJQUFBLENBQUFvRSxpQ0FBQTtJQUFBbkUsR0FBQTtJQUFBRSxLQUFBLEVBQ3BELFNBQUFrRSxlQUFlQyxJQUFZLEVBQVU7TUFDbkMsT0FBTyxJQUFJLENBQUNDLGtCQUFrQixDQUFDRCxJQUFJLENBQUM7SUFDdEM7RUFBQztJQUFBckUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFFLGdCQUFnQkYsSUFBWSxFQUFXO01BQ3JDLE9BQU8sSUFBSSxDQUFDRyxtQkFBbUIsQ0FBQ0gsSUFBSSxDQUFDO0lBQ3ZDO0VBQUM7SUFBQXJFLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkQ7TUFDM0QsT0FBTztRQUNMLHNCQUFzQixFQUFFd0UsOEdBQStELENBQUNDLG9GQUFzQyxDQUFDO1FBQy9ILHNCQUFzQixFQUFFQyxzR0FBeUQsQ0FBQ0MsK0VBQWtDLENBQUM7UUFDckgsOEJBQThCLEVBQUVELHNHQUF5RCxDQUFDQyxzRkFBeUMsQ0FBQztRQUNwSSxnQ0FBZ0MsRUFBRUQsc0dBQXlELENBQUNDLHdGQUEyQyxDQUFDO1FBQ3hJLHNCQUFzQixFQUFFLEVBQUU7UUFDMUIsWUFBWSxFQUFFLEVBQUU7UUFDaEIsaUJBQWlCLEVBQUU7TUFDckIsQ0FBQztJQUNIO0VBQUM7SUFBQTVFLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0Q7TUFDN0QsT0FBTztRQUNMLHVDQUF1QyxFQUFFLElBQUk7UUFDN0MsZ0RBQWdELEVBQUUsSUFBSTtRQUN0RCw0Q0FBNEMsRUFBRSxJQUFJO1FBQ2xELGtEQUFrRCxFQUFFO01BQ3RELENBQUM7SUFDSDtFQUFDO0VBQUEsT0FBQWtFLGlDQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQ0g7QUFDQTtBQUNBO0FBQ2lFO0FBQUEsSUFFNUNVLHVCQUF1QjtFQThCMUMsU0FBQUEsd0JBQUEsRUFBc0I7SUFBQXhGLDJJQUFBLE9BQUF3Rix1QkFBQTtJQUNwQixNQUFNLElBQUlDLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQztFQUMzRjtFQUFDL0Usd0lBQUEsQ0FBQThFLHVCQUFBO0lBQUE3RSxHQUFBO0lBQUFFLEtBQUEsRUEvQkQsU0FBQTZFLHVCQUFBLEVBQXNDO01BQ3BDLElBQUlDLDJHQUF5RCxFQUFFO1FBQzdELElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsQ0FBQztNQUNyQztJQUNGO0VBQUM7SUFBQWpGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErRSw2QkFBQSxFQUFvRDtNQUFBLElBQUExRSxLQUFBO01BQ2xELElBQUl5RSw2RkFBMkMsRUFBRTtRQUMvQ0UsY0FBYyxDQUFDLFlBQU07VUFDbkIzRSxLQUFJLENBQUM0RSx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTTtRQUNMQyxVQUFVLENBQUMsWUFBTTtVQUNmN0UsS0FBSSxDQUFDNEUsdUNBQXVDLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7SUFBQW5GLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpRix3Q0FBQSxFQUErRDtNQUM3RCxJQUFJRSxHQUFHLEdBQUczRSxRQUFRLENBQUM0RSxhQUFhLENBQUMsS0FBSyxDQUFDO01BRXZDRCxHQUFHLENBQUNFLEdBQUcsR0FBRzlELE1BQU0sQ0FBQytELEdBQUcsQ0FBQ0MsZUFBZSxDQUFDLElBQUlDLElBQUksQ0FBQyxDQUFDLElBQUlDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFFTixHQUFHLENBQUNPLE9BQU8sR0FBRyxZQUFXO1FBQ3ZCbkUsTUFBTSxDQUFDK0QsR0FBRyxDQUFDSyxlQUFlLENBQUMsSUFBSSxDQUFDTixHQUFHLENBQUM7UUFFcENGLEdBQUcsR0FBRyxJQUFJO01BQ1osQ0FBQztJQUNIO0VBQUM7RUFBQSxPQUFBUix1QkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQ0g7QUFDQTtBQUNBOztBQUc0QztBQUNSO0FBQ2dCO0FBQUEsSUFFL0JpQixjQUFjO0VBT2pDLFNBQUFBLGVBQUEsRUFBYztJQUFBekcsMklBQUEsT0FBQXlHLGNBQUE7SUFBQXhHLDJJQUFBLHVCQU5rQyxJQUFJQyx5REFBYyxDQUFDLENBQUM7SUFBQUQsMklBQUEsdUJBQ3BDc0QsU0FBUyxJQUFJQSxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQUF0RCwySUFBQSxlQUMzQixJQUFJSyxnREFBTyxDQUFDb0csU0FBUyxDQUFDO0lBQUF6RywySUFBQSx5QkFDWixJQUFJSyxnREFBTyxDQUFDb0csU0FBUyxDQUFDO0lBQUF6RywySUFBQSxzQ0FDVCxJQUFJSyxnREFBTyxDQUFDb0csU0FBUyxDQUFDO0lBR3BGLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsRUFBRTtNQUNyQjtJQUNGO0lBRUEsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztFQUN6QjtFQUFDbkcsd0lBQUEsQ0FBQStGLGNBQUE7SUFBQTlGLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNrRyxZQUFZO0lBQzFCO0VBQUM7SUFBQW5HLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNtRyxJQUFJO0lBQ2xCO0VBQUM7SUFBQXBHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUM7TUFDbkMsT0FBTyxJQUFJLENBQUNvRyxjQUFjO0lBQzVCO0VBQUM7SUFBQXJHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0Q7TUFDaEQsT0FBTyxJQUFJLENBQUNxRywyQkFBMkI7SUFDekM7RUFBQztJQUFBdEcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFxRyw4QkFBQSxFQUFnRDtNQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDUCxXQUFXLEVBQUU7UUFDckIsT0FBTyxDQUFDLENBQUM7TUFDWDtNQUVBLE9BQU9wRCxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM0RCxRQUFRLElBQUk1RCxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM2RCxXQUFXO0lBQ2hGO0VBQUM7SUFBQXpHLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3RyxpQkFBQSxFQUFtQztNQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDVixXQUFXLEVBQUU7UUFDckIsT0FBTyxTQUFTO01BQ2xCO01BRUEsT0FBT3BELFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQytELGFBQWEsSUFBSS9ELFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQ2dFLElBQUk7SUFDOUU7RUFBQztJQUFBNUcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTJHLGlCQUFBLEVBQW1DO01BQ2pDLE9BQU9qRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUNrRSxHQUFHO0lBQ3BDO0VBQUM7SUFBQTlHLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErRiw0QkFBQSxFQUE0QztNQUFBLElBQUExRixLQUFBO01BQzFDLElBQU13RyxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBQSxFQUFlO1FBQzNCeEcsS0FBSSxDQUFDMkYsZ0JBQWdCLENBQUMsQ0FBQztNQUN6QixDQUFDO01BRUR0RCxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMzQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU4RixRQUFRLENBQUM7TUFFNUQsSUFBSSxDQUFDekcsWUFBWSxDQUFDWSxHQUFHLENBQUMsSUFBSUMscURBQVUsQ0FBQyxZQUFNO1FBQ3pDeUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDeEIsbUJBQW1CLENBQUMsUUFBUSxFQUFFMkYsUUFBUSxDQUFDO01BQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0w7RUFBQztJQUFBL0csR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWdHLGlCQUFBLEVBQWlDO01BQy9CLElBQUksQ0FBQ0UsSUFBSSxDQUFDbEcsS0FBSyxHQUFHLElBQUksQ0FBQzJHLGdCQUFnQixDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDUixjQUFjLENBQUNuRyxLQUFLLEdBQUcsSUFBSSxDQUFDd0csZ0JBQWdCLENBQUMsQ0FBQztNQUNuRCxJQUFJLENBQUNKLDJCQUEyQixDQUFDcEcsS0FBSyxHQUFHLElBQUksQ0FBQ3FHLDZCQUE2QixDQUFDLENBQUM7SUFDL0U7RUFBQztFQUFBLE9BQUFULGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRkg7QUFDQTtBQUNBO0FBQ2lEO0FBQ0Y7QUFDTjtBQUVaO0FBQ3VCO0FBRTdDLElBQU1rQixtQkFBbUI7RUFPOUIsU0FBQUEsb0JBQVlDLFlBQW9CLEVBQUU7SUFBQTVILDJJQUFBLE9BQUEySCxtQkFBQTtJQUFBMUgsMklBQUEsa0JBTkU0SCxvRUFBdUIsQ0FBQyxxQkFBcUIsQ0FBQztJQUFBNUgsMklBQUEseUJBQ2hENkgsNERBQWtCO0lBQUE3SCwySUFBQTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQSwyQkFHekIsS0FBSztJQUc5QixJQUFJLENBQUM4SCxVQUFVLEdBQUc1SCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQzRILGFBQWEsR0FBR0osWUFBWTtFQUNuQztFQUFDbEgsd0lBQUEsQ0FBQWlILG1CQUFBO0lBQUFoSCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb0gsUUFBUUMsUUFBUSxFQUFRO01BQ3RCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNDLHdFQUEwQixFQUFFRixRQUFRLENBQUM7SUFDL0Q7RUFBQztJQUFBdkgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXdILEtBQUEsRUFBYTtNQUNYLElBQUksQ0FBQ0Ysa0JBQWtCLENBQUNDLHFFQUF1QixDQUFDO0lBQ2xEO0VBQUM7SUFBQXpILEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzSCxtQkFBMkJHLFVBQXVCLEVBQUVKLFFBQWlCLEVBQVE7TUFDM0UsSUFBSSxJQUFJLENBQUNLLGdCQUFnQixFQUFFO1FBQ3pCO01BQ0Y7TUFFQSxJQUFJLENBQUNBLGdCQUFnQixHQUFHLElBQUk7TUFFNUIsSUFBTW5JLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNb0ksU0FBUyxHQUFHcEksR0FBRyxHQUFHLElBQUksQ0FBQzJILFVBQVU7TUFDdkMsSUFBTVUsVUFBVSxHQUFHLElBQUlDLHdEQUFVLENBQUNKLFVBQVUsQ0FBQyxDQUFDSyxPQUFPLENBQUMsQ0FBQztNQUV2RCxJQUFJLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDO1FBQ3ZCUCxVQUFVLEVBQVZBLFVBQVU7UUFDVlEsT0FBTyxFQUFFLENBQUMxSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxJQUFJLElBQUk7UUFDMUNuSCxLQUFLLEVBQUU7VUFBQ2tJLE1BQU0sRUFBRVA7UUFBUyxDQUFDO1FBQzFCTixRQUFRLEVBQVJBO01BQ0YsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDYyxPQUFPLENBQUNDLElBQUksQ0FDZixzQ0FBc0MsRUFDdEMsSUFBSUMsbURBQVMsQ0FBQzlJLEdBQUcsR0FBRyxJQUFJLENBQUM0SCxhQUFhLENBQUMsQ0FBQ21CLFdBQVcsQ0FBQyxDQUFDLEVBQ3JEakIsUUFBUSxFQUNSTyxVQUFVLEVBQ1YsSUFBSVMsbURBQVMsQ0FBQ1YsU0FBUyxDQUFDLENBQUNXLFdBQVcsQ0FBQyxDQUN2QyxDQUFDO0lBQ0g7RUFBQztFQUFBLE9BQUF4QixtQkFBQTtBQUFBLEk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2REg7QUFDQTtBQUNBO0FBQ29EO0FBRWhCO0FBR3BDLElBQU15QixtQkFBbUIsR0FBRyxTQUFTO0FBQUMsSUFFakJDLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFySiwySUFBQSxPQUFBcUosY0FBQTtFQUFBO0VBQUEzSSx3SUFBQSxDQUFBMkksY0FBQTtJQUFBMUksR0FBQTtJQUFBRSxLQUFBLEVBR2pDLFNBQUF5SSxXQUFrQkMsS0FBdUIsRUFBYTtNQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7UUFDeENGLGNBQWMsQ0FBQ0wsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVGLEtBQUssQ0FBQztRQUU5RCxPQUFPLElBQUlHLCtDQUFTLENBQUMsSUFBSSxDQUFDO01BQzVCO01BRUEsSUFBSTtRQUNGLElBQU1DLFlBQVksR0FBR0MsSUFBSSxDQUFDTCxLQUFLLENBQUNNLE1BQU0sQ0FBQ1QsbUJBQW1CLENBQUNVLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLElBQU1DLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNOLFlBQVksQ0FBQztRQUUxQ0ksU0FBUyxDQUFDUixLQUFLLEdBQUdTLElBQUksQ0FBQ0MsS0FBSyxDQUFDRixTQUFTLENBQUNSLEtBQUssQ0FBQztRQUU3QyxPQUFPLElBQUlHLCtDQUFTLENBQUNLLFNBQVMsQ0FBQztNQUNqQyxDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO1FBQ1ZiLGNBQWMsQ0FBQ0wsT0FBTyxDQUFDUyxLQUFLLENBQUMsMEJBQTBCLEVBQUVTLENBQUMsQ0FBQztRQUUzRCxPQUFPLElBQUlSLCtDQUFTLENBQUMsSUFBSSxDQUFDO01BQzVCO0lBQ0Y7RUFBQztJQUFBL0ksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTJJLHdCQUErQkQsS0FBdUIsRUFBVztNQUMvRCxPQUFPLENBQUMsQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLENBQUNZLFVBQVUsQ0FBQ2YsbUJBQW1CLENBQUM7SUFDekQ7RUFBQztFQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBcEosMklBQUEsQ0ExQmtCb0osY0FBYyxhQUNDeEIsb0VBQXVCLENBQUMsZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1g3RTtBQUNBO0FBQ0E7QUFGQSxJQWFxQjZCLFNBQVM7RUFJNUIsU0FBQUEsVUFBWUssU0FBcUIsRUFBRTtJQUFBLElBQUFLLGdCQUFBLEVBQUFDLGlCQUFBO0lBQUFySywySUFBQSxPQUFBMEosU0FBQTtJQUFBekosMklBQUE7SUFBQUEsMklBQUE7SUFDakMsSUFBSSxDQUFDcUssY0FBYyxHQUFHLENBQUFQLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFUSxhQUFhLEtBQUksRUFBRTtJQUNwRCxJQUFJLENBQUNDLE1BQU0sR0FBRztNQUNaQyxHQUFHLEVBQUVWLFNBQVMsYUFBVEEsU0FBUyxnQkFBQUssZ0JBQUEsR0FBVEwsU0FBUyxDQUFFUixLQUFLLGNBQUFhLGdCQUFBLGVBQWhCQSxnQkFBQSxDQUFrQkssR0FBRyxHQUFHLElBQUl0RSxHQUFHLENBQUM0RCxTQUFTLENBQUNSLEtBQUssQ0FBQ2tCLEdBQUcsQ0FBQyxHQUFHLElBQUk7TUFDaEVDLFlBQVksRUFBRSxDQUFBWCxTQUFTLGFBQVRBLFNBQVMsd0JBQUFNLGlCQUFBLEdBQVROLFNBQVMsQ0FBRVIsS0FBSyxjQUFBYyxpQkFBQSx1QkFBaEJBLGlCQUFBLENBQWtCSyxZQUFZLEtBQUk7SUFDbEQsQ0FBQztFQUNIO0VBQUNoSyx3SUFBQSxDQUFBZ0osU0FBQTtJQUFBL0ksR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQjtNQUNwQixPQUFPLElBQUksQ0FBQzRKLE1BQU0sQ0FBQ0MsR0FBRztJQUN4QjtFQUFDO0lBQUE5SixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTZCO01BQzNCLE9BQU8sSUFBSSxDQUFDNEosTUFBTSxDQUFDRSxZQUFZO0lBQ2pDO0VBQUM7SUFBQS9KLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUMwSixjQUFjO0lBQzVCO0VBQUM7RUFBQSxPQUFBWixTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25DSDtBQUNBO0FBQ0E7QUFGQSxJQWFxQmlCLGFBQWE7RUFBQSxTQUFBQSxjQUFBO0lBQUEzSywySUFBQSxPQUFBMkssYUFBQTtFQUFBO0VBQUFqSyx3SUFBQSxDQUFBaUssYUFBQTtJQUFBaEssR0FBQTtJQUFBQyxHQUFBLEVBTWhDLFNBQUFBLElBQUEsRUFBMEM7TUFDeEMsT0FBTyxJQUFJLENBQUNnSyxvQkFBb0I7SUFDbEM7RUFBQztJQUFBakssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQ2lLLFNBQVM7SUFDdkI7RUFBQztJQUFBbEssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QztNQUMzQyxPQUFPLElBQUksQ0FBQ2tLLFlBQVk7SUFDMUI7RUFBQztJQUFBbkssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxPQUFPLElBQUksQ0FBQ21LLGFBQWE7SUFDM0I7RUFBQztJQUFBcEssR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1LLGNBQUEsRUFBNkI7TUFDM0IsSUFBSTtRQUNGLElBQU1DLFFBQVEsR0FBR0MsNkZBQVk7UUFFN0IsSUFBSSxDQUFDTixvQkFBb0IsR0FBRyxxQkFBcUIsSUFBSUssUUFBUSxHQUFHQSxRQUFRLENBQUNFLG1CQUFtQixHQUFHLElBQUk7UUFDbkcsSUFBSSxDQUFDTixTQUFTLEdBQUcsVUFBVSxJQUFJSSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0csUUFBUSxHQUFHLEtBQUs7UUFDbkUsSUFBSSxDQUFDTixZQUFZLEdBQUcsYUFBYSxJQUFJRyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ksV0FBVyxHQUFHLEtBQUs7UUFDNUUsSUFBSSxDQUFDTixhQUFhLEdBQUcsY0FBYyxJQUFJRSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ssWUFBWSxHQUFHLEtBQUs7TUFDakYsQ0FBQyxDQUFDLE9BQU9wQixDQUFDLEVBQUU7UUFDVixJQUFJLENBQUNVLG9CQUFvQixHQUFHLElBQUk7UUFDaEMsSUFBSSxDQUFDQyxTQUFTLEdBQUcsS0FBSztRQUN0QixJQUFJLENBQUNDLFlBQVksR0FBRyxLQUFLO1FBQ3pCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLEtBQUs7TUFDNUI7SUFDRjtFQUFDO0VBQUEsT0FBQUosYUFBQTtBQUFBO0FBQUExSywySUFBQSxDQXBDa0IwSyxhQUFhO0FBQUExSywySUFBQSxDQUFiMEssYUFBYTtBQUFBMUssMklBQUEsQ0FBYjBLLGFBQWE7QUFBQTFLLDJJQUFBLENBQWIwSyxhQUFhO0FBQUE7QUF1Q2xDQSxhQUFhLENBQUNLLGFBQWEsQ0FBQyxDQUFDLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BEN0I7QUFDQTtBQUNBO0FBQ3FEO0FBQUEsSUFFaENyRixpQkFBaUI7RUFBQSxTQUFBQSxrQkFBQTtJQUFBM0YsMklBQUEsT0FBQTJGLGlCQUFBO0VBQUE7RUFBQWpGLHdJQUFBLENBQUFpRixpQkFBQTtJQUFBaEYsR0FBQTtJQUFBQyxHQUFBLEVBQ3BDLFNBQUFBLElBQUEsRUFBMEM7TUFDeEM7TUFDQSxPQUFPNEIsb0VBQTBCLElBQy9CQSxvRUFBMEIsSUFDMUJBLG9FQUEwQixJQUMxQkEsb0VBQTBCO0lBQzlCO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUM7TUFDQSxPQUFPNEIsb0VBQTBCLElBQy9CQSxvRUFBMEIsSUFDMUJBLG9FQUEwQixJQUMxQkEsb0VBQTBCO0lBQzlCO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTzRCLHFFQUEyQixLQUFLLFFBQVEsSUFBSUEsNkVBQW1DLElBQUksRUFBRTtJQUM5RjtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUUsSUFDMUZBLHFFQUEyQixLQUFLLFNBQVMsSUFBSUEsNkVBQW1DLElBQUksRUFBRTtJQUMxRjtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUUsSUFDMUZBLHFFQUEyQixLQUFLLFNBQVMsSUFBSUEsNkVBQW1DLElBQUksRUFBRTtJQUMxRjtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXFEO01BQ25ELE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUU7SUFDOUY7RUFBQztJQUFBN0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRDtNQUNsRCxPQUFPNEIscUVBQTJCLEtBQUssU0FBUyxJQUFJQSw2RUFBbUMsSUFBSSxFQUFFO0lBQy9GO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUM7TUFDdkMsT0FBTzRCLHFFQUEyQixLQUFLLFFBQVEsSUFDN0NBLHFFQUEyQixLQUFLLGdCQUFnQjtJQUNwRDtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBDO01BQ3hDLE9BQU80QixxRUFBMkIsS0FBSyxJQUFJO0lBQzdDO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEQ7TUFBQSxJQUFBMkssU0FBQTtNQUM1RCxPQUFPL0kscUVBQTJCLEtBQUssUUFBUSxJQUFJLFNBQUErSSxTQUFBLEdBQU9sSyxRQUFRLGNBQUFrSyxTQUFBLHVCQUFSQSxTQUFBLENBQVV0RixhQUFhLE1BQUssVUFBVTtJQUNsRztFQUFDO0lBQUF0RixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUUsSUFDMUZBLHFFQUEyQixLQUFLLFNBQVMsSUFBSUEsNkVBQW1DLElBQUksRUFBRSxJQUN0RkEscUVBQTJCLEtBQUssUUFBUTtJQUM1QztFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQStCO01BQzdCLE9BQU80QixrRUFBd0IsQ0FBQyxDQUFDO0lBQ25DO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTyxFQUFFLE9BQU80Syx5QkFBeUIsS0FBSyxXQUFXLElBQ3ZELE9BQU9DLHlCQUF5QixLQUFLLFdBQVcsQ0FBQztJQUNyRDtFQUFDO0lBQUE5SyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBEO01BQUEsSUFBQThLLGVBQUEsRUFBQUMscUJBQUE7TUFDeEQsT0FBTyxTQUFBRCxlQUFBLEdBQU9FLGNBQWMsY0FBQUYsZUFBQSx3QkFBQUMscUJBQUEsR0FBZEQsZUFBQSxDQUFnQkcsU0FBUyxjQUFBRixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCRyxvQkFBb0IsTUFBSyxXQUFXO0lBQy9FO0VBQUM7RUFBQSxPQUFBbkcsaUJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUVIO0FBQ0E7QUFDQTtBQUZBLElBV3FCb0csVUFBVTtFQUFBLFNBQUFBLFdBQUE7SUFBQS9MLDJJQUFBLE9BQUErTCxVQUFBO0VBQUE7RUFBQXJMLHdJQUFBLENBQUFxTCxVQUFBO0lBQUFwTCxHQUFBO0lBQUFDLEdBQUEsRUFHN0IsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQ29MLG9CQUFvQjtJQUNsQztFQUFDO0lBQUFyTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb0wsZ0JBQUEsRUFBK0I7TUFDN0IsSUFBSTtRQUNGLElBQU1DLFVBQVUsR0FBR0MsMkNBQWM7UUFFakMsSUFBSSxDQUFDSCxvQkFBb0IsR0FBRyxXQUFXLElBQUlFLFVBQVUsR0FBR0EsVUFBVSxDQUFDRSxTQUFTLEdBQUc7VUFBQ0MsVUFBVSxFQUFFO1FBQUUsQ0FBQztNQUNqRyxDQUFDLENBQUMsT0FBT25DLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQzhCLG9CQUFvQixHQUFHO1VBQUNLLFVBQVUsRUFBRTtRQUFFLENBQUM7TUFDOUM7SUFDRjtFQUFDO0VBQUEsT0FBQU4sVUFBQTtBQUFBO0FBQUE5TCwySUFBQSxDQWZrQjhMLFVBQVU7QUFBQTtBQWtCL0JBLFVBQVUsQ0FBQ0UsZUFBZSxDQUFDLENBQUMsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3QjVCO0FBQ0E7QUFDQTtBQUZBLElBS3FCbkssVUFBVTtFQUk3QixTQUFBQSxXQUFZd0ssVUFBc0IsRUFBRTtJQUFBdE0sMklBQUEsT0FBQThCLFVBQUE7SUFBQTdCLDJJQUFBO0lBQUFBLDJJQUFBO0lBQ2xDLElBQUksQ0FBQ3NNLFNBQVMsR0FBRyxLQUFLO0lBQ3RCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixVQUFVO0VBQy9CO0VBQUM1TCx3SUFBQSxDQUFBb0IsVUFBQTtJQUFBbkIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksSUFBSSxDQUFDdUwsU0FBUyxFQUFFO1FBQ2xCO01BQ0Y7TUFFQSxJQUFJLENBQUNBLFNBQVMsR0FBRyxJQUFJO01BRXJCLE9BQU8sSUFBSSxDQUFDQyxXQUFXLENBQUN2SyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3BDO0VBQUM7RUFBQSxPQUFBSCxVQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCSDtBQUNBO0FBQ0E7QUFGQSxJQUtxQjVCLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFGLDJJQUFBLE9BQUFFLGNBQUE7SUFBQUQsMklBQUEsZ0JBQ08sRUFBRTtFQUFBO0VBQUFTLHdJQUFBLENBQUFSLGNBQUE7SUFBQVMsR0FBQTtJQUFBRSxLQUFBLEVBRTFDLFNBQUFnQixJQUFJeUssVUFBdUIsRUFBUTtNQUNqQyxJQUFJLENBQUNHLEtBQUssQ0FBQzVELElBQUksQ0FBQ3lELFVBQVUsQ0FBQztJQUM3QjtFQUFDO0lBQUEzTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxRQUFBLEVBQWdCO01BQ2QsSUFBSSxDQUFDeUwsS0FBSyxDQUFDQyxPQUFPLENBQUMsVUFBQUosVUFBVTtRQUFBLE9BQUlBLFVBQVUsQ0FBQ3RMLE9BQU8sQ0FBQyxDQUFDO01BQUEsRUFBQztNQUN0RCxJQUFJLENBQUN5TCxLQUFLLENBQUMzQyxNQUFNLEdBQUcsQ0FBQztJQUN2QjtFQUFDO0lBQUFuSixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOEwsU0FBQSxFQUFtQjtNQUNqQixxQ0FBQXBJLE1BQUEsQ0FBcUMsSUFBSSxDQUFDa0ksS0FBSyxDQUFDM0MsTUFBTTtJQUN4RDtFQUFDO0VBQUEsT0FBQTVKLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkJIO0FBQ0E7QUFDQTtBQUZBLElBR3FCME0sT0FBTztFQWExQixTQUFBQSxRQUFBLEVBQXNCO0lBQUE1TSwySUFBQSxPQUFBNE0sT0FBQTtJQUNwQixNQUFNLElBQUluSCxLQUFLLENBQUMsd0RBQXdELENBQUM7RUFDM0U7RUFBQy9FLHdJQUFBLENBQUFrTSxPQUFBO0lBQUFqTSxHQUFBO0lBQUFFLEtBQUEsRUFkRCxTQUFBZ00sT0FBYy9DLE1BQWMsRUFBVTtNQUNwQyxJQUFNZ0Qsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFpQjtRQUN2QyxPQUFPQyxJQUFJLENBQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUNGLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQ2xJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ3BELENBQUM7TUFFRCxJQUFNdUksS0FBYSxHQUFHRCxJQUFJLENBQUNFLElBQUksQ0FBQ25ELE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFNUMsT0FBTyxJQUFJb0QsS0FBSyxDQUFDRixLQUFLLENBQUMsQ0FBQ0csSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQyxDQUFDTSxNQUFNLENBQUMsVUFBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUs7UUFDeEUsT0FBT0QsTUFBTSxHQUFHQyxJQUFJLENBQUMsQ0FBQztNQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM3SSxTQUFTLENBQUMsQ0FBQyxFQUFFcUYsTUFBTSxDQUFDO0lBQzdCO0VBQUM7RUFBQSxPQUFBOEMsT0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0FDZEg7QUFDQTtBQUNBO0FBQ08sU0FBU1csaUJBQWlCQSxDQUFDQyxDQUFRLEVBQVM7RUFDakQsTUFBTSxJQUFJL0gsS0FBSyxzQkFBQWxCLE1BQUEsQ0FBc0JpSixDQUFDLG9DQUFpQyxDQUFDO0FBQzFFO0FBRUEsK0RBQWVELGlCQUFpQixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1BoQztBQUNBO0FBQ0E7QUFGQSxJQUtxQkUsU0FBUztFQUFBLFNBQUFBLFVBQUE7SUFBQXpOLDJJQUFBLE9BQUF5TixTQUFBO0lBQUF4TiwySUFBQSxxQkFDVyxFQUFFO0VBQUE7RUFBQVMsd0lBQUEsQ0FBQStNLFNBQUE7SUFBQTlNLEdBQUE7SUFBQUMsR0FBQSxFQUV6QyxTQUFBQSxJQUFBLEVBQThCO01BQzVCLE9BQU8sSUFBSSxDQUFDOE0sVUFBVTtJQUN4QjtFQUFDO0lBQUEvTSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ0IsSUFBSThMLFFBQW1CLEVBQVE7TUFDN0IsSUFBSSxDQUFDRCxVQUFVLENBQUM3RSxJQUFJLENBQUM4RSxRQUFRLENBQUM7SUFDaEM7RUFBQztJQUFBaE4sR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQStNLE9BQU9ELFFBQVEsRUFBUTtNQUNyQixJQUFJLENBQUNELFVBQVUsR0FBRyxJQUFJLENBQUNBLFVBQVUsQ0FBQ04sTUFBTSxDQUFDLFVBQUNTLEtBQUssRUFBRUMsSUFBSSxFQUFLO1FBQ3hELElBQUksRUFBRUEsSUFBSSxLQUFLSCxRQUFRLENBQUMsRUFBRTtVQUN4QkUsS0FBSyxDQUFDaEYsSUFBSSxDQUFDaUYsSUFBSSxDQUFDO1FBQ2xCO1FBRUEsT0FBT0QsS0FBSztNQUNkLENBQUMsRUFBRSxFQUFzQixDQUFDO0lBQzVCO0VBQUM7RUFBQSxPQUFBSixTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Qkg7QUFDQTtBQUNBOztBQUVzQztBQUFBLElBRWpCTSxlQUFlO0VBbUJsQyxTQUFBQSxnQkFBWUMsU0FBdUIsRUFBRTtJQUFBaE8sMklBQUEsT0FBQStOLGVBQUE7SUFBQTlOLDJJQUFBO0lBQ25DLElBQUksQ0FBQ2dPLFVBQVUsR0FBR0QsU0FBUztFQUM3QjtFQUFDdE4sd0lBQUEsQ0FBQXFOLGVBQUE7SUFBQXBOLEdBQUE7SUFBQUUsS0FBQSxFQWxCRCxTQUFBcU4sSUFBSUMsUUFBc0IsRUFBRUMsT0FBZSxFQUFFQyxRQUFnQixFQUFFQyxJQUFVLEVBQVE7TUFDL0UsSUFBSUgsUUFBUSxHQUFHLElBQUksQ0FBQ0YsVUFBVSxFQUFFO1FBQzlCO01BQ0Y7TUFFQSxJQUFNTSxXQUFXLE1BQUFoSyxNQUFBLENBQU0rSixJQUFJLENBQUNFLFdBQVcsQ0FBQyxDQUFDLFFBQUFqSyxNQUFBLENBQUs4SixRQUFRLFNBQUE5SixNQUFBLENBQU1rSyxpREFBWSxDQUFDTixRQUFRLENBQUMsUUFBQTVKLE1BQUEsQ0FBSzZKLE9BQU8sQ0FBRTtNQUVoRyxJQUFJRCxRQUFRLEdBQUdNLHNEQUFpQixFQUFFO1FBQ2hDQyxPQUFPLENBQUNSLEdBQUcsQ0FBQ0ssV0FBVyxDQUFDO1FBRXhCO01BQ0Y7TUFFQUcsT0FBTyxDQUFDakYsS0FBSyxDQUFDOEUsV0FBVyxDQUFDO0lBQzVCO0VBQUM7RUFBQSxPQUFBUixlQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Qkg7QUFDQTtBQUNBO0FBQ0E7O0FBS08sSUFBS1UsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBU3ZCLElBSW9CRSxNQUFNO0VBOEx6QixTQUFBQSxPQUFZTixRQUFnQixFQUFFTyxTQUFvQixFQUFFWixTQUEyQixFQUFFO0lBQUFoTywySUFBQSxPQUFBMk8sTUFBQTtJQUFBMU8sMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDL0UsSUFBSSxDQUFDNE8sU0FBUyxHQUFHUixRQUFRO0lBQ3pCLElBQUksQ0FBQ1gsVUFBVSxHQUFHa0IsU0FBUztJQUMzQixJQUFJLENBQUNYLFVBQVUsR0FBR0QsU0FBUztFQUM3QjtFQUFDdE4sd0lBQUEsQ0FBQWlPLE1BQUE7SUFBQWhPLEdBQUE7SUFBQUMsR0FBQSxFQTdMRCxTQUFBQSxJQUFBLEVBQXVCO01BQ3JCLE9BQU8sSUFBSSxDQUFDaU8sU0FBUztJQUN2QjtFQUFDO0lBQUFsTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJCO01BQ3pCLE9BQU8sSUFBSSxDQUFDOE0sVUFBVTtJQUN4QjtFQUFDO0lBQUEvTSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWtDO01BQ2hDLE9BQU8sSUFBSSxDQUFDcU4sVUFBVTtJQUN4QjtFQUFDO0lBQUF0TixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaU8sTUFBQSxFQUEwQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDYixVQUFVLENBQUNwTixLQUFLLElBQUksSUFBSSxDQUFDb04sVUFBVSxDQUFDcE4sS0FBSyxHQUFHNE4sWUFBWSxDQUFDTSxLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBbkYsTUFBQSxFQUhNb0YsSUFBSSxPQUFBaEMsS0FBQSxDQUFBOEIsSUFBQSxHQUFBRyxJQUFBLE1BQUFBLElBQUEsR0FBQUgsSUFBQSxFQUFBRyxJQUFBO1FBQUpELElBQUksQ0FBQUMsSUFBQSxJQUFBRixTQUFBLENBQUFFLElBQUE7TUFBQTtNQUtYLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ08sWUFBWSxDQUFDTSxLQUFLLEVBQUVHLElBQUksQ0FBQztJQUNwQztFQUFDO0lBQUF2TyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdU8sTUFBQSxFQUEwQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDbkIsVUFBVSxDQUFDcE4sS0FBSyxJQUFJLElBQUksQ0FBQ29OLFVBQVUsQ0FBQ3BOLEtBQUssR0FBRzROLFlBQVksQ0FBQ1ksS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFMLFNBQUEsQ0FBQW5GLE1BQUEsRUFITW9GLElBQUksT0FBQWhDLEtBQUEsQ0FBQW9DLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKTCxJQUFJLENBQUFLLEtBQUEsSUFBQU4sU0FBQSxDQUFBTSxLQUFBO01BQUE7TUFLWCxJQUFJLENBQUNyQixHQUFHLENBQUNPLFlBQVksQ0FBQ1ksS0FBSyxFQUFFSCxJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBdk8sR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW9JLEtBQUEsRUFBeUI7TUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQ2dGLFVBQVUsQ0FBQ3BOLEtBQUssSUFBSSxJQUFJLENBQUNvTixVQUFVLENBQUNwTixLQUFLLEdBQUc0TixZQUFZLENBQUNlLElBQUksRUFBRTtRQUN2RTtNQUNGO01BQUMsU0FBQUMsS0FBQSxHQUFBUixTQUFBLENBQUFuRixNQUFBLEVBSEtvRixJQUFJLE9BQUFoQyxLQUFBLENBQUF1QyxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSlIsSUFBSSxDQUFBUSxLQUFBLElBQUFULFNBQUEsQ0FBQVMsS0FBQTtNQUFBO01BS1YsSUFBSSxDQUFDeEIsR0FBRyxDQUFDTyxZQUFZLENBQUNlLElBQUksRUFBRU4sSUFBSSxDQUFDO0lBQ25DO0VBQUM7SUFBQXZPLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE4TyxLQUFBLEVBQXlCO01BQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMxQixVQUFVLENBQUNwTixLQUFLLElBQUksSUFBSSxDQUFDb04sVUFBVSxDQUFDcE4sS0FBSyxHQUFHNE4sWUFBWSxDQUFDbUIsSUFBSSxFQUFFO1FBQ3ZFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFaLFNBQUEsQ0FBQW5GLE1BQUEsRUFIS29GLElBQUksT0FBQWhDLEtBQUEsQ0FBQTJDLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKWixJQUFJLENBQUFZLEtBQUEsSUFBQWIsU0FBQSxDQUFBYSxLQUFBO01BQUE7TUFLVixJQUFJLENBQUM1QixHQUFHLENBQUNPLFlBQVksQ0FBQ21CLElBQUksRUFBRVYsSUFBSSxDQUFDO0lBQ25DO0VBQUM7SUFBQXZPLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE0SSxNQUFBLEVBQTBCO01BQ3hCLElBQUksQ0FBQyxJQUFJLENBQUN3RSxVQUFVLENBQUNwTixLQUFLLElBQUksSUFBSSxDQUFDb04sVUFBVSxDQUFDcE4sS0FBSyxHQUFHNE4sWUFBWSxDQUFDaEosS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBc0ssS0FBQSxHQUFBZCxTQUFBLENBQUFuRixNQUFBLEVBSE1vRixJQUFJLE9BQUFoQyxLQUFBLENBQUE2QyxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSmQsSUFBSSxDQUFBYyxLQUFBLElBQUFmLFNBQUEsQ0FBQWUsS0FBQTtNQUFBO01BS1gsSUFBSSxDQUFDOUIsR0FBRyxDQUFDTyxZQUFZLENBQUNoSixLQUFLLEVBQUV5SixJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBdk8sR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW9QLE1BQUEsRUFBMEI7TUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQ2hDLFVBQVUsQ0FBQ3BOLEtBQUssSUFBSSxJQUFJLENBQUNvTixVQUFVLENBQUNwTixLQUFLLEdBQUc0TixZQUFZLENBQUN5QixLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUFDLEtBQUEsR0FBQWxCLFNBQUEsQ0FBQW5GLE1BQUEsRUFITW9GLElBQUksT0FBQWhDLEtBQUEsQ0FBQWlELEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKbEIsSUFBSSxDQUFBa0IsS0FBQSxJQUFBbkIsU0FBQSxDQUFBbUIsS0FBQTtNQUFBO01BS1gsSUFBSSxDQUFDbEMsR0FBRyxDQUFDTyxZQUFZLENBQUN5QixLQUFLLEVBQUVoQixJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBdk8sR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFOLElBQVltQyxLQUFhLEVBQUVuQixJQUFTLEVBQVE7TUFBQSxJQUFBaE8sS0FBQTtNQUMxQyxJQUFNb04sSUFBSSxHQUFHLElBQUluTyxJQUFJLENBQUMsQ0FBQztNQUN2QixJQUFNaU8sT0FBTyxHQUFHLElBQUksQ0FBQ2tDLG1CQUFtQixDQUFDcEIsSUFBSSxDQUFDO01BRTlDLElBQUksQ0FBQ3hCLFVBQVUsQ0FBQzdNLEtBQUssQ0FBQzZMLE9BQU8sQ0FBQyxVQUFDaUIsUUFBbUIsRUFBSztRQUNyREEsUUFBUSxDQUFDTyxHQUFHLENBQUNtQyxLQUFLLEVBQUVqQyxPQUFPLEVBQUVsTixLQUFJLENBQUNtTixRQUFRLEVBQUVDLElBQUksQ0FBQztNQUNuRCxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUEzTixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBeVAsb0JBQTRCcEIsSUFBUyxFQUFVO01BQUEsSUFBQWhOLE1BQUE7TUFDN0MsSUFBSXFPLHlCQUF5QixHQUFHckIsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN2QyxJQUFJc0IsS0FBSyxHQUFHLENBQUM7TUFFYixPQUFPRCx5QkFBeUIsQ0FBQ2pNLE9BQU8sSUFBSTRLLElBQUksQ0FBQ3BGLE1BQU0sR0FBRyxDQUFDLElBQUkwRyxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ3pFQSxLQUFLLEdBQUdELHlCQUF5QixDQUFDak0sT0FBTyxDQUFDLEdBQUcsRUFBRWtNLEtBQUssQ0FBQztRQUVyRCxJQUFJQSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1VBQ2IsSUFBTWpKLElBQUksR0FBR2dKLHlCQUF5QixDQUFDOUwsU0FBUyxDQUFDK0wsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHLENBQUMsQ0FBQztVQUV0RSxRQUFRakosSUFBSTtZQUNWLEtBQUssR0FBRztjQUNOO2NBQ0FnSix5QkFBeUIsR0FBR0EseUJBQXlCLENBQUM5TCxTQUFTLENBQUMsQ0FBQyxFQUFFK0wsS0FBSyxDQUFDLEdBQUdELHlCQUF5QixDQUFDOUwsU0FBUyxDQUFDK0wsS0FBSyxHQUFHLENBQUMsQ0FBQztjQUMxSEEsS0FBSyxFQUFFO2NBRVA7WUFDRixLQUFLLEdBQUc7WUFDUixLQUFLLEdBQUc7Y0FDTjtjQUNBdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHcUIseUJBQXlCLEdBQUcsSUFBSSxDQUFDRSxlQUFlLENBQ3hELElBQUksQ0FBQzlELFFBQVEsQ0FBQ3VDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QnFCLHlCQUF5QixFQUN6QkMsS0FDRixDQUFDO2NBQ0R0QixJQUFJLENBQUN3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUVqQjtZQUNGLEtBQUssR0FBRztjQUNOO2NBQ0F4QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdxQix5QkFBeUIsR0FBRyxJQUFJLENBQUNFLGVBQWUsQ0FDeEQsSUFBSSxDQUFDRSxTQUFTLENBQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkJxQix5QkFBeUIsRUFDekJDLEtBQ0YsQ0FBQztjQUVEdEIsSUFBSSxDQUFDd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Y0FFakI7WUFDRjtjQUNFLE9BQU94QixJQUFJLENBQUN2QyxRQUFRLENBQUMsQ0FBQztVQUMxQjtRQUNGO01BQ0Y7TUFFQSxJQUFJdUMsSUFBSSxDQUFDcEYsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQm9GLElBQUksR0FBR0EsSUFBSSxDQUFDOUIsTUFBTSxDQUFDLFVBQUN3RCxXQUFXLEVBQUVDLFlBQVksRUFBRUwsS0FBSyxFQUFFTSxLQUFLLEVBQUs7VUFDOUQsSUFBSU4sS0FBSyxHQUFHLENBQUMsS0FBS00sS0FBSyxDQUFDaEgsTUFBTSxJQUFJK0csWUFBWSxZQUFZcEwsS0FBSyxFQUFFO1lBQy9ELE9BQU9tTCxXQUFXLEdBQUcsSUFBSSxHQUFHMU8sTUFBSSxDQUFDeUssUUFBUSxDQUFDa0UsWUFBWSxDQUFDRSxLQUFLLENBQUM7VUFDL0Q7VUFFQSxPQUFPSCxXQUFXLE9BQUFyTSxNQUFBLENBQU9yQyxNQUFJLENBQUN5SyxRQUFRLENBQUNrRSxZQUFZLENBQUMsTUFBRztRQUN6RCxDQUFDLENBQUM7TUFDSjtNQUVBLE9BQU8zQixJQUFJLENBQUN2QyxRQUFRLENBQUMsQ0FBQztJQUN4QjtFQUFDO0lBQUFoTSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOFAsVUFBa0JLLEdBQVEsRUFBVTtNQUNsQyxJQUFNQyxLQUFLLEdBQUcsRUFBRTtNQUVoQixJQUFJO1FBQ0YsT0FBT2pILElBQUksQ0FBQzJHLFNBQVMsQ0FDbkJLLEdBQUcsWUFBWXZMLEtBQUssR0FBRyxJQUFJLENBQUNrSCxRQUFRLENBQUNxRSxHQUFHLENBQUMsR0FBR0EsR0FBRyxFQUMvQyxVQUFDclEsR0FBRyxFQUFFRSxLQUFLLEVBQUs7VUFDZCxJQUFJLENBQUMsQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLFlBQVlxUSxNQUFNLEVBQUU7WUFDdEMsSUFBSUQsS0FBSyxDQUFDcE0sUUFBUSxDQUFDaEUsS0FBSyxDQUFDLEVBQUU7Y0FDekIsT0FBTyxhQUFhO1lBQ3RCO1lBRUFvUSxLQUFLLENBQUNwSSxJQUFJLENBQUNoSSxLQUFLLENBQUM7VUFDbkI7VUFFQSxPQUFPQSxLQUFLO1FBQ2QsQ0FBQyxFQUNELENBQ0YsQ0FBQztNQUNILENBQUMsQ0FBQyxPQUFPcUosQ0FBQyxFQUFFO1FBQ1YsT0FBTyxpQ0FBaUM7TUFDMUM7SUFDRjtFQUFDO0lBQUF2SixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNFAsZ0JBQXdCVSxRQUFhLEVBQUVaLHlCQUFpQyxFQUFFQyxLQUFhLEVBQVU7TUFDL0YsT0FBT0QseUJBQXlCLENBQUM5TCxTQUFTLENBQUMsQ0FBQyxFQUFFK0wsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDN0QsUUFBUSxDQUFDd0UsUUFBUSxDQUFDLEdBQUdaLHlCQUF5QixDQUFDOUwsU0FBUyxDQUFDK0wsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqSTtFQUFDO0lBQUE3UCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOEwsU0FBaUJ5RSxJQUFTLEVBQVU7TUFDbEMsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU9BLElBQUk7TUFDYjtNQUVBLElBQUksT0FBT0EsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUM3QixPQUFPQSxJQUFJLEdBQUcsTUFBTSxHQUFHLE9BQU87TUFDaEM7TUFFQSxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDNUIsT0FBT0EsSUFBSSxDQUFDekUsUUFBUSxDQUFDLENBQUM7TUFDeEI7TUFFQSxJQUFJMEUsV0FBVyxHQUFHLEVBQUU7TUFFcEIsSUFBSUQsSUFBSSxFQUFFO1FBQ1IsSUFBSSxPQUFPQSxJQUFJLEtBQUssVUFBVSxFQUFFO1VBQzlCQyxXQUFXLEdBQUdELElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUMsTUFBTSxJQUFJeUUsSUFBSSxZQUFZRixNQUFNLEVBQUU7VUFDakMsSUFBSTtZQUNGRyxXQUFXLEdBQUdELElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDO1VBQy9CLENBQUMsQ0FBQyxPQUFPekMsQ0FBQyxFQUFFO1lBQ1ZtSCxXQUFXLEdBQUcsNkJBQTZCO1VBQzdDO1FBQ0Y7TUFDRjtNQUVBLE9BQU9BLFdBQVc7SUFDcEI7RUFBQztFQUFBLE9BQUExQyxNQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDak5IO0FBQ0E7QUFDQTtBQUN5RDtBQUNYO0FBQUEsSUFFekJwSixjQUFjO0VBQUEsU0FBQUEsZUFBQTtJQUFBdkYsMklBQUEsT0FBQXVGLGNBQUE7RUFBQTtFQUFBN0Usd0lBQUEsQ0FBQTZFLGNBQUE7SUFBQTVFLEdBQUE7SUFBQUMsR0FBQSxFQUNqQyxTQUFBQSxJQUFBLEVBQStDO01BQzdDLE9BQU82Tix3REFBWSxDQUFDOUQsd0VBQXNCLENBQUM7SUFDN0M7RUFBQztJQUFBaEssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPNk4sd0RBQVksQ0FBQzlELDRFQUEwQixDQUFDO0lBQ2pEO0VBQUM7SUFBQWhLLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0Q7TUFDdEQsT0FBTzZOLDZEQUFpQjtJQUMxQjtFQUFDO0VBQUEsT0FBQWxKLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQkg7QUFDQTtBQUNBOztBQUU4QztBQUNWO0FBQ2M7QUFDRjtBQUNjO0FBQ1c7QUFDTTtBQUVqQztBQUFBLElBRXpCc0MsYUFBYTtFQTZEaEMsU0FBQUEsY0FBQSxFQUFzQjtJQUFBN0gsMklBQUEsT0FBQTZILGFBQUE7SUFDcEIsTUFBTSxJQUFJcEMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMvRSx3SUFBQSxDQUFBbUgsYUFBQTtJQUFBbEgsR0FBQTtJQUFBQyxHQUFBLEVBeERELFNBQUFBLElBQUEsRUFBNEQ7TUFDMUQsT0FBT2lILGFBQWEsQ0FBQ3lKLHVCQUF1QjtJQUM5QztFQUFDO0lBQUEzUSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMFEsVUFBaUJsRCxRQUFnQixFQUFXO01BQzFDLElBQUksT0FBT0EsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNoQ0EsUUFBUSxHQUFHLEtBQUs7TUFDbEI7TUFFQSxJQUFNbUQsTUFBTSxHQUFHM0osYUFBYSxDQUFDNEosUUFBUSxDQUFDcEQsUUFBUSxDQUFDO01BRS9DLElBQUltRCxNQUFNLEVBQUU7UUFDVixPQUFPQSxNQUFNO01BQ2Y7TUFFQSxPQUFPM0osYUFBYSxDQUFDNEosUUFBUSxDQUFDcEQsUUFBUSxDQUFDLEdBQUcsSUFBSU0sNENBQU0sQ0FBQ04sUUFBUSxFQUFFLElBQUksQ0FBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQ08sVUFBVSxDQUFDO0lBQ2xHO0VBQUM7SUFBQXROLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE2USw0Q0FBQSxFQUEyRDtNQUN6RDdKLGFBQWEsQ0FBQzhKLGlCQUFpQixDQUFDLENBQUM7TUFDakM5SixhQUFhLENBQUMrSix5QkFBeUIsQ0FBQyxTQUFTLEVBQUUvSixhQUFhLENBQUNnSyxrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQy9GakssYUFBYSxDQUFDK0oseUJBQXlCLENBQUMsV0FBVyxFQUFFL0osYUFBYSxDQUFDa0ssb0JBQW9CLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRztFQUFDO0lBQUFuUixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOFEsa0JBQUEsRUFBeUM7TUFDdkMsSUFBTUssY0FBYyxHQUFHLElBQUksQ0FBQ0MsNkJBQTZCLENBQUNsTixjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFaEcsSUFBSTBKLGlEQUFZLENBQUN1RCxjQUFjLENBQUMsRUFBRTtRQUNoQyxJQUFJLENBQUMvRCxVQUFVLENBQUNpRSxZQUFZLENBQUN6RCxpREFBWSxDQUFDdUQsY0FBYyxDQUFDLENBQUM7TUFDNUQ7TUFFQTtJQUNGO0VBQUM7SUFBQXJSLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErUSwwQkFBeUM1TSxJQUFZLEVBQUVtTixhQUE0QyxFQUFRO01BQ3pHLElBQU1ILGNBQWMsR0FBRyxJQUFJLENBQUNDLDZCQUE2QixDQUFDbE4sY0FBYyxXQUFBUixNQUFBLENBQVdTLElBQUksbUJBQWdCLENBQUM7TUFFeEcsSUFBSWdOLGNBQWMsS0FBSyxLQUFLLEVBQUU7UUFDNUI7TUFDRjtNQUVBRyxhQUFhLENBQUMxRCxpREFBWSxDQUFDdUQsY0FBYyxDQUFDLENBQUM7SUFDN0M7RUFBQztJQUFBclIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWdSLG1CQUFrQ3hCLEtBQW1CLEVBQVE7TUFDM0QsSUFBSSxDQUFDM0MsVUFBVSxDQUFDN0wsR0FBRyxDQUFDLElBQUlrTSxxREFBZSxDQUFDc0MsS0FBSyxJQUFJOUssZ0ZBQXlDLENBQUMsQ0FBQztJQUM5RjtFQUFDO0lBQUE1RSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBa1IscUJBQW9DMUIsS0FBbUIsRUFBUTtNQUM3RCxJQUFJLENBQUNpQix1QkFBdUIsQ0FBQ3RELFNBQVMsR0FBR3FDLEtBQUssSUFBSTlLLGtGQUEyQztNQUU3RixJQUFJLENBQUNtSSxVQUFVLENBQUM3TCxHQUFHLENBQUMsSUFBSXVRLGdFQUFpQixDQUFDLElBQUksQ0FBQ2QsdUJBQXVCLENBQUMsQ0FBQztJQUMxRTtFQUFDO0VBQUEsT0FBQXpKLGFBQUE7QUFBQTtBQUFBNUgsMklBQUEsQ0EzRGtCNEgsYUFBYSxtQ0FDOEMsSUFBSXdLLHNFQUE0QixDQUFDLENBQUM7QUFBQXBTLDJJQUFBLENBRDdGNEgsYUFBYSxjQUV5QixDQUFDLENBQUM7QUFBQTVILDJJQUFBLENBRnhDNEgsYUFBYSxnQkFHTyxJQUFJNEYsK0NBQVMsQ0FBQyxDQUFDO0FBQUF4TiwySUFBQSxDQUhuQzRILGFBQWEsZ0JBSWMsSUFBSXlLLHNEQUFnQixDQUFDLENBQUM7QUFBQXJTLDJJQUFBLENBSmpENEgsYUFBYSw2QkFLaUMsSUFBSTBLLHNFQUFzQixDQUFDLENBQUM7QUFMN0Q7QUFrRWxDMUssYUFBYSxDQUFDNkosMkNBQTJDLENBQUMsQ0FBQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEYzRDtBQUNBO0FBQ0E7QUFDMEQ7QUFDRjtBQUFBLElBRW5DcE0sbUJBQW1CO0VBQUEsU0FBQUEsb0JBQUE7SUFBQXRGLDJJQUFBLE9BQUFzRixtQkFBQTtFQUFBO0VBQUE1RSx3SUFBQSxDQUFBNEUsbUJBQUE7SUFBQTNFLEdBQUE7SUFBQUUsS0FBQSxFQUN0QyxTQUFBMlIsc0NBQTZDQyxZQUEwQixFQUFvQjtNQUN6RixRQUFRQSxZQUFZO1FBQ2xCLEtBQUtoRSxxREFBZ0I7VUFDbkIsT0FBTyxLQUFLO1FBQ2QsS0FBS0EsdURBQWtCO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLQSx1REFBa0I7VUFDckIsT0FBTyxPQUFPO1FBQ2hCLEtBQUtBLHNEQUFpQjtVQUNwQixPQUFPLE9BQU87UUFDaEIsS0FBS0Esc0RBQWlCO1VBQ3BCLE9BQU8sTUFBTTtRQUNmLEtBQUtBLHVEQUFrQjtVQUNyQixPQUFPLE9BQU87UUFDaEIsS0FBS0EsdURBQWtCO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLQSxxREFBZ0I7VUFDbkIsT0FBTyxLQUFLO1FBQ2Q7VUFDRWxCLGdFQUFpQixDQUFDa0YsWUFBWSxDQUFDO01BQ25DO0lBQ0Y7RUFBQztJQUFBOVIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZSLHNDQUE2Q0MsZ0JBQWtDLEVBQWdCO01BQzdGLFFBQVFBLGdCQUFnQjtRQUN0QixLQUFLLEtBQUs7VUFDUixPQUFPbEUscURBQWdCO1FBQ3pCLEtBQUssT0FBTztVQUNWLE9BQU9BLHVEQUFrQjtRQUMzQixLQUFLLE9BQU87VUFDVixPQUFPQSx1REFBa0I7UUFDM0IsS0FBSyxNQUFNO1VBQ1QsT0FBT0Esc0RBQWlCO1FBQzFCLEtBQUssTUFBTTtVQUNULE9BQU9BLHNEQUFpQjtRQUMxQixLQUFLLE9BQU87VUFDVixPQUFPQSx1REFBa0I7UUFDM0IsS0FBSyxPQUFPO1VBQ1YsT0FBT0EsdURBQWtCO1FBQzNCLEtBQUssS0FBSztVQUNSLE9BQU9BLHFEQUFnQjtRQUN6QjtVQUNFbEIsZ0VBQWlCLENBQUNvRixnQkFBZ0IsQ0FBQztNQUN2QztJQUNGO0VBQUM7RUFBQSxPQUFBck4sbUJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25ESDtBQUNBO0FBQ0E7QUFDOEM7QUFBQSxJQUd6QmdOLGdCQUFnQjtFQUFBLFNBQUFBLGlCQUFBO0lBQUF0UywySUFBQSxPQUFBc1MsZ0JBQUE7SUFBQXJTLDJJQUFBLHFCQUNBc0Ysd0VBQWtDO0VBQUE7RUFBQTdFLHdJQUFBLENBQUE0UixnQkFBQTtJQUFBM1IsR0FBQTtJQUFBQyxHQUFBLEVBRXJFLFNBQUFBLElBQUEsRUFBMEI7TUFDeEIsT0FBTyxJQUFJLENBQUNxTixVQUFVO0lBQ3hCO0VBQUM7SUFBQXROLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFxUixhQUFhbEUsU0FBdUIsRUFBUTtNQUMxQyxJQUFJLENBQUNDLFVBQVUsR0FBR0QsU0FBUztJQUM3QjtFQUFDO0VBQUEsT0FBQXNFLGdCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZIO0FBQ0E7QUFDQTtBQUNzRDtBQUNJO0FBQ2xCO0FBQUEsSUFFbkI1SixVQUFVO0VBRzdCLFNBQUFBLFdBQVlrSyxPQUFvQixFQUFFO0lBQUE1UywySUFBQSxPQUFBMEksVUFBQTtJQUFBekksMklBQUE7SUFDaEMsSUFBSSxDQUFDNFMsUUFBUSxHQUFHRCxPQUFPO0VBQ3pCO0VBQUNsUyx3SUFBQSxDQUFBZ0ksVUFBQTtJQUFBL0gsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQThILFFBQUEsRUFBa0I7TUFDaEIsT0FBT1AsaURBQVcsQ0FBQyxJQUFJLENBQUN5SyxRQUFRLENBQUM7SUFDbkM7RUFBQztJQUFBbFMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWlTLGtCQUFBLEVBQW9DO01BQ2xDLFFBQVEsSUFBSSxDQUFDRCxRQUFRO1FBQ25CLEtBQUt6SyxrRUFBNEI7VUFDL0IsT0FBTzJLLDJFQUF3QjtRQUNqQyxLQUFLM0ssaUZBQTJDO1VBQzlDLE9BQU8ySywyRUFBd0I7UUFDakMsS0FBSzNLLHlEQUFtQjtVQUN0QixPQUFPMksscUVBQWtCO1FBQzNCLEtBQUszSywyREFBcUI7VUFDeEIsT0FBTzJLLHFFQUFrQjtRQUMzQixLQUFLM0ssZ0VBQTBCO1VBQzdCLE9BQU8ySyxxRUFBa0I7UUFDM0IsS0FBSzNLLDZEQUF1QjtVQUMxQixPQUFPMksscUVBQWtCO1FBQzNCLEtBQUszSywrREFBeUI7VUFDNUIsT0FBTzJLLHFFQUFrQjtRQUMzQixLQUFLM0ssNEVBQXNDO1VBQ3pDLE9BQU8ySyxxRUFBa0I7UUFDM0IsS0FBSzNLLDZEQUF1QjtVQUMxQixPQUFPMksscUVBQWtCO1FBQzNCLEtBQUszSyxtRUFBNkI7VUFDaEMsT0FBTzJLLHFFQUFrQjtRQUMzQixLQUFLM0ssdUVBQWlDO1VBQ3BDLE9BQU8ySyxxRUFBa0I7UUFDM0IsS0FBSzNLLHVFQUFpQztVQUNwQyxPQUFPMksscUVBQWtCO1FBQzNCO1VBQ0V4RixnRUFBaUIsQ0FBQyxJQUFJLENBQUNzRixRQUFRLENBQUM7TUFDcEM7SUFDRjtFQUFDO0VBQUEsT0FBQW5LLFVBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQ0g7QUFDQTtBQUNBO0FBQ2tEO0FBRTNDLElBQUtxSyxjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQUEsT0FBZEEsY0FBYztBQUFBO0FBSXpCLElBSW9CQyxvQkFBb0I7RUFBQSxTQUFBQSxxQkFBQTtJQUFBaFQsMklBQUEsT0FBQWdULG9CQUFBO0lBQUEvUywySUFBQSxlQUN4QixtREFBbUQ7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUEscUJBSTdCb0YsNEVBQXNDO0VBQUE7RUFBQTNFLHdJQUFBLENBQUFzUyxvQkFBQTtJQUFBclMsR0FBQTtJQUFBQyxHQUFBLEVBRTNFLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJLENBQUNxUyxJQUFJO0lBQ2xCLENBQUM7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQVFDLEdBQVcsRUFBRTtNQUNuQixJQUFNQyxVQUFVLEdBQUcsSUFBSWpOLEdBQUcsQ0FBQ2dOLEdBQUcsQ0FBQztNQUUvQkMsVUFBVSxDQUFDQyxRQUFRLEdBQUdELFVBQVUsQ0FBQ0MsUUFBUSxHQUFHLFVBQVU7TUFFdEQsSUFBSSxDQUFDSixJQUFJLEdBQUdHLFVBQVUsQ0FBQ3pHLFFBQVEsQ0FBQyxDQUFDO0lBQ25DO0VBQUM7SUFBQWhNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEI7TUFDeEIsT0FBTyxJQUFJLENBQUMwUyxZQUFZO0lBQzFCLENBQUM7SUFBQUosR0FBQSxFQUVELFNBQUFBLElBQWdCSyxXQUFtQixFQUFFO01BQ25DLElBQUksQ0FBQ0QsWUFBWSxHQUFHQyxXQUFXO0lBQ2pDO0VBQUM7SUFBQTVTLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUM0UyxRQUFRO0lBQ3RCLENBQUM7SUFBQU4sR0FBQSxFQUVELFNBQUFBLElBQVlPLE9BQWUsRUFBRTtNQUMzQixJQUFJLENBQUNELFFBQVEsR0FBR0MsT0FBTztJQUN6QjtFQUFDO0lBQUE5UyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdCO01BQ3RCLE9BQU8sSUFBSSxDQUFDOFMsVUFBVTtJQUN4QixDQUFDO0lBQUFSLEdBQUEsRUFFRCxTQUFBQSxJQUFjUyxTQUFpQixFQUFFO01BQy9CLElBQUksQ0FBQ0QsVUFBVSxHQUFHQyxTQUFTO0lBQzdCO0VBQUM7SUFBQWhULEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBZ0M7TUFDOUIsT0FBTyxJQUFJLENBQUNxTixVQUFVO0lBQ3hCLENBQUM7SUFBQWlGLEdBQUEsRUFFRCxTQUFBQSxJQUFjbEYsU0FBeUIsRUFBRTtNQUN2QyxJQUFJLENBQUNDLFVBQVUsR0FBR0QsU0FBUztJQUM3QjtFQUFDO0VBQUEsT0FBQWdGLG9CQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlESDtBQUNBO0FBQ0E7O0FBRThDO0FBQzhCO0FBQy9DO0FBQ2tCO0FBQ0Y7QUFDZ0I7QUFBQSxJQUV4Q1ksY0FBYztFQXNDakMsU0FBQUEsZUFBQSxFQUFzQjtJQUFBNVQsMklBQUEsT0FBQTRULGNBQUE7SUFDcEIsTUFBTSxJQUFJbk8sS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMvRSx3SUFBQSxDQUFBa1QsY0FBQTtJQUFBalQsR0FBQTtJQUFBRSxLQUFBLEVBckNELFNBQUFnVCxrQkFBeUJWLEdBQVcsRUFBa0I7TUFDcEQsSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLE1BQU0sSUFBSTFOLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDdkI7TUFFQSxJQUFNcU8sZUFBZSxHQUFHRixjQUFjLENBQUNHLGdCQUFnQixDQUFDWixHQUFHLENBQUM7TUFFNUQsSUFBSVcsZUFBZSxFQUFFO1FBQ25CLE9BQU9BLGVBQWU7TUFDeEI7TUFFQSxJQUFNRSxvQkFBb0IsR0FBRyxJQUFJaEIsMERBQW9CLENBQUMsQ0FBQztNQUV2RGdCLG9CQUFvQixDQUFDTCxTQUFTLEdBQUc3TCw2REFBbUI7TUFDcERrTSxvQkFBb0IsQ0FBQ1AsT0FBTyxHQUFHM0wsMkRBQWlCO01BQ2hEa00sb0JBQW9CLENBQUNiLEdBQUcsR0FBR2Msc0VBQTRCLENBQUNkLEdBQUcsQ0FBQztNQUM1RGEsb0JBQW9CLENBQUNULFdBQVcsR0FBR1csMkVBQWlDLENBQUNmLEdBQUcsQ0FBQztNQUV6RWEsb0JBQW9CLENBQUNoRyxTQUFTLEdBQUc1SSxzR0FBK0QsQ0FBQzBDLDREQUFrQixDQUFDO01BRXBILE9BQU84TCxjQUFjLENBQUNHLGdCQUFnQixDQUFDWixHQUFHLENBQUMsR0FBRyxJQUFJZ0Isb0RBQWMsQ0FBQ0gsb0JBQW9CLENBQUM7SUFDeEY7RUFBQztJQUFBclQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXVULGtCQUF5QkMsY0FBOEIsRUFBUTtNQUM3RCxJQUFNUCxlQUFlLEdBQUc1QyxNQUFNLENBQUNvRCxNQUFNLENBQUNWLGNBQWMsQ0FBQ0csZ0JBQWdCLENBQUM7TUFFdEUsSUFBSUQsZUFBZSxJQUFJQSxlQUFlLENBQUNoSyxNQUFNLEVBQUU7UUFDN0NnSyxlQUFlLENBQUNwSCxPQUFPLENBQUMsVUFBQTlELGNBQWMsRUFBSTtVQUN4QyxJQUFNb0wsb0JBQW9CLEdBQUdwTCxjQUFjLENBQUNvTCxvQkFBb0I7VUFFaEVBLG9CQUFvQixDQUFDaEcsU0FBUyxHQUFHcUcsY0FBYztRQUNqRCxDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7RUFBQSxPQUFBVCxjQUFBO0FBQUE7QUFBQTNULDJJQUFBLENBcENrQjJULGNBQWMsc0JBQ3VDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1o1RTtBQUNBO0FBQ0E7O0FBRW9EO0FBQ1E7QUFDRDtBQUVyQjtBQUd0QyxJQUFNVyxnQkFBZ0IsR0FBRyxJQUFJO0FBQzdCLElBQU1DLGtCQUFrQixHQUFHLElBQUk7QUFBQyxJQWtDWEwsY0FBYztFQVNqQyxTQUFBQSxlQUFZSCxvQkFBMEMsRUFBRTtJQUFBaFUsMklBQUEsT0FBQW1VLGNBQUE7SUFBQWxVLDJJQUFBLGtCQVJwQjRILG9FQUF1QixDQUFDLGdCQUFnQixDQUFDO0lBQUE1SCwySUFBQTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQSxtQkFHcEMsRUFBRTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQSx3QkFFbkIsQ0FBQztJQUFBQSwySUFBQSxrQkFDUHdVLFFBQVEsQ0FBQ0MsUUFBUTtJQUdqQyxJQUFJLENBQUNDLHFCQUFxQixHQUFHWCxvQkFBb0I7SUFDakQsSUFBSSxDQUFDWSxtQkFBbUIsR0FBRyxJQUFJQyw2REFBa0IsQ0FBQyxDQUFDO0VBQ3JEO0VBQUNuVSx3SUFBQSxDQUFBeVQsY0FBQTtJQUFBeFQsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpRDtNQUMvQyxPQUFPLElBQUksQ0FBQytULHFCQUFxQjtJQUNuQztFQUFDO0lBQUFoVSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ0ksS0FBS2lNLE1BQWUsRUFBUTtNQUMxQixJQUFPNU0sUUFBUSxHQUFtRDRNLE1BQU0sQ0FBakU1TSxRQUFRO1FBQUVySCxLQUFLLEdBQTRDaVUsTUFBTSxDQUF2RGpVLEtBQUs7UUFBRWtVLGFBQWEsR0FBNkJELE1BQU0sQ0FBaERDLGFBQWE7UUFBRWpNLE9BQU8sR0FBb0JnTSxNQUFNLENBQWpDaE0sT0FBTztRQUFFa00sUUFBUSxHQUFVRixNQUFNLENBQXhCRSxRQUFRO1FBQUVDLElBQUksR0FBSUgsTUFBTSxDQUFkRyxJQUFJO01BQzlELElBQU0zTSxVQUFVLEdBQUcsSUFBSUksZ0RBQVUsQ0FBQ29NLE1BQU0sQ0FBQ3hNLFVBQVUsQ0FBQztNQUVwRCxJQUFJLElBQUksQ0FBQ3FNLHFCQUFxQixDQUFDM0csU0FBUyxHQUFHMUYsVUFBVSxDQUFDd0ssaUJBQWlCLENBQUMsQ0FBQyxFQUFFO1FBQ3pFO01BQ0Y7TUFFQSxJQUFNb0MsWUFBWSxHQUFHO1FBQ25CQyxTQUFTLEVBQUUsSUFBSWhWLElBQUksQ0FBQyxDQUFDLENBQUNxTyxXQUFXLENBQUMsQ0FBQztRQUNuQ2lGLE9BQU8sRUFBRSxJQUFJLENBQUNrQixxQkFBcUIsQ0FBQ2xCLE9BQU87UUFDM0NFLFNBQVMsRUFBRSxJQUFJLENBQUNnQixxQkFBcUIsQ0FBQ2hCLFNBQVM7UUFDL0N6TCxRQUFRLEVBQVJBLFFBQVE7UUFDUjRNLE1BQU0sRUFBRXhNLFVBQVUsQ0FBQ0ssT0FBTyxDQUFDLENBQUM7UUFDNUI5SCxLQUFLLEVBQUxBLEtBQUs7UUFDTGtVLGFBQWEsRUFBYkEsYUFBYTtRQUNiSyxpQkFBaUIsRUFBRSxJQUFJLENBQUNDLE9BQU87UUFDL0I5QixXQUFXLEVBQUUsSUFBSSxDQUFDb0IscUJBQXFCLENBQUNwQixXQUFXO1FBQ25ENU8sT0FBTyxFQUFFMlEsMkVBQXlCO1FBQ2xDeE0sT0FBTyxFQUFQQSxPQUFPO1FBQ1BrTSxRQUFRLEVBQVJBLFFBQVE7UUFDUkMsSUFBSSxFQUFKQTtNQUNGLENBQUM7TUFFRCxJQUFJLENBQUNwQyxRQUFRLENBQUNoSyxJQUFJLENBQUNxTSxZQUFZLENBQUM7TUFFaEMsSUFBTUssT0FBTyxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUMxQztFQUFDO0lBQUE3VSxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBaUssWUFBQSxHQUFBMkssNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBQyxRQUEwQkMsZUFBcUM7UUFBQSxJQUFBQyxRQUFBO1FBQUEsT0FBQUgsMklBQUEsVUFBQUksU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FDdkRKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUUvQkwsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDO2dCQUFDeUYsT0FBTyxFQUFFUjtjQUFlLENBQUMsQ0FBQyxDQUFDO2NBQUNHLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BRTNESSxLQUFLLENBQUMsSUFBSSxDQUFDMUIscUJBQXFCLENBQUN4QixHQUFHLEVBQUU7Z0JBQ2pEbUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVY7Y0FDUixDQUFDLENBQUM7WUFBQTtjQUFBLE9BQUFFLFFBQUEsQ0FBQVMsTUFBQSxXQUFBVCxRQUFBLENBQUFVLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQVYsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDSDtNQUFBLFNBQUF0SyxZQUFBc0wsRUFBQTtRQUFBLE9BQUE3TCxZQUFBLENBQUE4TCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBNUQsV0FBQTtJQUFBO0VBQUE7SUFBQTFLLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFnVyxrQkFBQSxHQUFBcEIsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBb0IsU0FBQTtRQUFBLElBQUE1VixLQUFBO1FBQUEsSUFBQTBVLGVBQUE7UUFBQSxPQUFBRiwySUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoQixJQUFBLEdBQUFnQixTQUFBLENBQUFmLElBQUE7WUFBQTtjQUFBLE1BQ00sSUFBSSxDQUFDcEQsUUFBUSxDQUFDL0ksTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUNtTixVQUFVO2dCQUFBRCxTQUFBLENBQUFmLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFlLFNBQUEsQ0FBQVIsTUFBQTtZQUFBO2NBSWhELElBQUksQ0FBQ1MsVUFBVSxHQUFHLElBQUk7Y0FFaEJyQixlQUFlLEdBQUcsSUFBSSxDQUFDL0MsUUFBUSxDQUFDcUUsS0FBSyxDQUFDLENBQUMsRUFBRTNDLGdCQUFnQixDQUFDO2NBRWhFLElBQUksQ0FBQzFCLFFBQVEsR0FBRyxJQUFJLENBQUNBLFFBQVEsQ0FBQ3FFLEtBQUssQ0FBQzNDLGdCQUFnQixDQUFDO2NBQUMsT0FBQXlDLFNBQUEsQ0FBQVIsTUFBQSxXQUUvQyxJQUFJLENBQUNuTCxXQUFXLENBQUN1SyxlQUFlLENBQUMsQ0FBQ3VCLElBQUksQ0FBQyxVQUFBQyxRQUFRLEVBQUk7Z0JBQ3hELElBQUlsVyxLQUFJLENBQUNtVyw2QkFBNkIsQ0FBQ0QsUUFBUSxDQUFDLEVBQUU7a0JBQ2hELElBQUlsVyxLQUFJLENBQUMyUixRQUFRLENBQUMvSSxNQUFNLElBQUkwSyxrQkFBa0IsRUFBRTtvQkFDOUN0VCxLQUFJLENBQUNvVyxhQUFhLEVBQUU7b0JBRXBCdlIsVUFBVSxDQUFDLFlBQU07c0JBQ2Y3RSxLQUFJLENBQUMyUixRQUFRLE1BQUF0TyxNQUFBLENBQUFnVCw4SUFBQSxDQUFPM0IsZUFBZSxHQUFBMkIsOElBQUEsQ0FBS3JXLEtBQUksQ0FBQzJSLFFBQVEsRUFBQztzQkFFdEQzUixLQUFJLENBQUMrVixVQUFVLEdBQUcsS0FBSztzQkFFdkIsSUFBTTFCLE9BQU8sR0FBR3JVLEtBQUksQ0FBQ3NVLGlCQUFpQixDQUFDLENBQUM7b0JBQzFDLENBQUMsRUFBRXRVLEtBQUksQ0FBQzBULG1CQUFtQixDQUFDNEMsMkNBQTJDLENBQUN0VyxLQUFJLENBQUNvVyxhQUFhLENBQUMsQ0FBQztvQkFFNUY7a0JBQ0Y7a0JBRUFwVyxLQUFJLENBQUM4SCxPQUFPLENBQUNTLEtBQUssQ0FBQyw0REFBNEQsRUFBRXZJLEtBQUksQ0FBQzJSLFFBQVEsQ0FBQy9JLE1BQU0sRUFBRThMLGVBQWUsQ0FBQzlMLE1BQU0sQ0FBQztnQkFDaEk7Z0JBRUE1SSxLQUFJLENBQUMrVixVQUFVLEdBQUcsS0FBSztnQkFDdkIvVixLQUFJLENBQUNvVyxhQUFhLEdBQUcsQ0FBQztnQkFFdEIsSUFBTS9CLE9BQU8sR0FBR3JVLEtBQUksQ0FBQ3NVLGlCQUFpQixDQUFDLENBQUM7Z0JBRXhDLE9BQU80QixRQUFRO2NBQ2pCLENBQUMsQ0FBQyxDQUFDSyxLQUFLLENBQUMsWUFBTTtnQkFDYnZXLEtBQUksQ0FBQytWLFVBQVUsR0FBRyxLQUFLO2dCQUV2QixJQUFNMUIsT0FBTyxHQUFHclUsS0FBSSxDQUFDc1UsaUJBQWlCLENBQUMsQ0FBQztjQUMxQyxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXdCLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ0g7TUFBQSxTQUFBdEIsa0JBQUE7UUFBQSxPQUFBcUIsa0JBQUEsQ0FBQUQsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQXVHLGlCQUFBO0lBQUE7RUFBQTtJQUFBN1UsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXdXLDhCQUFBSyxJQUFBLEVBQW1FO01BQUEsSUFBNUJDLE1BQU0sR0FBQUQsSUFBQSxDQUFOQyxNQUFNO01BQzNDLE9BQU8sVUFBVSxDQUFDclUsSUFBSSxDQUFDcVUsTUFBTSxDQUFDaEwsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzQztFQUFDO0VBQUEsT0FBQXdILGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7O0FDckpIO0FBQ0E7QUFDQTtBQUZBLElBR0svTCxXQUFXLDBCQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQUEsT0FBWEEsV0FBVztBQUFBLEVBQVhBLFdBQVc7QUFlaEIsK0RBQWVBLFdBQVcsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCMUI7QUFDQTtBQUNBO0FBQzBFO0FBQ2hCO0FBQUEsSUFFckNoRCxxQkFBcUI7RUFBQSxTQUFBQSxzQkFBQTtJQUFBcEYsMklBQUEsT0FBQW9GLHFCQUFBO0VBQUE7RUFBQTFFLHdJQUFBLENBQUEwRSxxQkFBQTtJQUFBekUsR0FBQTtJQUFBRSxLQUFBLEVBQ3hDLFNBQUErVywwQ0FBaUR2RCxjQUE4QixFQUFzQjtNQUNuRyxRQUFRQSxjQUFjO1FBQ3BCLEtBQUt0QixxRUFBa0I7VUFDckIsT0FBTyxLQUFLO1FBQ2QsS0FBS0EsMkVBQXdCO1VBQzNCLE9BQU8sV0FBVztRQUNwQixLQUFLQSxxRUFBa0I7VUFDckIsT0FBTyxLQUFLO1FBQ2Q7VUFDRXhGLGdFQUFpQixDQUFDOEcsY0FBYyxDQUFDO01BQ3JDO0lBQ0Y7RUFBQztJQUFBMVQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWdYLDBDQUFpREMsa0JBQXNDLEVBQWtCO01BQ3ZHLFFBQVFBLGtCQUFrQjtRQUN4QixLQUFLLEtBQUs7VUFDUixPQUFPL0UscUVBQWtCO1FBQzNCLEtBQUssV0FBVztVQUNkLE9BQU9BLDJFQUF3QjtRQUNqQyxLQUFLLEtBQUs7VUFDUixPQUFPQSxxRUFBa0I7UUFDM0I7VUFDRXhGLGdFQUFpQixDQUFDdUssa0JBQWtCLENBQUM7TUFDekM7SUFDRjtFQUFDO0VBQUEsT0FBQTFTLHFCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0JIO0FBQ0E7QUFDQTtBQUN5RDtBQUNNO0FBQUEsSUFFMUNDLGdCQUFnQjtFQUFBLFNBQUFBLGlCQUFBO0lBQUFyRiwySUFBQSxPQUFBcUYsZ0JBQUE7RUFBQTtFQUFBM0Usd0lBQUEsQ0FBQTJFLGdCQUFBO0lBQUExRSxHQUFBO0lBQUFDLEdBQUEsRUFDbkMsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPbVMseUVBQWMsQ0FBQ3BJLDJFQUF5QixDQUFDO0lBQ2xEO0VBQUM7RUFBQSxPQUFBdEYsZ0JBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNUSDtBQUNBO0FBQ0E7QUFDOEM7QUFBQSxJQUV4QzBTLE9BQU87RUFTWCxTQUFBQSxRQUFZQyxRQUFRLEVBQUU7SUFBQWhZLDJJQUFBLE9BQUErWCxPQUFBO0lBQUE5WCwySUFBQTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQTtJQUNwQixJQUFJLEVBQUUsSUFBSSxZQUFZOFgsT0FBTyxDQUFDLEVBQUU7TUFDOUIsTUFBTSxJQUFJRSxTQUFTLENBQUMsc0NBQXNDLENBQUM7SUFDN0Q7SUFFQSxJQUFJLE9BQU9ELFFBQVEsS0FBSyxVQUFVLEVBQUU7TUFDbEMsTUFBTSxJQUFJQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7SUFDdkM7SUFFQSxJQUFJLENBQUNDLE1BQU0sR0FBRyxDQUFDO0lBQ2YsSUFBSSxDQUFDQyxRQUFRLEdBQUcsS0FBSztJQUNyQixJQUFJLENBQUNDLE1BQU0sR0FBRzFSLFNBQVM7SUFDdkIsSUFBSSxDQUFDMlIsVUFBVSxHQUFHLEVBQUU7SUFFcEIsSUFBSSxDQUFDQyxTQUFTLENBQUNOLFFBQVEsQ0FBQztFQUMxQjtFQUFDdFgsd0lBQUEsQ0FBQXFYLE9BQUE7SUFBQXBYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF5WCxVQUFVTixRQUFrQixFQUFRO01BQUEsSUFBQTlXLEtBQUE7TUFDbEMsSUFBSXFYLElBQUksR0FBRyxLQUFLO01BRWhCLElBQUk7UUFDRlAsUUFBUSxDQUNOLFVBQUFuWCxLQUFLLEVBQUk7VUFDUCxJQUFJMFgsSUFBSSxFQUFFO1lBQ1I7VUFDRjtVQUVBQSxJQUFJLEdBQUcsSUFBSTtVQUNYclgsS0FBSSxDQUFDc1gsY0FBYyxDQUFDM1gsS0FBSyxDQUFDO1FBQzVCLENBQUMsRUFDRCxVQUFBNFgsTUFBTSxFQUFJO1VBQ1IsSUFBSUYsSUFBSSxFQUFFO1lBQ1I7VUFDRjtVQUVBQSxJQUFJLEdBQUcsSUFBSTtVQUNYclgsS0FBSSxDQUFDd1gsYUFBYSxDQUFDRCxNQUFNLENBQUM7UUFDNUIsQ0FDRixDQUFDO01BQ0gsQ0FBQyxDQUFDLE9BQU9oUCxLQUFLLEVBQUU7UUFDZCxJQUFJOE8sSUFBSSxFQUFFO1VBQ1I7UUFDRjtRQUVBQSxJQUFJLEdBQUcsSUFBSTtRQUNYLElBQUksQ0FBQ0csYUFBYSxDQUFDalAsS0FBSyxDQUFDO01BQzNCO0lBQ0Y7RUFBQztJQUFBOUksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTJYLGVBQWVHLFFBQTZCLEVBQVE7TUFDbEQsSUFBTUMsT0FBTyxHQUFHLElBQWU7TUFFL0IsSUFBSTtRQUNGO1FBQ0EsSUFBSUQsUUFBUSxLQUFLQyxPQUFPLEVBQUU7VUFDeEIsTUFBTSxJQUFJWCxTQUFTLENBQUMsNENBQTRDLENBQUM7UUFDbkU7UUFFQSxJQUFJVSxRQUFRLEtBQUtyWCxtSUFBQSxDQUFPcVgsUUFBUSxNQUFLLFFBQVEsSUFBSSxPQUFPQSxRQUFRLEtBQUssVUFBVSxDQUFDLEVBQUU7VUFDaEYsSUFBTXhCLEtBQUksR0FBR3dCLFFBQVEsQ0FBQ3hCLElBQUk7VUFFMUIsSUFBSXdCLFFBQVEsWUFBWVosT0FBTyxFQUFFO1lBQy9CYSxPQUFPLENBQUNWLE1BQU0sR0FBRyxDQUFDO1lBQ2xCVSxPQUFPLENBQUNSLE1BQU0sR0FBR08sUUFBUTtZQUN6QkMsT0FBTyxDQUFDQyxNQUFNLENBQUMsQ0FBQztZQUVoQjtVQUNGLENBQUMsTUFBTSxJQUFJLE9BQU8xQixLQUFJLEtBQUssVUFBVSxFQUFFO1lBQ3JDeUIsT0FBTyxDQUFDTixTQUFTLENBQUMsWUFBaUI7Y0FDakM7Y0FDQW5CLEtBQUksQ0FBQ1AsS0FBSyxDQUFDK0IsUUFBUSxFQUFFMUosU0FBUyxDQUFDO1lBQ2pDLENBQUMsQ0FBQztZQUVGO1VBQ0Y7UUFDRjtRQUVBMkosT0FBTyxDQUFDVixNQUFNLEdBQUcsQ0FBQztRQUNsQlUsT0FBTyxDQUFDUixNQUFNLEdBQUdPLFFBQVE7UUFDekJDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLENBQUM7TUFDbEIsQ0FBQyxDQUFDLE9BQU8zTyxDQUFDLEVBQUU7UUFDVjBPLE9BQU8sQ0FBQ0YsYUFBYSxDQUFDeE8sQ0FBQyxDQUFDO01BQzFCO0lBQ0Y7RUFBQztJQUFBdkosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZYLGNBQWNDLFFBQTZCLEVBQVE7TUFDakQsSUFBSSxDQUFDVCxNQUFNLEdBQUcsQ0FBQztNQUNmLElBQUksQ0FBQ0UsTUFBTSxHQUFHTyxRQUFRO01BQ3RCLElBQUksQ0FBQ0UsTUFBTSxDQUFDLENBQUM7SUFDZjtFQUFDO0lBQUFsWSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ1ksT0FBQSxFQUFlO01BQUEsSUFBQTNXLE1BQUE7TUFDYixJQUFJLElBQUksQ0FBQ2dXLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDRyxVQUFVLENBQUN2TyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JEaU8sT0FBTyxDQUFDZSxVQUFVLENBQUMsWUFBTTtVQUN2QixJQUFJLENBQUM1VyxNQUFJLENBQUNpVyxRQUFRLEVBQUU7WUFDbEJKLE9BQU8sQ0FBQ2dCLG1CQUFtQixDQUFDN1csTUFBSSxDQUFDa1csTUFBTSxDQUFDO1VBQzFDO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7TUFFQSxLQUFLLElBQUlZLENBQUMsR0FBRyxDQUFDLEVBQUVDLEdBQUcsR0FBRyxJQUFJLENBQUNaLFVBQVUsQ0FBQ3ZPLE1BQU0sRUFBRWtQLENBQUMsR0FBR0MsR0FBRyxFQUFFRCxDQUFDLEVBQUUsRUFBRTtRQUMxRCxJQUFJLENBQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUNiLFVBQVUsQ0FBQ1csQ0FBQyxDQUFDLENBQUM7TUFDakM7TUFFQSxJQUFJLENBQUNYLFVBQVUsR0FBRyxJQUFJO0lBQ3hCO0VBQUM7SUFBQTFYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFxWSxPQUFPQyxRQUF3QixFQUFRO01BQ3JDLElBQUlQLE9BQU8sR0FBRyxJQUFlO01BRTdCLE9BQU9BLE9BQU8sQ0FBQ1YsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMzQlUsT0FBTyxHQUFHQSxPQUFPLENBQUNSLE1BQU07TUFDMUI7TUFFQSxJQUFJUSxPQUFPLENBQUNWLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDeEJVLE9BQU8sQ0FBQ1AsVUFBVSxDQUFDeFAsSUFBSSxDQUFDc1EsUUFBUSxDQUFDO1FBRWpDO01BQ0Y7TUFFQVAsT0FBTyxDQUFDVCxRQUFRLEdBQUcsSUFBSTtNQUN2QkosT0FBTyxDQUFDZSxVQUFVLENBQUMsWUFBTTtRQUN2QixJQUFNZCxRQUFRLEdBQUdZLE9BQU8sQ0FBQ1YsTUFBTSxLQUFLLENBQUMsR0FBR2lCLFFBQVEsQ0FBQ0MsV0FBVyxHQUFHRCxRQUFRLENBQUNFLFVBQVU7UUFFbEYsSUFBSXJCLFFBQVEsS0FBSyxJQUFJLEVBQUU7VUFDckIsSUFBSVksT0FBTyxDQUFDVixNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCaUIsUUFBUSxDQUFDUCxPQUFPLENBQUNKLGNBQWMsQ0FBQ0ksT0FBTyxDQUFDUixNQUFNLENBQUM7VUFDakQsQ0FBQyxNQUFNO1lBQ0xlLFFBQVEsQ0FBQ1AsT0FBTyxDQUFDRixhQUFhLENBQUNFLE9BQU8sQ0FBQ1IsTUFBTSxDQUFDO1VBQ2hEO1VBRUE7UUFDRjtRQUVBLElBQUlrQixNQUFNO1FBRVYsSUFBSTtVQUNGQSxNQUFNLEdBQUd0QixRQUFRLENBQUNZLE9BQU8sQ0FBQ1IsTUFBTSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxPQUFPbE8sQ0FBQyxFQUFFO1VBQ1ZpUCxRQUFRLENBQUNQLE9BQU8sQ0FBQ0YsYUFBYSxDQUFDeE8sQ0FBQyxDQUFDO1VBRWpDO1FBQ0Y7UUFFQWlQLFFBQVEsQ0FBQ1AsT0FBTyxDQUFDSixjQUFjLENBQUNjLE1BQU0sQ0FBQztNQUN6QyxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUEzWSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMFksSUFBV0MsR0FBbUIsRUFBVztNQUN2QyxPQUFPLElBQUl6QixPQUFPLENBQUMsVUFBQzBCLE9BQU8sRUFBRUMsTUFBTSxFQUFLO1FBQ3RDLElBQUksQ0FBQ3hNLEtBQUssQ0FBQ3lNLE9BQU8sQ0FBQ0gsR0FBRyxDQUFDLEVBQUU7VUFDdkIsT0FBT0UsTUFBTSxDQUFDLElBQUl6QixTQUFTLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUM5RDtRQUVBLElBQU0vSSxJQUFJLEdBQUdoQyxLQUFLLENBQUNyQixTQUFTLENBQUNxTCxLQUFLLENBQUNqVixJQUFJLENBQUN1WCxHQUFHLENBQUM7UUFFNUMsSUFBSXRLLElBQUksQ0FBQ3BGLE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDckIsT0FBTzJQLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEI7UUFFQSxJQUFJRyxTQUFTLEdBQUcxSyxJQUFJLENBQUNwRixNQUFNO1FBQzNCLElBQU0rUCxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUliLENBQUMsRUFBRW5ZLEtBQUssRUFBVztVQUN6QyxJQUFJO1lBQ0YsSUFBSUEsS0FBSyxLQUFLUyxtSUFBQSxDQUFPVCxLQUFLLE1BQUssUUFBUSxJQUFJLE9BQU9BLEtBQUssS0FBSyxVQUFVLENBQUMsRUFBRTtjQUN2RSxJQUFNc1csTUFBSSxHQUFHdFcsS0FBSyxDQUFDc1csSUFBSTtjQUV2QixJQUFJLE9BQU9BLE1BQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzlCQSxNQUFJLENBQUNsVixJQUFJLENBQ1BwQixLQUFLLEVBQ0wsVUFBQUEsS0FBSztrQkFBQSxPQUFJZ1osY0FBYyxDQUFDYixDQUFDLEVBQUVuWSxLQUFLLENBQUM7Z0JBQUEsR0FDakM2WSxNQUNGLENBQUM7Z0JBRUQ7Y0FDRjtZQUNGO1lBRUF4SyxJQUFJLENBQUM4SixDQUFDLENBQUMsR0FBR25ZLEtBQUs7WUFFZixJQUFJLEVBQUUrWSxTQUFTLEtBQUssQ0FBQyxFQUFFO2NBQ3JCSCxPQUFPLENBQUN2SyxJQUFJLENBQUM7WUFDZjtVQUNGLENBQUMsQ0FBQyxPQUFPekYsS0FBSyxFQUFFO1lBQ2RpUSxNQUFNLENBQUNqUSxLQUFLLENBQUM7VUFDZjtRQUNGLENBQUM7UUFFRCxLQUFLLElBQUl1UCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc5SixJQUFJLENBQUNwRixNQUFNLEVBQUVrUCxDQUFDLEVBQUUsRUFBRTtVQUNwQ2EsY0FBYyxDQUFDYixDQUFDLEVBQUU5SixJQUFJLENBQUM4SixDQUFDLENBQUMsQ0FBQztRQUM1QjtNQUNGLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQXJZLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE0WSxRQUFlNVksS0FBSyxFQUFXO01BQzdCLElBQUlBLEtBQUssSUFBSVMsbUlBQUEsQ0FBT1QsS0FBSyxNQUFLLFFBQVEsSUFBSUEsS0FBSyxDQUFDaVosV0FBVyxLQUFLL0IsT0FBTyxFQUFFO1FBQ3ZFLE9BQU9sWCxLQUFLO01BQ2Q7TUFFQSxPQUFPLElBQUlrWCxPQUFPLENBQUMsVUFBQTBCLE9BQU87UUFBQSxPQUFJQSxPQUFPLENBQUM1WSxLQUFLLENBQUM7TUFBQSxFQUFDO0lBQy9DO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZZLE9BQWM3WSxLQUFLLEVBQVc7TUFDNUIsT0FBTyxJQUFJa1gsT0FBTyxDQUFDLFVBQUNnQyxDQUFDLEVBQUVMLE1BQU07UUFBQSxPQUFLQSxNQUFNLENBQUM3WSxLQUFLLENBQUM7TUFBQSxFQUFDO0lBQ2xEO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1aLEtBQVlSLEdBQW1CLEVBQVc7TUFDeEMsT0FBTyxJQUFJekIsT0FBTyxDQUFDLFVBQUMwQixPQUFPLEVBQUVDLE1BQU0sRUFBSztRQUN0QyxJQUFJLENBQUN4TSxLQUFLLENBQUN5TSxPQUFPLENBQUNILEdBQUcsQ0FBQyxFQUFFO1VBQ3ZCLE9BQU9FLE1BQU0sQ0FBQyxJQUFJekIsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDL0Q7UUFFQSxLQUFLLElBQUllLENBQUMsR0FBRyxDQUFDLEVBQUVDLEdBQUcsR0FBR08sR0FBRyxDQUFDMVAsTUFBTSxFQUFFa1AsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO1VBQzlDakIsT0FBTyxDQUFDMEIsT0FBTyxDQUFDRCxHQUFHLENBQUNSLENBQUMsQ0FBQyxDQUFDLENBQUM3QixJQUFJLENBQUNzQyxPQUFPLEVBQUVDLE1BQU0sQ0FBQztRQUMvQztNQUNGLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQS9ZLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpWSxXQUFrQmQsUUFBa0IsRUFBUTtNQUMxQyxJQUFNekMsT0FBTyxHQUFHeFAsVUFBVSxDQUFDaVMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6QztFQUFDO0lBQUFyWCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBa1ksb0JBQTJCdFAsS0FBSyxFQUFRO01BQ3RDLElBQUksT0FBT2lGLE9BQU8sS0FBSyxXQUFXLElBQUlBLE9BQU8sRUFBRTtRQUM3Q0EsT0FBTyxDQUFDaUIsSUFBSSxDQUFDLHVDQUF1QyxFQUFFbEcsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNoRTtJQUNGO0VBQUM7RUFBQSxPQUFBc08sT0FBQTtBQUFBO0FBR0hBLE9BQU8sQ0FBQ2xNLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFTd04sVUFBb0IsRUFBa0I7RUFDMUUsT0FBTyxJQUFJLENBQUNsQyxJQUFJLENBQUMsSUFBSSxFQUFFa0MsVUFBVSxDQUFDO0FBQ3BDLENBQUM7QUFFRHRCLE9BQU8sQ0FBQ2xNLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFTdU4sV0FBcUIsRUFBRUMsVUFBb0IsRUFBa0I7RUFDaEcsSUFBTVQsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDa0IsV0FBVyxDQUFDO0lBQUEsT0FBTSxJQUFJO0VBQUEsRUFBQztFQUVoRCxJQUFJLENBQUNaLE1BQU0sQ0FBQyxJQUFJZSxvREFBYyxDQUFDYixXQUFXLEVBQUVDLFVBQVUsRUFBRVQsT0FBTyxDQUFDLENBQUM7RUFFakUsT0FBT0EsT0FBTztBQUNoQixDQUFDO0FBRURiLE9BQU8sQ0FBQ2xNLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFTbU0sUUFBa0IsRUFBa0I7RUFDMUUsSUFBTThCLFdBQVcsR0FBRyxJQUFJLENBQUNBLFdBQVc7RUFFcEMsT0FBTyxJQUFJLENBQUMzQyxJQUFJLENBQ2QsVUFBQXRXLEtBQUs7SUFBQSxPQUFJaVosV0FBVyxDQUFDTCxPQUFPLENBQUN6QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNiLElBQUksQ0FBQztNQUFBLE9BQU10VyxLQUFLO0lBQUEsRUFBQztFQUFBLEdBQzFELFVBQUE0WCxNQUFNO0lBQUEsT0FBSXFCLFdBQVcsQ0FBQ0wsT0FBTyxDQUFDekIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDYixJQUFJLENBQUM7TUFBQSxPQUFNMkMsV0FBVyxDQUFDSixNQUFNLENBQUNqQixNQUFNLENBQUM7SUFBQSxFQUFDO0VBQUEsQ0FDbEYsQ0FBQztBQUNILENBQUM7QUFFRCwrREFBZVYsT0FBTyxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZRdEI7QUFDQTtBQUNBO0FBRkEsSUFLcUJrQyxjQUFjLGdCQUFBdlosd0lBQUEsQ0FLakMsU0FBQXVaLGVBQVliLFdBQVcsRUFBRUMsVUFBVSxFQUFFVCxPQUFPLEVBQUU7RUFBQTVZLDJJQUFBLE9BQUFpYSxjQUFBO0VBQUFoYSwySUFBQTtFQUFBQSwySUFBQTtFQUFBQSwySUFBQTtFQUM1QyxJQUFJLENBQUNtWixXQUFXLEdBQUcsT0FBT0EsV0FBVyxLQUFLLFVBQVUsR0FBR0EsV0FBVyxHQUFHLElBQUk7RUFDekUsSUFBSSxDQUFDQyxVQUFVLEdBQUcsT0FBT0EsVUFBVSxLQUFLLFVBQVUsR0FBR0EsVUFBVSxHQUFHLElBQUk7RUFDdEUsSUFBSSxDQUFDVCxPQUFPLEdBQUdBLE9BQU87QUFDeEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RIO0FBQ0E7QUFDQTtBQUNvRDtBQUVoQjtBQUM2QjtBQUdTO0FBQUEsSUFTckRzQixxQkFBcUI7RUF1RXhDLFNBQUFBLHNCQUFBLEVBQXNCO0lBQUFsYSwySUFBQSxPQUFBa2EscUJBQUE7SUFDcEIsTUFBTSxJQUFJelUsS0FBSyxDQUFDLHNFQUFzRSxDQUFDO0VBQ3pGO0VBQUMvRSx3SUFBQSxDQUFBd1oscUJBQUE7SUFBQXZaLEdBQUE7SUFBQUMsR0FBQSxFQWpFRCxTQUFBQSxJQUFBLEVBQW9FO01BQ2xFLE9BQU9zWixxQkFBcUIsQ0FBQ0Msc0JBQXNCO0lBQ3JEO0VBQUM7SUFBQXhaLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF1WiwwQkFBQSxFQUF5QztNQUN2QyxJQUFJelUsdUZBQXFDLEVBQUU7UUFDekMsSUFBTTRQLE9BQU8sR0FBRzJFLHFCQUFxQixDQUFDRyxpQ0FBaUMsQ0FBQyxDQUFDLENBQ3RFNUMsS0FBSyxDQUFDLFVBQUF2TixDQUFDO1VBQUEsT0FBSWdRLHFCQUFxQixDQUFDbFIsT0FBTyxDQUFDUyxLQUFLLENBQUMsMkNBQTJDLEVBQUVTLENBQUMsQ0FBQztRQUFBLEVBQUM7TUFDcEc7SUFDRjtFQUFDO0lBQUF2SixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBeVosa0NBQUEsR0FBQTdFLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBQTtRQUFBLE9BQUFELDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBUyxNQUFBLFdBQ1MwRCxxQkFBcUIsQ0FBQ0ssT0FBTyxHQUFHO2dCQUNyQ0MsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCQyxjQUFjLEVBQUVQLHFCQUFxQixDQUFDUSx5QkFBeUIsQ0FBQyxDQUFDLENBQzlEakQsS0FBSyxDQUFDLFVBQUF2TixDQUFDLEVBQUk7a0JBQ1ZnUSxxQkFBcUIsQ0FBQ0ssT0FBTyxHQUFHLElBQUk7a0JBRXBDLE1BQU1yUSxDQUFDO2dCQUNULENBQUM7Y0FDTCxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE2TCxRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUNGO01BQUEsU0FBQTBFLGtDQUFBO1FBQUEsT0FBQUMsa0NBQUEsQ0FBQTFELEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUFvTCxpQ0FBQTtJQUFBO0VBQUE7SUFBQTFaLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUE4WiwwQkFBQSxHQUFBbEYsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBa0YsU0FBQTtRQUFBLElBQUFKLFNBQUE7VUFBQUssd0JBQUE7VUFBQWhhLEtBQUE7VUFBQWlhLGFBQUE7VUFBQUMsTUFBQSxHQUFBOUwsU0FBQTtRQUFBLE9BQUF5RywySUFBQSxVQUFBc0YsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFqRixJQUFBLEdBQUFpRixTQUFBLENBQUFoRixJQUFBO1lBQUE7Y0FBdUN1RSxTQUFxQyxHQUFBTyxNQUFBLENBQUFqUixNQUFBLFFBQUFpUixNQUFBLFFBQUFyVSxTQUFBLEdBQUFxVSxNQUFBLE1BQUcsVUFBVTtjQUFFRix3QkFBd0IsR0FBQUUsTUFBQSxDQUFBalIsTUFBQSxRQUFBaVIsTUFBQSxRQUFBclUsU0FBQSxHQUFBcVUsTUFBQSxNQUFHLEtBQUs7Y0FBQSxNQUNySGIscUJBQXFCLENBQUNLLE9BQU8sSUFBSUwscUJBQXFCLENBQUNLLE9BQU8sQ0FBQ0MsU0FBUyxLQUFLQSxTQUFTLElBQUksQ0FBQ0ssd0JBQXdCO2dCQUFBSSxTQUFBLENBQUFoRixJQUFBO2dCQUFBO2NBQUE7Y0FDL0dwVixLQUFLLEdBQUdxWixxQkFBcUIsQ0FBQ0ssT0FBTyxDQUFDRSxjQUFjO2NBRTFEUCxxQkFBcUIsQ0FBQ0ssT0FBTyxHQUFHLElBQUk7Y0FBQyxPQUFBVSxTQUFBLENBQUF6RSxNQUFBLFdBRTlCM1YsS0FBSztZQUFBO2NBR1JpYSxhQUErQixHQUFHO2dCQUFDRCx3QkFBd0IsRUFBeEJBO2NBQXdCLENBQUM7Y0FBQSxPQUFBSSxTQUFBLENBQUF6RSxNQUFBLFdBRTNEMEQscUJBQXFCLENBQUNDLHNCQUFzQixDQUFDdFosS0FBSyxDQUFDcWEsb0JBQW9CLENBQUNKLGFBQWEsQ0FBQyxDQUMxRjNELElBQUk7Z0JBQUEsSUFBQU8sSUFBQSxHQUFBakMsNklBQUEsZUFBQUMsMklBQUEsQ0FBQyxTQUFBb0IsU0FBTTJELGNBQWM7a0JBQUEsSUFBQVUsc0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsT0FBQTtrQkFBQSxPQUFBNUYsMklBQUEsVUFBQXFCLFVBQUFDLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWhCLElBQUEsR0FBQWdCLFNBQUEsQ0FBQWYsSUFBQTtzQkFBQTt3QkFDbEJrRixzQkFBc0IsR0FBR1YsY0FBYyxDQUFDVSxzQkFBc0I7d0JBQUEsS0FHaEVBLHNCQUFzQjswQkFBQW5FLFNBQUEsQ0FBQWYsSUFBQTswQkFBQTt3QkFBQTt3QkFDeEJvRixnQkFBZ0IsR0FBR1osY0FBYyxDQUFDYyxjQUFjLENBQUMsT0FBTyxFQUFFOzBCQUFDZixTQUFTLEVBQVRBO3dCQUFTLENBQUMsQ0FBQzt3QkFDdEVZLGdCQUFnQixHQUFHWCxjQUFjLENBQUNjLGNBQWMsQ0FBQyxPQUFPLEVBQUU7MEJBQUNmLFNBQVMsRUFBVEE7d0JBQVMsQ0FBQyxDQUFDO3dCQUFDeEQsU0FBQSxDQUFBd0UsRUFBQSxHQUdyRUgsZ0JBQWdCO3dCQUFBckUsU0FBQSxDQUFBeUUsRUFBQSxHQUNoQkwsZ0JBQWdCO3dCQUFBcEUsU0FBQSxDQUFBMEUsRUFBQSxHQUNBakIsY0FBYzt3QkFBQXpELFNBQUEsQ0FBQWYsSUFBQTt3QkFBQSxPQUNad0UsY0FBYyxDQUFDa0IsV0FBVyxDQUFDalYsU0FBUyxDQUFDO3NCQUFBO3dCQUFBc1EsU0FBQSxDQUFBNEUsRUFBQSxHQUFBNUUsU0FBQSxDQUFBUCxJQUFBO3dCQUFBLE9BQUFPLFNBQUEsQ0FBQVIsTUFBQTswQkFIdkQ2RSxnQkFBZ0IsRUFBQXJFLFNBQUEsQ0FBQXdFLEVBQUE7MEJBQ2hCSixnQkFBZ0IsRUFBQXBFLFNBQUEsQ0FBQXlFLEVBQUE7MEJBQ2hCaEIsY0FBYyxFQUFBekQsU0FBQSxDQUFBMEUsRUFBQTswQkFDZEcsVUFBVSxFQUFBN0UsU0FBQSxDQUFBNEU7d0JBQUE7c0JBQUE7d0JBSVJOLE9BQU8sR0FBR2QsU0FBUyxLQUFLLFVBQVUsR0FBRzswQkFDekNzQixtQkFBbUIsRUFBRSxJQUFJOzBCQUN6QkMsbUJBQW1CLEVBQUU7d0JBQ3ZCLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQUEvRSxTQUFBLENBQUFnRixFQUFBLEdBR1l2QixjQUFjO3dCQUFBekQsU0FBQSxDQUFBZixJQUFBO3dCQUFBLE9BQ1p3RSxjQUFjLENBQUNrQixXQUFXLENBQUNMLE9BQU8sQ0FBQztzQkFBQTt3QkFBQXRFLFNBQUEsQ0FBQWlGLEVBQUEsR0FBQWpGLFNBQUEsQ0FBQVAsSUFBQTt3QkFBQSxPQUFBTyxTQUFBLENBQUFSLE1BQUE7MEJBRHJEaUUsY0FBYyxFQUFBekQsU0FBQSxDQUFBZ0YsRUFBQTswQkFDZEgsVUFBVSxFQUFBN0UsU0FBQSxDQUFBaUY7d0JBQUE7c0JBQUE7c0JBQUE7d0JBQUEsT0FBQWpGLFNBQUEsQ0FBQU4sSUFBQTtvQkFBQTtrQkFBQSxHQUFBSSxRQUFBO2dCQUFBLENBRWI7Z0JBQUEsaUJBQUFILEVBQUE7a0JBQUEsT0FBQWUsSUFBQSxDQUFBZCxLQUFBLE9BQUEzSCxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBZ00sU0FBQSxDQUFBdkUsSUFBQTtVQUFBO1FBQUEsR0FBQWtFLFFBQUE7TUFBQSxDQUNMO01BQUEsU0FBQUYsMEJBQUE7UUFBQSxPQUFBQywwQkFBQSxDQUFBL0QsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQXlMLHlCQUFBO0lBQUE7RUFBQTtFQUFBLE9BQUFSLHFCQUFBO0FBQUE7QUFBQWphLDJJQUFBLENBckVrQmlhLHFCQUFxQixhQUNOclMsb0VBQXVCLENBQUMsdUJBQXVCLENBQUM7QUFBQTVILDJJQUFBLENBRC9EaWEscUJBQXFCLDRCQUUwQyxJQUFJNVosZ0RBQU8sQ0FBeUIsSUFBSTRiLGtFQUE0QixDQUFDLENBQUMsQ0FBQztBQUFBamMsMklBQUEsQ0FGdElpYSxxQkFBcUI7QUFBQTtBQTRFMUNBLHFCQUFxQixDQUFDRSx5QkFBeUIsQ0FBQyxDQUFDLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUZqRDtBQUNBO0FBQ0E7QUFGQSxJQUdxQitCLHVCQUF1QjtFQTJCMUMsU0FBQUEsd0JBQUEsRUFBc0I7SUFBQW5jLDJJQUFBLE9BQUFtYyx1QkFBQTtJQUNwQixNQUFNLElBQUkxVyxLQUFLLENBQUMsd0VBQXdFLENBQUM7RUFDM0Y7RUFBQy9FLHdJQUFBLENBQUF5Yix1QkFBQTtJQUFBeGIsR0FBQTtJQUFBRSxLQUFBLEVBNUJELFNBQUF1YixtQkFBMEJ0QixhQUErQixFQUFvQjtNQUMzRSxJQUFNdUIsVUFBMEIsR0FBRyxFQUFFO01BRXJDLEtBQUssSUFBSXJELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzhCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3ZTLE1BQU0sRUFBRWtQLENBQUMsRUFBRSxFQUFFO1FBQ3hELElBQU1zRCxJQUFjLEdBQUcsRUFBRTtRQUV6QixLQUFLLElBQUk5TCxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEVBQUUsRUFBRTtVQUN0QyxJQUFNMkMsR0FBRyxHQUFHMkgsYUFBYSxDQUFDdUIsVUFBVSxDQUFDckQsQ0FBQyxDQUFDLENBQUNzRCxJQUFJLENBQUM5TCxLQUFLLENBQUM7VUFFbkQsSUFBSTJDLEdBQUcsRUFBRTtZQUNQbUosSUFBSSxDQUFDelQsSUFBSSxDQUFDaVMsYUFBYSxDQUFDdUIsVUFBVSxDQUFDckQsQ0FBQyxDQUFDLENBQUNzRCxJQUFJLENBQUM5TCxLQUFLLENBQUMsQ0FBQztVQUNwRDtRQUNGO1FBRUE2TCxVQUFVLENBQUN4VCxJQUFJLENBQUM7VUFDZHlULElBQUksRUFBRUEsSUFBSTtVQUNWQyxRQUFRLEVBQUV6QixhQUFhLENBQUN1QixVQUFVLENBQUNyRCxDQUFDLENBQUMsQ0FBQ3VELFFBQVE7VUFDOUNDLFVBQVUsRUFBRTFCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3JELENBQUMsQ0FBQyxDQUFDd0Q7UUFDMUMsQ0FBQyxDQUFDO01BQ0o7TUFFQTFCLGFBQWEsQ0FBQ3VCLFVBQVUsR0FBR0EsVUFBVTtNQUVyQyxPQUFPdkIsYUFBYTtJQUN0QjtFQUFDO0VBQUEsT0FBQXFCLHVCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVCSDtBQUNBO0FBQ0E7O0FBRW9DO0FBQzZCO0FBQzdCO0FBMENwQyxJQUFNTSxzQkFBc0IsR0FBRyxJQUFJO0FBQUMsSUFFZkMsaUJBQWlCO0VBYXBDLFNBQUFBLGtCQUFZakMsY0FBK0IsRUFBRWtDLFdBQXdCLEVBQUVDLHNCQUE4QixFQUFFO0lBQUE1YywySUFBQSxPQUFBMGMsaUJBQUE7SUFBQXpjLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBLHdCQVRoQyxJQUFJSyxnREFBTyxDQUE4QixDQUFDLENBQUMsQ0FBQztJQUFBTCwySUFBQTtJQUFBQSwySUFBQSw0QkFFdkYsSUFBSTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQTtJQVE5QixJQUFJLENBQUM0YyxlQUFlLEdBQUdwQyxjQUFjO0lBQ3JDLElBQUksQ0FBQ3FDLHVCQUF1QixHQUFHRixzQkFBc0I7SUFFckQsSUFBSSxJQUFJLENBQUNDLGVBQWUsRUFBRTtNQUN4QixJQUFNRSxzQkFBc0IsR0FBRyxJQUFJQywrQ0FBUyxDQUFDLElBQUksQ0FBQ0gsZUFBZSxDQUFDSSx1QkFBdUIsQ0FBQ0MsR0FBRyxDQUFDO01BQzlGLElBQU1DLHVCQUF1QixHQUFHLElBQUlILCtDQUFTLENBQUMsSUFBSSxDQUFDSCxlQUFlLENBQUNPLHdCQUF3QixDQUFDRixHQUFHLENBQUM7TUFFaEcsSUFBSSxDQUFDRyxvQkFBb0IsR0FBR0YsdUJBQXVCLENBQUNHLFVBQVU7TUFDOUQsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0osdUJBQXVCLENBQUNLLFVBQVU7TUFFOUQsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRztRQUN0QkMsS0FBSyxFQUFFWCxzQkFBc0IsQ0FBQ1ksbUJBQW1CLElBQUlSLHVCQUF1QixDQUFDUSxtQkFBbUI7UUFDaEdDLEtBQUssRUFBRWIsc0JBQXNCLENBQUNjLG1CQUFtQixJQUFJVix1QkFBdUIsQ0FBQ1U7TUFDL0UsQ0FBQztNQUVELElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7SUFDeEI7RUFDRjtFQUFDcGQsd0lBQUEsQ0FBQWdjLGlCQUFBO0lBQUEvYixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlEO01BQ3ZELE9BQU8sSUFBSSxDQUFDbWQsYUFBYTtJQUMzQjtFQUFDO0lBQUFwZCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxRQUFBLEVBQWdCO01BQ2QsSUFBSSxDQUFDZ2QsaUJBQWlCLEdBQUcsS0FBSztNQUM5QixJQUFJLENBQUNuQixlQUFlLEdBQUcsSUFBSTtNQUUzQixJQUFJLElBQUksQ0FBQ29CLGNBQWMsRUFBRTtRQUN2QkMsWUFBWSxDQUFDLElBQUksQ0FBQ0QsY0FBYyxDQUFDO1FBQ2pDLElBQUksQ0FBQ0EsY0FBYyxHQUFHLElBQUk7TUFDNUI7SUFDRjtFQUFDO0lBQUF0ZCxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBc2QsZ0JBQUEsR0FBQTFJLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBQTtRQUFBLElBQUF6VSxLQUFBO1FBQUEsSUFBQWtkLFFBQUEsRUFBQUMsa0JBQUEsRUFBQTlJLE9BQUE7UUFBQSxPQUFBRywySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLEtBQ010USxnR0FBOEM7Z0JBQUFvUSxRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUMxQ1YsUUFBTyxHQUFHO2dCQUNkbUksS0FBSyxFQUFFLENBQUM7Z0JBQ1JFLEtBQUssRUFBRTtjQUNULENBQUM7Y0FBQSxPQUFBN0gsUUFBQSxDQUFBUyxNQUFBO1lBQUE7Y0FLSDtjQUNNNkgsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSXZRLElBQUk7Z0JBQUEsT0FBYUEsSUFBSSxDQUFDd1EsRUFBRSxDQUFDelosUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sR0FBR2lKLElBQUksQ0FBQ3dRLEVBQUUsQ0FBQ3paLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRTtjQUFBO2NBQUFrUixRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUNyRyxJQUFJLENBQUM0RyxlQUFlLENBQUMwQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3REcEgsSUFBSSxDQUFDLFVBQUFxSCxLQUFLLEVBQUk7Z0JBQ2IsSUFBTUMsYUFBMEMsR0FBRyxDQUFDLENBQUM7Z0JBRXJELElBQUlELEtBQUssRUFBRTtrQkFDVCxJQUFJRSxhQUFhLEdBQUd4ZCxLQUFJLENBQUM0Yix1QkFBdUI7a0JBQ2hELElBQUk2Qix1QkFBdUI7a0JBRTNCSCxLQUFLLENBQUM5UixPQUFPLENBQUMsVUFBQWtTLE1BQU0sRUFBSTtvQkFDdEIsSUFBSUEsTUFBTSxDQUFDclgsSUFBSSxLQUFLLGdCQUFnQixJQUFJcVgsTUFBTSxDQUFDQyxvQkFBb0IsRUFBRTtzQkFDbkVILGFBQWEsR0FBR0UsTUFBTSxDQUFDQyxvQkFBb0IsR0FBRyxJQUFJO3NCQUVsRCxJQUFJSixhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzFCQSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUNDLGFBQWEsR0FBR0EsYUFBYTtzQkFDdEQ7c0JBRUEsSUFBSUQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMxQkEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDQyxhQUFhLEdBQUdBLGFBQWE7c0JBQ3REO29CQUNGO29CQUVBLElBQUlFLE1BQU0sQ0FBQ3JYLElBQUksS0FBSyxnQkFBZ0IsSUFBSXFYLE1BQU0sQ0FBQ0QsdUJBQXVCLEVBQUU7c0JBQ3RFQSx1QkFBdUIsR0FBR0MsTUFBTSxDQUFDRCx1QkFBdUI7c0JBRXhELElBQUlGLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsdUJBQXVCLEdBQUdBLHVCQUF1QjtzQkFDMUU7c0JBRUEsSUFBSUYsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMxQkEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDRSx1QkFBdUIsR0FBR0EsdUJBQXVCO3NCQUMxRTtvQkFDRjtvQkFFQSxJQUFJQyxNQUFNLENBQUNyWCxJQUFJLEtBQUssY0FBYyxFQUFFO3NCQUNsQyxJQUFNME4sS0FBSSxHQUFHMkosTUFBTSxDQUFDM0osSUFBSSxJQUFJMkosTUFBTSxDQUFDRSxTQUFTLElBQUlULGtCQUFrQixDQUFDTyxNQUFNLENBQUM7c0JBQzFFLElBQUlHLEtBQUssR0FBRyxFQUFFO3NCQUVkUCxLQUFLLENBQUM5UixPQUFPLENBQUMsVUFBQW9CLElBQUksRUFBSTt3QkFDcEIsSUFBSUEsSUFBSSxDQUFDd1EsRUFBRSxLQUFLTSxNQUFNLENBQUNJLE9BQU8sRUFBRTswQkFDOUJELEtBQUssR0FBR2pSLElBQUksQ0FBQ21SLFFBQVE7d0JBQ3ZCO3NCQUNGLENBQUMsQ0FBQztzQkFFRixJQUFJaEssS0FBSSxJQUFJL1QsS0FBSSxDQUFDdWMsZ0JBQWdCLENBQUN4SSxLQUFJLENBQUMsRUFBRTt3QkFBQSxJQUFBaUsscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUE7d0JBQ3ZDLElBQU1DLEtBQUssR0FBR1gsTUFBTSxDQUFDWSxTQUFTLElBQUksQ0FBQzt3QkFDbkMsSUFBTUMsaUJBQWlCLElBQUFQLHFCQUFBLElBQUFDLHNCQUFBLEdBQUdqZSxLQUFJLENBQUM2YyxhQUFhLENBQUNsZCxLQUFLLGNBQUFzZSxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBeEJELHNCQUFBLENBQTJCbEssS0FBSSxDQUFDLGNBQUFtSyxzQkFBQSx1QkFBaENBLHNCQUFBLENBQWtDSSxTQUFTLGNBQUFOLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQzt3QkFDMUUsSUFBTVEsVUFBVSxHQUFHSCxLQUFLLEdBQUdFLGlCQUFpQjt3QkFDNUMsSUFBTUUsU0FBUyxHQUFHZixNQUFNLENBQUN6SixTQUFTLEtBQUFrSyxzQkFBQSxHQUFHbmUsS0FBSSxDQUFDNmMsYUFBYSxDQUFDbGQsS0FBSyxjQUFBd2Usc0JBQUEsd0JBQUFDLHNCQUFBLEdBQXhCRCxzQkFBQSxDQUEyQnBLLEtBQUksQ0FBQyxjQUFBcUssc0JBQUEsdUJBQWhDQSxzQkFBQSxDQUFrQ25LLFNBQVM7d0JBQ2hGLElBQU15SyxPQUFPLEdBQUdGLFVBQVUsSUFBSUMsU0FBUyxHQUFHNVMsSUFBSSxDQUFDOFMsS0FBSyxDQUFDLENBQUMsR0FBR0gsVUFBVSxHQUNqRUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7d0JBRXZCbEIsYUFBYSxDQUFDeEosS0FBSSxDQUFDLEdBQUc7MEJBQ3BCNkssSUFBSSxFQUFFbEIsTUFBTSxDQUFDa0IsSUFBSTswQkFDakJoQixTQUFTLEVBQUU3SixLQUFJOzBCQUNmRSxTQUFTLEVBQUV5SixNQUFNLENBQUN6SixTQUFTOzBCQUMzQnlLLE9BQU8sRUFBUEEsT0FBTzswQkFDUEosU0FBUyxFQUFFWixNQUFNLENBQUNZLFNBQVM7MEJBQzNCTyxXQUFXLEVBQUVuQixNQUFNLENBQUNtQixXQUFXOzBCQUMvQkMsc0JBQXNCLEVBQUVwQixNQUFNLENBQUNvQixzQkFBc0I7MEJBQ3JEakIsS0FBSyxFQUFFQSxLQUFLLElBQUk3ZCxLQUFJLENBQUMrZSxjQUFjLENBQUNoTCxLQUFJLENBQUM7MEJBQ3pDeUosYUFBYSxFQUFiQTt3QkFDRixDQUFDO3dCQUVELElBQUlFLE1BQU0sQ0FBQ0QsdUJBQXVCLElBQUlBLHVCQUF1QixFQUFFOzBCQUM3REYsYUFBYSxDQUFDeEosS0FBSSxDQUFDLENBQUMwSix1QkFBdUIsR0FBR0MsTUFBTSxDQUFDRCx1QkFBdUIsSUFBSUEsdUJBQXVCO3dCQUN6Rzt3QkFFQSxJQUFJMUosS0FBSSxLQUFLLE9BQU8sSUFBSS9ULEtBQUksQ0FBQzZjLGFBQWEsQ0FBQ2xkLEtBQUssSUFBSUssS0FBSSxDQUFDNmMsYUFBYSxDQUFDbGQsS0FBSyxDQUFDK2MsS0FBSyxFQUFFOzBCQUNsRmEsYUFBYSxDQUFDeEosS0FBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcySixNQUFNLENBQUNzQixRQUFROzBCQUNqRHpCLGFBQWEsQ0FBQ3hKLEtBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHMkosTUFBTSxDQUFDdUIsV0FBVzswQkFDdkQxQixhQUFhLENBQUN4SixLQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRzJKLE1BQU0sQ0FBQ3dCLFVBQVU7MEJBQ3JEM0IsYUFBYSxDQUFDeEosS0FBSSxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcySixNQUFNLENBQUN5QixhQUFhOzBCQUMzRDVCLGFBQWEsQ0FBQ3hKLEtBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHMkosTUFBTSxDQUFDMEIsVUFBVTswQkFDckQ3QixhQUFhLENBQUN4SixLQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHMkosTUFBTSxDQUFDMkIsZUFBZTswQkFDL0Q5QixhQUFhLENBQUN4SixLQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHMkosTUFBTSxDQUFDNEIsY0FBYzswQkFDN0QvQixhQUFhLENBQUN4SixLQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRzJKLE1BQU0sQ0FBQzZCLFFBQVE7MEJBQ2pEaEMsYUFBYSxDQUFDeEosS0FBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcySixNQUFNLENBQUM4QixLQUFLOzBCQUMzQ2pDLGFBQWEsQ0FBQ3hKLEtBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcySixNQUFNLENBQUMrQixlQUFlOzBCQUMvRGxDLGFBQWEsQ0FBQ3hKLEtBQUksQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEdBQUcySixNQUFNLENBQUNnQyx1QkFBdUI7MEJBRS9FLElBQU1DLEdBQUcsR0FBRyxDQUFDakMsTUFBTSxDQUFDeUIsYUFBYSxHQUFHbmYsS0FBSSxDQUFDNmMsYUFBYSxDQUFDbGQsS0FBSyxDQUFDK2MsS0FBSyxDQUFDeUMsYUFBYSxLQUM3RTVCLGFBQWEsQ0FBQ3hKLEtBQUksQ0FBQyxDQUFDRSxTQUFTLEdBQUdqVSxLQUFJLENBQUM2YyxhQUFhLENBQUNsZCxLQUFLLENBQUMrYyxLQUFLLENBQUN6SSxTQUFTLENBQUMsR0FDMUUsSUFBSTswQkFFTnNKLGFBQWEsQ0FBQ3hKLEtBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHNEwsR0FBRyxHQUFHOVQsSUFBSSxDQUFDK1QsS0FBSyxDQUFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7d0JBQ3BFO3NCQUNGO29CQUNGO2tCQUNGLENBQUMsQ0FBQztnQkFDSjtnQkFFQTNmLEtBQUksQ0FBQzZjLGFBQWEsQ0FBQ2xkLEtBQUssR0FBRzRkLGFBQWE7Y0FDMUMsQ0FBQyxDQUFDLENBQUN0SCxJQUFJLENBQUMsWUFBTTtnQkFDWixJQUFJalcsS0FBSSxDQUFDOGMsaUJBQWlCLEVBQUU7a0JBQzFCOWMsS0FBSSxDQUFDK2MsY0FBYyxHQUFHN2IsTUFBTSxDQUFDMkQsVUFBVSxDQUFDO29CQUFBLE9BQU03RSxLQUFJLENBQUM0YyxlQUFlLENBQUMsQ0FBQztrQkFBQSxHQUFFckIsc0JBQXNCLENBQUM7Z0JBQy9GO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FoR0VsSCxPQUFPLEdBQUFRLFFBQUEsQ0FBQVUsSUFBQTtZQUFBO1lBQUE7Y0FBQSxPQUFBVixRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQWlHZDtNQUFBLFNBQUFtSSxnQkFBQTtRQUFBLE9BQUFLLGdCQUFBLENBQUF2SCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBNk8sZUFBQTtJQUFBO0VBQUE7SUFBQW5kLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvZixlQUF1QjFZLElBQVksRUFBVTtNQUMzQyxRQUFRQSxJQUFJO1FBQ1YsS0FBSyxPQUFPO1VBQ1YsT0FBTyxJQUFJLENBQUM4VixvQkFBb0I7UUFDbEMsS0FBSyxPQUFPO1VBQ1YsT0FBTyxJQUFJLENBQUNFLG9CQUFvQjtRQUNsQztVQUNFLE9BQU8sU0FBUztNQUNwQjtJQUNGO0VBQUM7RUFBQSxPQUFBYixpQkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6Tkg7QUFDQTtBQUNBO0FBRkEsSUFJcUJNLFNBQVM7RUFPNUIsU0FBQUEsVUFBWUUsR0FBVyxFQUFFO0lBQUFsZCwySUFBQSxPQUFBZ2QsU0FBQTtJQUFBL2MsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDdkIsSUFBSSxDQUFDOGdCLElBQUksR0FBRzdELEdBQUc7SUFFZixJQUFNOEQsZUFBZSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxDQUFDL2MsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUN2RCxJQUFNaWQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDRixJQUFJLENBQUMvYyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBRTlDLElBQUksQ0FBQ2tkLFdBQVcsR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxPQUFPLEVBQUVILGVBQWUsQ0FBQztJQUM1RCxJQUFJLENBQUNJLFdBQVcsR0FBRyxJQUFJLENBQUNELFVBQVUsQ0FBQyxPQUFPLEVBQUVILGVBQWUsQ0FBQztJQUM1RCxJQUFJLENBQUNLLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsT0FBTyxFQUFFTCxnQkFBZ0IsQ0FBQztJQUNoRixJQUFJLENBQUNNLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUMsT0FBTyxFQUFFTCxnQkFBZ0IsQ0FBQztFQUNsRjtFQUFDdmdCLHdJQUFBLENBQUFzYyxTQUFBO0lBQUFyYyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlCO01BQ3ZCLE9BQU8sSUFBSSxDQUFDc2dCLFdBQVc7SUFDekI7RUFBQztJQUFBdmdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUI7TUFDdkIsT0FBTyxJQUFJLENBQUN3Z0IsV0FBVztJQUN6QjtFQUFDO0lBQUF6Z0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtQztNQUNqQyxPQUFPLElBQUksQ0FBQ3lnQixvQkFBb0I7SUFDbEM7RUFBQztJQUFBMWdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUM7TUFDakMsT0FBTyxJQUFJLENBQUMyZ0Isb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQTVnQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBeWdCLHFCQUE2Qi9aLElBQVksRUFBRTBaLGdCQUEwQixFQUFXO01BQzlFLElBQU1PLGlCQUFpQixHQUFHUCxnQkFBZ0IsQ0FBQ1EsSUFBSSxDQUFDLFVBQUFDLFFBQVE7UUFBQSxPQUFJQSxRQUFRLENBQUN2WCxVQUFVLENBQUM1QyxJQUFJLENBQUM7TUFBQSxFQUFDO01BRXRGLElBQUksQ0FBQ2lhLGlCQUFpQixFQUFFO1FBQ3RCLE9BQU8sS0FBSztNQUNkO01BRUEsT0FBTyxDQUFDQSxpQkFBaUIsQ0FBQzNjLFFBQVEsYUFBYSxDQUFDO0lBQ2xEO0VBQUM7SUFBQWxFLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzZ0IsV0FBbUI1WixJQUFZLEVBQUV5WixlQUEwQixFQUFVO01BQ25FLElBQU1XLGFBQWEsR0FBR1gsZUFBZSxDQUFDUyxJQUFJLENBQUMsVUFBQUcsT0FBTztRQUFBLE9BQUlBLE9BQU8sQ0FBQy9jLFFBQVEsYUFBQU4sTUFBQSxDQUFheWMsZUFBZSxDQUFDUyxJQUFJLENBQUMsVUFBQXpJLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNuVSxRQUFRLE1BQUFOLE1BQUEsQ0FBTWdELElBQUksQ0FBRSxDQUFDO1FBQUEsRUFBQyxDQUFDdkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7TUFBQSxFQUFDO01BQ3ZKLElBQU02ZCxTQUFTLEdBQUdGLGFBQWEsQ0FBQzNkLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDN0MsSUFBTThkLFNBQVMsR0FBR0QsU0FBUyxDQUFDN2QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUV6QyxPQUFPOGQsU0FBUztJQUNsQjtFQUFDO0VBQUEsT0FBQTlFLFNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkRIO0FBQ0E7QUFDQTtBQUNvRDtBQUdhO0FBQUEsSUFHM0QrRSxxQkFBcUI7RUFJekIsU0FBQUEsc0JBQVlqSCxhQUFnQyxFQUFFO0lBQUE5YSwySUFBQSxPQUFBK2hCLHFCQUFBO0lBQUE5aEIsMklBQUEsa0JBSFY0SCxvRUFBdUIsQ0FBQyx1QkFBdUIsQ0FBQztJQUFBNUgsMklBQUE7SUFJbEYsSUFBSTBGLGtHQUFnRCxFQUFFO01BQ3BEO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJLENBQUNrWCxlQUFlLEdBQUcsSUFBSW1GLHVCQUF1QixDQUFDbEgsYUFBYSxDQUFDO01BRWpFO0lBQ0Y7SUFFQSxJQUFJLENBQUMrQixlQUFlLEdBQUcsSUFBSW9GLGlCQUFpQixDQUFDbkgsYUFBYSxDQUFDO0VBQzdEO0VBQUNwYSx3SUFBQSxDQUFBcWhCLHFCQUFBO0lBQUFwaEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QztNQUNyQyxPQUFPLElBQUksQ0FBQ2ljLGVBQWU7SUFDN0I7RUFBQztJQUFBbGMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0RDtNQUMxRCxPQUFPLElBQUksQ0FBQ2ljLGVBQWUsQ0FBQ0ksdUJBQXVCO0lBQ3JEO0VBQUM7SUFBQXRjLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkQ7TUFDM0QsT0FBTyxJQUFJLENBQUNpYyxlQUFlLENBQUNPLHdCQUF3QjtJQUN0RDtFQUFDO0lBQUF6YyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU8sSUFBSSxDQUFDaWMsZUFBZSxDQUFDcUYsZUFBZTtJQUM3QztFQUFDO0lBQUF2aEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnRDtNQUM5QyxPQUFPLElBQUksQ0FBQ2ljLGVBQWUsQ0FBQ3NGLGtCQUFrQjtJQUNoRDtFQUFDO0lBQUF4aEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLE9BQU8sSUFBSSxDQUFDaWMsZUFBZSxDQUFDdUYsZ0JBQWdCLEtBQUssVUFBVTtJQUNwRTtFQUFDO0lBQUF6aEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLE9BQU8sSUFBSSxDQUFDaWMsZUFBZSxDQUFDd0YsZ0JBQWdCLEtBQUssVUFBVTtJQUNwRTtFQUFDO0lBQUExaEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQztNQUNwQyxPQUFPLENBQUMrRSx5RkFBdUMsSUFBSSxPQUFPLElBQUksQ0FBQ2tYLGVBQWUsQ0FBQ3RCLGNBQWMsS0FBSyxVQUFVO0lBQzlHO0VBQUM7SUFBQTVhLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUF5aEIsWUFBQSxHQUFBN00sNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBQyxRQUFrQjJGLE9BQXlCO1FBQUEsSUFBQXBhLEtBQUE7UUFBQSxPQUFBd1UsMklBQUEsVUFBQUksU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FBQSxLQUNyQ3RRLGlHQUErQztnQkFBQW9RLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBUyxNQUFBLFdBSzFDLElBQUl1QixPQUFPLENBQUMsVUFBQzBCLE9BQU8sRUFBRUMsTUFBTTtnQkFBQSxPQUFLeFksS0FBSSxDQUFDMmIsZUFBZSxDQUFDbEIsV0FBVyxDQUFDbEMsT0FBTyxFQUFFQyxNQUFNLEVBQUU0QixPQUFPLENBQUM7Y0FBQSxFQUFDO1lBQUE7Y0FBQSxPQUFBdkYsUUFBQSxDQUFBUyxNQUFBLFdBRzlGLElBQUksQ0FBQ3FHLGVBQWUsQ0FBQ2xCLFdBQVcsQ0FBQ0wsT0FBTyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF2RixRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUNqRDtNQUFBLFNBQUFnRyxZQUFBaEYsRUFBQTtRQUFBLE9BQUEyTCxZQUFBLENBQUExTCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBME0sV0FBQTtJQUFBO0VBQUE7SUFBQWhiLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUEwaEIsYUFBQSxHQUFBOU0sNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBb0IsU0FBbUJ3RSxPQUEwQjtRQUFBLElBQUFwWixNQUFBO1FBQUEsT0FBQXdULDJJQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWhCLElBQUEsR0FBQWdCLFNBQUEsQ0FBQWYsSUFBQTtZQUFBO2NBQUEsS0FDdkN0USxpR0FBK0M7Z0JBQUFxUixTQUFBLENBQUFmLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFlLFNBQUEsQ0FBQVIsTUFBQSxXQUsxQyxJQUFJdUIsT0FBTyxDQUFDLFVBQUMwQixPQUFPLEVBQUVDLE1BQU07Z0JBQUEsT0FBS3hYLE1BQUksQ0FBQzJhLGVBQWUsQ0FBQzJGLFlBQVksQ0FBQy9JLE9BQU8sRUFBRUMsTUFBTSxFQUFFNEIsT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO2NBQUEsT0FBQXRFLFNBQUEsQ0FBQVIsTUFBQSxXQUcvRixJQUFJLENBQUNxRyxlQUFlLENBQUMyRixZQUFZLENBQUNsSCxPQUFPLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXRFLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ2xEO01BQUEsU0FBQTBMLGFBQUFDLEdBQUE7UUFBQSxPQUFBRixhQUFBLENBQUEzTCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBdVQsWUFBQTtJQUFBO0VBQUE7SUFBQTdoQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBNmhCLG9CQUFBLEdBQUFqTiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFrRixTQUEwQitILFdBQXNDO1FBQUEsT0FBQWpOLDJJQUFBLFVBQUFzRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWpGLElBQUEsR0FBQWlGLFNBQUEsQ0FBQWhGLElBQUE7WUFBQTtjQUFBLE9BQUFnRixTQUFBLENBQUF6RSxNQUFBLFdBQ3ZELElBQUksQ0FBQ3FHLGVBQWUsQ0FBQytGLG1CQUFtQixDQUFDamQsaUdBQStDLEdBQzdGLElBQUlrZCxxQkFBcUIsQ0FBQ0YsV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBMUgsU0FBQSxDQUFBdkUsSUFBQTtVQUFBO1FBQUEsR0FBQWtFLFFBQUE7TUFBQSxDQUN4RDtNQUFBLFNBQUFnSSxvQkFBQUUsR0FBQTtRQUFBLE9BQUFKLG9CQUFBLENBQUE5TCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBMlQsbUJBQUE7SUFBQTtFQUFBO0lBQUFqaUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWtpQixxQkFBQSxHQUFBdE4sNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBc04sU0FBMkJMLFdBQXNDO1FBQUEsSUFBQU0sZ0JBQUE7UUFBQSxJQUFBQyxTQUFBO1FBQUEsT0FBQXhOLDJJQUFBLFVBQUF5TixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXBOLElBQUEsR0FBQW9OLFNBQUEsQ0FBQW5OLElBQUE7WUFBQTtjQUN6RGlOLFNBQVMsSUFBQUQsZ0JBQUEsR0FBR04sV0FBVyxDQUFDekYsR0FBRyxjQUFBK0YsZ0JBQUEsdUJBQWZBLGdCQUFBLENBQWlCdGYsS0FBSyxDQUFDLFlBQVksQ0FBQztjQUV0RCxJQUFJdWYsU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQ2xhLE9BQU8sQ0FBQzJHLElBQUksQ0FBQywrQkFBK0IsQ0FBQztjQUNwRDtjQUFDLE9BQUF5VCxTQUFBLENBQUE1TSxNQUFBLFdBRU0sSUFBSSxDQUFDcUcsZUFBZSxDQUFDd0csb0JBQW9CLENBQUMxZCxpR0FBK0MsR0FDOUYsSUFBSWtkLHFCQUFxQixDQUFDRixXQUFXLENBQUMsR0FBR0EsV0FBVyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFTLFNBQUEsQ0FBQTFNLElBQUE7VUFBQTtRQUFBLEdBQUFzTSxRQUFBO01BQUEsQ0FDeEQ7TUFBQSxTQUFBSyxxQkFBQUMsR0FBQTtRQUFBLE9BQUFQLHFCQUFBLENBQUFuTSxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBb1Usb0JBQUE7SUFBQTtFQUFBO0lBQUExaUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTBpQixXQUFBLEVBQTZCO01BQzNCLE9BQU8sSUFBSSxDQUFDMUcsZUFBZSxDQUFDMEcsVUFBVSxDQUFDLENBQUM7SUFDMUM7RUFBQztJQUFBNWlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEyaUIsYUFBQSxFQUFpQztNQUMvQixPQUFPLElBQUksQ0FBQzNHLGVBQWUsQ0FBQzJHLFlBQVksQ0FBQyxDQUFDO0lBQzVDO0VBQUM7SUFBQTdpQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMGQsU0FBU2tGLFFBQWtDLEVBQTJCO01BQ3BFLE9BQU8sSUFBSSxDQUFDNUcsZUFBZSxDQUFDMEIsUUFBUSxDQUFDa0YsUUFBUSxDQUFDO0lBQ2hEO0VBQUM7SUFBQTlpQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNmlCLGVBQUEsRUFBaUQ7TUFBQSxJQUFBQyxNQUFBO01BQy9DLE9BQU8sSUFBSTVMLE9BQU8sQ0FBQyxVQUFBMEIsT0FBTyxFQUFJO1FBQzVCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQU1sRSxPQUFPLEdBQUdvTyxNQUFJLENBQUM5RyxlQUFlLENBQUMwQixRQUFRLENBQUM5RSxPQUFPLENBQUM7TUFDeEQsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBOVksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWUsaUJBQWlCMkYsSUFBMEIsRUFBRUcsUUFBNEMsRUFBRTRULE9BQTJDLEVBQVE7TUFDNUksSUFBSSxDQUFDdUIsZUFBZSxDQUFDamIsZ0JBQWdCLENBQUMyRixJQUFJLEVBQUVHLFFBQVEsRUFBRTRULE9BQU8sQ0FBQztJQUNoRTtFQUFDO0lBQUEzYSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBa0Isb0JBQW9Cd0YsSUFBMEIsRUFBRUcsUUFBNEMsRUFBRTRULE9BQXdDLEVBQVE7TUFDNUksSUFBSSxDQUFDdUIsZUFBZSxDQUFDOWEsbUJBQW1CLENBQUN3RixJQUFJLEVBQUVHLFFBQVEsRUFBRTRULE9BQU8sQ0FBQztJQUNuRTtFQUFDO0lBQUEzYSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMGEsZUFBZXZXLElBQVksRUFBRXNXLE9BQThCLEVBQXFCO01BQzlFLE9BQU8sSUFBSSxDQUFDdUIsZUFBZSxDQUFDdEIsY0FBYyxDQUFDdlcsSUFBSSxFQUFFc1csT0FBTyxDQUFDO0lBQzNEO0VBQUM7SUFBQTNhLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEraUIsVUFBVWpILFdBQXdCLEVBQVE7TUFBQSxJQUFBa0gsTUFBQTtNQUN4Q2xILFdBQVcsQ0FBQ21ILFNBQVMsQ0FBQyxDQUFDLENBQUNwWCxPQUFPLENBQUMsVUFBQXFYLEtBQUssRUFBSTtRQUN2Q0YsTUFBSSxDQUFDaEgsZUFBZSxDQUFDbUgsUUFBUSxDQUFDRCxLQUFLLENBQUM7TUFDdEMsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBcGpCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF1aEIsaUJBQUEsRUFBcUM7TUFDbkMsT0FBTyxJQUFJLENBQUN2RixlQUFlLENBQUN1RixnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hEO0VBQUM7SUFBQXpoQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd2hCLGlCQUFpQnZILGFBQStCLEVBQVE7TUFDdEQsSUFBSSxDQUFDK0IsZUFBZSxDQUFDd0YsZ0JBQWdCLENBQUN2SCxhQUFhLENBQUM7SUFDdEQ7RUFBQztJQUFBbmEsR0FBQTtJQUFBQyxHQUFBLEVBTUQsU0FBQUEsSUFBQSxFQUFnRjtNQUM5RSxPQUFPLElBQUksQ0FBQ2ljLGVBQWUsQ0FBQ29ILE9BQU87SUFDckMsQ0FBQztJQUFBL1EsR0FBQSxFQU5ELFNBQUFBLElBQVlnUixPQUF5RSxFQUFFO01BQ3JGLElBQUksQ0FBQ3JILGVBQWUsQ0FBQ29ILE9BQU8sR0FBR0MsT0FBTztJQUN4QztFQUFDO0lBQUF2akIsR0FBQTtJQUFBQyxHQUFBLEVBVUQsU0FBQUEsSUFBQSxFQUFtRztNQUNqRyxPQUFPLElBQUksQ0FBQ2ljLGVBQWUsQ0FBQ3NILGNBQWM7SUFDNUMsQ0FBQztJQUFBalIsR0FBQSxFQU5ELFNBQUFBLElBQW1CZ1IsT0FBcUYsRUFBRTtNQUN4RyxJQUFJLENBQUNySCxlQUFlLENBQUNzSCxjQUFjLEdBQUdELE9BQU87SUFDL0M7RUFBQztJQUFBdmpCLEdBQUE7SUFBQUMsR0FBQSxFQVVELFNBQUFBLElBQUEsRUFBNEc7TUFDMUcsT0FBTyxJQUFJLENBQUNpYyxlQUFlLENBQUN1SCx1QkFBdUI7SUFDckQsQ0FBQztJQUFBbFIsR0FBQSxFQU5ELFNBQUFBLElBQTRCZ1IsT0FBcUYsRUFBRTtNQUNqSCxJQUFJLENBQUNySCxlQUFlLENBQUN1SCx1QkFBdUIsR0FBR0YsT0FBTztJQUN4RDtFQUFDO0lBQUF2akIsR0FBQTtJQUFBQyxHQUFBLEVBVUQsU0FBQUEsSUFBQSxFQUEyRjtNQUN6RixPQUFPLElBQUksQ0FBQ2ljLGVBQWUsQ0FBQ3dILDBCQUEwQjtJQUN4RCxDQUFDO0lBQUFuUixHQUFBLEVBTkQsU0FBQUEsSUFBK0JnUixPQUFpRSxFQUFFO01BQ2hHLElBQUksQ0FBQ3JILGVBQWUsQ0FBQ3dILDBCQUEwQixHQUFHSCxPQUFPO0lBQzNEO0VBQUM7SUFBQXZqQixHQUFBO0lBQUFFLEtBQUEsRUFNRCxTQUFBeWpCLE1BQUEsRUFBYztNQUNaLElBQUksQ0FBQ3pILGVBQWUsQ0FBQ3lILEtBQUssQ0FBQyxDQUFDO0lBQzlCO0VBQUM7SUFBQTNqQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxRQUFBLEVBQWdCO01BQ2QsSUFBSSxDQUFDNmIsZUFBZSxHQUFHLElBQUk7SUFDN0I7RUFBQztFQUFBLE9BQUFrRixxQkFBQTtBQUFBO0FBR0gsK0RBQWVBLHFCQUFxQixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvTHBDO0FBQ0E7QUFDQTs7QUFJNEQ7QUFBQSxJQUV0RDdGLDRCQUE0QjtFQUFBLFNBQUFBLDZCQUFBO0lBQUFsYywySUFBQSxPQUFBa2MsNEJBQUE7RUFBQTtFQUFBeGIsd0lBQUEsQ0FBQXdiLDRCQUFBO0lBQUF2YixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBMGpCLHFCQUFBLEdBQUE5Tyw2SUFBQSxlQUFBQywySUFBQSxDQUNoQyxTQUFBQyxRQUEyQm1GLGFBQWdDO1FBQUEsT0FBQXBGLDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBUyxNQUFBLFdBQ2xELElBQUl1TCwyREFBcUIsQ0FBQ2pILGFBQWEsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBL0UsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDaEQ7TUFBQSxTQUFBdUYscUJBQUF2RSxFQUFBO1FBQUEsT0FBQTROLHFCQUFBLENBQUEzTixLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBaU0sb0JBQUE7SUFBQTtFQUFBO0VBQUEsT0FBQWdCLDRCQUFBO0FBQUE7QUFHSCwrREFBZUEsNEJBQTRCLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZDNDO0FBQ0E7QUFDQTtBQUZBLElBT3FCMWIsZUFBZTtFQUdsQyxTQUFBQSxnQkFBWWdrQixPQUFtQixFQUFFO0lBQUF4a0IsMklBQUEsT0FBQVEsZUFBQTtJQUFBUCwySUFBQTtJQUMvQixJQUFJLENBQUN3a0IsUUFBUSxHQUFHRCxPQUFPO0VBQ3pCO0VBQUM5akIsd0lBQUEsQ0FBQUYsZUFBQTtJQUFBRyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWU7TUFDYixPQUFPLElBQUksQ0FBQzZqQixRQUFRLENBQUM1akIsS0FBSztJQUM1QjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE2akIsVUFBVWhkLFFBQXFCLEVBQWU7TUFDNUMsT0FBTyxJQUFJLENBQUMrYyxRQUFRLENBQUNDLFNBQVMsQ0FBQ2hkLFFBQVEsQ0FBQztJQUMxQztFQUFDO0VBQUEsT0FBQWxILGVBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJIO0FBQ0E7QUFDQTs7QUFHNEM7QUFBQSxJQUd0Q21rQixrQkFBa0IsMEJBQUFDLFdBQUE7RUFBQUMscUlBQUEsQ0FBQUYsa0JBQUEsRUFBQUMsV0FBQTtFQUFBLElBQUFFLE1BQUEsR0FBQUMsWUFBQSxDQUFBSixrQkFBQTtFQUN0QixTQUFBQSxtQkFBWUssU0FBbUIsRUFBRXRkLFFBQVcsRUFBRTtJQUFBMUgsMklBQUEsT0FBQTJrQixrQkFBQTtJQUFBLE9BQUFHLE1BQUEsQ0FBQTdpQixJQUFBLE9BQ3RDLFlBQU07TUFDVixJQUFNZ2pCLEdBQUcsR0FBR0QsU0FBUyxDQUFDMWdCLE9BQU8sQ0FBQ29ELFFBQVEsQ0FBQztNQUV2QyxJQUFJdWQsR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNaRCxTQUFTLENBQUN0VSxNQUFNLENBQUN1VSxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQzFCO0lBQ0YsQ0FBQztFQUNIO0VBQUMsT0FBQXZrQix3SUFBQSxDQUFBaWtCLGtCQUFBO0FBQUEsRUFUaUM3aUIscURBQVU7QUFBQSxJQVl6QnhCLE9BQU87RUFJMUIsU0FBQUEsUUFBWU8sS0FBUSxFQUFFO0lBQUFiLDJJQUFBLE9BQUFNLE9BQUE7SUFBQUwsMklBQUE7SUFBQUEsMklBQUE7SUFDcEIsSUFBSSxDQUFDaWxCLFVBQVUsR0FBRyxFQUFFO0lBQ3BCLElBQUksQ0FBQzlNLE1BQU0sR0FBR3ZYLEtBQUs7RUFDckI7RUFBQ0gsd0lBQUEsQ0FBQUosT0FBQTtJQUFBSyxHQUFBO0lBQUFDLEdBQUEsRUF3QkQsU0FBQUEsSUFBQSxFQUFlO01BQ2IsT0FBTyxJQUFJLENBQUN3WCxNQUFNO0lBQ3BCLENBQUM7SUFBQWxGLEdBQUEsRUF4QkQsU0FBQUEsSUFBVXJTLEtBQVEsRUFBRTtNQUNsQixJQUFJc2tCLE9BQU8sR0FBRyxJQUFJLENBQUMvTSxNQUFNLEtBQUt2WCxLQUFLO01BRW5DLElBQUlza0IsT0FBTyxJQUFJdGtCLEtBQUssRUFBRTtRQUNwQixJQUFNdWtCLFVBQVUsR0FBR3ZrQixLQUFrQztRQUVyRCxJQUFJLE9BQU91a0IsVUFBVSxDQUFDQyxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQzNDRixPQUFPLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDak4sTUFBTSxDQUFDO1FBQzNDO01BQ0Y7TUFFQSxJQUFJLENBQUMrTSxPQUFPLEVBQUU7UUFDWjtNQUNGO01BRUEsSUFBSSxDQUFDL00sTUFBTSxHQUFHdlgsS0FBSztNQUVuQixJQUFJLENBQUNxa0IsVUFBVSxDQUFDeFksT0FBTyxDQUFDLFVBQUFoRixRQUFRLEVBQUk7UUFDbENBLFFBQVEsQ0FBQzdHLEtBQUssQ0FBQztNQUNqQixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQU1ELFNBQUE2akIsVUFBVWhkLFFBQXFCLEVBQWU7TUFDNUMsSUFBSSxDQUFDd2QsVUFBVSxDQUFDcmMsSUFBSSxDQUFDbkIsUUFBUSxDQUFDO01BRTlCQSxRQUFRLENBQUMsSUFBSSxDQUFDMFEsTUFBTSxDQUFDO01BRXJCLE9BQU8sSUFBSXVNLGtCQUFrQixDQUFjLElBQUksQ0FBQ08sVUFBVSxFQUFFeGQsUUFBUSxDQUFDO0lBQ3ZFO0VBQUM7RUFBQSxPQUFBcEgsT0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3REg7QUFDQTtBQUNBO0FBRkEsSUFJcUI0VCxXQUFXO0VBQUEsU0FBQUEsWUFBQTtJQUFBbFUsMklBQUEsT0FBQWtVLFdBQUE7RUFBQTtFQUFBeFQsd0lBQUEsQ0FBQXdULFdBQUE7SUFBQXZULEdBQUE7SUFBQUUsS0FBQSxFQUM5QixTQUFBeWtCLHNCQUE2Qm5TLEdBQVcsRUFBVTtNQUNoRCxJQUFJO1FBQ0YsSUFBTW9TLE9BQU8sR0FBRyxJQUFJcGYsR0FBRyxDQUFDZ04sR0FBRyxDQUFDO1FBRTVCLE9BQU9vUyxPQUFPLENBQUNDLE1BQU07TUFDdkIsQ0FBQyxDQUFDLE9BQU90YixDQUFDLEVBQUU7UUFDVixPQUFPLEVBQUU7TUFDWDtJQUNGO0VBQUM7RUFBQSxPQUFBZ0ssV0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2JIO0FBQ0E7QUFDQTtBQUNvRDtBQUNkO0FBQ0Y7QUFDZ0I7QUFDSTtBQUVRO0FBQ1I7QUFDTTtBQUNpQjtBQUMwQjtBQUVuQztBQUNOO0FBQ1A7QUFDSjtBQUVzQjtBQUVWO0FBQ3ZCO0FBQ0Y7QUFDd0M7QUFDNUI7QUFDRztBQUNJO0FBRTNELElBQU10TSxZQUFZLEdBQUd4RixNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBSUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUlqQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0FBQUMsSUFlekUwSCxHQUFHO0VBaVV0QixTQUFBQSxJQUFBLEVBQXNCO0lBQUE5SCwySUFBQSxPQUFBOEgsR0FBQTtJQUNwQixNQUFNLElBQUlyQyxLQUFLLENBQUMsb0RBQW9ELENBQUM7RUFDdkU7RUFBQy9FLHdJQUFBLENBQUFvSCxHQUFBO0lBQUFuSCxHQUFBO0lBQUFDLEdBQUEsRUF2U0QsU0FBQUEsSUFBQSxFQUFrQztNQUNoQyxPQUFPZ0gsWUFBWTtJQUNyQjtFQUFDO0lBQUFqSCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU8sSUFBSSxDQUFDZ0ssb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQWpLLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0M7TUFDcEMsT0FBTyxJQUFJLENBQUM0UyxRQUFRO0lBQ3RCO0VBQUM7SUFBQTdTLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUM7TUFDbkMsT0FBT2tILEdBQUcsQ0FBQzJkLGdCQUFnQjtJQUM3QjtFQUFDO0lBQUE5a0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtQztNQUNqQyxPQUFPa0gsR0FBRyxDQUFDNGQsZ0JBQWdCO0lBQzdCO0VBQUM7SUFBQS9rQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU9rSCxHQUFHLENBQUM2ZCxvQkFBb0I7SUFDakM7RUFBQztJQUFBaGxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBT2tILEdBQUcsQ0FBQzhkLHFCQUFxQjtJQUNsQztFQUFDO0lBQUFqbEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0RTtNQUMxRSxPQUFPa0gsR0FBRyxDQUFDK2QsOEJBQThCO0lBQzNDO0VBQUM7SUFBQWxsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU9rSCxHQUFHLENBQUNnZSw0QkFBNEI7SUFDekM7RUFBQztJQUFBbmxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkQ7TUFDekQsT0FBT2tILEdBQUcsQ0FBQ2llLHFDQUFxQztJQUNsRDtFQUFDO0lBQUFwbEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPa0gsR0FBRyxDQUFDa2UsNkJBQTZCO0lBQzFDO0VBQUM7SUFBQXJsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBEO01BQ3hELE9BQU9rSCxHQUFHLENBQUNtZSxvQ0FBb0M7SUFDakQ7RUFBQztJQUFBdGxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0Q7TUFDcEQsT0FBTyxJQUFJLENBQUNzbEIsZ0NBQWdDO0lBQzlDO0VBQUM7SUFBQXZsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU8sSUFBSSxDQUFDdWxCLHFDQUFxQztJQUNuRDtFQUFDO0lBQUF4bEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQ3dsQixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBemxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBb0Q7TUFDbEQsT0FBTyxJQUFJLENBQUN5bEIsa0JBQWtCO0lBQ2hDO0VBQUM7SUFBQTFsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWtEO01BQ2hELE9BQU8sSUFBSSxDQUFDMGxCLFlBQVk7SUFDMUI7RUFBQztJQUFBM2xCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUMsT0FBT2tILEdBQUcsQ0FBQ3llLGVBQWU7SUFDNUI7RUFBQztJQUFBNWxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBb0U7TUFDbEUsT0FBTyxJQUFJLENBQUM0bEIsMkJBQTJCO0lBQ3pDO0VBQUM7SUFBQTdsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJDO01BQ3pDLE9BQU8sSUFBSSxDQUFDNmxCLGFBQWE7SUFDM0I7RUFBQztJQUFBOWxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBb0U7TUFDbEUsT0FBTyxJQUFJLENBQUM4bEIsK0NBQStDO0lBQzdELENBQUM7SUFBQXhULEdBQUEsRUFFRCxTQUFBQSxJQUEwRHlULGFBQXFCLEVBQUU7TUFDL0UsSUFBSSxDQUFDRCwrQ0FBK0MsR0FBR0MsYUFBYTtJQUN0RTtFQUFDO0lBQUFobUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxPQUFPMEUsdUdBQXlELENBQUMsSUFBSSxDQUFDMEQsT0FBTyxDQUFDZ0YsU0FBUyxDQUFDbk4sS0FBSyxDQUFDO0lBQ2hHO0VBQUM7SUFBQUYsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnRDtNQUM5QyxPQUFPd0UsK0dBQStELENBQUMwQyxHQUFHLENBQUM4ZSxlQUFlLENBQUMvbEIsS0FBSyxDQUFDO0lBQ25HO0VBQUM7SUFBQUYsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPNEIsMERBQWU7SUFDeEI7RUFBQztJQUFBN0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWdtQiw0QkFBQSxFQUEyQztNQUFBLElBQUEzbEIsS0FBQTtNQUN6QyxJQUFNNGxCLHNCQUFzQixHQUFHamYsaUZBQW9DO01BRW5FaWYsc0JBQXNCLENBQUNuVCxTQUFTLEdBQUc3TCxHQUFHLENBQUNpZixlQUFlO01BRXRELElBQU1DLGtCQUFrQixHQUFHbGYsR0FBRyxDQUFDd0wsWUFBWSxDQUFDb1IsU0FBUyxDQUFDLFVBQUFuUixXQUFXLEVBQUk7UUFDbkV1VCxzQkFBc0IsQ0FBQ3ZULFdBQVcsR0FBR0EsV0FBVztNQUNsRCxDQUFDLENBQUM7TUFDRixJQUFNMFQsbUJBQW1CLEdBQUduZixHQUFHLENBQUNvZixZQUFZLENBQUN4QyxTQUFTLENBQUMsVUFBQTdqQixLQUFLLEVBQUk7UUFDOUQsSUFBTXNtQixpQkFBaUIsR0FBR2ptQixLQUFJLENBQUM4SCxPQUFPLENBQUM0RixTQUFTLENBQUMvTixLQUFLLENBQUM0Z0IsSUFBSSxDQUFDLFVBQUE5VCxRQUFRO1VBQUEsT0FBSUEsUUFBUSxZQUFZeUUsaUVBQWlCO1FBQUEsRUFBQztRQUU5RyxJQUFJK1UsaUJBQWlCLEVBQUU7VUFDckJMLHNCQUFzQixDQUFDM1QsR0FBRyxHQUFHdFMsS0FBSztVQUVsQ0ssS0FBSSxDQUFDOEgsT0FBTyxDQUFDNEYsU0FBUyxDQUFDaEIsTUFBTSxDQUFDdVosaUJBQWlCLENBQUM7VUFDaERqbUIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDNEYsU0FBUyxDQUFDL00sR0FBRyxDQUFDLElBQUl1USxpRUFBaUIsQ0FBQzBVLHNCQUFzQixDQUFDLENBQUM7VUFDekU1bEIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsK0JBQStCLEVBQUU2ZCxzQkFBc0IsQ0FBQzNULEdBQUcsQ0FBQztRQUNoRjtNQUNGLENBQUMsQ0FBQztNQUNGLElBQU1pVSxjQUFjLEdBQUd0ZixHQUFHLENBQUMwTCxRQUFRLENBQUNrUixTQUFTLENBQUMsVUFBQWpSLE9BQU8sRUFBSTtRQUN2RCxJQUFNMFQsaUJBQWlCLEdBQUdqbUIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDNEYsU0FBUyxDQUFDL04sS0FBSyxDQUFDNGdCLElBQUksQ0FBQyxVQUFBOVQsUUFBUTtVQUFBLE9BQUlBLFFBQVEsWUFBWXlFLGlFQUFpQjtRQUFBLEVBQUM7UUFFOUcsSUFBSStVLGlCQUFpQixJQUFJMVQsT0FBTyxFQUFFO1VBQ2hDcVQsc0JBQXNCLENBQUNyVCxPQUFPLEdBQUdBLE9BQU87VUFFeEN2UyxLQUFJLENBQUM4SCxPQUFPLENBQUM0RixTQUFTLENBQUNoQixNQUFNLENBQUN1WixpQkFBaUIsQ0FBQztVQUNoRGptQixLQUFJLENBQUM4SCxPQUFPLENBQUM0RixTQUFTLENBQUMvTSxHQUFHLENBQUMsSUFBSXVRLGlFQUFpQixDQUFDMFUsc0JBQXNCLENBQUMsQ0FBQztVQUN6RTVsQixLQUFJLENBQUM4SCxPQUFPLENBQUNDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTZkLHNCQUFzQixDQUFDclQsT0FBTyxDQUFDO1FBQ3hGO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBOVMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXdtQiwwQkFBQSxFQUF5QztNQUN2Q3ZmLEdBQUcsQ0FBQ3llLGVBQWUsR0FBRzNTLCtFQUFnQyxDQUFDMFQsdUVBQXNCLENBQUM7TUFDOUV4ZixHQUFHLENBQUM2TSxxQkFBcUIsR0FBRzdNLEdBQUcsQ0FBQ3llLGVBQWUsQ0FBQ3ZTLG9CQUFvQjtNQUVwRWxNLEdBQUcsQ0FBQzZNLHFCQUFxQixDQUFDaEIsU0FBUyxHQUFHN0wsR0FBRyxDQUFDaWYsZUFBZTtNQUV6RCxJQUFNQyxrQkFBa0IsR0FBR2xmLEdBQUcsQ0FBQ3dMLFlBQVksQ0FBQ29SLFNBQVMsQ0FBQyxVQUFBblIsV0FBVyxFQUFJO1FBQ25FekwsR0FBRyxDQUFDNk0scUJBQXFCLENBQUNwQixXQUFXLEdBQUdBLFdBQVc7TUFDckQsQ0FBQyxDQUFDO01BQ0YsSUFBTTBULG1CQUFtQixHQUFHbmYsR0FBRyxDQUFDb2YsWUFBWSxDQUFDeEMsU0FBUyxDQUFDLFVBQUE3akIsS0FBSyxFQUFJO1FBQzlEaUgsR0FBRyxDQUFDNk0scUJBQXFCLENBQUN4QixHQUFHLEdBQUd0UyxLQUFLO01BQ3ZDLENBQUMsQ0FBQztNQUNGLElBQU11bUIsY0FBYyxHQUFHdGYsR0FBRyxDQUFDMEwsUUFBUSxDQUFDa1IsU0FBUyxDQUFDLFVBQUFqUixPQUFPLEVBQUk7UUFDdkQzTCxHQUFHLENBQUM2TSxxQkFBcUIsQ0FBQ2xCLE9BQU8sR0FBR0EsT0FBTztNQUM3QyxDQUFDLENBQUM7TUFDRixJQUFNNVMsS0FBSyxHQUFHLElBQUksQ0FBQ29SLDZCQUE2QixDQUFDbE4sY0FBYyxDQUFDLHNCQUFzQixDQUFDO01BRXZGLElBQUlsRSxLQUFLLEVBQUU7UUFDVCtTLCtFQUFnQyxDQUFDYiwwRUFBYyxDQUFDbFMsS0FBSyxDQUFDLENBQUM7TUFDekQ7TUFFQSxJQUFNMG1CLHFCQUFxQixHQUFHemYsR0FBRyxDQUFDOGUsZUFBZSxDQUFDbEMsU0FBUyxDQUFDLFVBQUFyUSxjQUFjLEVBQUk7UUFDNUVULCtFQUFnQyxDQUFDUyxjQUFjLENBQUM7TUFDbEQsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBMVQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTJtQiwyREFBQSxFQUEwRTtNQUN4RSxJQUFJLENBQUMxQiw0QkFBNEIsR0FBRyxJQUFJLENBQUM3VCw2QkFBNkIsQ0FBQy9NLGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQztNQUMvSCxJQUFJLENBQUM4RCxPQUFPLENBQUNDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLENBQUM2Yyw0QkFBNEIsQ0FBQztNQUV0RztJQUNGO0VBQUM7SUFBQW5sQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNG1CLG9FQUFBLEVBQW1GO01BQ2pGLElBQUksQ0FBQzFCLHFDQUFxQyxHQUFHLElBQUksQ0FBQzlULDZCQUE2QixDQUFDL00sZUFBZSxDQUFDLGdEQUFnRCxDQUFDO01BQ2pKLElBQUksQ0FBQzhELE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLElBQUksQ0FBQzhjLHFDQUFxQyxDQUFDO01BRXhIO0lBQ0Y7RUFBQztJQUFBcGxCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE2bUIsK0RBQUEsRUFBOEU7TUFDNUUsSUFBSSxDQUFDeEIsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDalUsNkJBQTZCLENBQUMvTSxlQUFlLENBQUMsNENBQTRDLENBQUM7TUFDeEksSUFBSSxDQUFDOEQsT0FBTyxDQUFDQyxJQUFJLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDaWQsZ0NBQWdDLENBQUM7TUFFL0c7SUFDRjtFQUFDO0lBQUF2bEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQThtQixvRUFBQSxFQUFtRjtNQUNqRixJQUFJLENBQUN4QixxQ0FBcUMsR0FBRyxJQUFJLENBQUNsVSw2QkFBNkIsQ0FBQy9NLGVBQWUsQ0FBQyxrREFBa0QsQ0FBQztNQUNuSixJQUFJLENBQUM4RCxPQUFPLENBQUNDLElBQUksQ0FBQyxzRUFBc0UsRUFBRSxJQUFJLENBQUNrZCxxQ0FBcUMsQ0FBQztNQUVySTtJQUNGO0VBQUM7SUFBQXhsQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBK21CLG1EQUFBLEVBQWtFO01BQ2hFOWYsR0FBRyxDQUFDK2YsWUFBWSxDQUFDbkQsU0FBUyxDQUFDLFVBQUE3akIsS0FBSyxFQUFJO1FBQ2xDaUgsR0FBRyxDQUFDb2YsWUFBWSxDQUFDcm1CLEtBQUssR0FBR2lILEdBQUcsQ0FBQ2dnQixlQUFlLENBQUNqbkIsS0FBSyxDQUFDO1FBQ25EaUgsR0FBRyxDQUFDd0wsWUFBWSxDQUFDelMsS0FBSyxHQUFHcVQsd0VBQWlDLENBQUNyVCxLQUFLLENBQUM7TUFDbkUsQ0FBQyxDQUFDO01BRUYsSUFBTWtuQixZQUFZLEdBQUcsSUFBSSxDQUFDOVYsNkJBQTZCLENBQUNsTixjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFOUYsSUFBSWdqQixZQUFZLEVBQUU7UUFDaEIsSUFBTWhlLFNBQVMsR0FBR1Ysd0VBQXlCLENBQUMwZSxZQUFZLENBQUM7UUFFekRqZ0IsR0FBRyxDQUFDMEwsUUFBUSxDQUFDM1MsS0FBSyxHQUFHa0osU0FBUyxDQUFDMEosT0FBTztRQUN0QzZULHVFQUFzQixHQUFHLENBQUN2ZCxTQUFTLENBQUNVLEdBQUcsSUFBSTNDLEdBQUcsQ0FBQytmLFlBQVksQ0FBQ2huQixLQUFLLEVBQUU4TCxRQUFRLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMzRCxPQUFPLENBQUNDLElBQUksQ0FBQyx3REFBd0QsRUFBRW5CLEdBQUcsQ0FBQytmLFlBQVksQ0FBQ2huQixLQUFLLENBQUM7UUFFbkc7TUFDRjtNQUVBLElBQU1tbkIsUUFBUSxHQUFHLElBQUksQ0FBQy9WLDZCQUE2QixDQUFDbE4sY0FBYyxDQUFDLFlBQVksQ0FBQztNQUVoRixJQUFJaWpCLFFBQVEsRUFBRTtRQUNaVix1RUFBc0IsR0FBR1UsUUFBUTtRQUNqQyxJQUFJLENBQUNoZixPQUFPLENBQUNDLElBQUksQ0FBQyx5RUFBeUUsRUFBRW5CLEdBQUcsQ0FBQytmLFlBQVksQ0FBQ2huQixLQUFLLENBQUM7UUFFcEg7TUFDRjtNQUVBLElBQU1vbkIsWUFBWSxHQUFHLElBQUksQ0FBQ2hXLDZCQUE2QixDQUFDbE4sY0FBYyxDQUFDLGlCQUFpQixDQUFDO01BRXpGLElBQUlrakIsWUFBWSxFQUFFO1FBQ2hCWCx1RUFBc0IsTUFBQS9pQixNQUFBLENBQU0wakIsWUFBWSxxQkFBa0I7UUFDMUQsSUFBSSxDQUFDamYsT0FBTyxDQUFDQyxJQUFJLENBQUMsOEVBQThFLEVBQUVuQixHQUFHLENBQUMrZixZQUFZLENBQUNobkIsS0FBSyxDQUFDO1FBRXpIO01BQ0Y7SUFDRjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFxbkIsS0FBWTVNLE9BQXNCLEVBQVE7TUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQzZNLFlBQVksQ0FBQ3RuQixLQUFLLEVBQUU7UUFDNUIsSUFBSSxDQUFDMmxCLDJCQUEyQixHQUFHLElBQUl6bUIscUVBQTBCLENBQUMsQ0FBQztNQUNyRTtNQUVBLElBQUl1YixPQUFPLEVBQUU7UUFDWCxJQUFJQSxPQUFPLENBQUN1TSxZQUFZLEVBQUU7VUFDeEJQLHVFQUFzQixHQUFHaE0sT0FBTyxDQUFDdU0sWUFBWTtRQUMvQztRQUVBLElBQUl2TSxPQUFPLENBQUM4TSxxQkFBcUIsRUFBRTtVQUNqQ2xPLDRGQUFpRCxHQUFHb0IsT0FBTyxDQUFDOE0scUJBQXFCO1FBQ25GO1FBRUEsSUFBSTlNLE9BQU8sQ0FBQ2pILGNBQWMsSUFBSXRCLDBFQUFjLENBQUN1SSxPQUFPLENBQUNqSCxjQUFjLENBQUMsRUFBRTtVQUNwRXZNLEdBQUcsQ0FBQzhlLGVBQWUsQ0FBQy9sQixLQUFLLEdBQUd1RSwrR0FBK0QsQ0FBQ2tXLE9BQU8sQ0FBQ2pILGNBQWMsQ0FBQztRQUNySDtRQUVBLElBQUlpSCxPQUFPLENBQUM3SSxZQUFZLElBQUloRSx3REFBWSxDQUFDNk0sT0FBTyxDQUFDN0ksWUFBWSxDQUFDLEVBQUU7VUFDOUQsSUFBSSxDQUFDekosT0FBTyxDQUFDZ0YsU0FBUyxDQUFDa0UsWUFBWSxDQUFDNU0sdUdBQXlELENBQUNnVyxPQUFPLENBQUM3SSxZQUFZLENBQUMsQ0FBQztRQUN0SDtRQUVBLElBQUk2SSxPQUFPLENBQUMrTSxtQkFBbUIsSUFDN0I1Wix3REFBWSxDQUFDNk0sT0FBTyxDQUFDK00sbUJBQW1CLENBQUMsRUFBRTtVQUMzQyxJQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDdGYsT0FBTyxDQUFDNEYsU0FBUyxDQUFDL04sS0FBSyxDQUFDNGdCLElBQUksQ0FBQyxVQUFBOVQsUUFBUTtZQUFBLE9BQUlBLFFBQVEsWUFBWUksNERBQWU7VUFBQSxFQUFDO1VBRTFHLElBQUl1YSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDdGYsT0FBTyxDQUFDNEYsU0FBUyxDQUFDaEIsTUFBTSxDQUFDMGEsZUFBZSxDQUFDO1VBQ2hEO1VBRUEsSUFBSWhOLE9BQU8sQ0FBQytNLG1CQUFtQixLQUFLLEtBQUssRUFBRTtZQUN6QyxJQUFJLENBQUNyZixPQUFPLENBQUM0RixTQUFTLENBQUMvTSxHQUFHLENBQUMsSUFBSWtNLDREQUFlLENBQUN6SSx1R0FBeUQsQ0FBQ2dXLE9BQU8sQ0FBQytNLG1CQUFtQixDQUFDLENBQUMsQ0FBQztVQUN6STtRQUNGO1FBRUEsSUFBSSxPQUFPL00sT0FBTyxDQUFDaU4sNEJBQTRCLEtBQUssU0FBUyxFQUFFO1VBQzdELElBQUksQ0FBQ3ZDLDZCQUE2QixHQUFHMUssT0FBTyxDQUFDaU4sNEJBQTRCO1FBQzNFO1FBRUEsSUFBSSxPQUFPak4sT0FBTyxDQUFDa04sbUNBQW1DLEtBQUssU0FBUyxFQUFFO1VBQ3BFLElBQUksQ0FBQ3ZDLG9DQUFvQyxHQUFHM0ssT0FBTyxDQUFDa04sbUNBQW1DO1FBQ3pGO1FBRUEsSUFBSWxOLE9BQU8sQ0FBQ21OLGVBQWUsRUFBRTtVQUMzQixJQUFJLENBQUNyQyxnQkFBZ0IsR0FBRzlLLE9BQU8sQ0FBQ21OLGVBQWU7UUFDakQ7UUFFQSxJQUFJbk4sT0FBTyxDQUFDb04saUJBQWlCLEVBQUU7VUFDN0IsSUFBSSxDQUFDckMsa0JBQWtCLEdBQUcvSyxPQUFPLENBQUNvTixpQkFBaUI7UUFDckQ7UUFFQSxJQUFJcE4sT0FBTyxDQUFDcU4sV0FBVyxFQUFFO1VBQ3ZCLElBQUksQ0FBQ3JDLFlBQVksR0FBR2hMLE9BQU8sQ0FBQ3FOLFdBQVc7UUFDekM7TUFDRjtNQUVBN2dCLEdBQUcsQ0FBQ3FnQixZQUFZLENBQUN0bkIsS0FBSyxHQUFHLElBQUk7SUFDL0I7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxRQUFBLEVBQXVCO01BQ3JCOEcsR0FBRyxDQUFDcWdCLFlBQVksQ0FBQ3RuQixLQUFLLEdBQUcsS0FBSztNQUM5QixJQUFJLENBQUMybEIsMkJBQTJCLENBQUN4bEIsT0FBTyxDQUFDLENBQUM7TUFDMUMsSUFBSSxDQUFDd2xCLDJCQUEyQixHQUFHLElBQUk7SUFDekM7RUFBQztJQUFBN2xCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpbkIsZ0JBQXVCM1UsR0FBVyxFQUFVO01BQzFDLE9BQU9jLG1FQUE0QixDQUFDZCxHQUFHLENBQUM7SUFDMUM7RUFBQztFQUFBLE9BQUFyTCxHQUFBO0FBQUE7QUFBQWxELE1BQUEsR0EvVGtCa0QsR0FBRztBQUFBN0gsMklBQUEsQ0FBSDZILEdBQUcsa0NBQ3dCLElBQUk7QUFBQTdILDJJQUFBLENBRC9CNkgsR0FBRywyQ0FFaUMsSUFBSTtBQUFBN0gsMklBQUEsQ0FGeEM2SCxHQUFHLG1DQUd5QixJQUFJO0FBQUE3SCwySUFBQSxDQUhoQzZILEdBQUcsMENBSWdDLElBQUk7QUFBQTdILDJJQUFBLENBSnZDNkgsR0FBRyxzQ0FLNEIsSUFBSTtBQUFBN0gsMklBQUEsQ0FMbkM2SCxHQUFHLDJDQU1pQyxJQUFJO0FBQUE3SCwySUFBQSxDQU54QzZILEdBQUcsc0JBT1ksSUFBSTtBQUFBN0gsMklBQUEsQ0FQbkI2SCxHQUFHLHdCQVFjLElBQUk7QUFBQTdILDJJQUFBLENBUnJCNkgsR0FBRyxrQkFTUSxJQUFJO0FBQUE3SCwySUFBQSxDQVRmNkgsR0FBRyxtQ0FVd0QsSUFBSXVLLHVFQUE0QixDQUFDLENBQUM7QUFBQXBTLDJJQUFBLENBVjdGNkgsR0FBRztBQUFBN0gsMklBQUEsQ0FBSDZILEdBQUcsa0JBWXlCLElBQUl4SCxnREFBTyxDQUFTLEVBQUUsQ0FBQztBQUFBTCwySUFBQSxDQVpuRDZILEdBQUcsbUJBYTBCLElBQUl4SCxnREFBTyxDQUFTLDJDQUEyQyxDQUFDO0FBQUFMLDJJQUFBLENBYjdGNkgsR0FBRyxxREFjMkMsQ0FBQztBQUFBN0gsMklBQUEsQ0FkL0M2SCxHQUFHLHFCQWVvQyxJQUFJeEgsZ0RBQU8sQ0FBaUIrRSxxRkFBc0MsQ0FBQztBQUFBcEYsMklBQUEsQ0FmMUc2SCxHQUFHO0FBQUE3SCwySUFBQSxDQUFINkgsR0FBRztBQUFBN0gsMklBQUEsQ0FBSDZILEdBQUcsMEJBa0IyQyxJQUFJeEgsZ0RBQU8sQ0FBQ3FLLG9GQUFpQyxDQUFDO0FBQUExSywySUFBQSxDQWxCNUY2SCxHQUFHLGNBbUI4QixJQUFJeEgsZ0RBQU8sQ0FBUyxFQUFFLENBQUM7QUFBQUwsMklBQUEsQ0FuQnhENkgsR0FBRyxzQkFvQjZCOEUseURBQWMsQ0FBQyxFQUFFLENBQUM7QUFBQTNNLDJJQUFBLENBcEJsRDZILEdBQUcsc0JBcUIyQixJQUFJM0gsSUFBSSxDQUFDLENBQUM7QUFBQUYsMklBQUEsQ0FyQnhDNkgsR0FBRyxhQXNCcUJELG9FQUF1QixDQUFDLEtBQUssQ0FBQztBQUFBNUgsMklBQUEsQ0F0QnRENkgsR0FBRyxrQkF1Qm1DLElBQUl4SCxnREFBTyxDQUFVLEtBQUssQ0FBQztBQUFBTCwySUFBQSxDQXZCakU2SCxHQUFHLDBCQXdCbUQsSUFBSXRILHdEQUFlLENBQVVzSCxNQUFHLENBQUNxZ0IsWUFBWSxDQUFDO0FBQUFsb0IsMklBQUEsQ0F4QnBHNkgsR0FBRywyQkF5Qm1ELElBQUl0SCx3REFBZSxDQUFTOG1CLGlFQUFnQixDQUFDO0FBQUFybkIsMklBQUEsQ0F6Qm5HNkgsR0FBRyxvQ0EwQjRFLElBQUl0SCx3REFBZSxDQUF5QjBaLHNGQUEyQyxDQUFDO0FBMUJwSztBQXNVeEI5WCxNQUFNLENBQUNSLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFNO0VBQ3RDa0csR0FBRyxDQUFDOUcsT0FBTyxDQUFDLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRjhHLEdBQUcsQ0FBQzhmLGtEQUFrRCxDQUFDLENBQUM7QUFDeEQ5ZixHQUFHLENBQUN1Zix5QkFBeUIsQ0FBQyxDQUFDO0FBQy9CdmYsR0FBRyxDQUFDK2UsMkJBQTJCLENBQUMsQ0FBQztBQUNqQy9lLEdBQUcsQ0FBQzBmLDBEQUEwRCxDQUFDLENBQUM7QUFDaEUxZixHQUFHLENBQUMyZixtRUFBbUUsQ0FBQyxDQUFDO0FBQ3pFM2YsR0FBRyxDQUFDNGYsOERBQThELENBQUMsQ0FBQztBQUNwRTVmLEdBQUcsQ0FBQzZmLG1FQUFtRSxDQUFDLENBQUM7QUFDekU3ZixHQUFHLENBQUNvZ0IsSUFBSSxDQUFDLENBQUMsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5WFY7QUFDQTtBQUNBO0FBRkEsSUFJcUJqVSxZQUFZO0VBQUEsU0FBQUEsYUFBQTtJQUFBalUsMklBQUEsT0FBQWlVLFlBQUE7RUFBQTtFQUFBdlQsd0lBQUEsQ0FBQXVULFlBQUE7SUFBQXRULEdBQUE7SUFBQUUsS0FBQSxFQUMvQixTQUFBaW5CLGdCQUF1QjNVLEdBQVcsRUFBVTtNQUMxQyxJQUFJO1FBQ0YsSUFBTW9TLE9BQU8sR0FBRyxJQUFJcGYsR0FBRyxDQUFDZ04sR0FBRyxDQUFDO1FBQzVCLElBQU15VixRQUFRLEdBQUdyRCxPQUFPLENBQUM3USxRQUFRLENBQUMxUSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBRTVDLFFBQVF1aEIsT0FBTyxDQUFDc0QsUUFBUTtVQUN0QixLQUFLLEtBQUs7WUFDUnRELE9BQU8sQ0FBQ3NELFFBQVEsR0FBRyxPQUFPO1lBRTFCO1VBQ0YsS0FBSyxNQUFNO1lBQ1R0RCxPQUFPLENBQUNzRCxRQUFRLEdBQUcsUUFBUTtZQUUzQjtVQUVGO1lBQ0U7UUFDSjtRQUVBLElBQUlELFFBQVEsQ0FBQzllLE1BQU0sS0FBSyxDQUFDLElBQ3BCOGUsUUFBUSxDQUFDOWUsTUFBTSxLQUFLLENBQUMsSUFBSThlLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDOWUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJOGUsUUFBUSxDQUFDQSxRQUFRLENBQUM5ZSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNBLE1BQU0sSUFBSSxDQUFFLEVBQ25IO1VBQ0E4ZSxRQUFRLENBQUNFLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDL0IsQ0FBQyxNQUFNLElBQUlGLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3plLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSXllLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJSCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMvakIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJK2pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7VUFDbklBLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO1FBQy9CLENBQUMsTUFBTSxJQUFJQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN6ZSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUl5ZSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNHLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtVQUM1RTtRQUFBLENBQ0QsTUFBTTtVQUNMSCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVztRQUMzQjtRQUVBckQsT0FBTyxDQUFDN1EsUUFBUSxHQUFHa1UsUUFBUSxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRXJDLFVBQUF6a0IsTUFBQSxDQUFVZ2hCLE9BQU8sQ0FBQ0MsTUFBTTtNQUMxQixDQUFDLENBQUMsT0FBT3RiLENBQUMsRUFBRTtRQUNWLE9BQU9pSixHQUFHO01BQ1o7SUFDRjtFQUFDO0VBQUEsT0FBQWMsWUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0FDMUNIO0FBQ0E7QUFDQTs7QUFLTyxJQUFLZ1YsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBS2pCLElBQUtDLFdBQVcsMEJBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBQSxPQUFYQSxXQUFXO0FBQUEsTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWnZCO0FBQ0E7QUFDQTtBQUN1QztBQUFBLElBR2xCQyxxQkFBcUIsZ0JBQUF6b0Isd0lBQUEsQ0FLeEMsU0FBQXlvQixzQkFBQSxFQUFjO0VBQUFucEIsMklBQUEsT0FBQW1wQixxQkFBQTtFQUFBbHBCLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQ1osSUFBSSxDQUFDMGMsV0FBVyxHQUFHLElBQUlyYyxnREFBTyxDQUFjLElBQUksQ0FBQztFQUNqRCxJQUFJLENBQUNtYSxjQUFjLEdBQUcsSUFBSW5hLGdEQUFPLENBQWtCLElBQUksQ0FBQztFQUN4RCxJQUFJLENBQUM4b0IsK0JBQStCLEdBQUcsQ0FBQztBQUMxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZkg7QUFDQTtBQUNBO0FBQ3VDO0FBQUEsSUFFbEJDLFlBQVksZ0JBQUEzb0Isd0lBQUEsQ0FJL0IsU0FBQTJvQixhQUFBLEVBQWM7RUFBQXJwQiwySUFBQSxPQUFBcXBCLFlBQUE7RUFBQXBwQiwySUFBQTtFQUFBQSwySUFBQTtFQUNaLElBQUksQ0FBQ3FwQixVQUFVLEdBQUcsSUFBSWhwQixnREFBTyxDQUFVLEtBQUssQ0FBQztFQUM3QyxJQUFJLENBQUNpcEIsVUFBVSxHQUFHLEtBQUs7QUFDekIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1pIO0FBQ0E7QUFDQTtBQUN1QztBQUFBLElBR2xCQyxZQUFZLGdCQUFBOW9CLHdJQUFBLENBSS9CLFNBQUE4b0IsYUFBWWpnQixLQUF1QixFQUFFO0VBQUF2SiwySUFBQSxPQUFBd3BCLFlBQUE7RUFBQXZwQiwySUFBQTtFQUFBQSwySUFBQTtFQUNuQyxJQUFJLENBQUNzSixLQUFLLEdBQUcsSUFBSWpKLGdEQUFPLENBQW1CaUosS0FBSyxDQUFDO0VBQ2pELElBQUksQ0FBQ2tnQixhQUFhLEdBQUcsSUFBSW5wQixnREFBTyxDQUFVLEtBQUssQ0FBQztBQUNsRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNiSDtBQUNBO0FBQ0E7O0FBRUEsSUFBTW9wQixtQkFBbUIsR0FBRyw2Q0FBNkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSnpFO0FBQ0E7QUFDQTtBQUMrRTtBQUNsQjtBQUFBLElBRXhDQyxrQkFBa0I7RUFBQSxTQUFBQSxtQkFBQTtJQUFBM3BCLDJJQUFBLE9BQUEycEIsa0JBQUE7RUFBQTtFQUFBanBCLHdJQUFBLENBQUFpcEIsa0JBQUE7SUFBQWhwQixHQUFBO0lBQUFFLEtBQUEsRUFDckMsU0FBQStvQixvQ0FBMkNDLFdBQXdCLEVBQW1CO01BQ3BGLFFBQVFBLFdBQVc7UUFDakIsS0FBS1gsK0VBQWtCO1VBQ3JCLE9BQU8sUUFBUTtRQUNqQixLQUFLQSw4RUFBaUI7VUFDcEIsT0FBTyxPQUFPO1FBQ2hCLEtBQUtBLDhFQUFpQjtVQUNwQixPQUFPLE9BQU87UUFDaEI7VUFDRTNiLGdFQUFpQixDQUFDc2MsV0FBVyxDQUFDO01BQ2xDO0lBQ0Y7RUFBQztFQUFBLE9BQUFGLGtCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJIO0FBQ0E7QUFDQTtBQUNpRjtBQUNwQjtBQUFBLElBRXhDRyxtQkFBbUI7RUFBQSxTQUFBQSxvQkFBQTtJQUFBOXBCLDJJQUFBLE9BQUE4cEIsbUJBQUE7RUFBQTtFQUFBcHBCLHdJQUFBLENBQUFvcEIsbUJBQUE7SUFBQW5wQixHQUFBO0lBQUFFLEtBQUEsRUFDdEMsU0FBQWtwQixzQ0FBNkNDLFlBQTBCLEVBQW9CO01BQ3pGLFFBQVFBLFlBQVk7UUFDbEIsS0FBS2YsOEVBQWlCO1VBQ3BCLE9BQU8sTUFBTTtRQUNmLEtBQUtBLCtFQUFrQjtVQUNyQixPQUFPLE9BQU87UUFDaEI7VUFDRTFiLGdFQUFpQixDQUFDeWMsWUFBWSxDQUFDO01BQ25DO0lBQ0Y7RUFBQztFQUFBLE9BQUFGLG1CQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEJIO0FBQ0E7QUFDQTs7QUFFeUI7QUFDeUI7QUFFbEQsSUFBTUcsc0JBQXNCLEdBQUcsS0FBSztBQUFDLElBSWhCQyxTQUFTO0VBdUM1QixTQUFBQSxVQUFBLEVBQXNCO0lBQUFscUIsMklBQUEsT0FBQWtxQixTQUFBO0lBQ3BCLE1BQU0sSUFBSXprQixLQUFLLENBQUMsMERBQTBELENBQUM7RUFDN0U7RUFBQy9FLHdJQUFBLENBQUF3cEIsU0FBQTtJQUFBdnBCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFzcEIsaUNBQUEsR0FBQTFVLDZJQUFBLGVBQUFDLDJJQUFBLENBdENELFNBQUFDLFFBQUE7UUFBQSxJQUFBbEwsR0FBQTtRQUFBLE9BQUFpTCwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUNReEwsR0FBRyxHQUFHLElBQUl0RSxHQUFHLENBQUMyQiw0REFBc0IsQ0FBQztjQUFBLE9BQUFpTyxRQUFBLENBQUFTLE1BQUEsV0FFcEMwVCxTQUFTLENBQUNFLGtDQUFrQyxDQUFDM2YsR0FBRyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFzTCxRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUN6RDtNQUFBLFNBQUEwVSxpQ0FBQTtRQUFBLE9BQUFGLGlDQUFBLENBQUF2VCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBb2IsZ0NBQUE7SUFBQTtFQUFBO0lBQUExcEIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQXlwQixtQ0FBQSxHQUFBN1UsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBb0IsU0FBZ0RyTSxHQUFRO1FBQUEsSUFBQTBJLEdBQUEsRUFBQW9YLGdCQUFBLEVBQUFDLFdBQUEsRUFBQWpWLE9BQUE7UUFBQSxPQUFBRywySUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoQixJQUFBLEdBQUFnQixTQUFBLENBQUFmLElBQUE7WUFBQTtjQUNoRDlDLEdBQUcsR0FBRzFJLEdBQUcsQ0FBQ2tDLFFBQVEsQ0FBQyxDQUFDO2NBQUEsS0FFdEJ1ZCxTQUFTLENBQUNPLE1BQU0sQ0FBQ3RYLEdBQUcsQ0FBQztnQkFBQTZELFNBQUEsQ0FBQWYsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWUsU0FBQSxDQUFBUixNQUFBLFdBQ2hCMFQsU0FBUyxDQUFDTyxNQUFNLENBQUN0WCxHQUFHLENBQUM7WUFBQTtjQUd4Qm9YLGdCQUFnQixHQUFHLElBQUlHLHNEQUFnQixDQUFDamdCLEdBQUcsQ0FBQztjQUM1QytmLFdBQVcsR0FBR04sU0FBUyxDQUFDTyxNQUFNLENBQUN0WCxHQUFHLENBQUMsR0FBR29YLGdCQUFnQixDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDO2NBQ2hGcFYsT0FBTyxHQUFHMlUsU0FBUyxDQUFDTyxNQUFNLENBQUN0WCxHQUFHLENBQUMsQ0FBQ2dFLElBQUksQ0FBQyxZQUFNO2dCQUMvQyxJQUFNNUIsT0FBTyxHQUFHeFAsVUFBVSxDQUFDLFlBQU07a0JBQy9CLElBQUlta0IsU0FBUyxDQUFDTyxNQUFNLENBQUN0WCxHQUFHLENBQUMsS0FBS3FYLFdBQVcsRUFBRTtvQkFDekMsT0FBT04sU0FBUyxDQUFDTyxNQUFNLENBQUN0WCxHQUFHLENBQUM7a0JBQzlCO2dCQUNGLENBQUMsRUFBRThXLHNCQUFzQixDQUFDO2NBQzVCLENBQUMsQ0FBQyxDQUFDeFMsS0FBSyxDQUFDLFlBQU07Z0JBQ2IsT0FBT3lTLFNBQVMsQ0FBQ08sTUFBTSxDQUFDdFgsR0FBRyxDQUFDO2NBQzlCLENBQUMsQ0FBQztjQUFBLE9BQUE2RCxTQUFBLENBQUFSLE1BQUEsV0FFS2dVLFdBQVc7WUFBQTtZQUFBO2NBQUEsT0FBQXhULFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ25CO01BQUEsU0FBQXNULG1DQUFBelQsRUFBQTtRQUFBLE9BQUEyVCxtQ0FBQSxDQUFBMVQsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQW1iLGtDQUFBO0lBQUE7RUFBQTtJQUFBenBCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErcEIsMkJBQWtDbmdCLEdBQVEsRUFBUTtNQUNoRCxJQUFNMEksR0FBRyxHQUFHMUksR0FBRyxDQUFDa0MsUUFBUSxDQUFDLENBQUM7TUFFMUIsSUFBSXVkLFNBQVMsQ0FBQ08sTUFBTSxDQUFDdFgsR0FBRyxDQUFDLEVBQUU7UUFDekIsT0FBTytXLFNBQVMsQ0FBQ08sTUFBTSxDQUFDdFgsR0FBRyxDQUFDO01BQzlCO0lBQ0Y7RUFBQztFQUFBLE9BQUErVyxTQUFBO0FBQUE7QUFBQWpxQiwySUFBQSxDQXJDa0JpcUIsU0FBUyxZQUNhLENBQUMsQ0FBQztBQURmO0FBNEM5QixJQUFNM1UsT0FBTyxHQUFHMlUsU0FBUyxDQUFDRyxnQ0FBZ0MsQ0FBQyxDQUFDLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZENUQ7QUFDQTtBQUNBO0FBQ3VEO0FBQ3JCO0FBQ1Q7QUFFMkI7QUFDVjtBQUVnQjtBQUUxRCxJQUFNUSxjQUFjLEdBQUcsS0FBSztBQUFDLElBRVJILGdCQUFnQjtFQUtuQyxTQUFBQSxpQkFBWWpnQixHQUFRLEVBQUU7SUFBQXpLLDJJQUFBLE9BQUEwcUIsZ0JBQUE7SUFBQXpxQiwySUFBQSxrQkFKSzRILG9FQUF1QixDQUFDLFdBQVcsQ0FBQztJQUFBNUgsMklBQUE7SUFBQUEsMklBQUE7SUFLN0QsSUFBSSxDQUFDd0ssR0FBRyxFQUFFO01BQ1IsTUFBTSxJQUFJaEYsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0lBQzNDO0lBRUEsSUFBSSxDQUFDOGdCLGVBQWUsR0FBRzNTLCtFQUFnQyxDQUFDbkosR0FBRyxDQUFDa0MsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUNtZSxJQUFJLEdBQUdyZ0IsR0FBRztFQUNqQjtFQUFDL0osd0lBQUEsQ0FBQWdxQixnQkFBQTtJQUFBL3BCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFrcUIsd0JBQUEsR0FBQXRWLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBOEJsTCxHQUFRLEVBQUV1Z0IsT0FBZTtRQUFBLElBQUE3WCxHQUFBLEVBQUFpRSxRQUFBLEVBQUE2VCxRQUFBLEVBQUFDLFNBQUE7UUFBQSxPQUFBeFYsMklBQUEsVUFBQUksU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FBQSxJQUNoRCtVLE9BQU87Z0JBQUFqVixRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ0osSUFBSXhRLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQztZQUFBO2NBR3pDME4sR0FBRyxHQUFHMUksR0FBRyxDQUFDa0MsUUFBUSxDQUFDLENBQUM7Y0FBQW9KLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BQ0g4QixPQUFPLENBQUNpQyxJQUFJLENBQUMsQ0FDbEMzRCxLQUFLLENBQUNsRCxHQUFHLEVBQUU7Z0JBQ1RtRCxNQUFNLEVBQUUsS0FBSztnQkFDYnJGLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUk4RyxPQUFPLENBQVcsVUFBQ2dDLENBQUMsRUFBRUwsTUFBTTtnQkFBQSxPQUM5QjNULFVBQVUsQ0FBQztrQkFBQSxPQUFNMlQsTUFBTSxDQUFDLElBQUlqVSxLQUFLLHlCQUFBbEIsTUFBQSxDQUF5QjRPLEdBQUcsTUFBRyxDQUFDLENBQUM7Z0JBQUEsR0FBRTZYLE9BQU8sQ0FBQztjQUFBLENBQzlFLENBQUMsQ0FDRixDQUFDO1lBQUE7Y0FSSTVULFFBQVEsR0FBQXJCLFFBQUEsQ0FBQVUsSUFBQTtjQUFBLElBVVRXLFFBQVEsQ0FBQytULEVBQUU7Z0JBQUFwVixRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ1IsSUFBSXhRLEtBQUssc0JBQUFsQixNQUFBLENBQXNCNE8sR0FBRyxTQUFBNU8sTUFBQSxDQUFNNlMsUUFBUSxDQUFDTyxNQUFNLE1BQUcsQ0FBQztZQUFBO2NBQUEsTUFHL0RQLFFBQVEsQ0FBQ2IsSUFBSSxLQUFLLElBQUk7Z0JBQUFSLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDbEIsSUFBSXhRLEtBQUssbUNBQUFsQixNQUFBLENBQW1DNE8sR0FBRyxNQUFHLENBQUM7WUFBQTtjQUFBNEMsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FHcENtQixRQUFRLENBQUNnVSxJQUFJLENBQUMsQ0FBQztZQUFBO2NBQWhDSCxRQUFRLEdBQUFsVixRQUFBLENBQUFVLElBQUE7Y0FDUnlVLFNBQVMsR0FBR0QsUUFBUSxDQUFDam5CLEtBQUssQ0FBQyxHQUFHLENBQUM7Y0FBQSxPQUFBK1IsUUFBQSxDQUFBUyxNQUFBLFdBRTlCMFUsU0FBUyxDQUFDRyxHQUFHLENBQUMsVUFBQUMsUUFBUTtnQkFBQSxPQUFJLElBQUlDLDhDQUFRLENBQUNELFFBQVEsRUFBRU4sT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBalYsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDbEU7TUFBQSxTQUFBNlYsd0JBQUE3VSxFQUFBLEVBQUE4TCxHQUFBO1FBQUEsT0FBQXNJLHdCQUFBLENBQUFuVSxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBdWMsdUJBQUE7SUFBQTtFQUFBO0lBQUE3cUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTRxQix3QkFBQSxHQUFBaFcsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBb0IsU0FBQTtRQUFBLElBQUE1VixLQUFBO1FBQUEsSUFBQThwQixPQUFBO1VBQUE3WCxHQUFBO1VBQUErWCxTQUFBO1VBQUFRLGNBQUE7VUFBQUMsbUNBQUE7VUFBQUwsUUFBQTtVQUFBTSxNQUFBLEdBQUEzYyxTQUFBO1FBQUEsT0FBQXlHLDJJQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWhCLElBQUEsR0FBQWdCLFNBQUEsQ0FBQWYsSUFBQTtZQUFBO2NBQThCK1UsT0FBZSxHQUFBWSxNQUFBLENBQUE5aEIsTUFBQSxRQUFBOGhCLE1BQUEsUUFBQWxsQixTQUFBLEdBQUFrbEIsTUFBQSxNQUFHZixjQUFjO2NBQ3REMVgsR0FBRyxHQUFHbVUsb0VBQThCLENBQUMsSUFBSSxDQUFDd0QsSUFBSSxDQUFDO2NBQUE5VCxTQUFBLENBQUFmLElBQUE7Y0FBQSxPQUM3QixJQUFJLENBQUN1Vix1QkFBdUIsQ0FBQyxJQUFJcmxCLEdBQUcsQ0FBQ2dOLEdBQUcsQ0FBQyxFQUFFNlgsT0FBTyxDQUFDO1lBQUE7Y0FBckVFLFNBQVMsR0FBQWxVLFNBQUEsQ0FBQVAsSUFBQTtjQUNYaVYsY0FBYyxHQUFHLENBQUM7Y0FDaEJDLG1DQUFtQyxHQUFHLFNBQXRDQSxtQ0FBbUNBLENBQUE7Z0JBQUEsT0FBd0IsSUFBSTVULE9BQU8sQ0FBQyxVQUFDZ0MsQ0FBQyxFQUFFTCxNQUFNLEVBQUs7a0JBQzFGLElBQUlnUyxjQUFjLElBQUlSLFNBQVMsQ0FBQ3BoQixNQUFNLEVBQUU7b0JBQ3RDNFAsTUFBTSxrQkFBQW5WLE1BQUEsQ0FBa0IybUIsU0FBUyxDQUFDcGhCLE1BQU0sd0JBQUF2RixNQUFBLENBQXFCNE8sR0FBRyw0Q0FBeUMsQ0FBQztrQkFDNUc7Z0JBQ0YsQ0FBQyxDQUFDO2NBQUE7Y0FBQTZELFNBQUEsQ0FBQWYsSUFBQTtjQUFBLE9BQ3FCOEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDa1IsU0FBUyxDQUFDRyxHQUFHLENBQUMsVUFBQUMsUUFBUTtnQkFBQSxPQUFJQSxRQUFRLENBQ25FTyxJQUFJLENBQUMsQ0FBQyxDQUNOcFUsS0FBSyxDQUFDLFVBQUF2TixDQUFDLEVBQUk7a0JBQ1ZoSixLQUFJLENBQUM4SCxPQUFPLENBQUMyRyxJQUFJLENBQUMsK0JBQStCLEVBQUUyYixRQUFRLEVBQUVwaEIsQ0FBQyxDQUFDO2tCQUUvRHdoQixjQUFjLEVBQUU7a0JBRWhCLE9BQU9DLG1DQUFtQyxDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxDQUNEeFUsSUFBSSxDQUFDLFVBQUEyVSxJQUFJLEVBQUk7a0JBQ1osSUFBTTFyQixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7a0JBRXRCYyxLQUFJLENBQUM4SCxPQUFPLENBQUNDLElBQUksQ0FBQywwQ0FBMEMsRUFBRXFpQixRQUFRLENBQUMzZSxRQUFRLENBQUMsQ0FBQyxFQUFFbWYsSUFBSSxDQUFDO2tCQUN4RjVxQixLQUFJLENBQUNxbEIsZUFBZSxDQUFDMWQsSUFBSSxDQUFDO29CQUN4QlAsVUFBVSxFQUFFRix1RUFBeUI7b0JBQ3JDVSxPQUFPLEVBQUUsQ0FBQzFJLEdBQUcsR0FBRzBILHNEQUFnQixJQUFJLElBQUk7b0JBQ3hDakgsS0FBSyxFQUFFO3NCQUFDa0ksTUFBTSxFQUFFK2lCLElBQUksSUFBSTtvQkFBQyxDQUFDO29CQUMxQjlXLFFBQVEsRUFBRXNXLFFBQVEsQ0FBQzNlLFFBQVEsQ0FBQyxDQUFDO29CQUM3QnNJLElBQUksRUFBRTtrQkFDUixDQUFDLENBQUM7a0JBRUYsT0FBT3FXLFFBQVE7Z0JBQ2pCLENBQUMsQ0FBQztjQUFBLEVBQUMsQ0FBQztZQUFBO2NBdEJBQSxRQUFRLEdBQUF0VSxTQUFBLENBQUFQLElBQUE7Y0FBQSxPQUFBTyxTQUFBLENBQUFSLE1BQUEsV0F3QlA4VSxRQUFRO1lBQUE7WUFBQTtjQUFBLE9BQUF0VSxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUNoQjtNQUFBLFNBQUE2VCx3QkFBQTtRQUFBLE9BQUFjLHdCQUFBLENBQUE3VSxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBMGIsdUJBQUE7SUFBQTtFQUFBO0VBQUEsT0FBQUQsZ0JBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVGSDtBQUNBO0FBQ0E7O0FBRWdEO0FBQ1Q7QUFDZ0I7QUFDRDtBQUFBLElBRWpDcEQsWUFBWTtFQXFCL0IsU0FBQUEsYUFBQSxFQUFzQjtJQUFBdG5CLDJJQUFBLE9BQUFzbkIsWUFBQTtJQUNwQixNQUFNLElBQUk3aEIsS0FBSyxDQUFDLDZEQUE2RCxDQUFDO0VBQ2hGO0VBQUMvRSx3SUFBQSxDQUFBNG1CLFlBQUE7SUFBQTNtQixHQUFBO0lBQUFDLEdBQUEsRUFwQkQsU0FBQUEsSUFBQSxFQUFrQztNQUNoQyxPQUFPMG1CLFlBQVksQ0FBQ3lFLGFBQWE7SUFDbkM7RUFBQztJQUFBcHJCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFtckIsa0JBQXlCdmhCLEdBQVEsRUFBVTtNQUN6QyxJQUFNMEksR0FBRyxHQUFHLElBQUloTixHQUFHLENBQUNzRSxHQUFHLENBQUNrQyxRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ25DLElBQU1zZixVQUFVLEdBQUczVyx1RUFBeUI7TUFDNUMsSUFBTWpKLFVBQVUsR0FBR04sMkZBQXlDO01BRTVEb0gsR0FBRyxDQUFDK1ksTUFBTSxPQUFBM25CLE1BQUEsQ0FBTyxJQUFJNG5CLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFRixVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRTVmLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFBOUgsTUFBQSxDQUFLcEUsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxDQUFDdU0sUUFBUSxDQUFDLENBQUMsQ0FBRTtNQUVoSSxJQUFJd0csR0FBRyxDQUFDRSxRQUFRLEtBQUssR0FBRyxFQUFFO1FBQ3hCRixHQUFHLENBQUNFLFFBQVEsR0FBRyxrQkFBa0I7TUFDbkM7TUFFQSxPQUFPRixHQUFHLENBQUN4RyxRQUFRLENBQUMsQ0FBQztJQUN2QjtFQUFDO0VBQUEsT0FBQTJhLFlBQUE7QUFBQTtBQUFBcm5CLDJJQUFBLENBbkJrQnFuQixZQUFZLG1CQUMwQixJQUFJaG5CLGdEQUFPLENBQVNvcEIsMERBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWbkc7QUFDQTtBQUNBO0FBQ3VEO0FBRUk7QUFXSjtBQUNEO0FBRUE7QUFDRTtBQVN4RCxJQUFNMEMsVUFBVSxHQUFHLENBQUM7QUFBQyxJQWdFQWIsUUFBUTtFQU0zQixTQUFBQSxTQUFZOWdCLEdBQVcsRUFBRXVnQixPQUFlLEVBQUU7SUFBQWhyQiwySUFBQSxPQUFBdXJCLFFBQUE7SUFBQXRyQiwySUFBQSxrQkFMTjRILG9FQUF1QixDQUFDLFVBQVUsQ0FBQztJQUFBNUgsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFNckUsSUFBSSxDQUFDNnFCLElBQUksR0FBR3JnQixHQUFHO0lBQ2YsSUFBSSxDQUFDNGhCLFFBQVEsR0FBR3JCLE9BQU87SUFFdkIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7TUFDWixNQUFNLElBQUl2bEIsS0FBSywrQkFBK0IsQ0FBQztJQUNqRDtFQUNGO0VBQUMvRSx3SUFBQSxDQUFBNnFCLFFBQUE7SUFBQTVxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRCO01BQzFCLE9BQU8sSUFBSSxDQUFDMHJCLGNBQWM7SUFDNUI7RUFBQztJQUFBM3JCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE4TCxTQUFBLEVBQW1CO01BQ2pCLHVCQUFBcEksTUFBQSxDQUF1QixJQUFJLENBQUN1bUIsSUFBSTtJQUNsQztFQUFDO0lBQUFucUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTByQixLQUFBLEdBQUE5Vyw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFDLFFBQUE7UUFBQSxJQUFBelUsS0FBQTtRQUFBLElBQUFpUyxHQUFBLEVBQUFxWixLQUFBLEVBQUFwVixRQUFBLEVBQUFxVixRQUFBO1FBQUEsT0FBQS9XLDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQ1E5QyxHQUFHLEdBQUcsSUFBSSxDQUFDdVosWUFBWSxDQUFDLENBQUM7Y0FDekJGLEtBQUssR0FBR3JzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUEyVixRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUNEOEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLENBQ2xDM0QsS0FBSyxDQUFDbEQsR0FBRyxFQUFFO2dCQUNUbUQsTUFBTSxFQUFFLEtBQUs7Z0JBQ2JyRixLQUFLLEVBQUU7Y0FDVCxDQUFDLENBQUMsRUFDRixJQUFJOEcsT0FBTyxDQUFXLFVBQUNnQyxDQUFDLEVBQUVMLE1BQU07Z0JBQUEsT0FDOUIzVCxVQUFVLENBQUM7a0JBQUEsT0FBTTJULE1BQU0sQ0FBQyxJQUFJalUsS0FBSyxvQkFBQWxCLE1BQUEsQ0FBb0I0TyxHQUFHLE1BQUcsQ0FBQyxDQUFDO2dCQUFBLEdBQUVqUyxLQUFJLENBQUNtckIsUUFBUSxDQUFDO2NBQUEsQ0FDL0UsQ0FBQyxDQUNGLENBQUM7WUFBQTtjQVJJalYsUUFBUSxHQUFBckIsUUFBQSxDQUFBVSxJQUFBO2NBU1JnVyxRQUFRLEdBQUd0c0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBLElBRXRCZ1gsUUFBUSxDQUFDK1QsRUFBRTtnQkFBQXBWLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDUixJQUFJeFEsS0FBSyxpQkFBQWxCLE1BQUEsQ0FBaUI0TyxHQUFHLFNBQUE1TyxNQUFBLENBQU02UyxRQUFRLENBQUNPLE1BQU0sTUFBRyxDQUFDO1lBQUE7Y0FHOUQsSUFBSSxDQUFDMlUsY0FBYyxHQUFHRyxRQUFRLEdBQUdELEtBQUs7Y0FBQyxPQUFBelcsUUFBQSxDQUFBUyxNQUFBLFdBRWhDLElBQUksQ0FBQzhWLGNBQWM7WUFBQTtZQUFBO2NBQUEsT0FBQXZXLFFBQUEsQ0FBQVcsSUFBQTtVQUFBO1FBQUEsR0FBQWYsT0FBQTtNQUFBLENBQzNCO01BQUEsU0FBQWtXLEtBQUE7UUFBQSxPQUFBVSxLQUFBLENBQUEzVixLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBNGMsSUFBQTtJQUFBO0VBQUE7SUFBQWxyQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBOHJCLFVBQUEsR0FBQWxYLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQW9CLFNBQWdCdk4sS0FBdUIsRUFBRXFqQix1QkFBa0QsRUFBRUMsWUFBb0I7UUFBQSxJQUFBM3FCLE1BQUE7UUFBQSxJQUFBdVIsT0FBQSxFQUFBTixHQUFBLEVBQUEwQyxRQUFBLEVBQUFpWCxhQUFBLEVBQUFDLGFBQUEsRUFBQUMsZ0JBQUEsRUFBQVIsS0FBQSxFQUFBUyxZQUFBLEVBQUFqQyxPQUFBLEVBQUFyVCxNQUFBLEVBQUE4VSxRQUFBLEVBQUFTLGlCQUFBO1FBQUEsT0FBQXhYLDJJQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWhCLElBQUEsR0FBQWdCLFNBQUEsQ0FBQWYsSUFBQTtZQUFBO2NBQ3pHeEMsT0FBTyxHQUFHcEssd0VBQXlCLENBQUNFLEtBQUssQ0FBQyxDQUFDa0ssT0FBTztjQUFBLElBRW5EQSxPQUFPO2dCQUFBdUQsU0FBQSxDQUFBZixJQUFBO2dCQUFBO2NBQUE7Y0FDVixJQUFJLENBQUNqTixPQUFPLENBQUNTLEtBQUssQ0FBQyw0QkFBNEIsRUFBRUYsS0FBSyxDQUFDO2NBQUMsT0FBQXlOLFNBQUEsQ0FBQVIsTUFBQSxXQUVqRDtnQkFBQ21CLE1BQU0sRUFBRTtjQUFjLENBQUM7WUFBQTtjQUczQnhFLEdBQUcsR0FBRyxJQUFJLENBQUNnYSxRQUFRLENBQUMsQ0FBQzFaLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzlHLFFBQVEsQ0FBQyxDQUFDO2NBQ2hFa0osUUFBUSxHQUFHLElBQUlLLFFBQVEsQ0FBQyxDQUFDO2NBQ3pCNFcsYUFBYSxHQUFHeFgsdUVBQXlCO2NBRS9DLElBQUl1WCxZQUFZLEtBQUssQ0FBQyxJQUFJRCx1QkFBdUIsRUFBRTtnQkFDM0NHLGFBQXlDLEdBQUc7a0JBQ2hEWCxVQUFVLEVBQVZBLFVBQVU7a0JBQ1ZVLGFBQWEsRUFBYkEsYUFBYTtrQkFDYk0sV0FBVyxFQUFFN2pCLEtBQUs7a0JBQ2xCc2pCLFlBQVksRUFBWkEsWUFBWTtrQkFDWlEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDZixjQUFjO2tCQUN0Q2pKLG9CQUFvQixFQUFFO29CQUNwQitJLFVBQVUsRUFBVkEsVUFBVTtvQkFDVmtCLGtCQUFrQixFQUFFO3NCQUNsQi9sQixJQUFJLEVBQUVxbEIsdUJBQXVCLENBQUNybEIsSUFBSTtzQkFDbEMyVixHQUFHLEVBQUUwUCx1QkFBdUIsQ0FBQzFQO29CQUMvQjtrQkFDRixDQUFDO2tCQUNEcVEsdUJBQXVCLEVBQUU7b0JBQUNuQixVQUFVLEVBQVZBO2tCQUFVO2dCQUN0QyxDQUFDO2dCQUVEdlcsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDb2MsYUFBYSxDQUFDLENBQUM7Y0FDNUQsQ0FBQyxNQUFNO2dCQUNDQyxnQkFBK0MsR0FBRztrQkFDdERaLFVBQVUsRUFBVkEsVUFBVTtrQkFDVlUsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUU3akIsS0FBSztrQkFDbEJzakIsWUFBWSxFQUFaQSxZQUFZO2tCQUNaUSxpQkFBaUIsRUFBRSxJQUFJLENBQUNmLGNBQWM7a0JBQ3RDa0Isc0JBQXNCLEVBQUU7b0JBQUNwQixVQUFVLEVBQVZBO2tCQUFVO2dCQUNyQyxDQUFDO2dCQUVEdlcsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDcWMsZ0JBQWdCLENBQUMsQ0FBQztjQUMvRDtjQUVNUixLQUFLLEdBQUdyc0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBNFcsU0FBQSxDQUFBaEIsSUFBQTtjQUlsQmdWLE9BQU8sR0FBRyxJQUFJO2NBQUFoVSxTQUFBLENBQUFmLElBQUE7Y0FBQSxPQUVHOEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLENBQ2hDM0QsS0FBSyxDQUFDbEQsR0FBRyxFQUFFO2dCQUNUbUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVY7Y0FDUixDQUFDLENBQUMsRUFDRixJQUFJa0MsT0FBTyxDQUFXLFVBQUEwQixPQUFPO2dCQUFBLE9BQzNCdVIsT0FBTyxHQUFHNW9CLE1BQU0sQ0FBQzJELFVBQVUsQ0FBQyxZQUFNO2tCQUNoQzdELE1BQUksQ0FBQzhHLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHFCQUFxQixFQUFFLElBQUloRSxLQUFLLHlCQUFBbEIsTUFBQSxDQUF5QjRPLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQ3BGc0csT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFelYsTUFBSSxDQUFDbXFCLFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NvQixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJekMsT0FBTyxFQUFFO2tCQUNYOU0sWUFBWSxDQUFDOE0sT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBaEJKaUMsWUFBWSxHQUFBalcsU0FBQSxDQUFBUCxJQUFBO2NBQUFPLFNBQUEsQ0FBQWYsSUFBQTtjQUFBO1lBQUE7Y0FBQWUsU0FBQSxDQUFBaEIsSUFBQTtjQUFBZ0IsU0FBQSxDQUFBd0UsRUFBQSxHQUFBeEUsU0FBQTtjQWtCWixJQUFJLENBQUNoTyxPQUFPLENBQUNTLEtBQUssQ0FBQyxxQkFBcUIsRUFBQXVOLFNBQUEsQ0FBQXdFLEVBQUcsQ0FBQztjQUFDLE9BQUF4RSxTQUFBLENBQUFSLE1BQUEsV0FFdEM7Z0JBQUNtQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXVCLEdBQUcsSUFBSSxDQUFDK1YsOEJBQThCLENBQUNULFlBQVksQ0FBQztjQUFBLE1BRTdFdFYsTUFBTSxLQUFLLElBQUk7Z0JBQUFYLFNBQUEsQ0FBQWYsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWUsU0FBQSxDQUFBUixNQUFBLFdBQ1Y7Z0JBQUNtQixNQUFNLEVBQU5BO2NBQU0sQ0FBQztZQUFBO2NBR1g4VSxRQUFRLEdBQUd0c0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBNFcsU0FBQSxDQUFBZixJQUFBO2NBQUEsT0FDSyxJQUFJLENBQUMwWCxzQ0FBc0MsQ0FBQ2xhLE9BQU8sRUFBRXdaLFlBQVksQ0FBQztZQUFBO2NBQTVGQyxpQkFBaUIsR0FBQWxXLFNBQUEsQ0FBQVAsSUFBQTtjQUV2QixJQUFJLENBQUN6TixPQUFPLENBQUNvRyxLQUFLLENBQUMsd0NBQXdDLEVBQUU4ZCxpQkFBaUIsRUFBRVQsUUFBUSxHQUFHRCxLQUFLLENBQUM7Y0FBQyxPQUFBeFYsU0FBQSxDQUFBUixNQUFBLFdBRTNGMFcsaUJBQWlCO1lBQUE7WUFBQTtjQUFBLE9BQUFsVyxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUN6QjtNQUFBLFNBQUE0TixVQUFBL04sRUFBQSxFQUFBOEwsR0FBQSxFQUFBSyxHQUFBO1FBQUEsT0FBQTZKLFVBQUEsQ0FBQS9WLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUF5VixTQUFBO0lBQUE7RUFBQTtJQUFBL2pCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUErc0IsUUFBQSxHQUFBblksNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBa0YsU0FBYzVWLElBQVksRUFBRXVFLEtBQXVCLEVBQUVxakIsdUJBQWtELEVBQUVDLFlBQW9CO1FBQUEsSUFBQWxKLE1BQUE7UUFBQSxJQUFBbFEsT0FBQSxFQUFBTixHQUFBLEVBQUEwQyxRQUFBLEVBQUFpWCxhQUFBLEVBQUFDLGFBQUEsRUFBQUMsZ0JBQUEsRUFBQVIsS0FBQSxFQUFBUyxZQUFBLEVBQUFqQyxPQUFBLEVBQUFyVCxNQUFBLEVBQUE4VSxRQUFBLEVBQUFTLGlCQUFBO1FBQUEsT0FBQXhYLDJJQUFBLFVBQUFzRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWpGLElBQUEsR0FBQWlGLFNBQUEsQ0FBQWhGLElBQUE7WUFBQTtjQUNySHhDLE9BQU8sR0FBR3BLLHdFQUF5QixDQUFDRSxLQUFLLENBQUMsQ0FBQ2tLLE9BQU87Y0FBQSxJQUVuREEsT0FBTztnQkFBQXdILFNBQUEsQ0FBQWhGLElBQUE7Z0JBQUE7Y0FBQTtjQUNWLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDRCQUE0QixFQUFFRixLQUFLLENBQUM7Y0FBQyxPQUFBMFIsU0FBQSxDQUFBekUsTUFBQSxXQUVqRDtnQkFBQ21CLE1BQU0sRUFBRTtjQUFjLENBQUM7WUFBQTtjQUczQnhFLEdBQUcsR0FBRyxJQUFJLENBQUNnYSxRQUFRLENBQUMsQ0FBQzFaLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQzlHLFFBQVEsQ0FBQyxDQUFDO2NBQzlEa0osUUFBUSxHQUFHLElBQUlLLFFBQVEsQ0FBQyxDQUFDO2NBQ3pCNFcsYUFBYSxHQUFHeFgsdUVBQXlCO2NBRS9DLElBQUl1WCxZQUFZLEtBQUssQ0FBQyxJQUFJRCx1QkFBdUIsRUFBRTtnQkFDM0NHLGFBQXVDLEdBQUc7a0JBQzlDWCxVQUFVLEVBQVZBLFVBQVU7a0JBQ1ZVLGFBQWEsRUFBYkEsYUFBYTtrQkFDYk0sV0FBVyxFQUFFN2pCLEtBQUs7a0JBQ2xCc2pCLFlBQVksRUFBWkEsWUFBWTtrQkFDWlEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDZixjQUFjO2tCQUN0Q3RuQixJQUFJLEVBQUpBLElBQUk7a0JBQ0pxZSxvQkFBb0IsRUFBRTtvQkFDcEIrSSxVQUFVLEVBQVZBLFVBQVU7b0JBQ1ZrQixrQkFBa0IsRUFBRTtzQkFDbEIvbEIsSUFBSSxFQUFFcWxCLHVCQUF1QixDQUFDcmxCLElBQUk7c0JBQ2xDMlYsR0FBRyxFQUFFMFAsdUJBQXVCLENBQUMxUDtvQkFDL0I7a0JBQ0YsQ0FBQztrQkFDRHFRLHVCQUF1QixFQUFFO29CQUN2QnJsQixRQUFRLEVBQUUsRUFBRTtvQkFDWmtrQixVQUFVLEVBQVZBO2tCQUNGO2dCQUNGLENBQUM7Z0JBRUR2VyxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUNvYyxhQUFhLENBQUMsQ0FBQztjQUM1RCxDQUFDLE1BQU07Z0JBQ0NDLGdCQUE2QyxHQUFHO2tCQUNwRFosVUFBVSxFQUFWQSxVQUFVO2tCQUNWVSxhQUFhLEVBQWJBLGFBQWE7a0JBQ2JNLFdBQVcsRUFBRTdqQixLQUFLO2tCQUNsQnNqQixZQUFZLEVBQVpBLFlBQVk7a0JBQ1pRLGlCQUFpQixFQUFFLElBQUksQ0FBQ2YsY0FBYztrQkFDdEN0bkIsSUFBSSxFQUFKQSxJQUFJO2tCQUNKd29CLHNCQUFzQixFQUFFO29CQUN0QnRsQixRQUFRLEVBQUUsRUFBRTtvQkFDWmtrQixVQUFVLEVBQVZBO2tCQUNGO2dCQUNGLENBQUM7Z0JBRUR2VyxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUNxYyxnQkFBZ0IsQ0FBQyxDQUFDO2NBQy9EO2NBRU1SLEtBQUssR0FBR3JzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUE2YSxTQUFBLENBQUFqRixJQUFBO2NBSWxCZ1YsT0FBTyxHQUFHLElBQUk7Y0FBQS9QLFNBQUEsQ0FBQWhGLElBQUE7Y0FBQSxPQUVHOEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLENBQ2hDM0QsS0FBSyxDQUFDbEQsR0FBRyxFQUFFO2dCQUNUbUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVY7Y0FDUixDQUFDLENBQUMsRUFDRixJQUFJa0MsT0FBTyxDQUFXLFVBQUEwQixPQUFPO2dCQUFBLE9BQzNCdVIsT0FBTyxHQUFHNW9CLE1BQU0sQ0FBQzJELFVBQVUsQ0FBQyxZQUFNO2tCQUNoQzRkLE1BQUksQ0FBQzNhLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1CQUFtQixFQUFFLElBQUloRSxLQUFLLHVCQUFBbEIsTUFBQSxDQUF1QjRPLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQ2hGc0csT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFZ00sTUFBSSxDQUFDMEksUUFBUSxDQUFDO2NBQUEsQ0FDbkIsQ0FBQyxDQUNGLENBQUMsQ0FDQ29CLE9BQU8sQ0FBQyxZQUFNO2dCQUNiLElBQUl6QyxPQUFPLEVBQUU7a0JBQ1g5TSxZQUFZLENBQUM4TSxPQUFPLENBQUM7Z0JBQ3ZCO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FoQkppQyxZQUFZLEdBQUFoUyxTQUFBLENBQUF4RSxJQUFBO2NBQUF3RSxTQUFBLENBQUFoRixJQUFBO2NBQUE7WUFBQTtjQUFBZ0YsU0FBQSxDQUFBakYsSUFBQTtjQUFBaUYsU0FBQSxDQUFBTyxFQUFBLEdBQUFQLFNBQUE7Y0FrQlosSUFBSSxDQUFDalMsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUJBQW1CLEVBQUF3UixTQUFBLENBQUFPLEVBQUcsQ0FBQztjQUFDLE9BQUFQLFNBQUEsQ0FBQXpFLE1BQUEsV0FFcEM7Z0JBQUNtQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXFCLEdBQUcsSUFBSSxDQUFDa1csNEJBQTRCLENBQUNaLFlBQVksQ0FBQztjQUFBLE1BRXpFdFYsTUFBTSxLQUFLLElBQUk7Z0JBQUFzRCxTQUFBLENBQUFoRixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBZ0YsU0FBQSxDQUFBekUsTUFBQSxXQUNWO2dCQUFDbUIsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYOFUsUUFBUSxHQUFHdHNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQTZhLFNBQUEsQ0FBQWhGLElBQUE7Y0FBQSxPQUNLLElBQUksQ0FBQzZYLG9DQUFvQyxDQUFDcmEsT0FBTyxFQUFFd1osWUFBWSxDQUFDO1lBQUE7Y0FBMUZDLGlCQUFpQixHQUFBalMsU0FBQSxDQUFBeEUsSUFBQTtjQUV2QixJQUFJLENBQUN6TixPQUFPLENBQUNvRyxLQUFLLENBQUMsc0NBQXNDLEVBQUU4ZCxpQkFBaUIsRUFBRVQsUUFBUSxHQUFHRCxLQUFLLENBQUM7Y0FBQyxPQUFBdlIsU0FBQSxDQUFBekUsTUFBQSxXQUV6RjBXLGlCQUFpQjtZQUFBO1lBQUE7Y0FBQSxPQUFBalMsU0FBQSxDQUFBdkUsSUFBQTtVQUFBO1FBQUEsR0FBQWtFLFFBQUE7TUFBQSxDQUN6QjtNQUFBLFNBQUFtVCxRQUFBekssR0FBQSxFQUFBMEssR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBTixRQUFBLENBQUFoWCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBOGUsT0FBQTtJQUFBO0VBQUE7SUFBQXB0QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBa2lCLHFCQUFBLEdBQUF0Tiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFzTixTQUEyQm1MLE1BQWUsRUFBRWIsa0JBQTZDO1FBQUEsSUFBQXpKLE1BQUE7UUFBQSxJQUFBMVEsR0FBQSxFQUFBMEMsUUFBQSxFQUFBVSxJQUFBLEVBQUFpVyxLQUFBLEVBQUFTLFlBQUEsRUFBQWpDLE9BQUEsRUFBQXJULE1BQUEsRUFBQThVLFFBQUEsRUFBQTJCLDRCQUFBO1FBQUEsT0FBQTFZLDJJQUFBLFVBQUF5TixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXBOLElBQUEsR0FBQW9OLFNBQUEsQ0FBQW5OLElBQUE7WUFBQTtjQUNqRjlDLEdBQUcsR0FBRyxJQUFJLENBQUNnYSxRQUFRLENBQUMsQ0FBQ2dCLE1BQU0sQ0FBQzFhLE9BQU8sRUFBRSxRQUFRLEVBQUUwYSxNQUFNLENBQUNqbUIsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDeUUsUUFBUSxDQUFDLENBQUM7Y0FDcEdrSixRQUFRLEdBQUcsSUFBSUssUUFBUSxDQUFDLENBQUM7Y0FDekJLLElBQWtDLEdBQUc7Z0JBQ3pDNlYsVUFBVSxFQUFWQSxVQUFVO2dCQUNWaUMsWUFBWSxFQUFFRixNQUFNLENBQUNFLFlBQVk7Z0JBQ2pDZixrQkFBa0IsRUFBRTtrQkFDbEIvbEIsSUFBSSxFQUFFK2xCLGtCQUFrQixDQUFDL2xCLElBQUk7a0JBQzdCMlYsR0FBRyxFQUFFb1Esa0JBQWtCLENBQUNwUTtnQkFDMUI7Y0FDRixDQUFDO2NBRURySCxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUM0RixJQUFJLENBQUMsQ0FBQztjQUUzQ2lXLEtBQUssR0FBR3JzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFnakIsU0FBQSxDQUFBcE4sSUFBQTtjQUlsQmdWLE9BQU8sR0FBRyxJQUFJO2NBQUE1SCxTQUFBLENBQUFuTixJQUFBO2NBQUEsT0FFRzhCLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxDQUNoQzNELEtBQUssQ0FBQ2xELEdBQUcsRUFBRTtnQkFDVG1ELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVWO2NBQ1IsQ0FBQyxDQUFDLEVBQ0YsSUFBSWtDLE9BQU8sQ0FBVyxVQUFBMEIsT0FBTztnQkFBQSxPQUMzQnVSLE9BQU8sR0FBRzVvQixNQUFNLENBQUMyRCxVQUFVLENBQUMsWUFBTTtrQkFDaEM4ZCxNQUFJLENBQUM3YSxPQUFPLENBQUNTLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJaEUsS0FBSyxzQ0FBQWxCLE1BQUEsQ0FBc0M0TyxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUM5R3NHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRWtNLE1BQUksQ0FBQ3dJLFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NvQixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJekMsT0FBTyxFQUFFO2tCQUNYOU0sWUFBWSxDQUFDOE0sT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBaEJKaUMsWUFBWSxHQUFBN0osU0FBQSxDQUFBM00sSUFBQTtjQUFBMk0sU0FBQSxDQUFBbk4sSUFBQTtjQUFBO1lBQUE7Y0FBQW1OLFNBQUEsQ0FBQXBOLElBQUE7Y0FBQW9OLFNBQUEsQ0FBQTVILEVBQUEsR0FBQTRILFNBQUE7Y0FrQlosSUFBSSxDQUFDcGEsT0FBTyxDQUFDUyxLQUFLLENBQUMsa0NBQWtDLEVBQUEyWixTQUFBLENBQUE1SCxFQUFHLENBQUM7Y0FBQyxPQUFBNEgsU0FBQSxDQUFBNU0sTUFBQSxXQUVuRDtnQkFBQ21CLE1BQU0sRUFBRTtjQUFRLENBQUM7WUFBQTtjQUdyQkEsTUFBa0MsR0FBRyxJQUFJLENBQUMyVyx5Q0FBeUMsQ0FBQ3JCLFlBQVksQ0FBQztjQUFBLE1BRW5HdFYsTUFBTSxLQUFLLElBQUk7Z0JBQUF5TCxTQUFBLENBQUFuTixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBbU4sU0FBQSxDQUFBNU0sTUFBQSxXQUNWO2dCQUFDbUIsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYOFUsUUFBUSxHQUFHdHNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQWdqQixTQUFBLENBQUFuTixJQUFBO2NBQUEsT0FDZ0IsSUFBSSxDQUFDc1ksaURBQWlELENBQUN0QixZQUFZLENBQUM7WUFBQTtjQUF6R21CLDRCQUE0QixHQUFBaEwsU0FBQSxDQUFBM00sSUFBQTtjQUVsQyxJQUFJLENBQUN6TixPQUFPLENBQUNvRyxLQUFLLENBQUMscURBQXFELEVBQUVnZiw0QkFBNEIsRUFBRTNCLFFBQVEsR0FBR0QsS0FBSyxDQUFDO2NBQUMsT0FBQXBKLFNBQUEsQ0FBQTVNLE1BQUEsV0FFbkg0WCw0QkFBNEI7WUFBQTtZQUFBO2NBQUEsT0FBQWhMLFNBQUEsQ0FBQTFNLElBQUE7VUFBQTtRQUFBLEdBQUFzTSxRQUFBO01BQUEsQ0FDcEM7TUFBQSxTQUFBSyxxQkFBQW1MLEdBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUExTCxxQkFBQSxDQUFBbk0sS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQW9VLG9CQUFBO0lBQUE7RUFBQTtJQUFBMWlCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUE2dEIsYUFBQSxHQUFBalosNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBaVosU0FDRVIsTUFBZSxFQUNmUyxxQkFBNkIsRUFDN0JDLHNCQUFxQyxFQUNyQzdFLFlBQTBCLEVBQzFCSCxXQUF3QjtRQUFBLElBQUFpRixNQUFBO1FBQUEsSUFBQTNiLEdBQUEsRUFBQTBDLFFBQUEsRUFBQVUsSUFBQSxFQUFBaVcsS0FBQSxFQUFBUyxZQUFBLEVBQUFqQyxPQUFBLEVBQUFyVCxNQUFBLEVBQUE4VSxRQUFBO1FBQUEsT0FBQS9XLDJJQUFBLFVBQUFxWixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWhaLElBQUEsR0FBQWdaLFNBQUEsQ0FBQS9ZLElBQUE7WUFBQTtjQUVsQjlDLEdBQUcsR0FBRyxJQUFJLENBQUNnYSxRQUFRLENBQUMsQ0FBQ2dCLE1BQU0sQ0FBQzFhLE9BQU8sRUFBRSxRQUFRLEVBQUUwYSxNQUFNLENBQUNqbUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUN5RSxRQUFRLENBQUMsQ0FBQztjQUN0RmtKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUN6QkssSUFBaUMsR0FBRztnQkFDeEM2VixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1ZpQyxZQUFZLEVBQUVGLE1BQU0sQ0FBQ0UsWUFBWTtnQkFDakNPLHFCQUFxQixFQUFyQkEscUJBQXFCO2dCQUNyQkMsc0JBQXNCLEVBQXRCQSxzQkFBc0I7Z0JBQ3RCN0UsWUFBWSxFQUFFRixnR0FBeUQsQ0FBQ0UsWUFBWSxDQUFDO2dCQUNyRkgsV0FBVyxFQUFFRiw2RkFBc0QsQ0FBQ0UsV0FBVztjQUNqRixDQUFDO2NBRURoVSxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUM0RixJQUFJLENBQUMsQ0FBQztjQUUzQ2lXLEtBQUssR0FBR3JzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUE0dUIsU0FBQSxDQUFBaFosSUFBQTtjQUlsQmdWLE9BQU8sR0FBRyxJQUFJO2NBQUFnRSxTQUFBLENBQUEvWSxJQUFBO2NBQUEsT0FFRzhCLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxDQUNoQzNELEtBQUssQ0FBQ2xELEdBQUcsRUFBRTtnQkFDVG1ELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVWO2NBQ1IsQ0FBQyxDQUFDLEVBQ0YsSUFBSWtDLE9BQU8sQ0FBVyxVQUFBMEIsT0FBTztnQkFBQSxPQUMzQnVSLE9BQU8sR0FBRzVvQixNQUFNLENBQUMyRCxVQUFVLENBQUMsWUFBTTtrQkFDaEMrb0IsTUFBSSxDQUFDOWxCLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLElBQUloRSxLQUFLLGlDQUFBbEIsTUFBQSxDQUFpQzRPLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQzFHc0csT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFbVgsTUFBSSxDQUFDekMsUUFBUSxDQUFDO2NBQUEsQ0FDbkIsQ0FBQyxDQUNGLENBQUMsQ0FDQ29CLE9BQU8sQ0FBQyxZQUFNO2dCQUNiLElBQUl6QyxPQUFPLEVBQUU7a0JBQ1g5TSxZQUFZLENBQUM4TSxPQUFPLENBQUM7Z0JBQ3ZCO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FoQkppQyxZQUFZLEdBQUErQixTQUFBLENBQUF2WSxJQUFBO2NBQUF1WSxTQUFBLENBQUEvWSxJQUFBO2NBQUE7WUFBQTtjQUFBK1ksU0FBQSxDQUFBaFosSUFBQTtjQUFBZ1osU0FBQSxDQUFBeFQsRUFBQSxHQUFBd1QsU0FBQTtjQWtCWixJQUFJLENBQUNobUIsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUNBQW1DLEVBQUF1bEIsU0FBQSxDQUFBeFQsRUFBRyxDQUFDO2NBQUMsT0FBQXdULFNBQUEsQ0FBQXhZLE1BQUEsV0FFcEQ7Z0JBQUNtQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXdDLEdBQUcsSUFBSSxDQUFDc1gsK0NBQStDLENBQUNoQyxZQUFZLENBQUM7Y0FDN0dSLFFBQVEsR0FBR3RzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBRTNCLElBQUksQ0FBQzRJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdEQUFnRCxFQUFFME8sTUFBTSxFQUFFOFUsUUFBUSxHQUFHRCxLQUFLLENBQUM7Y0FBQyxPQUFBd0MsU0FBQSxDQUFBeFksTUFBQSxXQUV2RjtnQkFBQ21CLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFxWCxTQUFBLENBQUF0WSxJQUFBO1VBQUE7UUFBQSxHQUFBaVksUUFBQTtNQUFBLENBQ2hCO01BQUEsU0FBQU8sYUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQWIsYUFBQSxDQUFBOVgsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQWlnQixZQUFBO0lBQUE7RUFBQTtJQUFBdnVCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUEydUIsaUJBQUEsR0FBQS9aLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQStaLFNBQXVCdEIsTUFBZSxFQUFFdUIsVUFBNkIsRUFBRUMsa0JBQTJCO1FBQUEsSUFBQUMsTUFBQTtRQUFBLElBQUF0VSxPQUFBO1VBQUFuSSxHQUFBO1VBQUEwQyxRQUFBO1VBQUFVLElBQUE7VUFBQWlXLEtBQUE7VUFBQVMsWUFBQTtVQUFBakMsT0FBQTtVQUFBclQsTUFBQTtVQUFBOFUsUUFBQTtVQUFBb0Qsd0JBQUE7VUFBQUMsTUFBQSxHQUFBN2dCLFNBQUE7UUFBQSxPQUFBeUcsMklBQUEsVUFBQXFhLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBaGEsSUFBQSxHQUFBZ2EsU0FBQSxDQUFBL1osSUFBQTtZQUFBO2NBQUVxRixPQUFpQixHQUFBd1UsTUFBQSxDQUFBaG1CLE1BQUEsUUFBQWdtQixNQUFBLFFBQUFwcEIsU0FBQSxHQUFBb3BCLE1BQUEsTUFBRyxFQUFFO2NBQ2xIM2MsR0FBRyxHQUFHLElBQUksQ0FBQ2dhLFFBQVEsQ0FBQyxDQUFDZ0IsTUFBTSxDQUFDMWEsT0FBTyxFQUFFLFFBQVEsRUFBRTBhLE1BQU0sQ0FBQ2ptQixRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUN5RSxRQUFRLENBQUMsQ0FBQztjQUNoR2tKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUN6QkssSUFBOEIsR0FBRztnQkFDckM2VixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1ZpQyxZQUFZLEVBQUVGLE1BQU0sQ0FBQ0UsWUFBWTtnQkFDakNxQixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1ZDLGtCQUFrQixFQUFsQkEsa0JBQWtCO2dCQUNsQnJVLE9BQU8sRUFBUEE7Y0FDRixDQUFDO2NBRUR6RixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUM0RixJQUFJLENBQUMsQ0FBQztjQUUzQ2lXLEtBQUssR0FBR3JzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUE0dkIsU0FBQSxDQUFBaGEsSUFBQTtjQUlsQmdWLE9BQU8sR0FBRyxJQUFJO2NBQUFnRixTQUFBLENBQUEvWixJQUFBO2NBQUEsT0FFRzhCLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxDQUNoQzNELEtBQUssQ0FBQ2xELEdBQUcsRUFBRTtnQkFDVG1ELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVWO2NBQ1IsQ0FBQyxDQUFDLEVBQ0YsSUFBSWtDLE9BQU8sQ0FBVyxVQUFBMEIsT0FBTztnQkFBQSxPQUMzQnVSLE9BQU8sR0FBRzVvQixNQUFNLENBQUMyRCxVQUFVLENBQUMsWUFBTTtrQkFDaEM2cEIsTUFBSSxDQUFDNW1CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDhCQUE4QixFQUFFLElBQUloRSxLQUFLLGtDQUFBbEIsTUFBQSxDQUFrQzRPLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQ3RHc0csT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFaVksTUFBSSxDQUFDdkQsUUFBUSxDQUFDO2NBQUEsQ0FDbkIsQ0FBQyxDQUNGLENBQUMsQ0FDQ29CLE9BQU8sQ0FBQyxZQUFNO2dCQUNiLElBQUl6QyxPQUFPLEVBQUU7a0JBQ1g5TSxZQUFZLENBQUM4TSxPQUFPLENBQUM7Z0JBQ3ZCO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FoQkppQyxZQUFZLEdBQUErQyxTQUFBLENBQUF2WixJQUFBO2NBQUF1WixTQUFBLENBQUEvWixJQUFBO2NBQUE7WUFBQTtjQUFBK1osU0FBQSxDQUFBaGEsSUFBQTtjQUFBZ2EsU0FBQSxDQUFBeFUsRUFBQSxHQUFBd1UsU0FBQTtjQWtCWixJQUFJLENBQUNobkIsT0FBTyxDQUFDUyxLQUFLLENBQUMsOEJBQThCLEVBQUF1bUIsU0FBQSxDQUFBeFUsRUFBRyxDQUFDO2NBQUMsT0FBQXdVLFNBQUEsQ0FBQXhaLE1BQUEsV0FFL0M7Z0JBQUNtQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQThCLEdBQUcsSUFBSSxDQUFDc1kscUNBQXFDLENBQUNoRCxZQUFZLENBQUM7Y0FBQSxNQUUzRnRWLE1BQU0sS0FBSyxJQUFJO2dCQUFBcVksU0FBQSxDQUFBL1osSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQStaLFNBQUEsQ0FBQXhaLE1BQUEsV0FDVjtnQkFBQ21CLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7Y0FHWDhVLFFBQVEsR0FBR3RzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUE0dkIsU0FBQSxDQUFBL1osSUFBQTtjQUFBLE9BQ1ksSUFBSSxDQUFDaWEsNkNBQTZDLENBQUNqRCxZQUFZLENBQUM7WUFBQTtjQUFqRzRDLHdCQUF3QixHQUFBRyxTQUFBLENBQUF2WixJQUFBO2NBRTlCLElBQUksQ0FBQ3pOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGlEQUFpRCxFQUFFNG1CLHdCQUF3QixFQUFFcEQsUUFBUSxHQUFHRCxLQUFLLENBQUM7Y0FBQyxPQUFBd0QsU0FBQSxDQUFBeFosTUFBQSxXQUUxR3FaLHdCQUF3QjtZQUFBO1lBQUE7Y0FBQSxPQUFBRyxTQUFBLENBQUF0WixJQUFBO1VBQUE7UUFBQSxHQUFBK1ksUUFBQTtNQUFBLENBQ2hDO01BQUEsU0FBQVUsaUJBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQWQsaUJBQUEsQ0FBQTVZLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUFraEIsZ0JBQUE7SUFBQTtFQUFBO0lBQUF4dkIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTB2QixjQUFBLEdBQUE5YSw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUE4YSxTQUFvQnJDLE1BQWUsRUFBRTFWLE1BQWM7UUFBQSxJQUFBZ1ksTUFBQTtRQUFBLElBQUF0ZCxHQUFBLEVBQUEwQyxRQUFBLEVBQUFVLElBQUEsRUFBQWlXLEtBQUEsRUFBQVMsWUFBQSxFQUFBakMsT0FBQSxFQUFBclQsTUFBQSxFQUFBOFUsUUFBQSxFQUFBaUUscUJBQUE7UUFBQSxPQUFBaGIsMklBQUEsVUFBQWliLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBNWEsSUFBQSxHQUFBNGEsU0FBQSxDQUFBM2EsSUFBQTtZQUFBO2NBQzNDOUMsR0FBRyxHQUFHLElBQUksQ0FBQ2dhLFFBQVEsQ0FBQyxDQUFDZ0IsTUFBTSxDQUFDMWEsT0FBTyxFQUFFLFFBQVEsRUFBRTBhLE1BQU0sQ0FBQ2ptQixRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQ3lFLFFBQVEsQ0FBQyxDQUFDO2NBQ3RGa0osUUFBUSxHQUFHLElBQUlLLFFBQVEsQ0FBQyxDQUFDO2NBQ3pCSyxJQUEyQixHQUFHO2dCQUNsQzZWLFVBQVUsRUFBVkEsVUFBVTtnQkFDVmlDLFlBQVksRUFBRUYsTUFBTSxDQUFDRSxZQUFZO2dCQUNqQzVWLE1BQU0sRUFBTkEsTUFBTTtnQkFDTjZDLE9BQU8sRUFBRTtjQUNYLENBQUM7Y0FFRHpGLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRW5NLElBQUksQ0FBQzJHLFNBQVMsQ0FBQzRGLElBQUksQ0FBQyxDQUFDO2NBRTNDaVcsS0FBSyxHQUFHcnNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXd3QixTQUFBLENBQUE1YSxJQUFBO2NBSWxCZ1YsT0FBTyxHQUFHLElBQUk7Y0FBQTRGLFNBQUEsQ0FBQTNhLElBQUE7Y0FBQSxPQUVHOEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLENBQ2hDM0QsS0FBSyxDQUFDbEQsR0FBRyxFQUFFO2dCQUNUbUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVYsUUFBUTtnQkFDZDVFLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUk4RyxPQUFPLENBQVcsVUFBQTBCLE9BQU87Z0JBQUEsT0FDM0J1UixPQUFPLEdBQUc1b0IsTUFBTSxDQUFDMkQsVUFBVSxDQUFDLFlBQU07a0JBQ2hDMHFCLE1BQUksQ0FBQ3puQixPQUFPLENBQUNTLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJaEUsS0FBSyw2QkFBQWxCLE1BQUEsQ0FBNkI0TyxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUN4RnNHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRThZLE1BQUksQ0FBQ3BFLFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NvQixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJekMsT0FBTyxFQUFFO2tCQUNYOU0sWUFBWSxDQUFDOE0sT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBakJKaUMsWUFBWSxHQUFBMkQsU0FBQSxDQUFBbmEsSUFBQTtjQUFBbWEsU0FBQSxDQUFBM2EsSUFBQTtjQUFBO1lBQUE7Y0FBQTJhLFNBQUEsQ0FBQTVhLElBQUE7Y0FBQTRhLFNBQUEsQ0FBQXBWLEVBQUEsR0FBQW9WLFNBQUE7Y0FtQlosSUFBSSxDQUFDNW5CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHlCQUF5QixFQUFBbW5CLFNBQUEsQ0FBQXBWLEVBQUcsQ0FBQztjQUFDLE9BQUFvVixTQUFBLENBQUFwYSxNQUFBLFdBRTFDO2dCQUFDbUIsTUFBTSxFQUFFO2NBQVEsQ0FBQztZQUFBO2NBR3JCQSxNQUEyQixHQUFHLElBQUksQ0FBQ2taLHFDQUFxQyxDQUFDNUQsWUFBWSxDQUFDO2NBQUEsTUFFeEZ0VixNQUFNLEtBQUssSUFBSTtnQkFBQWlaLFNBQUEsQ0FBQTNhLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUEyYSxTQUFBLENBQUFwYSxNQUFBLFdBQ1Y7Z0JBQUNtQixNQUFNLEVBQU5BO2NBQU0sQ0FBQztZQUFBO2NBR1g4VSxRQUFRLEdBQUd0c0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBd3dCLFNBQUEsQ0FBQTNhLElBQUE7Y0FBQSxPQUNTLElBQUksQ0FBQzZhLDBDQUEwQyxDQUFDN0QsWUFBWSxDQUFDO1lBQUE7Y0FBM0Z5RCxxQkFBcUIsR0FBQUUsU0FBQSxDQUFBbmEsSUFBQTtjQUUzQixJQUFJLENBQUN6TixPQUFPLENBQUNDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRXluQixxQkFBcUIsRUFBRWpFLFFBQVEsR0FBR0QsS0FBSyxDQUFDO2NBQUMsT0FBQW9FLFNBQUEsQ0FBQXBhLE1BQUEsV0FFbkdrYSxxQkFBcUI7WUFBQTtZQUFBO2NBQUEsT0FBQUUsU0FBQSxDQUFBbGEsSUFBQTtVQUFBO1FBQUEsR0FBQThaLFFBQUE7TUFBQSxDQUM3QjtNQUFBLFNBQUFPLGNBQUFDLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFWLGNBQUEsQ0FBQTNaLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUE4aEIsYUFBQTtJQUFBO0VBQUE7SUFBQXB3QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBcXdCLHVCQUFBLEdBQUF6Yiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUF5YixTQUE2QmhELE1BQWUsRUFBRTFWLE1BQWM7UUFBQSxJQUFBcFYsVUFBQTtRQUFBLElBQUFrUyxPQUFBLEVBQUFwQyxHQUFBLEVBQUEwQyxRQUFBLEVBQUFVLElBQUE7UUFBQSxPQUFBYiwySUFBQSxVQUFBMGIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFyYixJQUFBLEdBQUFxYixTQUFBLENBQUFwYixJQUFBO1lBQUE7Y0FDMUQsSUFBSSxHQUFBNVMsVUFBQSxHQUFDRSxTQUFTLGNBQUFGLFVBQUEsZUFBVEEsVUFBQSxDQUFXaXVCLFVBQVUsR0FBRTtnQkFDcEIvYixPQUFPLEdBQUcsSUFBSSxDQUFDd2IsYUFBYSxDQUFDNUMsTUFBTSxFQUFFMVYsTUFBTSxDQUFDO2NBQ3BEO2NBRU10RixHQUFHLEdBQUcsSUFBSSxDQUFDZ2EsUUFBUSxDQUFDLENBQUNnQixNQUFNLENBQUMxYSxPQUFPLEVBQUUsUUFBUSxFQUFFMGEsTUFBTSxDQUFDam1CLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDeUUsUUFBUSxDQUFDLENBQUM7Y0FDdEZrSixRQUFRLEdBQUcsSUFBSUssUUFBUSxDQUFDLENBQUM7Y0FDekJLLElBQTJCLEdBQUc7Z0JBQ2xDNlYsVUFBVSxFQUFWQSxVQUFVO2dCQUNWaUMsWUFBWSxFQUFFRixNQUFNLENBQUNFLFlBQVk7Z0JBQ2pDNVYsTUFBTSxFQUFOQSxNQUFNO2dCQUNONkMsT0FBTyxFQUFFO2NBQ1gsQ0FBQztjQUVEekYsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDNEYsSUFBSSxDQUFDLENBQUM7Y0FFakRoVCxTQUFTLENBQUMrdEIsVUFBVSxDQUFDbmUsR0FBRyxFQUFFMEMsUUFBUSxDQUFDO1lBQUM7WUFBQTtjQUFBLE9BQUF3YixTQUFBLENBQUEzYSxJQUFBO1VBQUE7UUFBQSxHQUFBeWEsUUFBQTtNQUFBLENBQ3JDO01BQUEsU0FBQUksdUJBQUFDLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFQLHVCQUFBLENBQUF0YSxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBc2lCLHNCQUFBO0lBQUE7RUFBQTtJQUFBNXdCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzc0IsU0FBaUJ1RSxJQUFjLEVBQU87TUFDcEMsSUFBTWpuQixHQUFHLEdBQUcsSUFBSXRFLEdBQUcsQ0FBQyxJQUFJLENBQUMya0IsSUFBSSxDQUFDO01BQzlCLElBQU02RyxXQUFXLEdBQUdsbkIsR0FBRyxDQUFDNEksUUFBUSxDQUFDclAsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUUzQzJ0QixXQUFXLENBQUM3bkIsTUFBTSxHQUFHNm5CLFdBQVcsQ0FBQzduQixNQUFNLEdBQUcsQ0FBQztNQUUzQ1csR0FBRyxDQUFDNEksUUFBUSxHQUFHc2UsV0FBVyxDQUFDcHRCLE1BQU0sQ0FBQXFTLEtBQUEsQ0FBbEIrYSxXQUFXLEVBQUFwYSw4SUFBQSxDQUFXbWEsSUFBSSxFQUFDLENBQUMxSSxJQUFJLENBQUMsR0FBRyxDQUFDO01BRXBELE9BQU92ZSxHQUFHO0lBQ1o7RUFBQztJQUFBOUosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZyQixhQUFBLEVBQStCO01BQzdCLElBQU1qaUIsR0FBRyxHQUFHLElBQUl0RSxHQUFHLENBQUMsSUFBSSxDQUFDMmtCLElBQUksQ0FBQztNQUM5QixJQUFNbUIsVUFBVSxHQUFHM1csdUVBQXlCO01BQzVDLElBQU1qSixVQUFVLEdBQUdOLDJGQUF5QztNQUU1RHRCLEdBQUcsQ0FBQ3loQixNQUFNLE9BQUEzbkIsTUFBQSxDQUFPLElBQUk0bkIsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUVGLFVBQVUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFNWYsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUE5SCxNQUFBLENBQUtwRSxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUN1TSxRQUFRLENBQUMsQ0FBQyxDQUFFO01BRWxKLE9BQU9sQyxHQUFHLENBQUNrQyxRQUFRLENBQUMsQ0FBQztJQUN2QjtFQUFDO0lBQUFoTSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ3RCLDZCQUFxQ3pXLFFBQWtCLEVBQWlCO01BQ3RFLElBQUksQ0FBQ0EsUUFBUSxFQUFFO1FBQ2IsT0FBTyxRQUFRO01BQ2pCO01BRUEsUUFBUUEsUUFBUSxDQUFDTyxNQUFNO1FBQ3JCLEtBQUssR0FBRztVQUNOLE9BQU8sSUFBSTtRQUNiLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QixLQUFLLEdBQUc7VUFDTixPQUFPLGdCQUFnQjtRQUN6QixLQUFLLEdBQUc7VUFDTixPQUFPLGFBQWE7UUFDdEIsS0FBSyxHQUFHO1VBQ04sT0FBTyw0QkFBNEI7UUFDckMsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8seUJBQXlCO1FBQ2xDLEtBQUssR0FBRztVQUNOLE9BQU8sZUFBZTtRQUN4QixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBaFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZzQiwrQkFBdUN0VyxRQUFrQixFQUFtQjtNQUMxRSxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ08sTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxnQkFBZ0I7UUFDekIsS0FBSyxHQUFHO1VBQ04sT0FBTyxhQUFhO1FBQ3RCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLHlCQUF5QjtRQUNsQyxLQUFLLEdBQUc7VUFDTixPQUFPLGVBQWU7UUFDeEIsS0FBSyxHQUFHO1VBQ04sT0FBTyxVQUFVO1FBQ25CLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QjtVQUNFLE9BQU8sUUFBUTtNQUNuQjtJQUNGO0VBQUM7SUFBQWhYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF5dEIsMENBQWtEbFgsUUFBa0IsRUFBOEI7TUFDaEcsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNPLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBaFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW91QixnREFBd0Q3WCxRQUFrQixFQUFvQztNQUM1RyxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ08sTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8sVUFBVTtRQUNuQixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkI7VUFDRSxPQUFPLFFBQVE7TUFDbkI7SUFDRjtFQUFDO0lBQUFoWCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb3ZCLHNDQUE4QzdZLFFBQWtCLEVBQTBCO01BQ3hGLElBQUksQ0FBQ0EsUUFBUSxFQUFFO1FBQ2IsT0FBTyxRQUFRO01BQ2pCO01BRUEsUUFBUUEsUUFBUSxDQUFDTyxNQUFNO1FBQ3JCLEtBQUssR0FBRztVQUNOLE9BQU8sSUFBSTtRQUNiLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QixLQUFLLEdBQUc7VUFDTixPQUFPLFNBQVM7UUFDbEIsS0FBSyxHQUFHO1VBQ04sT0FBTyxVQUFVO1FBQ25CLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QjtVQUNFLE9BQU8sUUFBUTtNQUNuQjtJQUNGO0VBQUM7SUFBQWhYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnd0Isc0NBQThDelosUUFBa0IsRUFBdUI7TUFDckYsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNPLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBaFgsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQSt3Qix1Q0FBQSxHQUFBbmMsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBbWMsU0FBcURwZSxPQUFlLEVBQUUyRCxRQUFrQjtRQUFBLElBQUFoRyxJQUFBLEVBQUE4YixpQkFBQTtRQUFBLE9BQUF4WCwySUFBQSxVQUFBb2MsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUEvYixJQUFBLEdBQUErYixTQUFBLENBQUE5YixJQUFBO1lBQUE7Y0FBQThiLFNBQUEsQ0FBQTliLElBQUE7Y0FBQSxPQUNuRW1CLFFBQVEsQ0FBQzRhLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUI1Z0IsSUFBSSxHQUFBMmdCLFNBQUEsQ0FBQXRiLElBQUE7Y0FDSnlXLGlCQUF5QyxHQUFHO2dCQUFDdlYsTUFBTSxFQUFFdkcsSUFBSSxDQUFDdUc7Y0FBTSxDQUFDO2NBRXZFdVYsaUJBQWlCLENBQUNpQixNQUFNLEdBQUc7Z0JBQ3pCMWEsT0FBTyxFQUFQQSxPQUFPO2dCQUNQdkwsUUFBUSxFQUFFa0osSUFBSSxDQUFDbEosUUFBUTtnQkFDdkJtbUIsWUFBWSxFQUFFamQsSUFBSSxDQUFDaWQ7Y0FDckIsQ0FBQztjQUVEbkIsaUJBQWlCLENBQUMrRSxHQUFHLEdBQUc3Z0IsSUFBSSxDQUFDNmdCLEdBQUc7Y0FFaEMsSUFBSTdnQixJQUFJLEVBQUU7Z0JBQ1IsSUFBSUEsSUFBSSxDQUFDOGdCLGdCQUFnQixFQUFFO2tCQUN6QmhGLGlCQUFpQixDQUFDZ0YsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQywwQ0FBMEMsQ0FBQy9nQixJQUFJLENBQUM4Z0IsZ0JBQWdCLENBQUM7Z0JBQzdHO2dCQUVBLElBQUk5Z0IsSUFBSSxDQUFDZ2QsNEJBQTRCLElBQUloZCxJQUFJLENBQUNnZCw0QkFBNEIsQ0FBQ2Qsa0JBQWtCLEVBQUU7a0JBQzdGSixpQkFBaUIsQ0FBQ2tCLDRCQUE0QixHQUFHO29CQUFDZCxrQkFBa0IsRUFBRWxjLElBQUksQ0FBQ2dkLDRCQUE0QixDQUFDZDtrQkFBa0IsQ0FBQztnQkFDN0g7Z0JBRUEsSUFBSWxjLElBQUksQ0FBQ2doQiwrQkFBK0IsSUFBSWhoQixJQUFJLENBQUNnaEIsK0JBQStCLENBQUM5RSxrQkFBa0IsRUFBRTtrQkFDbkdKLGlCQUFpQixDQUFDa0YsK0JBQStCLEdBQUc7b0JBQUM5RSxrQkFBa0IsRUFBRWxjLElBQUksQ0FBQ2doQiwrQkFBK0IsQ0FBQzlFO2tCQUFrQixDQUFDO2dCQUNuSTtnQkFFQSxJQUFJbGMsSUFBSSxDQUFDaWhCLDhCQUE4QixJQUFJamhCLElBQUksQ0FBQ2loQiw4QkFBOEIsQ0FBQy9FLGtCQUFrQixFQUFFO2tCQUNqR0osaUJBQWlCLENBQUNtRiw4QkFBOEIsR0FBRztvQkFBQy9FLGtCQUFrQixFQUFFbGMsSUFBSSxDQUFDaWhCLDhCQUE4QixDQUFDL0U7a0JBQWtCLENBQUM7Z0JBQ2pJO2NBQ0Y7Y0FBQyxPQUFBeUUsU0FBQSxDQUFBdmIsTUFBQSxXQUVNMFcsaUJBQWlCO1lBQUE7WUFBQTtjQUFBLE9BQUE2RSxTQUFBLENBQUFyYixJQUFBO1VBQUE7UUFBQSxHQUFBbWIsUUFBQTtNQUFBLENBQ3pCO01BQUEsU0FBQWxFLHVDQUFBMkUsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQVgsdUNBQUEsQ0FBQWhiLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUEwZSxzQ0FBQTtJQUFBO0VBQUE7SUFBQWh0QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBMnhCLHFDQUFBLEdBQUEvYyw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUErYyxVQUFtRGhmLE9BQWUsRUFBRTJELFFBQWtCO1FBQUEsSUFBQWhHLElBQUEsRUFBQXNoQixlQUFBO1FBQUEsT0FBQWhkLDJJQUFBLFVBQUFpZCxXQUFBQyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTVjLElBQUEsR0FBQTRjLFVBQUEsQ0FBQTNjLElBQUE7WUFBQTtjQUFBMmMsVUFBQSxDQUFBM2MsSUFBQTtjQUFBLE9BQ2pFbUIsUUFBUSxDQUFDNGEsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1QjVnQixJQUFJLEdBQUF3aEIsVUFBQSxDQUFBbmMsSUFBQTtjQUNKaWMsZUFBcUMsR0FBRztnQkFBQy9hLE1BQU0sRUFBRXZHLElBQUksQ0FBQ3VHO2NBQU0sQ0FBQztjQUVuRSthLGVBQWUsQ0FBQ3ZFLE1BQU0sR0FBRztnQkFDdkIxYSxPQUFPLEVBQVBBLE9BQU87Z0JBQ1B2TCxRQUFRLEVBQUVrSixJQUFJLENBQUNsSixRQUFRO2dCQUN2Qm1tQixZQUFZLEVBQUVqZCxJQUFJLENBQUNpZDtjQUNyQixDQUFDO2NBRUQsSUFBSWpkLElBQUksRUFBRTtnQkFDUixJQUFJQSxJQUFJLENBQUM4Z0IsZ0JBQWdCLEVBQUU7a0JBQ3pCUSxlQUFlLENBQUNSLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsMENBQTBDLENBQUMvZ0IsSUFBSSxDQUFDOGdCLGdCQUFnQixDQUFDO2dCQUMzRztnQkFFQSxJQUFJOWdCLElBQUksQ0FBQ2dkLDRCQUE0QixJQUFJaGQsSUFBSSxDQUFDZ2QsNEJBQTRCLENBQUNkLGtCQUFrQixFQUFFO2tCQUM3Rm9GLGVBQWUsQ0FBQ3RFLDRCQUE0QixHQUFHO29CQUFDZCxrQkFBa0IsRUFBRWxjLElBQUksQ0FBQ2dkLDRCQUE0QixDQUFDZDtrQkFBa0IsQ0FBQztnQkFDM0g7Z0JBRUEsSUFBSWxjLElBQUksQ0FBQ2doQiwrQkFBK0IsSUFBSWhoQixJQUFJLENBQUNnaEIsK0JBQStCLENBQUM5RSxrQkFBa0IsRUFBRTtrQkFDbkdvRixlQUFlLENBQUNOLCtCQUErQixHQUFHO29CQUFDOUUsa0JBQWtCLEVBQUVsYyxJQUFJLENBQUNnaEIsK0JBQStCLENBQUM5RTtrQkFBa0IsQ0FBQztnQkFDakk7Z0JBRUEsSUFBSWxjLElBQUksQ0FBQ2loQiw4QkFBOEIsSUFBSWpoQixJQUFJLENBQUNpaEIsOEJBQThCLENBQUMvRSxrQkFBa0IsRUFBRTtrQkFDakdvRixlQUFlLENBQUNMLDhCQUE4QixHQUFHO29CQUFDL0Usa0JBQWtCLEVBQUVsYyxJQUFJLENBQUNpaEIsOEJBQThCLENBQUMvRTtrQkFBa0IsQ0FBQztnQkFDL0g7Y0FDRjtjQUFDLE9BQUFzRixVQUFBLENBQUFwYyxNQUFBLFdBRU1rYyxlQUFlO1lBQUE7WUFBQTtjQUFBLE9BQUFFLFVBQUEsQ0FBQWxjLElBQUE7VUFBQTtRQUFBLEdBQUErYixTQUFBO01BQUEsQ0FDdkI7TUFBQSxTQUFBM0UscUNBQUErRSxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBTixxQ0FBQSxDQUFBNWIsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQTZlLG9DQUFBO0lBQUE7RUFBQTtJQUFBbnRCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzeEIsMkNBQW1EclgsYUFBK0IsRUFBb0I7TUFDcEcsSUFBTW9YLGdCQUFrQyxHQUFHO1FBQUM3VixVQUFVLEVBQUU7TUFBRSxDQUFDO01BRTNELElBQUl2QixhQUFhLENBQUNpWSxZQUFZLEVBQUU7UUFDOUJiLGdCQUFnQixDQUFDYSxZQUFZLEdBQUdqWSxhQUFhLENBQUNpWSxZQUFZO01BQzVEO01BRUEsSUFBSSxPQUFPalksYUFBYSxDQUFDa1ksb0JBQW9CLEtBQUssUUFBUSxFQUFFO1FBQzFEZCxnQkFBZ0IsQ0FBQ2Msb0JBQW9CLEdBQUdsWSxhQUFhLENBQUNrWSxvQkFBb0I7TUFDNUU7TUFFQSxJQUFJbFksYUFBYSxDQUFDdUIsVUFBVSxFQUFFO1FBQzVCLElBQU1BLFVBQTBCLEdBQUcsRUFBRTtRQUVyQyxLQUFLLElBQUlyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc4QixhQUFhLENBQUN1QixVQUFVLENBQUN2UyxNQUFNLEVBQUVrUCxDQUFDLEVBQUUsRUFBRTtVQUN4RHFELFVBQVUsQ0FBQ3hULElBQUksQ0FBQztZQUNkeVQsSUFBSSxFQUFFeEIsYUFBYSxDQUFDdUIsVUFBVSxDQUFDckQsQ0FBQyxDQUFDLENBQUNzRCxJQUFJO1lBQ3RDQyxRQUFRLEVBQUV6QixhQUFhLENBQUN1QixVQUFVLENBQUNyRCxDQUFDLENBQUMsQ0FBQ3VELFFBQVE7WUFDOUNDLFVBQVUsRUFBRTFCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3JELENBQUMsQ0FBQyxDQUFDd0Q7VUFDMUMsQ0FBQyxDQUFDO1FBQ0o7UUFFQTBWLGdCQUFnQixDQUFDN1YsVUFBVSxHQUFHQSxVQUFVO01BQzFDO01BRUEsSUFBSXZCLGFBQWEsQ0FBQ21ZLGtCQUFrQixFQUFFO1FBQ3BDZixnQkFBZ0IsQ0FBQ2Usa0JBQWtCLEdBQUduWSxhQUFhLENBQUNtWSxrQkFBa0I7TUFDeEU7TUFFQSxJQUFJblksYUFBYSxDQUFDb1ksYUFBYSxFQUFFO1FBQy9CaEIsZ0JBQWdCLENBQUNnQixhQUFhLEdBQUdwWSxhQUFhLENBQUNvWSxhQUFhO01BQzlEO01BRUEsT0FBT2hCLGdCQUFnQjtJQUN6QjtFQUFDO0lBQUF2eEIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQXN5QixrREFBQSxHQUFBMWQsNklBQUEsZUFBQUMsMklBQUEsQ0FDRCxTQUFBMGQsVUFBZ0VoYyxRQUFrQjtRQUFBLElBQUFoRyxJQUFBLEVBQUFnZCw0QkFBQTtRQUFBLE9BQUExWSwySUFBQSxVQUFBMmQsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF0ZCxJQUFBLEdBQUFzZCxVQUFBLENBQUFyZCxJQUFBO1lBQUE7Y0FBQXFkLFVBQUEsQ0FBQXJkLElBQUE7Y0FBQSxPQUM3RG1CLFFBQVEsQ0FBQzRhLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUI1Z0IsSUFBSSxHQUFBa2lCLFVBQUEsQ0FBQTdjLElBQUE7Y0FDSjJYLDRCQUErRCxHQUFHO2dCQUFDelcsTUFBTSxFQUFFdkcsSUFBSSxDQUFDdUc7Y0FBTSxDQUFDO2NBRTdGLElBQUl2RyxJQUFJLElBQUlBLElBQUksQ0FBQ2tjLGtCQUFrQixFQUFFO2dCQUNuQ2MsNEJBQTRCLENBQUNkLGtCQUFrQixHQUFHbGMsSUFBSSxDQUFDa2Msa0JBQWtCO2NBQzNFO2NBQUMsT0FBQWdHLFVBQUEsQ0FBQTljLE1BQUEsV0FFTTRYLDRCQUE0QjtZQUFBO1lBQUE7Y0FBQSxPQUFBa0YsVUFBQSxDQUFBNWMsSUFBQTtVQUFBO1FBQUEsR0FBQTBjLFNBQUE7TUFBQSxDQUNwQztNQUFBLFNBQUE3RSxrREFBQWdGLElBQUE7UUFBQSxPQUFBSixrREFBQSxDQUFBdmMsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQXNmLGlEQUFBO0lBQUE7RUFBQTtJQUFBNXRCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUEyeUIsOENBQUEsR0FBQS9kLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQStkLFVBQTREcmMsUUFBa0I7UUFBQSxJQUFBaEcsSUFBQSxFQUFBeWUsd0JBQUE7UUFBQSxPQUFBbmEsMklBQUEsVUFBQWdlLFdBQUFDLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBM2QsSUFBQSxHQUFBMmQsVUFBQSxDQUFBMWQsSUFBQTtZQUFBO2NBQUEwZCxVQUFBLENBQUExZCxJQUFBO2NBQUEsT0FDekRtQixRQUFRLENBQUM0YSxJQUFJLENBQUMsQ0FBQztZQUFBO2NBQTVCNWdCLElBQUksR0FBQXVpQixVQUFBLENBQUFsZCxJQUFBO2NBQ0pvWix3QkFBdUQsR0FBRztnQkFDOURsWSxNQUFNLEVBQUV2RyxJQUFJLENBQUN1RyxNQUFNO2dCQUNuQjJELE9BQU8sRUFBRTtjQUNYLENBQUM7Y0FFRCxJQUFJbEssSUFBSSxFQUFFO2dCQUNSLElBQUlBLElBQUksQ0FBQ2tLLE9BQU8sRUFBRTtrQkFDaEJ1VSx3QkFBd0IsQ0FBQ3ZVLE9BQU8sR0FBR2xLLElBQUksQ0FBQ2tLLE9BQU87Z0JBQ2pEO2NBQ0Y7Y0FBQyxPQUFBcVksVUFBQSxDQUFBbmQsTUFBQSxXQUVNcVosd0JBQXdCO1lBQUE7WUFBQTtjQUFBLE9BQUE4RCxVQUFBLENBQUFqZCxJQUFBO1VBQUE7UUFBQSxHQUFBK2MsU0FBQTtNQUFBLENBQ2hDO01BQUEsU0FBQXZELDhDQUFBMEQsSUFBQTtRQUFBLE9BQUFKLDhDQUFBLENBQUE1YyxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBaWhCLDZDQUFBO0lBQUE7RUFBQTtJQUFBdnZCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFnekIsMkNBQUEsR0FBQXBlLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQW9lLFVBQXlEMWMsUUFBa0I7UUFBQSxJQUFBaEcsSUFBQSxFQUFBMmYsYUFBQTtRQUFBLE9BQUFyYiwySUFBQSxVQUFBcWUsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUFoZSxJQUFBLEdBQUFnZSxVQUFBLENBQUEvZCxJQUFBO1lBQUE7Y0FBQStkLFVBQUEsQ0FBQS9kLElBQUE7Y0FBQSxPQUN0RG1CLFFBQVEsQ0FBQzRhLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUI1Z0IsSUFBSSxHQUFBNGlCLFVBQUEsQ0FBQXZkLElBQUE7Y0FDSnNhLGFBQXlDLEdBQUc7Z0JBQUNwWixNQUFNLEVBQUV2RyxJQUFJLENBQUN1RztjQUFNLENBQUM7Y0FBQSxPQUFBcWMsVUFBQSxDQUFBeGQsTUFBQSxXQUVoRXVhLGFBQWE7WUFBQTtZQUFBO2NBQUEsT0FBQWlELFVBQUEsQ0FBQXRkLElBQUE7VUFBQTtRQUFBLEdBQUFvZCxTQUFBO01BQUEsQ0FDckI7TUFBQSxTQUFBaEQsMkNBQUFtRCxJQUFBO1FBQUEsT0FBQUosMkNBQUEsQ0FBQWpkLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUE2aEIsMENBQUE7SUFBQTtFQUFBO0VBQUEsT0FBQXZGLFFBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5MUJIO0FBQ0E7QUFDQTtBQUN1RDtBQUVBO0FBQ1E7QUFFdEM7QUFDK0M7QUFFMUI7QUFDZTtBQUNkO0FBRWE7QUFFRDtBQUdSO0FBQ0Q7QUFDbUI7QUFDbEI7QUFDSjtBQUNNO0FBQ0s7QUFFTjtBQUNnQjtBQUVwRSxJQUFNMkksOEJBQThCLEdBQUcsb0JBQW9CO0FBQzNELElBQU1DLHlDQUF5QyxHQUFHLElBQUk7QUFDdEQsSUFBTUMsb0NBQW9DLEdBQUcsS0FBSztBQUNsRCxJQUFNQyxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUN6QyxJQUFNQyw2Q0FBNkMsR0FBRyxDQUFDLEdBQUdELHFCQUFxQjtBQUFDLElBRTNERSxTQUFTO0VBMkI1QixTQUFBQSxVQUFZNVgsV0FBd0IsRUFBRXBULEtBQXVCLEVBQUV2RSxJQUFhLEVBQUU7SUFBQSxJQUFBOUQsS0FBQTtJQUFBbEIsMklBQUEsT0FBQXUwQixTQUFBO0lBQUF0MEIsMklBQUEsa0JBMUIxQzRILG9FQUF1QixDQUFDLFdBQVcsQ0FBQztJQUFBNUgsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUEyQnRFLElBQUksQ0FBQ3UwQixhQUFhLEdBQUcsSUFBSWhMLDJEQUFZLENBQUNqZ0IsS0FBSyxDQUFDO0lBQzVDLElBQUksQ0FBQ2tyQixpQkFBaUIsR0FBRyxJQUFJQyx1REFBZ0IsQ0FBQzF2QixJQUFJLENBQUM7SUFDbkQsSUFBSSxDQUFDMnZCLHNCQUFzQixHQUFHLElBQUl4TCxvRUFBcUIsQ0FBQyxDQUFDO0lBQ3pELElBQUksQ0FBQ3lMLGFBQWEsR0FBRyxJQUFJdkwsMkRBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ3pVLG1CQUFtQixHQUFHLElBQUlDLDZEQUFrQixDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDZ2dCLG1CQUFtQixHQUFHMTBCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDMDBCLGNBQWMsR0FBRyxJQUFJdDBCLHdEQUFlLENBQVMsSUFBSSxDQUFDZzBCLGFBQWEsQ0FBQ2pyQixLQUFLLENBQUM7SUFDM0UsSUFBSSxDQUFDd3JCLHVCQUF1QixHQUFHLElBQUl2MEIsd0RBQWUsQ0FBa0IsSUFBSSxDQUFDbTBCLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDO0lBQy9HLElBQUksQ0FBQ3VhLGNBQWMsR0FBRyxJQUFJeDBCLHdEQUFlLENBQWlCLElBQUksQ0FBQ2kwQixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDO0lBQ3ZGLElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcsSUFBSTEwQix3REFBZSxDQUFVLElBQUksQ0FBQ2cwQixhQUFhLENBQUMvSyxhQUFhLENBQUM7SUFDNUYsSUFBSSxDQUFDMEwsbUJBQW1CLEdBQUcsSUFBSTMwQix3REFBZSxDQUFVLElBQUksQ0FBQ2kwQixpQkFBaUIsQ0FBQ1csVUFBVSxDQUFDO0lBQzFGLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUk3MEIsd0RBQWUsQ0FBVSxJQUFJLENBQUNpMEIsaUJBQWlCLENBQUNhLE1BQU0sQ0FBQztJQUNsRixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUkvMEIsd0RBQWUsQ0FBVSxJQUFJLENBQUNpMEIsaUJBQWlCLENBQUNlLE9BQU8sQ0FBQztJQUNwRixJQUFJLENBQUNDLG1CQUFtQixHQUFHLElBQUlqMUIsd0RBQWUsQ0FBVSxJQUFJLENBQUNpMEIsaUJBQWlCLENBQUNpQixVQUFVLENBQUM7SUFDMUYsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxJQUFJbjFCLHdEQUFlLENBQVUsSUFBSSxDQUFDaTBCLGlCQUFpQixDQUFDbUIsT0FBTyxDQUFDO0lBQ3BGLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSXIxQix3REFBZSxDQUFVLElBQUksQ0FBQ2kwQixpQkFBaUIsQ0FBQ3FCLE9BQU8sQ0FBQztJQUNwRixJQUFJLENBQUNDLHFCQUFxQixHQUFHLElBQUl2MUIsd0RBQWUsQ0FBUyxJQUFJLENBQUNpMEIsaUJBQWlCLENBQUM1SCxZQUFZLENBQUM7SUFDN0YsSUFBSSxDQUFDbUosaUJBQWlCLEdBQUcsSUFBSXgxQix3REFBZSxDQUFXLElBQUksQ0FBQ2kwQixpQkFBaUIsQ0FBQ25KLFFBQVEsQ0FBQztJQUN2RixJQUFJLENBQUMySyxlQUFlLEdBQUcsSUFBSXoxQix3REFBZSxDQUFVLElBQUksQ0FBQ2kwQixpQkFBaUIsQ0FBQ3RHLE1BQU0sQ0FBQztJQUNsRixJQUFJLENBQUMrSCxzQkFBc0IsR0FBRyxJQUFJMTFCLHdEQUFlLENBQXVCLElBQUksQ0FBQ2kwQixpQkFBaUIsQ0FBQ2hXLGFBQWEsQ0FBQztJQUM3RyxJQUFJLENBQUMwWCxvQkFBb0IsR0FBRyxJQUFJMzFCLHdEQUFlLENBQWMsSUFBSSxDQUFDbTBCLHNCQUFzQixDQUFDaFksV0FBVyxDQUFDO0lBRXJHLElBQUksQ0FBQ2dZLHNCQUFzQixDQUFDaFksV0FBVyxDQUFDOWIsS0FBSyxHQUFHOGIsV0FBVztJQUUzRCxJQUFNNVMsU0FBUyxHQUFHVix5RUFBeUIsQ0FBQyxJQUFJLENBQUNtckIsYUFBYSxDQUFDanJCLEtBQUssQ0FBQzFJLEtBQUssQ0FBQztJQUMzRSxJQUFNZ25CLFlBQVksR0FBRyxDQUFDOWQsU0FBUyxDQUFDVSxHQUFHLElBQUkzQyw0REFBc0IsRUFBRTZFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFN0UsdURBQWlCLEdBQUdpQyxTQUFTLENBQUMwSixPQUFPLElBQUkzTCx1REFBaUI7SUFDMUR3Zix1RUFBc0IsR0FBR08sWUFBWTtJQUNyQyxJQUFJLENBQUN0QixlQUFlLEdBQUczUywrRUFBZ0MsQ0FBQ2lVLFlBQVksQ0FBQztJQUNyRSxJQUFJLENBQUN1TyxpQkFBaUIsR0FBRyxJQUFJQyw2REFBZ0IsQ0FBQ3Z1QixzREFBZ0IsRUFBRSxJQUFJLENBQUN5ZSxlQUFlLENBQUM7SUFDckYsSUFBSSxDQUFDa08saUJBQWlCLENBQUM2QixvQkFBb0IsQ0FBQ3owQixHQUFHLENBQUMsSUFBSSxDQUFDdTBCLGlCQUFpQixDQUFDO0lBRXZFLElBQUksQ0FBQzNCLGlCQUFpQixDQUFDNkIsb0JBQW9CLENBQUN6MEIsR0FBRyxDQUM3QyxJQUFJLENBQUM0eUIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3ZRLFNBQVMsQ0FBQyxVQUFBdVEsS0FBSyxFQUFJO01BQzlDLElBQUkvekIsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDOEIsd0JBQXdCLEVBQUU7UUFDbkRyWSxZQUFZLENBQUNoZCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUM4Qix3QkFBd0IsQ0FBQztNQUMvRDtNQUVBLElBQUksQ0FBQ3IxQixLQUFJLENBQUN1ekIsaUJBQWlCLENBQUM1SCxZQUFZLENBQUNoc0IsS0FBSyxFQUFFO1FBQzlDO01BQ0Y7TUFFQSxJQUFJbzBCLEtBQUssS0FBS3VCLGdFQUF5QixFQUFFO1FBQ3ZDO01BQ0Y7TUFFQXQxQixLQUFJLENBQUN1ekIsaUJBQWlCLENBQUM4Qix3QkFBd0IsR0FBR24wQixNQUFNLENBQUMyRCxVQUFVLENBQUMsWUFBTTtRQUN4RTdFLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQzVILFlBQVksQ0FBQ2hzQixLQUFLLEdBQUcsQ0FBQztNQUMvQyxDQUFDLEVBQUVzekIseUNBQXlDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFTCxJQUFNNUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBQSxFQUFTO01BQ25DLElBQUlyd0IsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdEcsTUFBTSxDQUFDdHRCLEtBQUssSUFBSUssS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDbkosUUFBUSxDQUFDenFCLEtBQUssRUFBRTtRQUNoRixJQUFNMFUsT0FBTyxHQUFHclUsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDbkosUUFBUSxDQUFDenFCLEtBQUssQ0FBQzB3QixzQkFBc0IsQ0FBQ3J3QixLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN0RyxNQUFNLENBQUN0dEIsS0FBSyxFQUFFLHFDQUFxQyxDQUFDO01BQzFKO0lBQ0YsQ0FBQztJQUVEdUIsTUFBTSxDQUFDUixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUydkIsc0JBQXNCLENBQUM7SUFFL0QsSUFBSSxDQUFDa0QsaUJBQWlCLENBQUM2QixvQkFBb0IsQ0FBQ3owQixHQUFHLENBQUMsSUFBSUMsc0RBQVUsQ0FBQyxZQUFNO01BQ25FTSxNQUFNLENBQUNMLG1CQUFtQixDQUFDLGNBQWMsRUFBRXd2QixzQkFBc0IsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQy9FLEtBQUssQ0FBQyxDQUFDO0VBQ2Q7RUFBQzlyQix3SUFBQSxDQUFBNnpCLFNBQUE7SUFBQTV6QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThCO01BQzVCLE9BQU8sSUFBSSxDQUFDNHpCLGFBQWEsQ0FBQ2pyQixLQUFLLENBQUMxSSxLQUFLO0lBQ3ZDLENBQUM7SUFBQXFTLEdBQUEsRUFFRCxTQUFBQSxJQUFVM0osS0FBdUIsRUFBRTtNQUNqQyxJQUFJLENBQUNrckIsaUJBQWlCLENBQUNnQyxXQUFXLENBQUN6MUIsT0FBTyxDQUFDLENBQUM7TUFFNUMsSUFBSSxDQUFDd3pCLGFBQWEsQ0FBQ2pyQixLQUFLLENBQUMxSSxLQUFLLEdBQUcwSSxLQUFLO01BQ3RDLElBQUksQ0FBQ2lyQixhQUFhLENBQUMvSyxhQUFhLENBQUM1b0IsS0FBSyxHQUFHLEtBQUs7TUFFOUMsSUFBTWtKLFNBQVMsR0FBR1YseUVBQXlCLENBQUMsSUFBSSxDQUFDbXJCLGFBQWEsQ0FBQ2pyQixLQUFLLENBQUMxSSxLQUFLLENBQUM7TUFDM0UsSUFBTWduQixZQUFZLEdBQUcsQ0FBQzlkLFNBQVMsQ0FBQ1UsR0FBRyxJQUFJM0MsNERBQXNCLEVBQUU2RSxRQUFRLENBQUMsQ0FBQztNQUV6RTdFLHVEQUFpQixHQUFHaUMsU0FBUyxDQUFDMEosT0FBTyxJQUFJM0wsdURBQWlCO01BQzFEd2YsdUVBQXNCLEdBQUdPLFlBQVk7TUFFckMsSUFBSSxDQUFDdEIsZUFBZSxHQUFHM1MsK0VBQWdDLENBQUNpVSxZQUFZLENBQUM7TUFFckUsSUFBSSxDQUFDMkUsS0FBSyxDQUFDLENBQUM7SUFDZDtFQUFDO0lBQUE3ckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1RDtNQUNyRCxPQUFPLElBQUksQ0FBQ20wQix1QkFBdUI7SUFDckM7RUFBQztJQUFBcDBCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkM7TUFDM0MsT0FBTyxJQUFJLENBQUNvMEIsY0FBYztJQUM1QjtFQUFDO0lBQUFyMEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPLElBQUksQ0FBQ3MwQixzQkFBc0I7SUFDcEM7RUFBQztJQUFBdjBCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUN1MEIsbUJBQW1CO0lBQ2pDO0VBQUM7SUFBQXgwQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVDO01BQ3JDLE9BQU8sSUFBSSxDQUFDeTBCLGVBQWU7SUFDN0I7RUFBQztJQUFBMTBCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUMyMEIsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQTUwQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJDO01BQ3pDLE9BQU8sSUFBSSxDQUFDNjBCLG1CQUFtQjtJQUNqQztFQUFDO0lBQUE5MEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQyswQixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBaDFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUNpMUIsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQWwxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU8sSUFBSSxDQUFDbTFCLHFCQUFxQjtJQUNuQztFQUFDO0lBQUFwMUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQztNQUN4QyxPQUFPLElBQUksQ0FBQ28xQixpQkFBaUI7SUFDL0I7RUFBQztJQUFBcjFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUM7TUFDckMsT0FBTyxJQUFJLENBQUNxMUIsZUFBZTtJQUM3QjtFQUFDO0lBQUF0MUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QjtNQUNyQixPQUFPLElBQUksQ0FBQzZ6QixpQkFBaUIsQ0FBQ3ZzQixRQUFRO0lBQ3hDO0VBQUM7SUFBQXZILEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkQ7TUFDekQsT0FBTyxJQUFJLENBQUNzMUIsc0JBQXNCO0lBQ3BDO0VBQUM7SUFBQXYxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU8sSUFBSSxDQUFDdTFCLG9CQUFvQjtJQUNsQztFQUFDO0lBQUF4MUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTYxQixLQUFBLEdBQUFqaEIsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBQyxRQUFXOEMsTUFBYztRQUFBLElBQUF2VyxNQUFBO1FBQUEsT0FBQXdULDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBUyxNQUFBLFdBQ2hCLElBQUl1QixPQUFPLENBQUMsVUFBQTBCLE9BQU8sRUFBSTtnQkFDNUIsSUFBSSxDQUFDdlgsTUFBSSxDQUFDMHlCLGFBQWEsQ0FBQ3RMLFVBQVUsQ0FBQ3pvQixLQUFLLEVBQUU7a0JBQ3hDcUIsTUFBSSxDQUFDeTBCLFdBQVcsQ0FBQ2xlLE1BQU0sQ0FBQztrQkFFeEJnQixPQUFPLENBQUMsQ0FBQztrQkFFVDtnQkFDRjtnQkFFQXZYLE1BQUksQ0FBQ3V5QixpQkFBaUIsQ0FBQ2dDLFdBQVcsQ0FBQzUwQixHQUFHLENBQUNLLE1BQUksQ0FBQzB5QixhQUFhLENBQUN0TCxVQUFVLENBQUM1RSxTQUFTLENBQUMsVUFBQTRFLFVBQVUsRUFBSTtrQkFDM0YsSUFBSSxDQUFDQSxVQUFVLEVBQUU7b0JBQ2ZwbkIsTUFBSSxDQUFDeTBCLFdBQVcsQ0FBQ2xlLE1BQU0sQ0FBQztvQkFDeEJnQixPQUFPLENBQUMsQ0FBQztrQkFDWDtnQkFDRixDQUFDLENBQUMsQ0FBQztjQUNMLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBMUQsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDSDtNQUFBLFNBQUFlLEtBQUFDLEVBQUE7UUFBQSxPQUFBK2YsS0FBQSxDQUFBOWYsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQXlILElBQUE7SUFBQTtFQUFBO0lBQUEvVixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBODFCLFlBQW9CbGUsTUFBYyxFQUFRO01BQ3hDLElBQUksQ0FBQ21lLGdCQUFnQixDQUFDbmUsTUFBTSxDQUFDO01BRTdCLElBQUksSUFBSSxDQUFDa2Msc0JBQXNCLENBQUNsYSxjQUFjLENBQUM1WixLQUFLLEVBQUU7UUFDcEQsSUFBSSxDQUFDOHpCLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSyxDQUFDeWpCLEtBQUssQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQ3FRLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSyxHQUFHLElBQUk7TUFDekQ7TUFFQSxJQUFJLENBQUM0ekIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLEdBQUcyMUIsNkRBQXNCO0lBQzdEO0VBQUM7SUFBQTcxQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBZzJCLFFBQUEsR0FBQXBoQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFvQixTQUFBO1FBQUEsSUFBQTZNLE1BQUE7UUFBQSxPQUFBak8sMklBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBaEIsSUFBQSxHQUFBZ0IsU0FBQSxDQUFBZixJQUFBO1lBQUE7Y0FBQSxPQUFBZSxTQUFBLENBQUFSLE1BQUEsV0FDUyxJQUFJLENBQUNFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDUyxJQUFJLENBQUMsWUFBTTtnQkFDcER3TSxNQUFJLENBQUM4USxpQkFBaUIsQ0FBQzZCLG9CQUFvQixDQUFDdDFCLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRDJpQixNQUFJLENBQUNpUixhQUFhLENBQUNyTCxVQUFVLEdBQUcsSUFBSTtjQUN0QyxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXZTLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ0g7TUFBQSxTQUFBOVYsUUFBQTtRQUFBLE9BQUE2MUIsUUFBQSxDQUFBamdCLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUFqTyxPQUFBO0lBQUE7RUFBQTtJQUFBTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaTJCLE9BQU92dEIsS0FBdUIsRUFBTztNQUNuQyxJQUFNNEosR0FBRyxHQUFHOUoseUVBQXlCLENBQUNFLEtBQUssQ0FBQyxDQUFDa0IsR0FBRztNQUVoRCxJQUFJMEksR0FBRyxFQUFFO1FBQ1AsT0FBT0EsR0FBRztNQUNaO01BRUEsSUFBSSxDQUFDbkssT0FBTyxDQUFDQyxJQUFJLENBQUMsNENBQTRDLEVBQUVuQiw0REFBc0IsQ0FBQztNQUV2RixPQUFPLElBQUkzQixHQUFHLENBQUMyQiw0REFBc0IsQ0FBQztJQUN4QztFQUFDO0lBQUFuSCxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBazJCLE1BQUEsR0FBQXRoQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFrRixTQUFBO1FBQUEsT0FBQWxGLDJJQUFBLFVBQUFzRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWpGLElBQUEsR0FBQWlGLFNBQUEsQ0FBQWhGLElBQUE7WUFBQTtjQUFBLEtBQ00sSUFBSSxDQUFDMmUsYUFBYSxDQUFDckwsVUFBVTtnQkFBQXRPLFNBQUEsQ0FBQWhGLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ3pCLElBQUl4USxLQUFLLENBQUMsOEJBQThCLENBQUM7WUFBQTtjQUFBLEtBRzdDLElBQUksQ0FBQ212QixhQUFhLENBQUN0TCxVQUFVLENBQUN6b0IsS0FBSztnQkFBQW9hLFNBQUEsQ0FBQWhGLElBQUE7Z0JBQUE7Y0FBQTtjQUNyQyxJQUFJLENBQUNqTixPQUFPLENBQUNDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQztjQUFDLE9BQUFnUyxTQUFBLENBQUF6RSxNQUFBO1lBQUE7Y0FLckUsSUFBSSxDQUFDb2UsYUFBYSxDQUFDdEwsVUFBVSxDQUFDem9CLEtBQUssR0FBRyxJQUFJO2NBQUMsT0FBQW9hLFNBQUEsQ0FBQXpFLE1BQUEsV0FFcEMsSUFBSSxDQUFDd2dCLFlBQVksQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEvYixTQUFBLENBQUF2RSxJQUFBO1VBQUE7UUFBQSxHQUFBa0UsUUFBQTtNQUFBLENBQzNCO01BQUEsU0FBQTRSLE1BQUE7UUFBQSxPQUFBdUssTUFBQSxDQUFBbmdCLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUF1ZCxLQUFBO0lBQUE7RUFBQTtJQUFBN3JCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvMkIsZUFBZXRhLFdBQXdCLEVBQUU7TUFBQSxJQUFBa0gsTUFBQTtNQUN2QyxJQUFJLENBQUM4USxzQkFBc0IsQ0FBQ2hZLFdBQVcsQ0FBQzliLEtBQUssR0FBRzhiLFdBQVc7TUFFM0QsSUFBSSxJQUFJLENBQUNnWSxzQkFBc0IsQ0FBQ2xhLGNBQWMsQ0FBQzVaLEtBQUssRUFBRTtRQUNwRDhiLFdBQVcsQ0FBQ21ILFNBQVMsQ0FBQyxDQUFDLENBQUNwWCxPQUFPLENBQUMsVUFBQXdxQixVQUFVLEVBQUk7VUFDNUNyVCxNQUFJLENBQUM4USxzQkFBc0IsQ0FBQ2xhLGNBQWMsQ0FBQzVaLEtBQUssQ0FBQzBpQixVQUFVLENBQUMsQ0FBQyxDQUFDN1csT0FBTyxDQUFDLFVBQUF5cUIsTUFBTSxFQUFJO1lBQUEsSUFBQUMsYUFBQTtZQUM5RSxJQUFJRixVQUFVLENBQUNqaUIsSUFBSSxNQUFLa2lCLE1BQU0sYUFBTkEsTUFBTSx3QkFBQUMsYUFBQSxHQUFORCxNQUFNLENBQUVwVCxLQUFLLGNBQUFxVCxhQUFBLHVCQUFiQSxhQUFBLENBQWVuaUIsSUFBSSxLQUFJaWlCLFVBQVUsQ0FBQzVZLEVBQUUsS0FBSzZZLE1BQU0sQ0FBQ3BULEtBQUssQ0FBQ3pGLEVBQUUsRUFBRTtjQUNoRjZZLE1BQU0sQ0FBQ0UsWUFBWSxDQUFDSCxVQUFVLENBQUM7WUFDakM7VUFDRixDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7SUFBQXYyQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBeTJCLGFBQUEsR0FBQTdoQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFzTixTQUFBO1FBQUEsSUFBQThMLE1BQUE7UUFBQSxJQUFBdmxCLEtBQUEsRUFBQWd1QixtQkFBQSxFQUFBOXNCLEdBQUEsRUFBQStzQiwyQkFBQSxFQUFBQyxlQUFBO1FBQUEsT0FBQS9oQiwySUFBQSxVQUFBeU4sVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFwTixJQUFBLEdBQUFvTixTQUFBLENBQUFuTixJQUFBO1lBQUE7Y0FDUTFNLEtBQXVCLEdBQUcsSUFBSSxDQUFDaXJCLGFBQWEsQ0FBQ2pyQixLQUFLLENBQUMxSSxLQUFLO2NBQ3hEMDJCLG1CQUFtQixHQUFHLElBQUksQ0FBQ25CLGlCQUFpQixDQUFDbUIsbUJBQW1CLENBQUMsQ0FBQztjQUFBLElBRW5FbHVCLHNGQUFzQyxDQUFDRSxLQUFLLENBQUM7Z0JBQUE2WixTQUFBLENBQUFuTixJQUFBO2dCQUFBO2NBQUE7Y0FDaEQsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMsNEJBQTRCLEVBQUVGLEtBQUssQ0FBQztjQUN2RCxJQUFJLENBQUNrckIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLEdBQUcyMUIsa0VBQTJCO2NBQ2hFLElBQUksQ0FBQy9CLGlCQUFpQixDQUFDVyxVQUFVLENBQUN2MEIsS0FBSyxHQUFHLEtBQUs7Y0FDL0MsSUFBSSxDQUFDK3pCLGFBQWEsQ0FBQ3RMLFVBQVUsQ0FBQ3pvQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUF1aUIsU0FBQSxDQUFBNU0sTUFBQTtZQUFBO2NBSzlDLElBQUksQ0FBQ29nQixnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7Y0FDckMsSUFBSSxDQUFDbkMsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLEdBQUcyMUIsOERBQXVCO2NBQzVELElBQUksQ0FBQy9CLGlCQUFpQixDQUFDZSxPQUFPLENBQUMzMEIsS0FBSyxHQUFHLElBQUk7Y0FFckM0SixHQUFHLEdBQUcsSUFBSSxDQUFDcXNCLE1BQU0sQ0FBQ3Z0QixLQUFLLENBQUM7Y0FFOUIsSUFBSSxDQUFDa3JCLGlCQUFpQixDQUFDZ0MsV0FBVyxDQUFDNTBCLEdBQUcsQ0FDcEMsSUFBSSxDQUFDNHlCLGlCQUFpQixDQUFDUSxLQUFLLENBQUN2USxTQUFTLENBQUMsVUFBQXVRLEtBQUssRUFBSTtnQkFDOUMsSUFBSUEsS0FBSyxLQUFLdUIsMkRBQW9CLElBQUl2QixLQUFLLEtBQUt1QixnRUFBeUIsRUFBRTtrQkFDekV0TSxxRkFBb0MsQ0FBQ3pmLEdBQUcsQ0FBQztnQkFDM0M7Y0FDRixDQUFDLENBQ0gsQ0FBQztjQUVLK3NCLDJCQUFnRCxHQUFHLFNBQW5EQSwyQkFBZ0RBLENBQUE7Z0JBQUEsT0FBUyxJQUFJemYsT0FBTyxDQUFDLFVBQUMwQixPQUFPLEVBQVc7a0JBQzVGO2tCQUNBcVYsTUFBSSxDQUFDOEYsYUFBYSxDQUFDdEwsVUFBVSxDQUFDem9CLEtBQUssR0FBRyxLQUFLO2tCQUUzQyxPQUFPNFksT0FBTyxDQUFDcVYsTUFBSSxDQUFDNEksbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUM7Y0FBQTtjQUNJRCxlQUFlLEdBQUcsSUFBSUUsd0RBQWlCLENBQUMsSUFBSSxDQUFDbEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDRSxzQkFBc0IsRUFBRTZDLDJCQUEyQixDQUFDO2NBQUEsT0FBQXBVLFNBQUEsQ0FBQTVNLE1BQUEsV0FFeEhpaEIsZUFBZSxDQUFDakwsS0FBSyxDQUMxQi9oQixHQUFHLEVBQ0hsQixLQUFLLEVBQ0xndUIsbUJBQW1CLENBQUMsQ0FDbkJwZ0IsSUFBSSxDQUFDLFlBQU07Z0JBQ1YyWCxNQUFJLENBQUMyRixpQkFBaUIsQ0FBQ2UsT0FBTyxDQUFDMzBCLEtBQUssR0FBRyxLQUFLO2NBQzlDLENBQUMsQ0FBQyxDQUNENFcsS0FBSyxDQUFDLFVBQUF2TixDQUFDLEVBQUk7Z0JBQ1ZxdEIsbUJBQW1CLENBQUNsdkIsSUFBSSxDQUFDLENBQUM7Z0JBRTFCeW1CLE1BQUksQ0FBQzJGLGlCQUFpQixDQUFDNUgsWUFBWSxDQUFDaHNCLEtBQUssRUFBRTtnQkFFM0NpdUIsTUFBSSxDQUFDMkYsaUJBQWlCLENBQUNhLE1BQU0sQ0FBQ3owQixLQUFLLEdBQUcsS0FBSztnQkFFM0NpdUIsTUFBSSxDQUFDOEgsZ0JBQWdCLENBQUMsbUNBQW1DLENBQUM7Z0JBRTFEOUgsTUFBSSxDQUFDMkYsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLEdBQUcyMUIsc0VBQStCO2dCQUVwRTFILE1BQUksQ0FBQzlsQixPQUFPLENBQUNTLEtBQUssQ0FBQyw0QkFBNEIsRUFBRVMsQ0FBQyxDQUFDO2NBQ3JELENBQUMsQ0FBQyxDQUNEdWpCLE9BQU8sQ0FBQyxZQUFNO2dCQUNicUIsTUFBSSxDQUFDOEYsYUFBYSxDQUFDdEwsVUFBVSxDQUFDem9CLEtBQUssR0FBRyxLQUFLO2dCQUUzQyxJQUFJaXVCLE1BQUksQ0FBQzJGLGlCQUFpQixDQUFDUSxLQUFLLENBQUNwMEIsS0FBSyxLQUFLMjFCLGdFQUF5QixJQUFJLENBQUMxdUIsaUVBQTJCLEVBQUU7a0JBQ3BHZ25CLE1BQUksQ0FBQzJGLGlCQUFpQixDQUFDbUQsMkNBQTJDLEdBQUcsQ0FBQztrQkFFdEU7Z0JBQ0Y7Z0JBRUEsSUFBTUMsU0FBUyxHQUFHOXhCLFVBQVUsQ0FBQyxZQUFNO2tCQUNqQyxJQUFNd1AsT0FBTyxHQUFHdVosTUFBSSxDQUFDNEksbUJBQW1CLENBQUMsQ0FBQyxDQUN2Q2pnQixLQUFLLENBQUMsVUFBQXZOLENBQUMsRUFBSTtvQkFDVjRrQixNQUFJLENBQUM5bEIsT0FBTyxDQUFDUyxLQUFLLENBQUMsZ0NBQWdDLEVBQUVTLENBQUMsQ0FBQztrQkFDekQsQ0FBQyxDQUFDO2dCQUNOLENBQUMsRUFBRTRrQixNQUFJLENBQUNnSixnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBRTNCaEosTUFBSSxDQUFDMkYsaUJBQWlCLENBQUNnQyxXQUFXLENBQUM1MEIsR0FBRyxDQUFDLElBQUlDLHNEQUFVLENBQUMsWUFBTTtrQkFDMURvYyxZQUFZLENBQUMyWixTQUFTLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2NBQ0wsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF6VSxTQUFBLENBQUExTSxJQUFBO1VBQUE7UUFBQSxHQUFBc00sUUFBQTtNQUFBLENBQ0w7TUFBQSxTQUFBZ1UsYUFBQTtRQUFBLE9BQUFNLGFBQUEsQ0FBQTFnQixLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBK25CLFlBQUE7SUFBQTtFQUFBO0lBQUFyMkIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWkzQixpQkFBQSxFQUFtQztNQUNqQyxRQUFRLElBQUksQ0FBQ3JELGlCQUFpQixDQUFDUSxLQUFLLENBQUNwMEIsS0FBSztRQUN4QyxLQUFLMjFCLDZEQUFzQjtVQUN6QixPQUFPcEMsb0NBQW9DO1FBQzdDLEtBQUtvQyw4REFBdUI7UUFDNUIsS0FBS0EsMkRBQW9CO1FBQ3pCLEtBQUtBLGdFQUF5QjtRQUM5QixLQUFLQSxrRUFBMkI7UUFDaEMsS0FBS0EsbUVBQTRCO1FBQ2pDLEtBQUtBLGdFQUF5QjtRQUM5QixLQUFLQSw2REFBc0I7UUFDM0IsS0FBS0EsOERBQXVCO1FBQzVCLEtBQUtBLGdFQUF5QjtRQUM5QixLQUFLQSxrRUFBMkI7UUFDaEMsS0FBS0Esd0VBQWlDO1FBQ3RDLEtBQUtBLHdFQUFpQztRQUN0QyxLQUFLQSxpRkFBMEM7UUFDL0MsS0FBS0EscUVBQThCO1FBQ25DLEtBQUtBLHNFQUErQjtVQUNsQztVQUNBLE9BQU8sSUFBSSxDQUFDNWhCLG1CQUFtQixDQUFDNEMsMkNBQTJDLENBQUMsSUFBSSxDQUFDaWQsaUJBQWlCLENBQUM1SCxZQUFZLENBQUNoc0IsS0FBSyxDQUFDO1FBRXhIO1VBQ0UwTSxpRUFBaUIsQ0FBQyxJQUFJLENBQUNrbkIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLENBQUM7TUFDekQ7SUFDRjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFrM0Isb0JBQUEsR0FBQXRpQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFpWixTQUFBO1FBQUEsSUFBQXFKLDRCQUFBO1FBQUEsT0FBQXRpQiwySUFBQSxVQUFBcVosVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoWixJQUFBLEdBQUFnWixTQUFBLENBQUEvWSxJQUFBO1lBQUE7Y0FDTStoQiw0QkFBNEIsR0FBRyxDQUFDO2NBQUFoSixTQUFBLENBQUF4VCxFQUFBLEdBRTVCLElBQUksQ0FBQ2laLGlCQUFpQixDQUFDUSxLQUFLLENBQUNwMEIsS0FBSztjQUFBbXVCLFNBQUEsQ0FBQS9ZLElBQUEsR0FBQStZLFNBQUEsQ0FBQXhULEVBQUEsS0FDbkNnYiwyREFBb0IsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FDcEJnYixrRUFBMkIsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FDM0JnYiw2REFBc0IsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FDdEJnYixnRUFBeUIsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FDekJnYixpRkFBMEMsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FDMUNnYixxRUFBOEIsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FDOUJnYixzRUFBK0IsT0FBQXhILFNBQUEsQ0FBQXhULEVBQUEsS0FnQi9CZ2Isa0VBQTJCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSTNCZ2IsbUVBQTRCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSTVCZ2IsZ0VBQXlCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSXpCZ2IsNkRBQXNCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSXRCZ2IsZ0VBQXlCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSXpCZ2IsOERBQXVCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSXZCZ2Isd0VBQWlDLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSWpDZ2IsOERBQXVCLFFBQUF4SCxTQUFBLENBQUF4VCxFQUFBLEtBSXZCZ2Isd0VBQWlDO2NBQUE7WUFBQTtjQS9DcEMsSUFBSSxDQUFDLElBQUksQ0FBQy9CLGlCQUFpQixDQUFDbUQsMkNBQTJDLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQ25ELGlCQUFpQixDQUFDbUQsMkNBQTJDLEdBQUd6M0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUNqRjtjQUVBNDNCLDRCQUE0QixHQUFHNzNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNxMEIsaUJBQWlCLENBQUNtRCwyQ0FBMkM7Y0FBQyxNQUUzR3RELDZDQUE2QyxJQUFJMEQsNEJBQTRCO2dCQUFBaEosU0FBQSxDQUFBL1ksSUFBQTtnQkFBQTtjQUFBO2NBQy9FLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdFQUFnRSxFQUFFLElBQUksQ0FBQ3dyQixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssRUFBRTIxQixxREFBYyxDQUFDLElBQUksQ0FBQy9CLGlCQUFpQixDQUFDUSxLQUFLLENBQUNwMEIsS0FBSyxDQUFDLENBQUM7Y0FBQyxPQUFBbXVCLFNBQUEsQ0FBQXhZLE1BQUE7WUFBQTtjQUs5SyxJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxJQUFJLENBQUN3ckIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLEVBQUUyMUIscURBQWMsQ0FBQyxJQUFJLENBQUMvQixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssQ0FBQyxDQUFDO2NBQUMsT0FBQW11QixTQUFBLENBQUF4WSxNQUFBO1lBQUE7Y0FJdEosSUFBSSxDQUFDeE4sT0FBTyxDQUFDQyxJQUFJLENBQUMsbUdBQW1HLENBQUM7Y0FBQyxPQUFBK2xCLFNBQUEsQ0FBQXhZLE1BQUE7WUFBQTtjQUl2SCxJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQyxxR0FBcUcsQ0FBQztjQUFDLE9BQUErbEIsU0FBQSxDQUFBeFksTUFBQTtZQUFBO2NBSXpILElBQUksQ0FBQ3hOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGtHQUFrRyxDQUFDO2NBQUMsT0FBQStsQixTQUFBLENBQUF4WSxNQUFBO1lBQUE7Y0FJdEgsSUFBSSxDQUFDeE4sT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0RBQWdELENBQUM7Y0FBQyxPQUFBK2xCLFNBQUEsQ0FBQXhZLE1BQUE7WUFBQTtjQUlwRSxJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQyxrREFBa0QsQ0FBQztjQUFDLE9BQUErbEIsU0FBQSxDQUFBeFksTUFBQTtZQUFBO2NBSXRFLElBQUksQ0FBQ3hOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHdEQUF3RCxDQUFDO2NBQUMsT0FBQStsQixTQUFBLENBQUF4WSxNQUFBO1lBQUE7Y0FJNUUsSUFBSSxDQUFDeE4sT0FBTyxDQUFDQyxJQUFJLENBQUMsMkVBQTJFLENBQUM7Y0FBQyxPQUFBK2xCLFNBQUEsQ0FBQXhZLE1BQUE7WUFBQTtjQUkvRixJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQztjQUFDLE9BQUErbEIsU0FBQSxDQUFBeFksTUFBQTtZQUFBO2NBSTdGLElBQUksQ0FBQ3hOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDJFQUEyRSxDQUFDO2NBQUMsT0FBQStsQixTQUFBLENBQUF4WSxNQUFBO1lBQUE7Y0FJL0ZqSixpRUFBaUIsQ0FBQyxJQUFJLENBQUNrbkIsaUJBQWlCLENBQUNRLEtBQUssQ0FBQ3AwQixLQUFLLENBQUM7WUFBQztjQUFBLE9BQUFtdUIsU0FBQSxDQUFBeFksTUFBQSxXQUduRCxJQUFJLENBQUNnVyxLQUFLLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBd0MsU0FBQSxDQUFBdFksSUFBQTtVQUFBO1FBQUEsR0FBQWlZLFFBQUE7TUFBQSxDQUNwQjtNQUFBLFNBQUErSSxvQkFBQTtRQUFBLE9BQUFLLG9CQUFBLENBQUFuaEIsS0FBQSxPQUFBM0gsU0FBQTtNQUFBO01BQUEsT0FBQXlvQixtQkFBQTtJQUFBO0VBQUE7SUFBQS8yQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBKzFCLGlCQUFBLEVBQWdGO01BQUEsSUFBQWhILE1BQUE7TUFBQSxJQUF2RG5YLE1BQWMsR0FBQXhKLFNBQUEsQ0FBQW5GLE1BQUEsUUFBQW1GLFNBQUEsUUFBQXZJLFNBQUEsR0FBQXVJLFNBQUEsTUFBR2lsQiw4QkFBOEI7TUFDdEUsSUFBSSxDQUFDTyxpQkFBaUIsQ0FBQ2dDLFdBQVcsQ0FBQ3oxQixPQUFPLENBQUMsQ0FBQztNQUU1QyxJQUFNeVosY0FBYyxHQUFHLElBQUksQ0FBQ2thLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSztNQUV2RSxJQUFJNFosY0FBYyxFQUFFO1FBQ2xCLElBQUksQ0FBQ2thLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSyxHQUFHLElBQUk7UUFDdkQ0WixjQUFjLENBQUM2SixLQUFLLENBQUMsQ0FBQztRQUN0QjdKLGNBQWMsQ0FBQ3paLE9BQU8sQ0FBQyxDQUFDO1FBRXhCLElBQUk4Ryx5RUFBbUMsSUFBSSxFQUFFbkMsNkVBQTBCLElBQUltQyw4RUFBd0MsQ0FBQyxFQUFFO1VBQ3BIdEMsd0ZBQThDLENBQUMsQ0FBQztRQUNsRDtNQUNGO01BRUEsSUFBSSxDQUFDaXZCLGlCQUFpQixDQUFDaUIsVUFBVSxDQUFDNzBCLEtBQUssR0FBRyxLQUFLO01BQy9DLElBQUksQ0FBQzR6QixpQkFBaUIsQ0FBQ3FCLE9BQU8sQ0FBQ2oxQixLQUFLLEdBQUcsSUFBSTtNQUMzQyxJQUFJLENBQUM0ekIsaUJBQWlCLENBQUNtQixPQUFPLENBQUMvMEIsS0FBSyxHQUFHLEtBQUs7TUFFNUMsSUFBSSxJQUFJLENBQUM0ekIsaUJBQWlCLENBQUN0RyxNQUFNLENBQUN0dEIsS0FBSyxJQUFJLElBQUksQ0FBQzR6QixpQkFBaUIsQ0FBQ25KLFFBQVEsQ0FBQ3pxQixLQUFLLEVBQUU7UUFDaEYsSUFBTTBVLE9BQU8sR0FBRyxJQUFJLENBQUNrZixpQkFBaUIsQ0FBQ25KLFFBQVEsQ0FBQ3pxQixLQUFLLENBQUNrd0IsYUFBYSxDQUFDLElBQUksQ0FBQzBELGlCQUFpQixDQUFDdEcsTUFBTSxDQUFDdHRCLEtBQUssRUFBRTRYLE1BQU0sQ0FBQyxDQUM3R3RCLElBQUksQ0FBQyxVQUFBTyxJQUFBLEVBQWM7VUFBQSxJQUFaQyxNQUFNLEdBQUFELElBQUEsQ0FBTkMsTUFBTTtVQUNaLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDbkJpWSxNQUFJLENBQUM1bUIsT0FBTyxDQUFDMkcsSUFBSSxDQUFDLGdEQUFnRCxFQUFFaWdCLE1BQUksQ0FBQzFuQixRQUFRLEVBQUV5UCxNQUFNLENBQUM7WUFFMUY7VUFDRjtVQUVBaVksTUFBSSxDQUFDNW1CLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHdDQUF3QyxFQUFFMm1CLE1BQUksQ0FBQzFuQixRQUFRLEVBQUV5UCxNQUFNLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQ0RGLEtBQUssQ0FBQyxVQUFBdk4sQ0FBQyxFQUFJO1VBQ1YwbEIsTUFBSSxDQUFDNW1CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLCtCQUErQixFQUFFbW1CLE1BQUksQ0FBQzFuQixRQUFRLEVBQUVnQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDO01BQ047TUFFQSxJQUFJLENBQUN1cUIsaUJBQWlCLENBQUN0RyxNQUFNLENBQUN0dEIsS0FBSyxHQUFHLElBQUk7TUFDMUMsSUFBSSxDQUFDNHpCLGlCQUFpQixDQUFDbkosUUFBUSxDQUFDenFCLEtBQUssR0FBRyxJQUFJO01BQzVDLElBQUksQ0FBQzh6QixzQkFBc0IsQ0FBQ3ZMLCtCQUErQixHQUFHLENBQUM7SUFDakU7RUFBQztFQUFBLE9BQUFtTCxTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdmZIO0FBQ0E7QUFDQTtBQUN1QztBQUNPO0FBRWU7QUFDTjtBQUVkO0FBQUEsSUFHcEJHLGdCQUFnQjtFQW1CbkMsU0FBQUEsaUJBQVkxdkIsSUFBYSxFQUFFO0lBQUFoRiwySUFBQSxPQUFBMDBCLGdCQUFBO0lBQUF6MEIsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDekIsSUFBSSxDQUFDdzJCLFdBQVcsR0FBRyxJQUFJdjJCLHlEQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUNvMkIsb0JBQW9CLEdBQUcsSUFBSXAyQix5REFBYyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDKzNCLHVCQUF1QixHQUFHLElBQUk5M0IsSUFBSSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDODBCLEtBQUssR0FBRyxJQUFJMzBCLGdEQUFPLENBQWlCazJCLDZEQUF1QixDQUFDO0lBQ2pFLElBQUksQ0FBQ3BCLFVBQVUsR0FBRyxJQUFJOTBCLGdEQUFPLENBQVUsSUFBSSxDQUFDO0lBQzVDLElBQUksQ0FBQ2cxQixNQUFNLEdBQUcsSUFBSWgxQixnREFBTyxDQUFVLElBQUksQ0FBQztJQUN4QyxJQUFJLENBQUNrMUIsT0FBTyxHQUFHLElBQUlsMUIsZ0RBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDbzFCLFVBQVUsR0FBRyxJQUFJcDFCLGdEQUFPLENBQVUsS0FBSyxDQUFDO0lBQzdDLElBQUksQ0FBQ3MxQixPQUFPLEdBQUcsSUFBSXQxQixnREFBTyxDQUFVLEtBQUssQ0FBQztJQUMxQyxJQUFJLENBQUN3MUIsT0FBTyxHQUFHLElBQUl4MUIsZ0RBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDdXNCLFlBQVksR0FBRyxJQUFJdnNCLGdEQUFPLENBQVMsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQ2dyQixRQUFRLEdBQUcsSUFBSWhyQixnREFBTyxDQUFXLElBQUksQ0FBQztJQUMzQyxJQUFJLENBQUM2dEIsTUFBTSxHQUFHLElBQUk3dEIsZ0RBQU8sQ0FBVSxJQUFJLENBQUM7SUFDeEMsSUFBSSxDQUFDbWUsYUFBYSxHQUFHLElBQUluZSxnREFBTyxDQUE4QixJQUFJLENBQUM7SUFDbkUsSUFBSSxDQUFDMEUsSUFBSSxHQUFHQSxJQUFJLElBQUlBLElBQUksQ0FBQzhFLE1BQU0sR0FBRzlFLElBQUksR0FBRyxJQUFJLENBQUNrekIsa0JBQWtCLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUNOLDJDQUEyQyxHQUFHLENBQUM7RUFDdEQ7RUFBQ2wzQix3SUFBQSxDQUFBZzBCLGdCQUFBO0lBQUEvekIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QjtNQUNyQixJQUFNdXRCLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sQ0FBQ3R0QixLQUFLO01BRWhDLElBQUksQ0FBQ3N0QixNQUFNLEVBQUU7UUFDWCxPQUFPLEdBQUc7TUFDWjtNQUVBLE9BQU9BLE1BQU0sQ0FBQ2ptQixRQUFRO0lBQ3hCO0VBQUM7SUFBQXZILEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzM0IsWUFBWXhnQixNQUFxQixFQUFRO01BQ3ZDLFFBQVFBLE1BQU07UUFDWixLQUFLLElBQUk7VUFDUDtRQUNGLEtBQUssY0FBYztRQUNuQixLQUFLLGdCQUFnQjtRQUNyQixLQUFLLGFBQWE7VUFDaEIsSUFBSSxDQUFDeWQsVUFBVSxDQUFDdjBCLEtBQUssR0FBRyxLQUFLOztRQUUvQjtRQUNBLEtBQUssV0FBVztVQUNkLElBQUksQ0FBQ2dzQixZQUFZLENBQUNoc0IsS0FBSyxHQUFHLENBQUM7VUFDM0IsSUFBSSxDQUFDNjBCLFVBQVUsQ0FBQzcwQixLQUFLLEdBQUcsS0FBSztVQUM3QixJQUFJLENBQUMrMEIsT0FBTyxDQUFDLzBCLEtBQUssR0FBRyxJQUFJO1VBQ3pCLElBQUksQ0FBQ2kxQixPQUFPLENBQUNqMUIsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDc3RCLE1BQU0sQ0FBQ3R0QixLQUFLLEdBQUcsSUFBSTtVQUV4QjtRQUNGO1VBQ0UsSUFBSSxDQUFDZ3NCLFlBQVksQ0FBQ2hzQixLQUFLLEVBQUU7VUFDekIsSUFBSSxDQUFDNjBCLFVBQVUsQ0FBQzcwQixLQUFLLEdBQUcsS0FBSztVQUM3QixJQUFJLENBQUMrMEIsT0FBTyxDQUFDLzBCLEtBQUssR0FBRyxJQUFJO1VBQ3pCLElBQUksQ0FBQ2kxQixPQUFPLENBQUNqMUIsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDc3RCLE1BQU0sQ0FBQ3R0QixLQUFLLEdBQUcsSUFBSTtVQUV4QjtNQUNKO0lBQ0Y7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdTNCLGtDQUFrQ3pnQixNQUFxQixFQUFrQjtNQUN2RSxRQUFRQSxNQUFNO1FBQ1osS0FBSyxJQUFJO1VBQ1AsT0FBTzZlLDZEQUF1QjtRQUNoQyxLQUFLLFdBQVc7VUFDZCxPQUFPQSw2REFBdUI7UUFDaEMsS0FBSyxnQkFBZ0I7VUFDbkIsT0FBT0Esa0VBQTRCO1FBQ3JDLEtBQUssYUFBYTtVQUNoQixPQUFPQSwrREFBeUI7UUFDbEMsS0FBSyxjQUFjO1VBQ2pCLE9BQU9BLGlFQUEyQjtRQUNwQyxLQUFLLFVBQVU7UUFDZixLQUFLLGNBQWM7UUFDbkIsS0FBSyxTQUFTO1VBQ1osT0FBT0EsK0RBQXlCO1FBQ2xDLEtBQUssNEJBQTRCO1FBQ2pDLEtBQUssZUFBZTtVQUNsQixPQUFPQSx1RUFBaUM7UUFDMUMsS0FBSyx5QkFBeUI7VUFDNUIsT0FBT0EsZ0ZBQTBDO1FBQ25ELEtBQUssUUFBUTtVQUNYLE9BQU9BLDBEQUFvQjtRQUM3QjtVQUNFanBCLGdFQUFpQixDQUFDb0ssTUFBTSxDQUFDO01BQzdCO0lBQ0Y7RUFBQztJQUFBaFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXEzQixtQkFBQSxFQUFxQztNQUNuQyxPQUFPdHJCLHlEQUFjLENBQUMsRUFBRSxDQUFDO0lBQzNCO0VBQUM7RUFBQSxPQUFBOG5CLGdCQUFBO0FBQUE7Ozs7Ozs7Ozs7OztBQ3ZISDtBQUNBO0FBQ0E7QUFGQSxJQUdLOEIsY0FBYywwQkFBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBQSxPQUFkQSxjQUFjO0FBQUEsRUFBZEEsY0FBYztBQW1CbkIsK0RBQWVBLGNBQWMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCN0I7QUFDQTtBQUNBOztBQUV5QjtBQUVXO0FBQUEsSUFRZjZCLFVBQVU7RUFTN0IsU0FBQUEsV0FBQSxFQUFzQjtJQUFBcjRCLDJJQUFBLE9BQUFxNEIsVUFBQTtJQUNwQixNQUFNLElBQUk1eUIsS0FBSyxDQUFDLDJEQUEyRCxDQUFDO0VBQzlFO0VBQUMvRSx3SUFBQSxDQUFBMjNCLFVBQUE7SUFBQTEzQixHQUFBO0lBQUFFLEtBQUEsRUFWRCxTQUFBeTNCLGdCQUF1QmhkLE9BQStCLEVBQWE7TUFDakUsSUFBSSxDQUFDeFQsMkRBQXFCLEVBQUU7UUFDMUIsTUFBTSxJQUFJckMsS0FBSyxDQUFDLG9CQUFvQixDQUFDO01BQ3ZDO01BRUEsT0FBTyxJQUFJOHVCLCtDQUFTLENBQUNqWixPQUFPLENBQUNxQixXQUFXLEVBQUVyQixPQUFPLENBQUMvUixLQUFLLEVBQUUrUixPQUFPLENBQUN0VyxJQUFJLENBQUM7SUFDeEU7RUFBQztFQUFBLE9BQUFxekIsVUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCSDtBQUNBO0FBQ0E7QUFDNkQ7QUFDZDtBQUVRO0FBQzlCO0FBQytDO0FBQ0o7QUFFckI7QUFFcUI7QUFFUjtBQUNZO0FBQzFCO0FBRzlDLElBQU1FLGdDQUFnQyxHQUFHLEdBQUc7QUFDNUMsSUFBTUMsbUJBQW1CLEdBQUcsSUFBSTtBQUFDLElBRVpiLGlCQUFpQjtFQU1wQyxTQUFBQSxrQkFBWWMsZ0JBQWtDLEVBQUVDLHFCQUE0QyxFQUFFaEIsbUJBQXdDLEVBQUU7SUFBQTEzQiwySUFBQSxPQUFBMjNCLGlCQUFBO0lBQUExM0IsMklBQUEsa0JBTHBHNEgsb0VBQXVCLENBQUMsbUJBQW1CLENBQUM7SUFBQTVILDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBTTlFLElBQUksQ0FBQ3cwQixpQkFBaUIsR0FBR2dFLGdCQUFnQjtJQUN6QyxJQUFJLENBQUM5RCxzQkFBc0IsR0FBRytELHFCQUFxQjtJQUNuRCxJQUFJLENBQUNYLG9CQUFvQixHQUFHTCxtQkFBbUI7RUFDakQ7RUFBQ2gzQix3SUFBQSxDQUFBaTNCLGlCQUFBO0lBQUFoM0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTJyQixNQUFNL2hCLEdBQUcsRUFBRWxCLEtBQUssRUFBRWd1QixtQkFBbUIsRUFBaUI7TUFBQSxJQUFBcjJCLEtBQUE7TUFDcEQsSUFBSSxDQUFDcUMsU0FBUyxDQUFDbzFCLE1BQU0sRUFBRTtRQUNyQixJQUFJLENBQUNsRSxpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssR0FBRzIxQiw2REFBc0I7UUFFM0QsT0FBT3plLE9BQU8sQ0FBQzBCLE9BQU8sQ0FBQyxDQUFDO01BQzFCO01BRUEsT0FBTzFCLE9BQU8sQ0FBQ3dCLEdBQUcsQ0FBQyxDQUNqQjJRLDZGQUE0QyxDQUFDemYsR0FBRyxDQUFDLEVBQ2pEeVAsMEZBQStDLENBQUMsVUFBVSxDQUFDLENBQ3hEL0MsSUFBSSxDQUFDLFVBQUFPLElBQUEsRUFBa0M7UUFBQSxJQUFoQ21FLFVBQVUsR0FBQW5FLElBQUEsQ0FBVm1FLFVBQVU7VUFBRXBCLGNBQWMsR0FBQS9DLElBQUEsQ0FBZCtDLGNBQWM7UUFDaEN2WixLQUFJLENBQUN5ekIsc0JBQXNCLENBQUNsYSxjQUFjLENBQUM1WixLQUFLLEdBQUc0WixjQUFjO1FBRWpFLE9BQU87VUFDTG9CLFVBQVUsRUFBVkEsVUFBVTtVQUNWcEIsY0FBYyxFQUFkQTtRQUNGLENBQUM7TUFDSCxDQUFDLENBQUMsQ0FDTCxDQUFDLENBQ0N0RCxJQUFJLENBQUMsVUFBQXloQixLQUFBLEVBQThDO1FBQUEsSUFBQUMsS0FBQSxHQUFBQywwSUFBQSxDQUFBRixLQUFBO1VBQTVDdE4sUUFBUSxHQUFBdU4sS0FBQTtVQUFBRSxNQUFBLEdBQUFGLEtBQUE7VUFBR2hkLFVBQVUsR0FBQWtkLE1BQUEsQ0FBVmxkLFVBQVU7VUFBRXBCLGNBQWMsR0FBQXNlLE1BQUEsQ0FBZHRlLGNBQWM7UUFDM0N2WixLQUFJLENBQUN1ekIsaUJBQWlCLENBQUNhLE1BQU0sQ0FBQ3owQixLQUFLLEdBQUcsSUFBSTtRQUMxQ0ssS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDbkosUUFBUSxDQUFDenFCLEtBQUssR0FBR3lxQixRQUFRO1FBQ2hEcHFCLEtBQUksQ0FBQzhILE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFcWlCLFFBQVEsQ0FBQzNlLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNUR6TCxLQUFJLENBQUM4SCxPQUFPLENBQUNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRzRTLFVBQVUsQ0FBQ3FCLEdBQUcsQ0FBQztRQUVwRCxJQUFJdlgsd0ZBQXFDLElBQUksQ0FBQzhVLGNBQWMsQ0FBQ3VlLHdCQUF3QixJQUFJLENBQUN2ZSxjQUFjLENBQUN3ZSx3QkFBd0IsSUFBSS8zQixLQUFJLENBQUN1ekIsaUJBQWlCLENBQUM1SCxZQUFZLENBQUNoc0IsS0FBSyxHQUFHLENBQUMsRUFBRTtVQUNsTDRaLGNBQWMsQ0FBQzZKLEtBQUssQ0FBQyxDQUFDO1VBQ3RCN0osY0FBYyxDQUFDelosT0FBTyxDQUFDLENBQUM7VUFFeEIsSUFBSThHLHlFQUFtQyxJQUFJLEVBQUVuQyw2RUFBMEIsSUFBSW1DLDhFQUF3QyxDQUFDLEVBQUU7WUFDcEh0Qyx5RkFBOEMsQ0FBQyxDQUFDO1VBQ2xEO1VBRUFpVixjQUFjLEdBQUcsSUFBSTtVQUNyQm9CLFVBQVUsR0FBRyxJQUFJO1VBQ2pCM2EsS0FBSSxDQUFDeXpCLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSyxHQUFHNFosY0FBYztRQUNuRTtRQUVBLE9BQU82USxRQUFRLENBQUN5QyxPQUFPLENBQUM3c0IsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDenZCLElBQUksRUFBRXVFLEtBQUssRUFBRXNTLFVBQVUsRUFBRTNhLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQzVILFlBQVksQ0FBQ2hzQixLQUFLLENBQUM7TUFDcEgsQ0FBQyxDQUFDLENBQ0RzVyxJQUFJLENBQUMsVUFBQStoQixLQUFBLEVBQXVJO1FBQUEsSUFBckl2aEIsTUFBTSxHQUFBdWhCLEtBQUEsQ0FBTnZoQixNQUFNO1VBQUV3VyxNQUFNLEdBQUErSyxLQUFBLENBQU4vSyxNQUFNO1VBQUUrRCxnQkFBZ0IsR0FBQWdILEtBQUEsQ0FBaEJoSCxnQkFBZ0I7VUFBRTlELDRCQUE0QixHQUFBOEssS0FBQSxDQUE1QjlLLDRCQUE0QjtVQUFFaUUsOEJBQThCLEdBQUE2RyxLQUFBLENBQTlCN0csOEJBQThCO1VBQUVELCtCQUErQixHQUFBOEcsS0FBQSxDQUEvQjlHLCtCQUErQjtRQUNySWx4QixLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN0RyxNQUFNLENBQUN0dEIsS0FBSyxHQUFHc3RCLE1BQU07UUFFNUNqdEIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDb0csS0FBSyxDQUNoQixpREFBaUQsRUFDakRsTyxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUMvQnlQLE1BQU0sRUFDTnVhLGdCQUFnQixFQUNoQjlELDRCQUE0QixFQUM1QmlFLDhCQUE4QixFQUM5QkQsK0JBQ0YsQ0FBQztRQUVEbHhCLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssR0FBR0ssS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDMkQsaUNBQWlDLENBQUN6Z0IsTUFBTSxDQUFDO1FBRXJHelcsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDMEQsV0FBVyxDQUFDeGdCLE1BQU0sQ0FBQztRQUUxQyxJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO1VBQ25CO1FBQ0Y7UUFFQSxPQUFPelcsS0FBSSxDQUFDaTRCLHFCQUFxQixDQUFDajRCLEtBQUksQ0FBQ3l6QixzQkFBc0IsQ0FBQ2xhLGNBQWMsQ0FBQzVaLEtBQUssRUFBRXF4QixnQkFBZ0IsQ0FBQyxDQUNsRy9hLElBQUksQ0FBQyxVQUFBc0QsY0FBYyxFQUFJO1VBQ3RCLElBQUkyZSx1QkFBdUI7VUFDM0IsSUFBSUMsZUFBZSxHQUFHLEtBQUs7VUFDM0IsSUFBSTFKLGtCQUFrQixHQUFHLEtBQUs7VUFDOUIsSUFBTUQsVUFBNkIsR0FBRyxFQUFFO1VBRXhDeHVCLEtBQUksQ0FBQ3l6QixzQkFBc0IsQ0FBQ2xhLGNBQWMsQ0FBQzVaLEtBQUssR0FBRzRaLGNBQWM7VUFFakVBLGNBQWMsQ0FBQ21KLFNBQVMsQ0FBQzFpQixLQUFJLENBQUN5ekIsc0JBQXNCLENBQUNoWSxXQUFXLENBQUM5YixLQUFLLENBQUM7VUFFdkU0WixjQUFjLENBQUMwSixjQUFjLEdBQUcsVUFBQ2phLENBQUMsRUFBVztZQUMzQyxJQUFJaEosS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdEcsTUFBTSxDQUFDdHRCLEtBQUssS0FBS3N0QixNQUFNLEVBQUU7Y0FDbEQ7WUFDRjtZQUVBLElBQUlqdEIsS0FBSSxDQUFDeXpCLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSyxLQUFLNFosY0FBYyxFQUFFO2NBQ3ZFO1lBQ0Y7WUFFQSxJQUFJNGUsZUFBZSxFQUFFO2NBQ25CO1lBQ0Y7WUFFQSxJQUFJLENBQUN2eEIsbUVBQTZCLEVBQUU7Y0FDbEM7WUFDRjtZQUVBLElBQUlvQyxDQUFDLENBQUNvdkIsU0FBUyxJQUFJcHZCLENBQUMsQ0FBQ292QixTQUFTLENBQUNBLFNBQVMsRUFBRTtjQUN4QzVKLFVBQVUsQ0FBQzdtQixJQUFJLENBQUNxQixDQUFDLENBQUNvdkIsU0FBUyxDQUFDO1lBQzlCLENBQUMsTUFBTTtjQUNMM0osa0JBQWtCLEdBQUcsSUFBSTtZQUMzQjtZQUVBLElBQUksQ0FBQ3lKLHVCQUF1QixFQUFFO2NBQzVCQSx1QkFBdUIsR0FBR3J6QixVQUFVLENBQUMsWUFBTTtnQkFDekMsSUFBSTdFLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ3RHLE1BQU0sQ0FBQ3R0QixLQUFLLEtBQUtzdEIsTUFBTSxFQUFFO2tCQUNsRDtnQkFDRjtnQkFFQSxJQUFJa0wsZUFBZSxFQUFFO2tCQUNuQjtnQkFDRjtnQkFFQSxJQUFNOWpCLE9BQU8sR0FBR3JVLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ25KLFFBQVEsQ0FBQ3pxQixLQUFLLENBQUNzdkIsZ0JBQWdCLENBQUNoQyxNQUFNLEVBQUV1QixVQUFVLEVBQUVDLGtCQUFrQixDQUFDLENBQzNHeFksSUFBSSxDQUFDLFVBQUFvaUIsS0FBQSxFQUF1QjtrQkFBQSxJQUFyQjVoQixNQUFNLEdBQUE0aEIsS0FBQSxDQUFONWhCLE1BQU07b0JBQUUyRCxPQUFPLEdBQUFpZSxLQUFBLENBQVBqZSxPQUFPO2tCQUNyQixJQUFJM0QsTUFBTSxLQUFLLElBQUksRUFBRTtvQkFDbkJ6VyxLQUFJLENBQUM4SCxPQUFPLENBQUMyRyxJQUFJLENBQUMsb0RBQW9ELEVBQUV6TyxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFeVAsTUFBTSxDQUFDO29CQUVoSDtrQkFDRjtrQkFFQSxJQUFJMkQsT0FBTyxDQUFDelcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM5QncwQixlQUFlLEdBQUcsSUFBSTtrQkFDeEI7a0JBRUFuNEIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsNkRBQTZELEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFeVAsTUFBTSxFQUFFMkQsT0FBTyxDQUFDO2dCQUNwSSxDQUFDLENBQUMsQ0FDRDdELEtBQUssQ0FBQyxVQUFBdk4sQ0FBQyxFQUFJO2tCQUNWaEosS0FBSSxDQUFDOEgsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUNBQW1DLEVBQUV2SSxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFZ0MsQ0FBQyxDQUFDO2dCQUM3RixDQUFDLENBQUM7Y0FDTixDQUFDLEVBQUVxdUIsZ0NBQWdDLENBQUM7WUFDdEM7VUFDRixDQUFDO1VBRUQ5ZCxjQUFjLENBQUM0SiwwQkFBMEIsR0FBRyxZQUFZO1lBQ3RELElBQUluakIsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdEcsTUFBTSxDQUFDdHRCLEtBQUssS0FBS3N0QixNQUFNLEVBQUU7Y0FDbEQ7WUFDRjtZQUVBLElBQUlqdEIsS0FBSSxDQUFDeXpCLHNCQUFzQixDQUFDbGEsY0FBYyxDQUFDNVosS0FBSyxLQUFLNFosY0FBYyxFQUFFO2NBQ3ZFO1lBQ0Y7WUFFQSxJQUFNK2UsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFBLEVBQWU7Y0FDaEM7Y0FDQTtjQUNBdDRCLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssR0FBRzIxQixxRUFBOEI7Y0FDbkV0MUIsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDaUIsVUFBVSxDQUFDNzBCLEtBQUssR0FBRyxLQUFLO2NBQy9DSyxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUNlLE9BQU8sQ0FBQzMwQixLQUFLLEdBQUcsSUFBSTtjQUUzQyxJQUFNMFUsT0FBTyxHQUFHclUsS0FBSSxDQUFDNjJCLG9CQUFvQixDQUFDLENBQUMsQ0FDeEN0Z0IsS0FBSyxDQUFDLFVBQUF2TixDQUFDLEVBQUk7Z0JBQ1ZoSixLQUFJLENBQUM4SCxPQUFPLENBQUNTLEtBQUssQ0FDaEIsbUZBQW1GLEVBQ25GdkksS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdnNCLFFBQVEsRUFDL0J1UyxjQUFjLENBQUMwSCxrQkFBa0IsRUFDakNqWSxDQUNGLENBQUM7Y0FDSCxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsUUFBUXVRLGNBQWMsQ0FBQzBILGtCQUFrQjtjQUN2QyxLQUFLLFVBQVU7Y0FDZixLQUFLLFdBQVc7Y0FDaEIsS0FBSyxXQUFXO2NBQ2hCLEtBQUssS0FBSztnQkFDUjtjQUVGLEtBQUssY0FBYztjQUNuQixLQUFLLFFBQVE7Z0JBQ1hqaEIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0VBQWdFLEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFdVMsY0FBYyxDQUFDMEgsa0JBQWtCLENBQUM7Z0JBQ3ZKamhCLEtBQUksQ0FBQ3U0Qix1QkFBdUIsQ0FBQ2hmLGNBQWMsRUFBRStlLGFBQWEsQ0FBQztnQkFFM0Q7Y0FDRixLQUFLLFFBQVE7Z0JBQ1h0NEIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0VBQWdFLEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFdVMsY0FBYyxDQUFDMEgsa0JBQWtCLENBQUM7Z0JBQ3ZKcVgsYUFBYSxDQUFDLENBQUM7Z0JBRWY7Y0FDRjtnQkFDRWpzQixnRUFBaUIsQ0FBQ2tOLGNBQWMsQ0FBQzBILGtCQUFrQixDQUFDO1lBQ3hEO1VBQ0YsQ0FBQztVQUVELE9BQU8sSUFBSXBLLE9BQU8sQ0FBTyxVQUFBMEIsT0FBTyxFQUFJO1lBQ2xDQSxPQUFPLENBQUMsQ0FBQztVQUNYLENBQUMsQ0FBQyxDQUFDdEMsSUFBSSxDQUFDLFlBQU07WUFDWixJQUFJLENBQUNpWCw0QkFBNEIsRUFBRTtjQUNqQztZQUNGO1lBRUFsdEIsS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsK0JBQStCLEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFa21CLDRCQUE0QixDQUFDZCxrQkFBa0IsQ0FBQ3BRLEdBQUcsQ0FBQztZQUV4SSxPQUFPekMsY0FBYyxDQUFDbUksbUJBQW1CLENBQUN3TCw0QkFBNEIsQ0FBQ2Qsa0JBQWtCLENBQUMsQ0FDdkY3VixLQUFLLENBQUMsVUFBQXZOLENBQUMsRUFBSTtjQUNWaEosS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsNkRBQTZELEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFa21CLDRCQUE0QixDQUFDZCxrQkFBa0IsRUFBRXBqQixDQUFDLENBQUNrRSxPQUFPLENBQUM7Y0FFN0ssTUFBTWxFLENBQUM7WUFDVCxDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQ2lOLElBQUksQ0FBQyxZQUFNO1lBQ1osSUFBSSxDQUFDaWIsK0JBQStCLEVBQUU7Y0FDcEM7WUFDRjtZQUVBbHhCLEtBQUksQ0FBQzhILE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGlDQUFpQyxFQUFFL0gsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdnNCLFFBQVEsRUFBRWtxQiwrQkFBK0IsQ0FBQzlFLGtCQUFrQixDQUFDcFEsR0FBRyxDQUFDO1lBRTdJLE9BQU96QyxjQUFjLENBQUM0SSxvQkFBb0IsQ0FBQytPLCtCQUErQixDQUFDOUUsa0JBQWtCLENBQUMsQ0FDM0Y3VixLQUFLLENBQUMsVUFBQXZOLENBQUMsRUFBSTtjQUNWaEosS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsOERBQThELEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFa3FCLCtCQUErQixDQUFDOUUsa0JBQWtCLEVBQUVwakIsQ0FBQyxDQUFDa0UsT0FBTyxDQUFDO2NBRWpMLE1BQU1sRSxDQUFDO1lBQ1QsQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDLENBQUNpTixJQUFJLENBQUMsWUFBTTtZQUNaLElBQUksQ0FBQ2tiLDhCQUE4QixFQUFFO2NBQ25DO1lBQ0Y7WUFFQW54QixLQUFJLENBQUM4SCxPQUFPLENBQUNDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRS9ILEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ3ZzQixRQUFRLEVBQUVtcUIsOEJBQThCLENBQUMvRSxrQkFBa0IsQ0FBQ3BRLEdBQUcsQ0FBQztZQUUzSSxPQUFPekMsY0FBYyxDQUFDNEksb0JBQW9CLENBQUNnUCw4QkFBOEIsQ0FBQy9FLGtCQUFrQixDQUFDLENBQzFGN1YsS0FBSyxDQUFDLFVBQUF2TixDQUFDLEVBQUk7Y0FDVmhKLEtBQUksQ0FBQzhILE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDhEQUE4RCxFQUFFL0gsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdnNCLFFBQVEsRUFBRWtxQiwrQkFBK0IsQ0FBQzlFLGtCQUFrQixFQUFFcGpCLENBQUMsQ0FBQ2tFLE9BQU8sQ0FBQztjQUVqTCxNQUFNbEUsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUNEaU4sSUFBSSxDQUFDLFlBQU07Y0FDVixPQUFPc0QsY0FBYyxDQUFDK0gsWUFBWSxDQUFDO2dCQUNqQzFHLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCQyxtQkFBbUIsRUFBRTtjQUN2QixDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQzVFLElBQUksQ0FBQyxVQUFBdWlCLE1BQU0sRUFBSTtjQUNoQng0QixLQUFJLENBQUM4SCxPQUFPLENBQUNDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRS9ILEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ3ZzQixRQUFRLEVBQUV3eEIsTUFBTSxDQUFDeGMsR0FBRyxDQUFDO2NBRWhHLE9BQU9oYyxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUNuSixRQUFRLENBQUN6cUIsS0FBSyxDQUFDd2lCLG9CQUFvQixDQUFDOEssTUFBTSxFQUFFdUwsTUFBTSxDQUFDO1lBQ25GLENBQUMsQ0FBQyxDQUFDdmlCLElBQUksQ0FBQyxVQUFBd2lCLEtBQUEsRUFBa0M7Y0FBQSxJQUFoQ2hpQixNQUFNLEdBQUFnaUIsS0FBQSxDQUFOaGlCLE1BQU07Z0JBQUUyVixrQkFBa0IsR0FBQXFNLEtBQUEsQ0FBbEJyTSxrQkFBa0I7Y0FDbENwc0IsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDUSxLQUFLLENBQUNwMEIsS0FBSyxHQUFHSyxLQUFJLENBQUMwNEIsOENBQThDLENBQUNqaUIsTUFBTSxDQUFDO2NBRWhHLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CelcsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDaUIsVUFBVSxDQUFDNzBCLEtBQUssR0FBRyxLQUFLO2dCQUMvQ0ssS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDbUIsT0FBTyxDQUFDLzBCLEtBQUssR0FBRyxJQUFJO2dCQUMzQ0ssS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDcUIsT0FBTyxDQUFDajFCLEtBQUssR0FBRyxLQUFLO2dCQUU1QztjQUNGO2NBRUFLLEtBQUksQ0FBQzhILE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlCQUF5QixFQUFFL0gsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdnNCLFFBQVEsRUFBRW9sQixrQkFBa0IsQ0FBQ3BRLEdBQUcsQ0FBQztjQUVyRyxPQUFPekMsY0FBYyxDQUFDbUksbUJBQW1CLENBQUMwSyxrQkFBa0IsQ0FBQyxDQUMxRDdWLEtBQUssQ0FBQyxVQUFBdk4sQ0FBQyxFQUFJO2dCQUNWaEosS0FBSSxDQUFDOEgsT0FBTyxDQUFDQyxJQUFJLENBQUMsNkRBQTZELEVBQUUvSCxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUN2c0IsUUFBUSxFQUFFb2xCLGtCQUFrQixFQUFFcGpCLENBQUMsQ0FBQ2tFLE9BQU8sQ0FBQztnQkFFaEosTUFBTWxFLENBQUM7Y0FDVCxDQUFDLENBQUM7WUFDTixDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQ2lOLElBQUksQ0FBQyxZQUFNO1lBQ1pvZ0IsbUJBQW1CLENBQUN0dkIsT0FBTyxDQUFDL0csS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDdnNCLFFBQVEsQ0FBQztZQUU1RGhILEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssR0FBRzIxQixnRUFBeUI7WUFDOUR0MUIsS0FBSSxDQUFDdXpCLGlCQUFpQixDQUFDaUIsVUFBVSxDQUFDNzBCLEtBQUssR0FBRyxJQUFJO1lBRTlDLElBQU1nNUIsaUJBQWlCLEdBQUcsSUFBSW5kLDREQUFpQixDQUFDakMsY0FBYyxFQUFFdlosS0FBSSxDQUFDeXpCLHNCQUFzQixDQUFDaFksV0FBVyxDQUFDOWIsS0FBSyxFQUFFSyxLQUFJLENBQUN1ekIsaUJBQWlCLENBQUNuSixRQUFRLENBQUN6cUIsS0FBSyxDQUFDNmQsYUFBYSxHQUFHLENBQUMsQ0FBQztZQUV2S3hkLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ2dDLFdBQVcsQ0FBQzUwQixHQUFHLENBQUNnNEIsaUJBQWlCLENBQUM7WUFFekQsSUFBTXRrQixPQUFPLEdBQUdza0IsaUJBQWlCLENBQUNDLFlBQVksQ0FBQ3BWLFNBQVMsQ0FBQyxVQUFBcVYsVUFBVSxFQUFJO2NBQ3JFNzRCLEtBQUksQ0FBQ3V6QixpQkFBaUIsQ0FBQ2hXLGFBQWEsQ0FBQzVkLEtBQUssR0FBR2s1QixVQUFVO1lBQ3pELENBQUMsQ0FBQztZQUVGLE9BQU9oaUIsT0FBTyxDQUFDMEIsT0FBTyxDQUFDLENBQUM7VUFDMUIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBOVksR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQW01QixzQkFBQSxHQUFBdmtCLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFDRXNrQixzQkFBOEMsRUFDOUMvSCxnQkFBa0M7UUFBQSxJQUFBZ0ksbUJBQUE7UUFBQSxPQUFBeGtCLDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsSUFDN0Jna0Isc0JBQXNCO2dCQUFBbGtCLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQ3pCaWMsZ0JBQWdCLEdBQUcvVixxRkFBMEMsQ0FBQytWLGdCQUFnQixDQUFDO2NBQUMsT0FBQW5jLFFBQUEsQ0FBQVMsTUFBQSxXQUV6RTFPLDBGQUFvRCxDQUFDb3FCLGdCQUFnQixDQUFDO1lBQUE7Y0FHekVnSSxtQkFBbUIsR0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ3BCRixzQkFBc0IsQ0FBQzdYLGdCQUFnQixDQUFDLENBQUMsR0FDekM4UCxnQkFBZ0I7Y0FHckIrSCxzQkFBc0IsQ0FBQzVYLGdCQUFnQixDQUFDNlgsbUJBQW1CLENBQUM7Y0FBQyxPQUFBbmtCLFFBQUEsQ0FBQVMsTUFBQSxXQUV0RHlqQixzQkFBc0I7WUFBQTtZQUFBO2NBQUEsT0FBQWxrQixRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUM5QjtNQUFBLFNBQUF3akIsc0JBQUF4aUIsRUFBQSxFQUFBOEwsR0FBQTtRQUFBLE9BQUF1WCxzQkFBQSxDQUFBcGpCLEtBQUEsT0FBQTNILFNBQUE7TUFBQTtNQUFBLE9BQUFrcUIscUJBQUE7SUFBQTtFQUFBO0lBQUF4NEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTQ0Qix3QkFBZ0NoZixjQUErQixFQUFFK2UsYUFBeUIsRUFBUTtNQUFBLElBQUF0M0IsTUFBQTtNQUNoRyxJQUFJdVksY0FBYyxDQUFDMEgsa0JBQWtCLEtBQUssUUFBUSxFQUFFO1FBQ2xEO01BQ0Y7TUFFQSxJQUFJLENBQUNzUyxpQkFBaUIsQ0FBQ1EsS0FBSyxDQUFDcDBCLEtBQUssR0FBRzIxQixrRUFBMkI7TUFFaEUsSUFBSSxJQUFJLENBQUM3QixzQkFBc0IsQ0FBQ3ZMLCtCQUErQixHQUFHdGhCLHdGQUFrRCxJQUFJLENBQUNBLDhFQUF3QyxFQUFFO1FBQUEsSUFBQXN5QixxQkFBQTtRQUNqSyxJQUFJLENBQUN6RixzQkFBc0IsQ0FBQ3ZMLCtCQUErQixFQUFFO1FBRTdELElBQU1pUixpQkFBaUIsR0FBRyxFQUFBRCxxQkFBQSxHQUFBM2YsY0FBYyxDQUFDd0MsdUJBQXVCLGNBQUFtZCxxQkFBQSx1QkFBdENBLHFCQUFBLENBQXdDN3lCLElBQUksTUFBSyxPQUFPO1FBRWxGLElBQUk1Qix3RkFBcUMsSUFDdkMsQ0FBQzhVLGNBQWMsQ0FBQ3VlLHdCQUF3QixJQUN4QyxDQUFDdmUsY0FBYyxDQUFDd2Usd0JBQXdCLElBQ3hDLENBQUNvQixpQkFBaUIsRUFDbEI7VUFDQSxJQUFNQyw4QkFBOEIsR0FBR3YwQixVQUFVLENBQUMsWUFBTTtZQUN0RDdELE1BQUksQ0FBQ3UzQix1QkFBdUIsQ0FBQ2hmLGNBQWMsRUFBRStlLGFBQWEsQ0FBQztVQUM3RCxDQUFDLEVBQUVoQixtQkFBbUIsQ0FBQztVQUV2QixJQUFJLENBQUMvRCxpQkFBaUIsQ0FBQ2dDLFdBQVcsQ0FBQzUwQixHQUFHLENBQUMsSUFBSUMscURBQVUsQ0FBQztZQUFBLE9BQU1vYyxZQUFZLENBQUNvYyw4QkFBOEIsQ0FBQztVQUFBLEVBQUMsQ0FBQztVQUUxRztRQUNGO1FBRUEsSUFBSSxDQUFDdHhCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdEQUFnRCxDQUFDO1FBRW5FLElBQU1nVSx1QkFBdUIsR0FBR3hDLGNBQWMsQ0FBQ3dDLHVCQUF1QjtRQUN0RSxJQUFNMUgsT0FBTyxHQUFHa0YsY0FBYyxDQUFDa0IsV0FBVyxDQUFDO1VBQUM0ZSxVQUFVLEVBQUU7UUFBSSxDQUFDLENBQUMsQ0FBQ3BqQixJQUFJLENBQUMsVUFBQXFqQixLQUFLLEVBQUk7VUFDM0UsT0FBTy9mLGNBQWMsQ0FBQ21JLG1CQUFtQixDQUFDNFgsS0FBSyxDQUFDLENBQUNyakIsSUFBSSxDQUFDLFlBQU07WUFDMUQsT0FBT3NELGNBQWMsQ0FBQ21JLG1CQUFtQixDQUFDM0YsdUJBQXVCLENBQUMsQ0FDL0Q5RixJQUFJLENBQUMsWUFBTTtjQUNWLElBQUlzRCxjQUFjLENBQUMwSCxrQkFBa0IsS0FBSyxjQUFjLElBQUkxSCxjQUFjLENBQUMwSCxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7Z0JBQzFHLElBQU1tWSwrQkFBOEIsR0FBR3YwQixVQUFVLENBQUMsWUFBTTtrQkFDdEQ3RCxNQUFJLENBQUN1M0IsdUJBQXVCLENBQUNoZixjQUFjLEVBQUUrZSxhQUFhLENBQUM7Z0JBQzdELENBQUMsRUFBRWhCLG1CQUFtQixDQUFDO2dCQUV2QnQyQixNQUFJLENBQUN1eUIsaUJBQWlCLENBQUNnQyxXQUFXLENBQUM1MEIsR0FBRyxDQUFDLElBQUlDLHFEQUFVLENBQUM7a0JBQUEsT0FBTW9jLFlBQVksQ0FBQ29jLCtCQUE4QixDQUFDO2dCQUFBLEVBQUMsQ0FBQztjQUM1RyxDQUFDLE1BQU07Z0JBQ0xwNEIsTUFBSSxDQUFDdXlCLGlCQUFpQixDQUFDUSxLQUFLLENBQUNwMEIsS0FBSyxHQUFHMjFCLGdFQUF5QjtjQUNoRTtZQUNGLENBQUMsQ0FBQztVQUNOLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNDL2UsS0FBSyxDQUFDLFVBQUF2TixDQUFDLEVBQUk7VUFDVmhJLE1BQUksQ0FBQzhHLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHFDQUFxQyxFQUFFUyxDQUFDLENBQUM7VUFDNURoSSxNQUFJLENBQUN5eUIsc0JBQXNCLENBQUN2TCwrQkFBK0IsR0FBRyxDQUFDO1VBQy9Eb1EsYUFBYSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUo7TUFDRjtNQUVBLElBQUksQ0FBQ3h3QixPQUFPLENBQUNDLElBQUksQ0FBQyxtRkFBbUYsRUFBRSxJQUFJLENBQUMwckIsc0JBQXNCLENBQUN2TCwrQkFBK0IsQ0FBQztNQUNuSyxJQUFJLENBQUN1TCxzQkFBc0IsQ0FBQ3ZMLCtCQUErQixHQUFHLENBQUM7TUFDL0RvUSxhQUFhLENBQUMsQ0FBQztJQUNqQjtFQUFDO0lBQUE3NEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQSs0QiwrQ0FBdURqaUIsTUFBa0MsRUFBa0I7TUFDekcsUUFBUUEsTUFBTTtRQUNaLEtBQUssSUFBSTtVQUNQLE9BQU82ZSw4REFBdUI7UUFDaEMsS0FBSyxjQUFjO1VBQ2pCLE9BQU9BLGtFQUEyQjtRQUNwQyxLQUFLLFdBQVc7VUFDZCxPQUFPQSw4REFBdUI7UUFDaEMsS0FBSyxVQUFVO1FBQ2YsS0FBSyxjQUFjO1FBQ25CLEtBQUssU0FBUztVQUNaLE9BQU9BLGdFQUF5QjtRQUNsQyxLQUFLLFFBQVE7VUFDWCxPQUFPQSwyREFBb0I7UUFDN0I7VUFDRWpwQixnRUFBaUIsQ0FBQ29LLE1BQU0sQ0FBQztNQUM3QjtJQUNGO0VBQUM7RUFBQSxPQUFBZ2dCLGlCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVZSDtBQUNBO0FBQ0E7O0FBRXlCO0FBQ2E7QUFDUTtBQUs5QjtBQUdoQiwrREFBZTtFQUNiN3ZCLEdBQUcsRUFBSEEseUNBQUc7RUFDSHV3QixVQUFVLEVBQVZBLGdEQUFVO0VBQ1Y3QixjQUFjLEVBQWRBLG9EQUFjQTtBQUNoQixDQUFDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQkQ7QUFDQTtBQUNBO0FBRkEsSUFLcUJsaEIsY0FBYztFQUFBLFNBQUFBLGVBQUE7SUFBQXRWLDJJQUFBLE9BQUFzVixjQUFBO0VBQUE7RUFBQTVVLHdJQUFBLENBQUE0VSxjQUFBO0lBQUEzVSxHQUFBO0lBQUFDLEdBQUEsRUFHakMsU0FBQUEsSUFBQSxFQUFnQztNQUM5QixJQUFJO1FBQ0YsT0FBTzY1QixzQ0FBaUI7TUFDMUIsQ0FBQyxDQUFDLE9BQU92d0IsQ0FBQyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUN3d0IsZUFBZTtNQUM3QjtJQUNGO0VBQUM7RUFBQSxPQUFBcGxCLGNBQUE7QUFBQTtBQUFBclYsMklBQUEsQ0FUa0JxVixjQUFjLHFCQUNBLElBQUluVixJQUFJLENBQUMsQ0FBQyxDQUFDcU8sV0FBVyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOM0Q7QUFDQTtBQUNBO0FBQ2tEO0FBQUEsSUFLN0I0RCxpQkFBaUI7RUFNcEMsU0FBQUEsa0JBQVkwVSxzQkFBOEMsRUFBRTtJQUFBOW1CLDJJQUFBLE9BQUFvUyxpQkFBQTtJQUFBblMsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDMUQsSUFBSSxDQUFDdVQsUUFBUSxHQUFHc1Qsc0JBQXNCLENBQUNyVCxPQUFPO0lBQzlDLElBQUksQ0FBQ0MsVUFBVSxHQUFHb1Qsc0JBQXNCLENBQUNuVCxTQUFTO0lBQ2xELElBQUksQ0FBQzFGLFVBQVUsR0FBRzZZLHNCQUFzQixDQUFDOVksU0FBUztJQUNsRCxJQUFJLENBQUMyc0IsaUJBQWlCLEdBQUcsSUFBSUMsc0RBQWdCLENBQUM5VCxzQkFBc0IsQ0FBQztFQUN2RTtFQUFDcG1CLHdJQUFBLENBQUEwUixpQkFBQTtJQUFBelIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFOLElBQUlDLFFBQXNCLEVBQUVDLE9BQWUsRUFBRUMsUUFBZ0IsRUFBRUMsSUFBVSxFQUFRO01BQy9FLElBQUlILFFBQVEsR0FBRyxJQUFJLENBQUNGLFVBQVUsRUFBRTtRQUM5QjtNQUNGO01BRUEsSUFBSSxDQUFDMHNCLGlCQUFpQixDQUFDOXhCLElBQUksQ0FBQ3NGLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLElBQUksQ0FBQztJQUNoRTtFQUFDO0VBQUEsT0FBQThELGlCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQkg7QUFDQTtBQUNBOztBQUVzRDtBQUFBLElBRWpDRyxzQkFBc0I7RUFBQSxTQUFBQSx1QkFBQTtJQUFBdlMsMklBQUEsT0FBQXVTLHNCQUFBO0lBQUF0UywySUFBQSxlQUMxQixnREFBZ0Q7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUEscUJBSTFDc0Ysd0ZBQTJDO0VBQUE7RUFBQTdFLHdJQUFBLENBQUE2UixzQkFBQTtJQUFBNVIsR0FBQTtJQUFBQyxHQUFBLEVBRWhFLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJLENBQUNxUyxJQUFJO0lBQ2xCLENBQUM7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQVFDLEdBQVcsRUFBRTtNQUNuQixJQUFNK1QsWUFBWSxHQUFHLElBQUkvZ0IsR0FBRyxDQUFDZ04sR0FBRyxDQUFDO01BRWpDK1QsWUFBWSxDQUFDN1QsUUFBUSxHQUFHNlQsWUFBWSxDQUFDN1QsUUFBUSxHQUFHLE9BQU87TUFFdkQsSUFBSSxDQUFDSixJQUFJLEdBQUdpVSxZQUFZLENBQUN2YSxRQUFRLENBQUMsQ0FBQztJQUNyQztFQUFDO0lBQUFoTSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBCO01BQ3hCLE9BQU8sSUFBSSxDQUFDMFMsWUFBWTtJQUMxQixDQUFDO0lBQUFKLEdBQUEsRUFFRCxTQUFBQSxJQUFnQkssV0FBbUIsRUFBRTtNQUNuQyxJQUFJLENBQUNELFlBQVksR0FBR0MsV0FBVztJQUNqQztFQUFDO0lBQUE1UyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU8sSUFBSSxDQUFDNFMsUUFBUTtJQUN0QixDQUFDO0lBQUFOLEdBQUEsRUFFRCxTQUFBQSxJQUFZTyxPQUFlLEVBQUU7TUFDM0IsSUFBSSxDQUFDRCxRQUFRLEdBQUdDLE9BQU87SUFDekI7RUFBQztJQUFBOVMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QjtNQUN0QixPQUFPLElBQUksQ0FBQzhTLFVBQVU7SUFDeEIsQ0FBQztJQUFBUixHQUFBLEVBRUQsU0FBQUEsSUFBY1MsU0FBaUIsRUFBRTtNQUMvQixJQUFJLENBQUNELFVBQVUsR0FBR0MsU0FBUztJQUM3QjtFQUFDO0lBQUFoVCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThCO01BQzVCLE9BQU8sSUFBSSxDQUFDcU4sVUFBVTtJQUN4QixDQUFDO0lBQUFpRixHQUFBLEVBRUQsU0FBQUEsSUFBY2xGLFNBQXVCLEVBQUU7TUFDckMsSUFBSSxDQUFDQyxVQUFVLEdBQUdELFNBQVM7SUFDN0I7RUFBQztFQUFBLE9BQUF1RSxzQkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZESDtBQUNBO0FBQ0E7QUFDOEM7QUFDYTtBQUczRCxJQUFNZ0MsZ0JBQWdCLEdBQUcsSUFBSTtBQUFDLElBY1RxbUIsZ0JBQWdCO0VBT25DLFNBQUFBLGlCQUFZOVQsc0JBQThDLEVBQUU7SUFBQTltQiwySUFBQSxPQUFBNDZCLGdCQUFBO0lBQUEzNkIsMklBQUE7SUFBQUEsMklBQUEsZ0JBSjNCLEVBQUU7SUFBQUEsMklBQUE7SUFBQUEsMklBQUEsa0JBRWpCd1UsUUFBUSxDQUFDQyxRQUFRO0lBR2pDLElBQUksQ0FBQ3BELHVCQUF1QixHQUFHd1Ysc0JBQXNCO0VBQ3ZEO0VBQUNwbUIsd0lBQUEsQ0FBQWs2QixnQkFBQTtJQUFBajZCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnSSxLQUFLc0YsUUFBc0IsRUFBRUMsT0FBZSxFQUFFQyxRQUFnQixFQUFFOEcsU0FBZSxFQUFRO01BQ3JGLElBQU0wbEIsU0FBUyxHQUFHO1FBQ2hCMWxCLFNBQVMsRUFBRUEsU0FBUyxDQUFDM0csV0FBVyxDQUFDLENBQUM7UUFDbENpRixPQUFPLEVBQUUsSUFBSSxDQUFDbkMsdUJBQXVCLENBQUNtQyxPQUFPO1FBQzdDcEQsS0FBSyxFQUFFNUIsd0RBQVksQ0FBQ04sUUFBUSxDQUFDO1FBQzdCRSxRQUFRLEVBQVJBLFFBQVE7UUFDUkQsT0FBTyxFQUFQQSxPQUFPO1FBQ1B1RixTQUFTLEVBQUUsSUFBSSxDQUFDckMsdUJBQXVCLENBQUNxQyxTQUFTO1FBQ2pEaFAsT0FBTyxFQUFFMlEsMkVBQXlCO1FBQ2xDL0IsV0FBVyxFQUFFLElBQUksQ0FBQ2pDLHVCQUF1QixDQUFDaUMsV0FBVztRQUNyRDZCLGlCQUFpQixFQUFFLElBQUksQ0FBQ0M7TUFDMUIsQ0FBQztNQUVELElBQUlsSCxRQUFRLEdBQUdNLDhEQUFrQixFQUFFO1FBQ2pDLElBQUksQ0FBQ3FzQixLQUFLLENBQUNqeUIsSUFBSSxDQUFDZ3lCLFNBQVMsQ0FBQztNQUM1QixDQUFDLE1BQU07UUFDTCxJQUFJLENBQUNDLEtBQUssQ0FBQ2hTLE9BQU8sQ0FBQytSLFNBQVMsQ0FBQztNQUMvQjtNQUVBLElBQU10bEIsT0FBTyxHQUFHLElBQUksQ0FBQ3dsQixjQUFjLENBQUMsQ0FBQztJQUN2QztFQUFDO0lBQUFwNkIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWdLLFNBQUEsR0FBQTRLLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBdUJxbEIsV0FBNEI7UUFBQSxJQUFBbmxCLFFBQUE7UUFBQSxPQUFBSCwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUMzQ0osUUFBUSxHQUFHLElBQUlLLFFBQVEsQ0FBQyxDQUFDO2NBRS9CTCxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUM7Z0JBQUN5RixPQUFPLEVBQUU0a0I7Y0FBVyxDQUFDLENBQUMsQ0FBQztjQUFDamxCLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BRXZESSxLQUFLLENBQUMsSUFBSSxDQUFDL0UsdUJBQXVCLENBQUM2QixHQUFHLEVBQUU7Z0JBQ25EbUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVY7Y0FDUixDQUFDLENBQUM7WUFBQTtjQUFBLE9BQUFFLFFBQUEsQ0FBQVMsTUFBQSxXQUFBVCxRQUFBLENBQUFVLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQVYsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDSDtNQUFBLFNBQUF2SyxTQUFBdUwsRUFBQTtRQUFBLE9BQUE5TCxTQUFBLENBQUErTCxLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBN0QsUUFBQTtJQUFBO0VBQUE7SUFBQXpLLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFvNkIsZUFBQSxHQUFBeGxCLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQW9CLFNBQUE7UUFBQSxJQUFBNVYsS0FBQTtRQUFBLElBQUFnNkIsa0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsVUFBQSxFQUFBSixXQUFBO1FBQUEsT0FBQXRsQiwySUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoQixJQUFBLEdBQUFnQixTQUFBLENBQUFmLElBQUE7WUFBQTtjQUFBLE1BQ00sSUFBSSxDQUFDNmtCLEtBQUssQ0FBQ2h4QixNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQ21OLFVBQVU7Z0JBQUFELFNBQUEsQ0FBQWYsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWUsU0FBQSxDQUFBUixNQUFBO1lBQUE7Y0FJekMwa0Isa0JBQWtCLEdBQUcsQ0FBQztjQUN0QkMsZ0JBQWdCLEdBQUcsQ0FBQztjQUV4QixJQUFJLENBQUNsa0IsVUFBVSxHQUFHLElBQUk7Y0FFaEJta0IsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUlsdEIsR0FBYTtnQkFBQSxPQUFhZ0QsTUFBTSxDQUFDb0QsTUFBTSxDQUFDcEcsR0FBRyxDQUFDLENBQzdEZCxNQUFNLENBQUMsVUFBQ2l1QixHQUFHLEVBQUV2dEIsSUFBSTtrQkFBQSxPQUFLdXRCLEdBQUcsSUFBSXZ0QixJQUFJLEdBQUdBLElBQUksQ0FBQ2hFLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQUEsR0FBRSxDQUFDLENBQUM7Y0FBQTtjQUUzRCxPQUFPLElBQUksQ0FBQ2d4QixLQUFLLENBQUNoeEIsTUFBTSxHQUFHb3hCLGtCQUFrQixJQUFJRSxVQUFVLENBQUMsSUFBSSxDQUFDTixLQUFLLENBQUNJLGtCQUFrQixDQUFDLENBQUMsR0FBR0MsZ0JBQWdCLEdBQUc1bUIsZ0JBQWdCLEVBQUU7Z0JBQ2pJNG1CLGdCQUFnQixJQUFJQyxVQUFVLENBQUMsSUFBSSxDQUFDTixLQUFLLENBQUNJLGtCQUFrQixDQUFDLENBQUM7Z0JBQzlEQSxrQkFBa0IsRUFBRTtjQUN0QjtjQUVBLElBQUksQ0FBQ0Esa0JBQWtCLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQ0osS0FBSyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDOXNCLE9BQU8sR0FBRyxJQUFJLENBQUMwc0IsS0FBSyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDOXNCLE9BQU8sQ0FBQzNKLFNBQVMsQ0FBQyxDQUFDLEVBQ3pGMjJCLFVBQVUsQ0FBQyxJQUFJLENBQUNOLEtBQUssQ0FBQ0ksa0JBQWtCLENBQUMsQ0FBQyxJQUFJM21CLGdCQUFnQixHQUFHNm1CLFVBQVUsQ0FBQyxJQUFJLENBQUNOLEtBQUssQ0FBQ0ksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9HQSxrQkFBa0IsR0FBRyxDQUFDO2NBQ3hCO2NBRU1GLFdBQVcsR0FBRyxJQUFJLENBQUNGLEtBQUssQ0FBQzVqQixLQUFLLENBQUMsQ0FBQyxFQUFFZ2tCLGtCQUFrQixDQUFDO2NBRTNELElBQUksQ0FBQ0osS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxDQUFDNWpCLEtBQUssQ0FBQ2drQixrQkFBa0IsQ0FBQztjQUFDLE9BQUFsa0IsU0FBQSxDQUFBUixNQUFBLFdBRTNDLElBQUksQ0FBQ3BMLFFBQVEsQ0FBQzR2QixXQUFXLENBQUMsQ0FBQzdqQixJQUFJLENBQUMsVUFBQUMsUUFBUSxFQUFJO2dCQUNqRGxXLEtBQUksQ0FBQytWLFVBQVUsR0FBRyxLQUFLO2dCQUV2QixJQUFNMUIsT0FBTyxHQUFHclUsS0FBSSxDQUFDNjVCLGNBQWMsQ0FBQyxDQUFDO2dCQUVyQyxPQUFPM2pCLFFBQVE7Y0FDakIsQ0FBQyxDQUFDLENBQUNLLEtBQUssQ0FBQyxZQUFNO2dCQUNidlcsS0FBSSxDQUFDK1YsVUFBVSxHQUFHLEtBQUs7Z0JBRXZCLElBQU0xQixPQUFPLEdBQUdyVSxLQUFJLENBQUM2NUIsY0FBYyxDQUFDLENBQUM7Y0FDdkMsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEvakIsU0FBQSxDQUFBTixJQUFBO1VBQUE7UUFBQSxHQUFBSSxRQUFBO01BQUEsQ0FDSDtNQUFBLFNBQUFpa0IsZUFBQTtRQUFBLE9BQUFFLGVBQUEsQ0FBQXJrQixLQUFBLE9BQUEzSCxTQUFBO01BQUE7TUFBQSxPQUFBOHJCLGNBQUE7SUFBQTtFQUFBO0VBQUEsT0FBQUgsZ0JBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEdIO0FBQ0E7QUFDQTtBQUZBLElBSXFCMXhCLFNBQVM7RUFHNUIsU0FBQUEsVUFBQSxFQUEwQjtJQUFBLElBQWRveUIsUUFBUSxHQUFBcnNCLFNBQUEsQ0FBQW5GLE1BQUEsUUFBQW1GLFNBQUEsUUFBQXZJLFNBQUEsR0FBQXVJLFNBQUEsTUFBRyxDQUFDO0lBQUFqUCwySUFBQSxPQUFBa0osU0FBQTtJQUFBakosMklBQUE7SUFDdEIsSUFBSSxDQUFDczdCLFNBQVMsR0FBR0QsUUFBUTtFQUMzQjtFQUFDNTZCLHdJQUFBLENBQUF3SSxTQUFBO0lBQUF2SSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBc0ksWUFBQSxFQUFzQjtNQUNwQixJQUFJLElBQUksQ0FBQ295QixTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSztNQUNkO01BRUEsSUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0QsU0FBUyxHQUFHLENBQUM7TUFDckMsSUFBTUQsUUFBUSxHQUFHRSxVQUFVLEdBQUd6dUIsSUFBSSxDQUFDMHVCLEdBQUcsQ0FBQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsU0FBUztNQUN2RSxJQUFJRyxNQUFNLEdBQUczdUIsSUFBSSxDQUFDOFMsS0FBSyxDQUFDeWIsUUFBUSxDQUFDO01BQ2pDLElBQU1LLFlBQVksR0FBR0QsTUFBTSxHQUFHLElBQUk7TUFFbENBLE1BQU0sR0FBRzN1QixJQUFJLENBQUM4UyxLQUFLLENBQUM2YixNQUFNLEdBQUcsSUFBSSxDQUFDO01BRWxDLElBQU1FLE9BQU8sR0FBR0YsTUFBTSxHQUFHLEVBQUU7TUFFM0JBLE1BQU0sR0FBRzN1QixJQUFJLENBQUM4UyxLQUFLLENBQUM2YixNQUFNLEdBQUcsRUFBRSxDQUFDO01BRWhDLElBQU1HLE9BQU8sR0FBR0gsTUFBTSxHQUFHLEVBQUU7TUFFM0JBLE1BQU0sR0FBRzN1QixJQUFJLENBQUM4UyxLQUFLLENBQUM2YixNQUFNLEdBQUcsRUFBRSxDQUFDO01BRWhDLElBQU1JLEtBQUssR0FBR0osTUFBTSxHQUFHLEVBQUU7TUFDekIsSUFBTUssS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDO01BRXBCLElBQUlQLFVBQVUsRUFBRTtRQUNkTyxLQUFLLENBQUNqVCxPQUFPLENBQUMsR0FBRyxDQUFDO01BQ3BCO01BRUEsSUFBSWdULEtBQUssRUFBRTtRQUNUQyxLQUFLLENBQUNsekIsSUFBSSxDQUFDaXpCLEtBQUssR0FBRyxHQUFHLENBQUM7TUFDekI7TUFFQSxJQUFJRCxPQUFPLEVBQUU7UUFDWEUsS0FBSyxDQUFDbHpCLElBQUksQ0FBQ2d6QixPQUFPLEdBQUcsR0FBRyxDQUFDO01BQzNCO01BRUEsSUFBSUQsT0FBTyxJQUFJRCxZQUFZLEVBQUU7UUFDM0JJLEtBQUssQ0FBQ2x6QixJQUFJLENBQUNtekIsTUFBTSxDQUFDSixPQUFPLENBQUMsQ0FBQztRQUUzQixJQUFJRCxZQUFZLEVBQUU7VUFDaEJJLEtBQUssQ0FBQ2x6QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQ296QixRQUFRLENBQUNOLFlBQVksQ0FBQ2h2QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRTtRQUVBb3ZCLEtBQUssQ0FBQ2x6QixJQUFJLENBQUMsR0FBRyxDQUFDO01BQ2pCO01BRUEsT0FBT2t6QixLQUFLLENBQUMvUyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3ZCO0VBQUM7SUFBQXJvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbzdCLFNBQVNudUIsSUFBWSxFQUFFb3VCLFlBQW9CLEVBQUVDLFNBQWlCLEVBQVU7TUFDdEVELFlBQVksR0FBR0EsWUFBWSxJQUFJLENBQUM7TUFDaENDLFNBQVMsR0FBR0gsTUFBTSxDQUFFLE9BQU9HLFNBQVMsS0FBSyxXQUFXLEdBQUdBLFNBQVMsR0FBRyxHQUFJLENBQUM7TUFFeEUsSUFBSXJ1QixJQUFJLENBQUNoRSxNQUFNLEdBQUdveUIsWUFBWSxFQUFFO1FBQzlCLE9BQU9wdUIsSUFBSTtNQUNiO01BRUFvdUIsWUFBWSxHQUFHQSxZQUFZLEdBQUdwdUIsSUFBSSxDQUFDaEUsTUFBTTtNQUV6QyxJQUFJb3lCLFlBQVksR0FBR0MsU0FBUyxDQUFDcnlCLE1BQU0sRUFBRTtRQUNuQ3F5QixTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDRixZQUFZLEdBQUdDLFNBQVMsQ0FBQ3J5QixNQUFNLENBQUM7TUFDaEU7TUFFQSxPQUFPcXlCLFNBQVMsQ0FBQ2psQixLQUFLLENBQUMsQ0FBQyxFQUFFZ2xCLFlBQVksQ0FBQyxHQUFHcHVCLElBQUk7SUFDaEQ7RUFBQztFQUFBLE9BQUE1RSxTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFFSDtBQUNBO0FBQ0E7O0FBRUEsSUFBTW16QixtQ0FBbUMsR0FBRyxJQUFJO0FBQ2hELElBQU1DLHNDQUFzQyxHQUFHLENBQUM7QUFDaEQsSUFBTUMsc0NBQXNDLEdBQUcsTUFBTTtBQUFDLElBRWpDMW5CLGtCQUFrQjtFQUtyQyxTQUFBQSxtQkFBQSxFQUlFO0lBQUEsSUFIQTJuQiw0QkFBb0MsR0FBQXZ0QixTQUFBLENBQUFuRixNQUFBLFFBQUFtRixTQUFBLFFBQUF2SSxTQUFBLEdBQUF1SSxTQUFBLE1BQUdvdEIsbUNBQW1DO0lBQUEsSUFDMUVJLCtCQUF1QyxHQUFBeHRCLFNBQUEsQ0FBQW5GLE1BQUEsUUFBQW1GLFNBQUEsUUFBQXZJLFNBQUEsR0FBQXVJLFNBQUEsTUFBR3F0QixzQ0FBc0M7SUFBQSxJQUNoRkksK0JBQXVDLEdBQUF6dEIsU0FBQSxDQUFBbkYsTUFBQSxRQUFBbUYsU0FBQSxRQUFBdkksU0FBQSxHQUFBdUksU0FBQSxNQUFHc3RCLHNDQUFzQztJQUFBdjhCLDJJQUFBLE9BQUE2VSxrQkFBQTtJQUFBNVUsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFFaEYsSUFBSSxDQUFDMDhCLDZCQUE2QixHQUFHSCw0QkFBNEI7SUFDakUsSUFBSSxDQUFDSSxnQ0FBZ0MsR0FBR0gsK0JBQStCO0lBQ3ZFLElBQUksQ0FBQ0ksZ0NBQWdDLEdBQUdILCtCQUErQjtFQUN6RTtFQUFDaDhCLHdJQUFBLENBQUFtVSxrQkFBQTtJQUFBbFUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTJXLDRDQUE0Q3FWLFlBQW9CLEVBQVU7TUFDeEUsSUFBTWlRLHdCQUF3QixHQUFHLElBQUksQ0FBQ0gsNkJBQTZCLEdBQUcsSUFBSTtNQUMxRSxJQUFNSSxhQUFhLEdBQUcsR0FBRyxHQUFJLEdBQUcsR0FBR2h3QixJQUFJLENBQUNGLE1BQU0sQ0FBQyxDQUFFLENBQUMsQ0FBQztNQUNuRCxJQUFNbXdCLGtCQUFrQixHQUFHandCLElBQUksQ0FBQ2t3QixHQUFHLENBQUNILHdCQUF3QixFQUFFalEsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakYsSUFBTXFRLG1DQUFtQyxHQUFHbndCLElBQUksQ0FBQzhTLEtBQUssQ0FBQ21kLGtCQUFrQixDQUFDLEdBQUdELGFBQWE7TUFDMUYsSUFBTUksZ0RBQWdELEdBQUdwd0IsSUFBSSxDQUFDRSxJQUFJLENBQUNGLElBQUksQ0FBQ3F3QixHQUFHLENBQUNGLG1DQUFtQyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUNOLGdDQUFnQyxDQUFDLENBQUM7TUFFL0osT0FBTzd2QixJQUFJLENBQUNzd0IsR0FBRyxDQUFDRixnREFBZ0QsRUFBRSxJQUFJLENBQUNOLGdDQUFnQyxDQUFDO0lBQzFHO0VBQUM7RUFBQSxPQUFBaG9CLGtCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkg7QUFDQTtBQUNBO0FBQytEO0FBRVg7QUFDRDtBQUN0QjtBQUNvQjtBQUNSO0FBRVc7QUFBQSxJQVMvQndoQixnQkFBZ0I7RUFTbkMsU0FBQUEsaUJBQVl6dUIsWUFBb0IsRUFBRWdCLGNBQThCLEVBQUU7SUFBQSxJQUFBMUgsS0FBQTtJQUFBbEIsMklBQUEsT0FBQXEyQixnQkFBQTtJQUFBcDJCLDJJQUFBLGtCQVI5QjRILG9FQUF1QixDQUFDLGtCQUFrQixDQUFDO0lBQUE1SCwySUFBQTtJQUFBQSwySUFBQSxzQ0FFaEM2SCx3RUFBOEI7SUFBQTdILDJJQUFBLDBCQUMxQixJQUFJd0csd0RBQWMsQ0FBQyxDQUFDO0lBQUF4RywySUFBQTtJQUFBQSwySUFBQSx1QkFFdkIsSUFBSUMseURBQWMsQ0FBQyxDQUFDO0lBQUFELDJJQUFBLGlDQUNmLENBQUMsQ0FBQztJQUdyRCxJQUFJLENBQUMrSCxhQUFhLEdBQUdKLFlBQVk7SUFDakMsSUFBSSxDQUFDM0csWUFBWSxDQUFDWSxHQUFHLENBQUMsSUFBSSxDQUFDeTdCLGVBQWUsQ0FBQztJQUMzQyxJQUFJLENBQUMvVyxlQUFlLEdBQUczZCxjQUFjO0lBRXJDLElBQUksQ0FBQyxJQUFJLENBQUMwMEIsZUFBZSxDQUFDMzJCLFdBQVcsRUFBRTtNQUNyQztJQUNGO0lBRUEsSUFBSSxDQUFDMUYsWUFBWSxDQUFDWSxHQUFHLENBQUMsSUFBSSxDQUFDMmtCLDJCQUEyQixDQUFDOWtCLFlBQVksQ0FBQ2dqQixTQUFTLENBQUMsVUFBQWhqQixZQUFZLEVBQUk7TUFDNUZSLEtBQUksQ0FBQ3E4QixzQkFBc0IsQ0FBQzc3QixZQUFZLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUNULFlBQVksQ0FBQ1ksR0FBRyxDQUFDLElBQUksQ0FBQ3k3QixlQUFlLENBQUM3MUIsR0FBRyxDQUFDaWQsU0FBUyxDQUFDLFVBQUE3akIsS0FBSyxFQUFJO01BQ2hFSyxLQUFJLENBQUNzOEIsc0JBQXNCLENBQUMzOEIsS0FBSyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDSSxZQUFZLENBQUNZLEdBQUcsQ0FBQyxJQUFJLENBQUN5N0IsZUFBZSxDQUFDaDJCLGFBQWEsQ0FBQ29kLFNBQVMsQ0FBQyxVQUFBN2pCLEtBQUssRUFBSTtNQUMxRUssS0FBSSxDQUFDdThCLDZCQUE2QixDQUFDNThCLEtBQUssQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQ0ksWUFBWSxDQUFDWSxHQUFHLENBQUMsSUFBSSxDQUFDeTdCLGVBQWUsQ0FBQ0ksMEJBQTBCLENBQUNoWixTQUFTLENBQUMsVUFBQTdqQixLQUFLLEVBQUk7TUFDdkZLLEtBQUksQ0FBQ3k4Qiw2Q0FBNkMsQ0FBQzk4QixLQUFLLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7RUFDTDtFQUFDSCx3SUFBQSxDQUFBMjFCLGdCQUFBO0lBQUExMUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTAyQixvQkFBQSxFQUEyQztNQUN6QyxPQUFPLElBQUk1dkIseUVBQW1CLENBQUMsSUFBSSxDQUFDSyxhQUFhLENBQUM7SUFDcEQ7RUFBQztJQUFBckgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwOEIsdUJBQStCNzdCLFlBQXFCLEVBQVE7TUFDMUQsSUFBTXRCLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNdzlCLG1CQUFtQixHQUFHLElBQUksQ0FBQ3BYLDJCQUEyQixDQUFDMWxCLHNCQUFzQixDQUFDLENBQUM7TUFFckYsSUFBSSxDQUFDeWxCLGVBQWUsQ0FBQzFkLElBQUksQ0FBQztRQUN4QlAsVUFBVSxFQUFFNUcsWUFBWSxHQUFHMEcsK0VBQWlDLEdBQUdBLCtFQUFpQztRQUNoR1UsT0FBTyxFQUFFLENBQUMxSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxJQUFJLElBQUk7UUFDMUNuSCxLQUFLLEVBQUU7VUFBQ2tJLE1BQU0sRUFBRTYwQjtRQUFtQjtNQUNyQyxDQUFDLENBQUM7TUFFRixJQUFJLENBQUM1MEIsT0FBTyxDQUFDQyxJQUFJLENBQ2Ysa0RBQWtELEVBQ2xEdkgsWUFBWSxHQUFHLFlBQVksR0FBRyxZQUFZLEVBQzFDLElBQUl3SCxtREFBUyxDQUFDMDBCLG1CQUFtQixDQUFDLENBQUN6MEIsV0FBVyxDQUFDLENBQ2pELENBQUM7SUFDSDtFQUFDO0lBQUF4SSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMjhCLHVCQUErQkssTUFBYyxFQUFRO01BQ25ELElBQU16OUIsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLElBQU0wOUIsTUFBTSxHQUFHLElBQUksQ0FBQ0Msc0JBQXNCLENBQUN0MkIsR0FBRztNQUU5QyxJQUFJLENBQUNzMkIsc0JBQXNCLENBQUN0MkIsR0FBRyxHQUFHbzJCLE1BQU07TUFFeEMsSUFBSSxDQUFDdFgsZUFBZSxDQUFDMWQsSUFBSSxDQUFDO1FBQ3hCUCxVQUFVLEVBQUVGLHVFQUF5QjtRQUNyQ1UsT0FBTyxFQUFFLENBQUMxSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxJQUFJLElBQUk7UUFDMUNuSCxLQUFLLEVBQUU7VUFBQ2tJLE1BQU0sRUFBRTgwQjtRQUFNLENBQUM7UUFDdkI5b0IsYUFBYSxFQUFFK29CLE1BQU0sR0FBRztVQUFDLzBCLE1BQU0sRUFBRSswQjtRQUFNLENBQUMsR0FBR3AzQixTQUFTO1FBQ3BEc08sUUFBUSxFQUFFO01BQ1osQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDaE0sT0FBTyxDQUFDQyxJQUFJLENBQ2YsNENBQTRDLEVBQzVDLElBQUlDLG1EQUFTLENBQUM5SSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxDQUFDLENBQUNtQixXQUFXLENBQUMsQ0FBQyxFQUNyRDAwQixNQUFNLEVBQ05DLE1BQ0YsQ0FBQztJQUNIO0VBQUM7SUFBQW45QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNDhCLDhCQUFzQ08sY0FBc0IsRUFBUTtNQUNsRSxJQUFNNTlCLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNNjlCLGNBQWMsR0FBRyxJQUFJLENBQUNGLHNCQUFzQixDQUFDejJCLGFBQWE7TUFFaEUsSUFBSSxDQUFDeTJCLHNCQUFzQixDQUFDejJCLGFBQWEsR0FBRzAyQixjQUFjO01BRTFELElBQUksQ0FBQ3pYLGVBQWUsQ0FBQzFkLElBQUksQ0FBQztRQUN4QlAsVUFBVSxFQUFFRixxRUFBdUI7UUFDbkNVLE9BQU8sRUFBRSxDQUFDMUksR0FBRyxHQUFHLElBQUksQ0FBQzRILGFBQWEsSUFBSSxJQUFJO1FBQzFDbkgsS0FBSyxFQUFFO1VBQUN3TSxNQUFNLEVBQUUyd0I7UUFBYyxDQUFDO1FBQy9CanBCLGFBQWEsRUFBRWtwQixjQUFjLEdBQUc7VUFBQzV3QixNQUFNLEVBQUU0d0I7UUFBYyxDQUFDLEdBQUd2M0I7TUFDN0QsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDc0MsT0FBTyxDQUFDQyxJQUFJLENBQ2YsMkRBQTJELEVBQzNELElBQUlDLG1EQUFTLENBQUM5SSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxDQUFDLENBQUNtQixXQUFXLENBQUMsQ0FBQyxFQUNyRDYwQixjQUFjLEVBQ2RDLGNBQ0YsQ0FBQztJQUNIO0VBQUM7SUFBQXQ5QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBODhCLDhDQUFzRE8sV0FBbUIsRUFBUTtNQUMvRSxJQUFNOTlCLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNKzlCLFdBQVcsR0FBRyxJQUFJLENBQUNKLHNCQUFzQixDQUFDTCwwQkFBMEI7TUFFMUUsSUFBSSxDQUFDSyxzQkFBc0IsQ0FBQ0wsMEJBQTBCLEdBQUdRLFdBQVc7TUFFcEUsSUFBSSxDQUFDM1gsZUFBZSxDQUFDMWQsSUFBSSxDQUFDO1FBQ3hCUCxVQUFVLEVBQUVGLG9GQUFzQztRQUNsRFUsT0FBTyxFQUFFLENBQUMxSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxJQUFJLElBQUk7UUFDMUNuSCxLQUFLLEVBQUU7VUFBQ3U5QixLQUFLLEVBQUVGO1FBQVcsQ0FBQztRQUMzQm5wQixhQUFhLEVBQUVvcEIsV0FBVyxHQUFHO1VBQUNDLEtBQUssRUFBRUQ7UUFBVyxDQUFDLEdBQUd6M0I7TUFDdEQsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDc0MsT0FBTyxDQUFDQyxJQUFJLENBQ2YscUVBQXFFLEVBQ3JFLElBQUlDLG1EQUFTLENBQUM5SSxHQUFHLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxDQUFDLENBQUNtQixXQUFXLENBQUMsQ0FBQyxFQUNyRCswQixXQUFXLEVBQ1hDLFdBQ0YsQ0FBQztJQUNIO0VBQUM7RUFBQSxPQUFBOUgsZ0JBQUE7QUFBQTs7Ozs7OztVQzNJSDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJwdWJsaXNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gT2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB7XG4gICAgICB0cnlMb2M6IHRbMF1cbiAgICB9O1xuICAgIDEgaW4gdCAmJiAoZS5jYXRjaExvYyA9IHRbMV0pLCAyIGluIHQgJiYgKGUuZmluYWxseUxvYyA9IHRbMl0sIGUuYWZ0ZXJMb2MgPSB0WzNdKSwgdGhpcy50cnlFbnRyaWVzLnB1c2goZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHQuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoZSkge1xuICAgIGlmIChlIHx8IFwiXCIgPT09IGUpIHtcbiAgICAgIHZhciByID0gZVthXTtcbiAgICAgIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZS5uZXh0KSByZXR1cm4gZTtcbiAgICAgIGlmICghaXNOYU4oZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBvID0gLTEsXG4gICAgICAgICAgaSA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytvIDwgZS5sZW5ndGg7KSBpZiAobi5jYWxsKGUsIG8pKSByZXR1cm4gbmV4dC52YWx1ZSA9IGVbb10sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaS5uZXh0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfdHlwZW9mKGUpICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgbyhnLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbyhHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBlLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0ICYmIHQuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhZSAmJiAoZSA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoZS5kaXNwbGF5TmFtZSB8fCBlLm5hbWUpKTtcbiAgfSwgZS5tYXJrID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShnKSwgdDtcbiAgfSwgZS5hd3JhcCA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IHRcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGMsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGUuYXN5bmMgPSBmdW5jdGlvbiAodCwgciwgbiwgbywgaSkge1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9IFByb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSByLnB1c2gobik7XG4gICAgcmV0dXJuIHIucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IHIubGVuZ3RoOykge1xuICAgICAgICB2YXIgdCA9IHIucG9wKCk7XG4gICAgICAgIGlmICh0IGluIGUpIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZS52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK3Iuc2xpY2UoMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBhIGRlZmluaXRpb24gZm9yICdtc0hpZGRlbicgb3IgJ3dlYmtpdEhpZGRlbicgdHlwZXNcbiAgICAvLyBSZXF1aXJlZCB0byBAdHMtaWdub3JlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuLy8gVGhpcyBmaWxlIGlzIHVzZWQgb25seSBmb3IgdGhlIHNpbGVudCBidWlsZCB0byBtb2NrIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgY2xhc3NcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxMGUrNyldKSk7IC8vIDEwME1iIG9yIGxlc3Mgb3IgbW9yZSBkZXBlbmRpbmcgb24gYXMgeW91IHdpc2ggdG8gZm9yY2UvaW52b2tlIEdDIGN5Y2xlIHJ1blxuICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XG5cbiAgICAgIGltZyA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyPy5wcm90b3R5cGU/LmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BBUkFNRVRFUlNfXzoge1xuICBkaXNjb3Zlcnk6IElEaXNjb3ZlcnlQYXJhbWV0ZXI7XG59O1xuXG5pbnRlcmZhY2UgSURpc2NvdmVyeVBhcmFtZXRlcntcbiAgaW50ZW50aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbWV0ZXJzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Rpc2NvdmVyeVBhcmFtZXRlcnM6IElEaXNjb3ZlcnlQYXJhbWV0ZXIgO1xuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5UGFyYW1ldGVycygpOiBJRGlzY292ZXJ5UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBfX1BBUkFNRVRFUlNfXztcblxuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9ICdkaXNjb3ZlcnknIGluIHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLmRpc2NvdmVyeSA6IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfVxuICB9XG59XG5cblBhcmFtZXRlcnMuYXBwbHlQYXJhbWV0ZXJzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHJlc3BvbnNlKSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gbWF4QnVmZmVyZWRSZWNvcmRzKSB7XG4gICAgICAgICAgdGhpcy5fZmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ldHJpY3MgPSBbLi4ubWV0cmljc01lc3NhZ2VzLCAuLi50aGlzLl9tZXRyaWNzXTtcblxuICAgICAgICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgICAgICAgfSwgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fZmFpbHVyZUNvdW50KSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RvbyBtYW55IGNhY2hlZCBtZXRyaWMgcmVjb3JkcyBbJXNdLCBkcm9wcGluZyBbJXNdIHJlY29yZHMnLCB0aGlzLl9tZXRyaWNzLmxlbmd0aCwgbWV0cmljc01lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZmFpbHVyZUNvdW50ID0gMDtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSh7c3RhdHVzfTogUmVzcG9uc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL141XFxkezJ9JC8udGVzdChzdGF0dXMudG9TdHJpbmcoKSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc307XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbilcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjUHVibGlzaFN0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjUHVibGlzaFN0YXRpc3RpYyB7XG4gIGxhc3RQYWNrZXRTZW50VGltZXN0YW1wPzogbnVtYmVyO1xuICBzc3JjOiBzdHJpbmc7XG4gIG1lZGlhVHlwZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNTZW50OiBudW1iZXI7XG4gIHBhY2tldHNTZW50OiBudW1iZXI7XG4gIHJldHJhbnNtaXR0ZWRCeXRlc1NlbnQ/OiBudW1iZXI7XG4gIGZpckNvdW50PzogbnVtYmVyO1xuICBmcmFtZUhlaWdodD86IG51bWJlcjtcbiAgZnJhbWVXaWR0aD86IG51bWJlcjtcbiAgZnJhbWVzRW5jb2RlZD86IG51bWJlcjtcbiAgZnJhbWVzU2VudD86IG51bWJlcjtcbiAgaGVhZGVyQnl0ZXNTZW50PzogbnVtYmVyO1xuICBodWdlRnJhbWVzU2VudD86IG51bWJlcjtcbiAgcGxpQ291bnQ/OiBudW1iZXI7XG4gIHFwU3VtPzogbnVtYmVyO1xuICB0b3RhbEVuY29kZVRpbWU/OiBudW1iZXI7XG4gIHRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0PzogbnVtYmVyO1xuICBjb2RlYzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y1B1Ymxpc2hNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9hdmFpbGFibGVUcmFja3M6IHtcbiAgICBhdWRpbzogYm9vbGVhbjtcbiAgICB2aWRlbzogYm9vbGVhbjtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGNvbnN0IHBhcnNlZExvY2FsRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uLnNkcCk7XG4gICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjO1xuICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWM7XG5cbiAgICAgIHRoaXMuX2F2YWlsYWJsZVRyYWNrcyA9IHtcbiAgICAgICAgYXVkaW86IHBhcnNlZExvY2FsRGVzY3JpcHRpb24uaXNBdWRpb1RyYWNrRW5hYmxlZCAmJiBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5pc0F1ZGlvVHJhY2tFbmFibGVkLFxuICAgICAgICB2aWRlbzogcGFyc2VkTG9jYWxEZXNjcmlwdGlvbi5pc1ZpZGVvVHJhY2tFbmFibGVkICYmIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmlzVmlkZW9UcmFja0VuYWJsZWRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB7XG4gICAgICAgIGF1ZGlvOiAwLFxuICAgICAgICB2aWRlbzogMFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgPSBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ291dGJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl9hdmFpbGFibGVUcmFja3Nba2luZF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1NlbnQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzU2VudCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1NlbnQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzU2VudDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1NlbnQ6IHJlcG9ydC5ieXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzU2VudDogcmVwb3J0LnBhY2tldHNTZW50LFxuICAgICAgICAgICAgICAgICAgcmV0cmFuc21pdHRlZEJ5dGVzU2VudDogcmVwb3J0LnJldHJhbnNtaXR0ZWRCeXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmaXJDb3VudCddID0gcmVwb3J0LmZpckNvdW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVIZWlnaHQnXSA9IHJlcG9ydC5mcmFtZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lV2lkdGgnXSA9IHJlcG9ydC5mcmFtZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRW5jb2RlZCddID0gcmVwb3J0LmZyYW1lc0VuY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNTZW50J10gPSByZXBvcnQuZnJhbWVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2hlYWRlckJ5dGVzU2VudCddID0gcmVwb3J0LmhlYWRlckJ5dGVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2h1Z2VGcmFtZXNTZW50J10gPSByZXBvcnQuaHVnZUZyYW1lc1NlbnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydwbGlDb3VudCddID0gcmVwb3J0LnBsaUNvdW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsncXBTdW0nXSA9IHJlcG9ydC5xcFN1bTtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3RvdGFsRW5jb2RlVGltZSddID0gcmVwb3J0LnRvdGFsRW5jb2RlVGltZTtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3RvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0J10gPSByZXBvcnQudG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRW5jb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNFbmNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoJ209Jyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uU3RhdGUoKTogUlRDUGVlckNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZm9yYmlkZGVuLXRhZycgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwNjpcbiAgICAgICAgcmV0dXJuICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2ljZVNlcnZlcnM6IFtdfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSBjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIHVybHM6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9IGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5O1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9IGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjQ29uZmlndXJhdGlvbjtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuL1B1Ymxpc2hlclN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IFB1Ymxpc2hlckNvbnRleHQgZnJvbSAnLi9QdWJsaXNoZXJDb250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBSZWFsVGltZVB1Ymxpc2hlciBmcm9tICcuL1JlYWxUaW1lUHVibGlzaGVyJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5jb25zdCBvbmVIb3VySW5NaWxsaXNlY29uZHMgPSAzNjAwICogMTAwMDtcbmNvbnN0IG1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDIgKiBvbmVIb3VySW5NaWxsaXNlY29uZHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1B1Ymxpc2hlcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHVibGlzaGVyU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxQdWJsaXNoZXJTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UHVibGlzaGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcblxuICBjb25zdHJ1Y3RvcihtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dCA9IG5ldyBQdWJsaXNoZXJDb250ZXh0KG5hbWUpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IG5ldyBQZWVyQ29ubmVjdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX3B1Ymxpc2hlclN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxQdWJsaXNoZXJTdGF0ZT4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UHVibGlzaGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcHVibGlzaGVyQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hlckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHB1Ymxpc2hpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQdWJsaXNoaW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZS5jbG9zZSgpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBzZXRNZWRpYVN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2gobWVkaWFUcmFjayA9PiB7XG4gICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZS5nZXRTZW5kZXJzKCkuZm9yRWFjaChzZW5kZXIgPT4ge1xuICAgICAgICAgIGlmIChtZWRpYVRyYWNrLmtpbmQgPT09IHNlbmRlcj8udHJhY2s/LmtpbmQgJiYgbWVkaWFUcmFjay5pZCAhPT0gc2VuZGVyLnRyYWNrLmlkKSB7XG4gICAgICAgICAgICBzZW5kZXIucmVwbGFjZVRyYWNrKG1lZGlhVHJhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gUHVibGlzaGVyU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmcpIHtcbiAgICAgICAgICBEaXNjb3ZlcnkuY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QdWJsaXNoZXIgPSBuZXcgUmVhbFRpbWVQdWJsaXNoZXIodGhpcy5fcHVibGlzaGVyQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHN0cmVhbVB1Ymxpc2hlci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBwdWJsaXNoaW5nJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID09PSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCA9IDA7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIGlmICghdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwgPSBEYXRlLm5vdygpIC0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIGlmIChtYXhSZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsSW5NaWxsaXNlY29uZHMgPD0gcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10gWyVzXSBhZnRlciBleGNlZWRpbmcgdGltZW91dCcsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUsIFB1Ymxpc2hlclN0YXRlW3RoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSwgUHVibGlzaGVyU3RhdGVbdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBwdWJsaXNoaW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIGNoYW5uZWwgbm90IGZvdW5kLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtQdWJsaXNoU3RhdHVzfSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi8uLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IHtJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNQdWJsaXNoTW9uaXRvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlckNvbnRleHQge1xuICBwdWJsaXNoZXJJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBwdWJsaXNoZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHN0YXRlOiBTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaXNoaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPjtcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIHN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5wdWJsaXNoZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucHVibGlzaGVySW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxQdWJsaXNoZXJTdGF0ZT4oUHVibGlzaGVyU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucHVibGlzaGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lICYmIG5hbWUubGVuZ3RoID8gbmFtZSA6IHRoaXMuZ2VuZXJhdGVTY3JlZW5OYW1lKCk7XG4gICAgdGhpcy5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogUHVibGlzaFN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1czogUHVibGlzaFN0YXR1cyk6IFB1Ymxpc2hlclN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnbWlzc2luZy1jaGFubmVsLW9yLXJvb20taWQnOlxuICAgICAgY2FzZSAnZm9yYmlkZGVuLXRhZyc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVTY3JlZW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZ3MucmFuZG9tKDEyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBQdWJsaXNoZXJTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUHVibGlzaGluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgTm90Rm91bmQsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yLFxuICBDb25uZWN0aW9uRXJyb3IsXG4gIENsaWVudFN0YXJ0RXJyb3IsXG4gIEVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1Ymxpc2hlclN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IFB1Ymxpc2hlciBmcm9tICcuL1B1Ymxpc2hlcic7XG5cbnR5cGUgQ3JlYXRlUHVibGlzaGVyT3B0aW9ucyA9IHtcbiAgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtO1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgbmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1Ymxpc2hlcnMge1xuICBzdGF0aWMgY3JlYXRlUHVibGlzaGVyKG9wdGlvbnM6IENyZWF0ZVB1Ymxpc2hlck9wdGlvbnMpOiBQdWJsaXNoZXIge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHVibGlzaGVyKG9wdGlvbnMubWVkaWFTdHJlYW0sIG9wdGlvbnMudG9rZW4sIG9wdGlvbnMubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUHVibGlzaGVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFJ0Y1B1Ymxpc2hNb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNQdWJsaXNoTW9uaXRvcic7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuL1B1Ymxpc2hlclN0YXRlJztcbmltcG9ydCBQdWJsaXNoZXJDb250ZXh0IGZyb20gJy4vUHVibGlzaGVyQ29udGV4dCc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3Qgc29mdFJlc3RhcnRJbnRlcnZhbCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lUHVibGlzaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lUHVibGlzaGVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1Ymxpc2hlckNvbnRleHQ6IFB1Ymxpc2hlckNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKHB1Ymxpc2hlckNvbnRleHQ6IFB1Ymxpc2hlckNvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dCA9IHB1Ymxpc2hlckNvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLk9mZmxpbmU7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKSxcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCdzZW5kb25seScpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID4gMCkge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQucHVibGlzaCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm5hbWUsIHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlfSkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gUHVibGlzaCBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5tYXBQdWJsaXNoU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZFN0cmVhbSh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgYW5zd2VyLnNkcCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLnNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbSwgYW5zd2VyKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCh7c3RhdHVzLCBzZXNzaW9uRGVzY3JpcHRpb259KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZztcbiAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNQdWJsaXNoTW9uaXRvciA9IG5ldyBSdGNQdWJsaXNoTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChydGNQdWJsaXNoTW9uaXRvcik7XG5cbiAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHJ0Y1B1Ymxpc2hNb25pdG9yLnJ0Y1N0YXRpc3RpYy5zdWJzY3JpYmUoc3RhdGlzdGljcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICBjb25zdCByZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgfSwgc29mdFJlc3RhcnRJbnRlcnZhbCk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gY2xlYXJUaW1lb3V0KHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCkpKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnZGlzY29ubmVjdGVkJyB8fCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9LCBzb2Z0UmVzdGFydEludGVydmFsKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IGNsZWFyVGltZW91dChyZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQpKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IFB1Ymxpc2hlclN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBQdWJsaXNoZXJzIGZyb20gJy4vUHVibGlzaGVycyc7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgUHVibGlzaGVycyxcbiAgUHVibGlzaGVyU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBQdWJsaXNoZXJzLFxuICBQdWJsaXNoZXJTdGF0ZVxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpblxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gaXRlbS5sZW5ndGggOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9wdWJsaXNoL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
8406
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9OZXR3b3JrTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlVG9rZW4udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y1B1Ymxpc2hNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1B1Ymxpc2hlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1B1Ymxpc2hlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1JlYWxUaW1lUHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9pbmRleC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfbmF2aWdhdG9yIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfY2xhc3MiLCJpbmNsdWRlcyIsIlBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIiLCJFcnJvciIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb24iLCJGZWF0dXJlRW5hYmxlbWVudCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwidW5kZWZpbmVkIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJfUlRDUnRwUmVjZWl2ZXIiLCJfUlRDUnRwUmVjZWl2ZXIkcHJvdG8iLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImxvZ2dpbmdMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJtYXhCdWZmZXJlZFJlY29yZHMiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl94IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJhcHBseSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y1B1Ymxpc2hNb25pdG9yIiwiX3VwZGF0ZVN0YXRpc3RpYyIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwicGFyc2VkTG9jYWxEZXNjcmlwdGlvbiIsIlNkcFBhcnNlciIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwic2RwIiwicGFyc2VkUmVtb3RlRGVzY3JpcHRpb24iLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJfYXZhaWxhYmxlVHJhY2tzIiwiYXVkaW8iLCJpc0F1ZGlvVHJhY2tFbmFibGVkIiwidmlkZW8iLCJpc1ZpZGVvVHJhY2tFbmFibGVkIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFNlbnRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNTZW50IiwicHJldmlvdXNCeXRlc1NlbnQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsImZsb29yIiwic3NyYyIsInBhY2tldHNTZW50IiwicmV0cmFuc21pdHRlZEJ5dGVzU2VudCIsImdldENvZGVjQnlUeXBlIiwiZmlyQ291bnQiLCJmcmFtZUhlaWdodCIsImZyYW1lV2lkdGgiLCJmcmFtZXNFbmNvZGVkIiwiZnJhbWVzU2VudCIsImhlYWRlckJ5dGVzU2VudCIsImh1Z2VGcmFtZXNTZW50IiwicGxpQ291bnQiLCJxcFN1bSIsInRvdGFsRW5jb2RlVGltZSIsInRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0IiwiZnBzIiwicm91bmQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIl9jcmVhdGVPZmZlciIsIl9jcmVhdGVBbnN3ZXIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlciIsIl94MiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJfeDMiLCJkZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0U2VuZGVycyIsImdldFJlY2VpdmVycyIsInNlbGVjdG9yIiwiZ2V0U3RhdHNMZWdhY3kiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJnZXRUcmFja3MiLCJ0cmFjayIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJTdGF0ZUNvbnRleHQiLCJpc1N0YXJ0aW5nIiwiaXNEaXNwb3NlZCIsIlRva2VuQ29udGV4dCIsInRva2VuRXhwaXJpbmciLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIkRpc2NvdmVyeSIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsIl91cmkiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsIm1hcCIsImVuZFBvaW50IiwiRW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJzZGtWZXJzaW9uIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl9waW5nIiwiX3N1YnNjcmliZSIsIl9wdWJsaXNoIiwiX2xpbWl0Qml0cmF0ZSIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiX2Rlc3Ryb3lTdHJlYW0iLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsInN0YXJ0IiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImZhaWx1cmVDb3VudCIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwiZmluYWxseSIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwicHVibGlzaCIsIl94NSIsIl94NiIsIl94NyIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJzdHJlYW0iLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwibGltaXRCaXRyYXRlIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfY2FsbGVlNSIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJfdGhpczUiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfY2FsbGVlNiIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJfdGhpczYiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiZGVzdHJveVN0cmVhbSIsIl94MTgiLCJfeDE5IiwiX2NhbGxlZTciLCJfdGhpczciLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsIl94MjAiLCJfeDIxIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJzZW5kQmVhY29uIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX3gyMiIsIl94MjMiLCJfY2FsbGVlOSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImpzb24iLCJsYWciLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjQiLCJfeDI1IiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfeDI2IiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI3IiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI4IiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIm9uZUhvdXJJbk1pbGxpc2Vjb25kcyIsIm1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIlB1Ymxpc2hlciIsIl9zdG9wIiwiX2Rpc3Bvc2UiLCJfc3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfdG9rZW5Db250ZXh0IiwiX3B1Ymxpc2hlckNvbnRleHQiLCJQdWJsaXNoZXJDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfcHVibGlzaGVyU3RhcnRUaW1lIiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVB1Ymxpc2hpbmciLCJwdWJsaXNoaW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwicHVibGlzaGVyRGlzcG9zYWJsZXMiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQdWJsaXNoZXJTdGF0ZSIsImRpc3Bvc2FibGVzIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwiZ2V0VXJpIiwicHJvY2Vzc1N0YXJ0Iiwic2V0TWVkaWFTdHJlYW0iLCJtZWRpYVRyYWNrIiwic2VuZGVyIiwiX3NlbmRlciR0cmFjayIsInJlcGxhY2VUcmFjayIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QdWJsaXNoZXIiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiUmVhbFRpbWVQdWJsaXNoZXIiLCJzdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsInJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwiLCJwdWJsaXNoZXJJbml0aWFsaXphdGlvbiIsImdlbmVyYXRlU2NyZWVuTmFtZSIsImFwcGx5U3RhdHVzIiwibWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzIiwiUHVibGlzaGVycyIsImNyZWF0ZVB1Ymxpc2hlciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwic29mdFJlc3RhcnRJbnRlcnZhbCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJwdWJsaXNoZXJDb250ZXh0IiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwib25MaW5lIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjMkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiX3JlZjQiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsIl9yZWY1IiwicmV0cnlDYWxsYmFjayIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiYW5zd2VyIiwiX3JlZjYiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvUHVibGlzaGVyU3RhdHVzIiwicnRjUHVibGlzaE1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJzdGF0aXN0aWNzIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfb2JqZWN0U3ByZWFkIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQiLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJfX0JVSUxEX1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsIl9zZW5kTG9nc0lmQWJsZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwiZHVyYXRpb24iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwib2Zmc2V0IiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwicG93IiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtYXgiLCJtaW4iLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNML0Y7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7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QUFDTDtBQUNBO0FBQ0EsYUFBYTtBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUMxQ25ILEtBQUssRUFBRTtVQUFDdTlCLEtBQUssRUFBRUY7UUFBVyxDQUFDO1FBQzNCbHBCLGFBQWEsRUFBRW1wQixXQUFXLEdBQUc7VUFBQ0MsS0FBSyxFQUFFRDtRQUFXLENBQUMsR0FBR3ozQjtNQUN0RCxDQUFDLENBQUM7TUFFRixJQUFJLENBQUNzQyxPQUFPLENBQUNDLElBQUksQ0FDZixxRUFBcUUsRUFDckUsSUFBSUMsbURBQVMsQ0FBQzlJLEdBQUcsR0FBRyxJQUFJLENBQUM0SCxhQUFhLENBQUMsQ0FBQ21CLFdBQVcsQ0FBQyxDQUFDLEVBQ3JEKzBCLFdBQVcsRUFDWEMsV0FDRixDQUFDO0lBQ0g7RUFBQztFQUFBLE9BQUF6SCxnQkFBQTtBQUFBOzs7Ozs7O1VDM0lIO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3JCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsZ0NBQWdDLFlBQVk7V0FDNUM7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6InB1Ymxpc2guanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTtcbiAgICByZXR1cm4gci5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrci5zbGljZSgxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG4vLyBUaGlzIGZpbGUgaXMgdXNlZCBvbmx5IGZvciB0aGUgc2lsZW50IGJ1aWxkIHRvIG1vY2sgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBjbGFzc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlLFxuICAgICAgJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCc6IHRydWUsXG4gICAgICAncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJzogdHJ1ZVxuICAgIH07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcblxuICAgICAgaW1nID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IFVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXI/LnByb3RvdHlwZT8uY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5jb25zdCBtYXhCdWZmZXJlZFJlY29yZHMgPSAyMDQ4O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignTWV0cmljc1NlcnZpY2UnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9mYWlsdXJlQ291bnQgPSAwO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBmYWxzZSk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uICYmICFlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfTtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNQdWJsaXNoU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNQdWJsaXNoU3RhdGlzdGljIHtcbiAgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA/OiBudW1iZXI7XG4gIHNzcmM6IHN0cmluZztcbiAgbWVkaWFUeXBlOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1NlbnQ6IG51bWJlcjtcbiAgcGFja2V0c1NlbnQ6IG51bWJlcjtcbiAgcmV0cmFuc21pdHRlZEJ5dGVzU2VudD86IG51bWJlcjtcbiAgZmlyQ291bnQ/OiBudW1iZXI7XG4gIGZyYW1lSGVpZ2h0PzogbnVtYmVyO1xuICBmcmFtZVdpZHRoPzogbnVtYmVyO1xuICBmcmFtZXNFbmNvZGVkPzogbnVtYmVyO1xuICBmcmFtZXNTZW50PzogbnVtYmVyO1xuICBoZWFkZXJCeXRlc1NlbnQ/OiBudW1iZXI7XG4gIGh1Z2VGcmFtZXNTZW50PzogbnVtYmVyO1xuICBwbGlDb3VudD86IG51bWJlcjtcbiAgcXBTdW0/OiBudW1iZXI7XG4gIHRvdGFsRW5jb2RlVGltZT86IG51bWJlcjtcbiAgdG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQ/OiBudW1iZXI7XG4gIGNvZGVjOiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZTogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjUHVibGlzaE1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX2F2YWlsYWJsZVRyYWNrczoge1xuICAgIGF1ZGlvOiBib29sZWFuO1xuICAgIHZpZGVvOiBib29sZWFuO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgY29uc3QgcGFyc2VkTG9jYWxEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24uc2RwKTtcbiAgICAgIGNvbnN0IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmF1ZGlvQ29kZWM7XG4gICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYztcblxuICAgICAgdGhpcy5fYXZhaWxhYmxlVHJhY2tzID0ge1xuICAgICAgICBhdWRpbzogcGFyc2VkTG9jYWxEZXNjcmlwdGlvbi5pc0F1ZGlvVHJhY2tFbmFibGVkICYmIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmlzQXVkaW9UcmFja0VuYWJsZWQsXG4gICAgICAgIHZpZGVvOiBwYXJzZWRMb2NhbERlc2NyaXB0aW9uLmlzVmlkZW9UcmFja0VuYWJsZWQgJiYgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uaXNWaWRlb1RyYWNrRW5hYmxlZFxuICAgICAgfTtcblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHtcbiAgICAgICAgYXVkaW86IDAsXG4gICAgICAgIHZpZGVvOiAwXG4gICAgICB9O1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnb3V0Ym91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX2F2YWlsYWJsZVRyYWNrc1traW5kXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzU2VudCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNTZW50ID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzU2VudCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNTZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzU2VudDogcmVwb3J0LmJ5dGVzU2VudCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNTZW50OiByZXBvcnQucGFja2V0c1NlbnQsXG4gICAgICAgICAgICAgICAgICByZXRyYW5zbWl0dGVkQnl0ZXNTZW50OiByZXBvcnQucmV0cmFuc21pdHRlZEJ5dGVzU2VudCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wIHx8IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRTZW50VGltZXN0YW1wIHx8IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZpckNvdW50J10gPSByZXBvcnQuZmlyQ291bnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZUhlaWdodCddID0gcmVwb3J0LmZyYW1lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVXaWR0aCddID0gcmVwb3J0LmZyYW1lV2lkdGg7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNFbmNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRW5jb2RlZDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc1NlbnQnXSA9IHJlcG9ydC5mcmFtZXNTZW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnaGVhZGVyQnl0ZXNTZW50J10gPSByZXBvcnQuaGVhZGVyQnl0ZXNTZW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnaHVnZUZyYW1lc1NlbnQnXSA9IHJlcG9ydC5odWdlRnJhbWVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3BsaUNvdW50J10gPSByZXBvcnQucGxpQ291bnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydxcFN1bSddID0gcmVwb3J0LnFwU3VtO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsndG90YWxFbmNvZGVUaW1lJ10gPSByZXBvcnQudG90YWxFbmNvZGVUaW1lO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsndG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQnXSA9IHJlcG9ydC50b3RhbEVuY29kZWRCeXRlc1RhcmdldDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNFbmNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0VuY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgnbT0nKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRSZWNlaXZlcnMoKTogUlRDUnRwUmVjZWl2ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhY2sodHJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0O1xuICB9XG5cbiAgc3RhdGljIGdldCBza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyKSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IFVSTCB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlciAmJiB0ZW5hbmN5KSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IHRlbmFuY3kgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShEaXNjb3ZlcnlVcmkudXJpLnZhbHVlKTtcbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uID0gU0RLLl9tZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LW1ldHJpY3MtbGV2ZWwnKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0Jyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcycpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGAke2Jhc2VVUklWYWx1ZX0vcGNhc3QvZW5kUG9pbnRzYDtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJlxuICAgICAgICBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICBTREsuZGlzcG9zZSgpO1xufSk7XG5cblNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmk6IFVSTCk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5jb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5LnByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5cbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMjAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRGlzY292ZXJ5Jyk7XG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfdXJpOiBVUkw7XG5cbiAgY29uc3RydWN0b3IodXJpOiBVUkwpIHtcbiAgICBpZiAoIXVyaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdXJpJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZSh1cmkudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJOZWFyYnlFbmRQb2ludHModXJpOiBVUkwsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8RW5kUG9pbnRbXT4ge1xuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdGltZW91dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaXNjb3ZlcnkgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBVUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmwuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoUmVzcG9uc2UsXG4gIElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0LFxuICBQdWJsaXNoU3RhdHVzXG59IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDc7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA2OlxuICAgICAgICByZXR1cm4gJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgUHVibGlzaGVyQ29udGV4dCBmcm9tICcuL1B1Ymxpc2hlckNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFJlYWxUaW1lUHVibGlzaGVyIGZyb20gJy4vUmVhbFRpbWVQdWJsaXNoZXInO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcbmNvbnN0IG9uZUhvdXJJbk1pbGxpc2Vjb25kcyA9IDM2MDAgKiAxMDAwO1xuY29uc3QgbWF4UmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMiAqIG9uZUhvdXJJbk1pbGxpc2Vjb25kcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVyIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUHVibGlzaGVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+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+IHtcbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLmdldFNlbmRlcnMoKS5mb3JFYWNoKHNlbmRlciA9PiB7XG4gICAgICAgICAgaWYgKG1lZGlhVHJhY2sua2luZCA9PT0gc2VuZGVyPy50cmFjaz8ua2luZCAmJiBtZWRpYVRyYWNrLmlkICE9PSBzZW5kZXIudHJhY2suaWQpIHtcbiAgICAgICAgICAgIHNlbmRlci5yZXBsYWNlVHJhY2sobWVkaWFUcmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBQdWJsaXNoZXJTdGF0ZS5FcnJvciB8fCBzdGF0ZSA9PT0gUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVB1Ymxpc2hlciA9IG5ldyBSZWFsVGltZVB1Ymxpc2hlcih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICByZXR1cm4gc3RyZWFtUHVibGlzaGVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5DbGllbnRTdGFydEVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHB1Ymxpc2hpbmcnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPT09IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyA9IDA7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCByZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsID0gMDtcblxuICAgIHN3aXRjaCAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgaWYgKCF0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCA9IERhdGUubm93KCkgLSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHM7XG5cbiAgICAgICAgaWYgKG1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA8PSByZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXSBbJXNdIGFmdGVyIGV4Y2VlZGluZyB0aW1lb3V0JywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSwgUHVibGlzaGVyU3RhdGVbdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlLCBQdWJsaXNoZXJTdGF0ZVt0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHB1Ymxpc2hpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCBkdWUgdG8gY2hhbm5lbCBub3QgZm91bmQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuL1B1Ymxpc2hlclN0YXRlJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge1B1Ymxpc2hTdGF0dXN9IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uLy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQge0lSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y1B1Ymxpc2hNb25pdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVyQ29udGV4dCB7XG4gIHB1Ymxpc2hlckluaXRpYWxpemF0aW9uOiBEYXRlO1xuICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHB1Ymxpc2hlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgc3RhdGU6IFN1YmplY3Q8UHVibGlzaGVyU3RhdGU+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1Ymxpc2hpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+O1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcbiAgc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnB1Ymxpc2hlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5wdWJsaXNoZXJJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPihQdWJsaXNoZXJTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wdWJsaXNoaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgJiYgbmFtZS5sZW5ndGggPyBuYW1lIDogdGhpcy5nZW5lcmF0ZVNjcmVlbk5hbWUoKTtcbiAgICB0aGlzLnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBQdWJsaXNoU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBtYXBQdWJsaXNoU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzOiBQdWJsaXNoU3RhdHVzKTogUHVibGlzaGVyU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc6XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmVlbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5ncy5yYW5kb20oMTIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIFB1Ymxpc2hlclN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQdWJsaXNoaW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBOb3RGb3VuZCxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgQ2xpZW50U3RhcnRFcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaGVyU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgUHVibGlzaGVyIGZyb20gJy4vUHVibGlzaGVyJztcblxudHlwZSBDcmVhdGVQdWJsaXNoZXJPcHRpb25zID0ge1xuICBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW07XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICBuYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVycyB7XG4gIHN0YXRpYyBjcmVhdGVQdWJsaXNoZXIob3B0aW9uczogQ3JlYXRlUHVibGlzaGVyT3B0aW9ucyk6IFB1Ymxpc2hlciB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQdWJsaXNoZXIob3B0aW9ucy5tZWRpYVN0cmVhbSwgb3B0aW9ucy50b2tlbiwgb3B0aW9ucy5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQdWJsaXNoZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgUnRjUHVibGlzaE1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y1B1Ymxpc2hNb25pdG9yJztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IFB1Ymxpc2hlckNvbnRleHQgZnJvbSAnLi9QdWJsaXNoZXJDb250ZXh0JztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBzb2Z0UmVzdGFydEludGVydmFsID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVQdWJsaXNoZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVQdWJsaXNoZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IocHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0ID0gcHVibGlzaGVyQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuT2ZmbGluZTtcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3NlbmRvbmx5JylcbiAgICAgICAgLnRoZW4oKHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn0pID0+IHtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2NhbE9mZmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHwgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPiAwKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5wdWJsaXNoKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubmFtZSwgdG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2V9KSA9PiB7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBQdWJsaXNoIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm1hcFB1Ymxpc2hTdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkU3RyZWFtKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW0sIGNhbmRpZGF0ZXMsIGRpc2NvdmVyeUNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHtzdGF0dXMsIG9wdGlvbnN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYW5zd2VyID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIuc2RwKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nO1xuICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y1B1Ymxpc2hNb25pdG9yID0gbmV3IFJ0Y1B1Ymxpc2hNb25pdG9yKHBlZXJDb25uZWN0aW9uLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y1B1Ymxpc2hNb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjUHVibGlzaE1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICB9LCBzb2Z0UmVzdGFydEludGVydmFsKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBjbGVhclRpbWVvdXQocmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0KSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnIHx8IHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0sIHNvZnRSZXN0YXJ0SW50ZXJ2YWwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gY2xlYXJUaW1lb3V0KHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogUHVibGlzaGVyU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IFB1Ymxpc2hlcnMgZnJvbSAnLi9QdWJsaXNoZXJzJztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuL1B1Ymxpc2hlclN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBQdWJsaXNoZXJzLFxuICBQdWJsaXNoZXJTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIFB1Ymxpc2hlcnMsXG4gIFB1Ymxpc2hlclN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX0JVSUxEX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fQlVJTERfVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL3B1Ymxpc2gvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
|