@phenixrts/sdk 2022.0.2 → 2022.0.5

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.
Files changed (50) hide show
  1. package/dist/debug/channels.js +277 -135
  2. package/dist/debug/full.js +277 -135
  3. package/dist/debug/groups.js +1 -1
  4. package/dist/debug/messaging.js +1 -1
  5. package/dist/debug/publish.js +1 -1
  6. package/dist/debug.private/channels.js +277 -135
  7. package/dist/debug.private/full.js +277 -135
  8. package/dist/debug.private/groups.js +1 -1
  9. package/dist/debug.private/messaging.js +1 -1
  10. package/dist/debug.private/publish.js +1 -1
  11. package/dist/es5.debug.private/channels.js +276 -135
  12. package/dist/es5.debug.private/full.js +276 -135
  13. package/dist/es5.debug.private/groups.js +1 -1
  14. package/dist/es5.debug.private/messaging.js +1 -1
  15. package/dist/es5.debug.private/publish.js +1 -1
  16. package/dist/legacy.debug/channels.js +277 -135
  17. package/dist/legacy.debug/full.js +277 -135
  18. package/dist/legacy.debug/groups.js +1 -1
  19. package/dist/legacy.debug/messaging.js +1 -1
  20. package/dist/legacy.debug/publish.js +1 -1
  21. package/dist/legacy.debug.private/channels.js +276 -135
  22. package/dist/legacy.debug.private/full.js +276 -135
  23. package/dist/legacy.debug.private/groups.js +1 -1
  24. package/dist/legacy.debug.private/messaging.js +1 -1
  25. package/dist/legacy.debug.private/publish.js +1 -1
  26. package/dist/legacy.min/channels.js +1 -1
  27. package/dist/legacy.min/channels.js.map +1 -1
  28. package/dist/legacy.min/full.js +1 -1
  29. package/dist/legacy.min/full.js.map +1 -1
  30. package/dist/legacy.min/groups.js +1 -1
  31. package/dist/legacy.min/messaging.js +1 -1
  32. package/dist/legacy.min/publish.js +1 -1
  33. package/dist/min/channels.js +1 -1
  34. package/dist/min/channels.js.map +1 -1
  35. package/dist/min/full.js +1 -1
  36. package/dist/min/full.js.map +1 -1
  37. package/dist/min/groups.js +1 -1
  38. package/dist/min/messaging.js +1 -1
  39. package/dist/min/publish.js +1 -1
  40. package/dist/min.private/channels.js +1 -1
  41. package/dist/min.private/channels.js.map +1 -1
  42. package/dist/min.private/full.js +1 -1
  43. package/dist/min.private/full.js.map +1 -1
  44. package/dist/min.private/groups.js +1 -1
  45. package/dist/min.private/messaging.js +1 -1
  46. package/dist/min.private/publish.js +1 -1
  47. package/dist/types/rtc/RtcConnectionMonitor.d.ts +1 -0
  48. package/dist/types/sdk/channels/Channel.d.ts +4 -2
  49. package/dist/types/sdk/channels/ChannelContext.d.ts +1 -0
  50. package/package.json +1 -1
@@ -3329,36 +3329,61 @@ var RtcConnectionMonitor = /*#__PURE__*/function () {
3329
3329
 
3330
3330
  if (stats) {
3331
3331
  var roundTripTime = _this._estimatedRoundTripTime;
3332
- stats.forEach(function (i) {
3333
- if (i.type === 'candidate-pair' && i.currentRoundTripTime) {
3334
- roundTripTime = i.currentRoundTripTime * 1000;
3332
+ var lastPacketReceivedTimestamp;
3333
+ stats.forEach(function (report) {
3334
+ if (report.type === 'candidate-pair' && report.currentRoundTripTime) {
3335
+ roundTripTime = report.currentRoundTripTime * 1000;
3336
+
3337
+ if (rtcStats['audio']) {
3338
+ rtcStats['audio'].roundTripTime = roundTripTime;
3339
+ }
3340
+
3341
+ if (rtcStats['video']) {
3342
+ rtcStats['video'].roundTripTime = roundTripTime;
3343
+ }
3335
3344
  }
3336
3345
 
3337
- if (i.type === 'inbound-rtp') {
3338
- var _kind = i.kind || i.mediaType || getKindForSafari11(i);
3346
+ if (report.type === 'candidate-pair' && report.lastPacketReceivedTimestamp) {
3347
+ lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp;
3348
+
3349
+ if (rtcStats['audio']) {
3350
+ rtcStats['audio'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;
3351
+ }
3352
+
3353
+ if (rtcStats['video']) {
3354
+ rtcStats['video'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;
3355
+ }
3356
+ }
3357
+
3358
+ if (report.type === 'inbound-rtp') {
3359
+ var _kind = report.kind || report.mediaType || getKindForSafari11(report);
3339
3360
 
3340
3361
  var codec = '';
3341
3362
  stats.forEach(function (item) {
3342
- if (item.id === i.codecId) {
3363
+ if (item.id === report.codecId) {
3343
3364
  codec = item.mimeType;
3344
3365
  }
3345
3366
  });
3346
3367
 
3347
3368
  if (_kind && _this._tracksToMonitor.includes(_kind)) {
3348
3369
  rtcStats[_kind] = {
3349
- ssrc: i.ssrc,
3370
+ ssrc: report.ssrc,
3350
3371
  mediaType: _kind,
3351
- timestamp: i.timestamp,
3352
- bytesReceived: i.bytesReceived,
3353
- packetsLost: i.packetsLost,
3354
- packetsReceived: i.packetsReceived,
3372
+ timestamp: report.timestamp,
3373
+ bytesReceived: report.bytesReceived,
3374
+ packetsLost: report.packetsLost,
3375
+ packetsReceived: report.packetsReceived,
3355
3376
  codec: codec || _this.getCodecByType(_kind),
3356
3377
  roundTripTime: roundTripTime
3357
3378
  };
3358
3379
 
3380
+ if (report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp) {
3381
+ rtcStats[_kind].lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp;
3382
+ }
3383
+
3359
3384
  if (_kind === 'video' && _this._rtcStatistic.value && _this._rtcStatistic.value.video) {
3360
- rtcStats[_kind].framesDecoded = i.framesDecoded;
3361
- rtcStats[_kind]['fps'] = (i.framesDecoded - _this._rtcStatistic.value.video.framesDecoded) / (rtcStats[_kind].timestamp - _this._rtcStatistic.value.video.timestamp) * 1000 || 0;
3385
+ rtcStats[_kind]['framesDecoded'] = report.framesDecoded;
3386
+ rtcStats[_kind]['fps'] = (report.framesDecoded - _this._rtcStatistic.value.video.framesDecoded) / (rtcStats[_kind].timestamp - _this._rtcStatistic.value.video.timestamp) * 1000 || 0;
3362
3387
  }
3363
3388
  }
3364
3389
  }
@@ -4722,6 +4747,7 @@ var BitrateMode;
4722
4747
  /* harmony import */ var _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../streaming/StreamFactory */ "./src/sdk/streaming/StreamFactory.ts");
4723
4748
  /* harmony import */ var _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../discovery/DiscoveryUri */ "./src/sdk/discovery/DiscoveryUri.ts");
4724
4749
  /* harmony import */ var _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../metrics/MetricsFactory */ "./src/metrics/MetricsFactory.ts");
4750
+ /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
4725
4751
 
4726
4752
 
4727
4753
 
@@ -4973,7 +4999,48 @@ var Channel = /*#__PURE__*/function () {
4973
4999
  }
4974
5000
  }, {
4975
5001
  key: "stop",
4976
- value: function stop(reason) {
5002
+ value: function () {
5003
+ var _stop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee(reason) {
5004
+ var _this3 = this;
5005
+
5006
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
5007
+ while (1) {
5008
+ switch (_context.prev = _context.next) {
5009
+ case 0:
5010
+ return _context.abrupt("return", new Promise(function (resolve) {
5011
+ if (!_this3._context.isStarting.value) {
5012
+ _this3.processStop(reason);
5013
+
5014
+ resolve();
5015
+ return;
5016
+ }
5017
+
5018
+ _this3._context.rendererDisposables.add(_this3._context.isStarting.subscribe(function (isStarting) {
5019
+ if (!isStarting) {
5020
+ _this3.processStop(reason);
5021
+
5022
+ resolve();
5023
+ }
5024
+ }));
5025
+ }));
5026
+
5027
+ case 1:
5028
+ case "end":
5029
+ return _context.stop();
5030
+ }
5031
+ }
5032
+ }, _callee);
5033
+ }));
5034
+
5035
+ function stop(_x) {
5036
+ return _stop.apply(this, arguments);
5037
+ }
5038
+
5039
+ return stop;
5040
+ }()
5041
+ }, {
5042
+ key: "processStop",
5043
+ value: function processStop(reason) {
4977
5044
  if (this._context.videoElement.value) {
4978
5045
  this._context.videoElement.value.pause();
4979
5046
 
@@ -4988,25 +5055,25 @@ var Channel = /*#__PURE__*/function () {
4988
5055
  }, {
4989
5056
  key: "resume",
4990
5057
  value: function () {
4991
- var _resume = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() {
4992
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
5058
+ var _resume = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
5059
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
4993
5060
  while (1) {
4994
- switch (_context.prev = _context.next) {
5061
+ switch (_context2.prev = _context2.next) {
4995
5062
  case 0:
4996
5063
  if (!this._context.mediaStream.value) {
4997
- _context.next = 3;
5064
+ _context2.next = 3;
4998
5065
  break;
4999
5066
  }
5000
5067
 
5001
5068
  this._context.autoPaused.value = false;
5002
- return _context.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5069
+ return _context2.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5003
5070
 
5004
5071
  case 3:
5005
5072
  case "end":
5006
- return _context.stop();
5073
+ return _context2.stop();
5007
5074
  }
5008
5075
  }
5009
- }, _callee, this);
5076
+ }, _callee2, this);
5010
5077
  }));
5011
5078
 
5012
5079
  function resume() {
@@ -5036,13 +5103,34 @@ var Channel = /*#__PURE__*/function () {
5036
5103
  }
5037
5104
  }, {
5038
5105
  key: "dispose",
5039
- value: function dispose() {
5040
- this.stop('client:channel-dispose');
5106
+ value: function () {
5107
+ var _dispose = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee3() {
5108
+ var _this4 = this;
5041
5109
 
5042
- this._context.channelDisposables.dispose();
5110
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee3$(_context3) {
5111
+ while (1) {
5112
+ switch (_context3.prev = _context3.next) {
5113
+ case 0:
5114
+ return _context3.abrupt("return", this.stop('client:channel-dispose').then(function () {
5115
+ _this4._context.channelDisposables.dispose();
5043
5116
 
5044
- this._context.isDisposed = true;
5045
- }
5117
+ _this4._context.isDisposed = true;
5118
+ }));
5119
+
5120
+ case 1:
5121
+ case "end":
5122
+ return _context3.stop();
5123
+ }
5124
+ }
5125
+ }, _callee3, this);
5126
+ }));
5127
+
5128
+ function dispose() {
5129
+ return _dispose.apply(this, arguments);
5130
+ }
5131
+
5132
+ return dispose;
5133
+ }()
5046
5134
  }, {
5047
5135
  key: "getUri",
5048
5136
  value: function getUri(token) {
@@ -5060,27 +5148,66 @@ var Channel = /*#__PURE__*/function () {
5060
5148
  }, {
5061
5149
  key: "start",
5062
5150
  value: function () {
5063
- var _start = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
5064
- var _this3 = this;
5151
+ var _start = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee4() {
5152
+ var _this5 = this;
5065
5153
 
5066
- var token, listenOnStreamSetup, uri, streamPlayer;
5067
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
5154
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee4$(_context4) {
5068
5155
  while (1) {
5069
- switch (_context2.prev = _context2.next) {
5156
+ switch (_context4.prev = _context4.next) {
5070
5157
  case 0:
5071
5158
  if (!this._context.isDisposed) {
5072
- _context2.next = 2;
5159
+ _context4.next = 2;
5073
5160
  break;
5074
5161
  }
5075
5162
 
5076
5163
  throw new Error('Channel was already disposed');
5077
5164
 
5078
5165
  case 2:
5166
+ if (!this._context.isStarting.value) {
5167
+ _context4.next = 5;
5168
+ break;
5169
+ }
5170
+
5171
+ this._logger.info('Channel is already starting, skipping start');
5172
+
5173
+ return _context4.abrupt("return");
5174
+
5175
+ case 5:
5176
+ this._context.isStarting.value = true;
5177
+ return _context4.abrupt("return", this.processStart().finally(function () {
5178
+ _this5._context.isStarting.value = false;
5179
+ }));
5180
+
5181
+ case 7:
5182
+ case "end":
5183
+ return _context4.stop();
5184
+ }
5185
+ }
5186
+ }, _callee4, this);
5187
+ }));
5188
+
5189
+ function start() {
5190
+ return _start.apply(this, arguments);
5191
+ }
5192
+
5193
+ return start;
5194
+ }()
5195
+ }, {
5196
+ key: "processStart",
5197
+ value: function () {
5198
+ var _processStart = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee5() {
5199
+ var _this6 = this;
5200
+
5201
+ var token, listenOnStreamSetup, uri, handleStreamFailureCallback, streamPlayer;
5202
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee5$(_context5) {
5203
+ while (1) {
5204
+ switch (_context5.prev = _context5.next) {
5205
+ case 0:
5079
5206
  token = this._context.token.value;
5080
5207
  listenOnStreamSetup = this._context.sessionTelemetry.listenOnStreamSetup();
5081
5208
 
5082
5209
  if (_edgeAuth_EdgeAuth__WEBPACK_IMPORTED_MODULE_12__.default.isValidToken(token)) {
5083
- _context2.next = 9;
5210
+ _context5.next = 7;
5084
5211
  break;
5085
5212
  }
5086
5213
 
@@ -5088,78 +5215,85 @@ var Channel = /*#__PURE__*/function () {
5088
5215
 
5089
5216
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized;
5090
5217
  this._context.authorized.value = false;
5091
- return _context2.abrupt("return");
5218
+ return _context5.abrupt("return");
5092
5219
 
5093
- case 9:
5220
+ case 7:
5094
5221
  this.cleanUpResources('client:start');
5095
5222
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting;
5096
5223
  this._context.loading.value = true;
5097
5224
  uri = this.getUri(token);
5098
- streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__.default.create(token, this._context, this.handleStreamFailure.bind(this));
5225
+
5226
+ handleStreamFailureCallback = function handleStreamFailureCallback() {
5227
+ return new Promise(function (resolve) {
5228
+ // Need to set isStarting to false and call handleStreamFailure if stream monitors found an issue
5229
+ _this6._context.isStarting.value = false;
5230
+ return resolve(_this6.handleStreamFailure());
5231
+ });
5232
+ };
5233
+
5234
+ streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__.default.create(token, this._context, handleStreamFailureCallback);
5099
5235
 
5100
5236
  if (streamPlayer) {
5101
- _context2.next = 16;
5237
+ _context5.next = 15;
5102
5238
  break;
5103
5239
  }
5104
5240
 
5105
- return _context2.abrupt("return");
5241
+ return _context5.abrupt("return");
5106
5242
 
5107
- case 16:
5108
- return _context2.abrupt("return", streamPlayer.start(uri, token, listenOnStreamSetup, this.playMediaStreamInVideoElement.bind(this)).then(function () {
5109
- _this3._context.loading.value = false;
5110
- }).then(function () {
5111
- _this3._context.loading.value = false;
5243
+ case 15:
5244
+ return _context5.abrupt("return", streamPlayer.start(uri, token, listenOnStreamSetup, this.playMediaStreamInVideoElement.bind(this)).then(function () {
5245
+ _this6._context.loading.value = false;
5112
5246
  }).catch(function (e) {
5113
5247
  listenOnStreamSetup.fail();
5114
- _this3._context.failureCount.value++;
5115
- _this3._context.online.value = false;
5248
+ _this6._context.failureCount.value++;
5249
+ _this6._context.online.value = false;
5116
5250
 
5117
- _this3.cleanUpResources('client:cleanup-after-failed-setup');
5251
+ _this6.cleanUpResources('client:cleanup-after-failed-setup');
5118
5252
 
5119
- _this3._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error;
5253
+ _this6._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error;
5120
5254
 
5121
- _this3._logger.error('Failed to discover end point, marking as offline', e);
5255
+ _this6._logger.error('Failed to start channel', e);
5122
5256
  }).finally(function () {
5123
- if (_this3._context.state.value === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing || !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticRetryOnFailure) {
5257
+ if (_this6._context.state.value === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing || !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticRetryOnFailure) {
5124
5258
  return;
5125
5259
  }
5126
5260
 
5127
5261
  var timeoutId = setTimeout(function () {
5128
- var ignored = _this3.handleStreamFailure().catch(function (e) {
5129
- _this3._logger.error('Failed handling stream failure', e);
5262
+ var ignored = _this6.handleStreamFailure().catch(function (e) {
5263
+ _this6._logger.error('Failed handling stream failure', e);
5130
5264
  });
5131
- }, _this3.getRetryInterval());
5265
+ }, _this6.getRetryInterval());
5132
5266
 
5133
- _this3._context.disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_11__.default(function () {
5267
+ _this6._context.disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_11__.default(function () {
5134
5268
  clearTimeout(timeoutId);
5135
5269
  }));
5136
5270
  }));
5137
5271
 
5138
- case 17:
5272
+ case 16:
5139
5273
  case "end":
5140
- return _context2.stop();
5274
+ return _context5.stop();
5141
5275
  }
5142
5276
  }
5143
- }, _callee2, this);
5277
+ }, _callee5, this);
5144
5278
  }));
5145
5279
 
5146
- function start() {
5147
- return _start.apply(this, arguments);
5280
+ function processStart() {
5281
+ return _processStart.apply(this, arguments);
5148
5282
  }
5149
5283
 
5150
- return start;
5284
+ return processStart;
5151
5285
  }()
5152
5286
  }, {
5153
5287
  key: "restartAfterStop",
5154
5288
  value: function () {
5155
- var _restartAfterStop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee3() {
5289
+ var _restartAfterStop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee6() {
5156
5290
  var ignored;
5157
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee3$(_context3) {
5291
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee6$(_context6) {
5158
5292
  while (1) {
5159
- switch (_context3.prev = _context3.next) {
5293
+ switch (_context6.prev = _context6.next) {
5160
5294
  case 0:
5161
5295
  if (!this._context.isDisposed) {
5162
- _context3.next = 2;
5296
+ _context6.next = 2;
5163
5297
  break;
5164
5298
  }
5165
5299
 
@@ -5167,11 +5301,11 @@ var Channel = /*#__PURE__*/function () {
5167
5301
 
5168
5302
  case 2:
5169
5303
  if (!this._context.mediaStream.value) {
5170
- _context3.next = 4;
5304
+ _context6.next = 4;
5171
5305
  break;
5172
5306
  }
5173
5307
 
5174
- return _context3.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5308
+ return _context6.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5175
5309
 
5176
5310
  case 4:
5177
5311
  if (this._context.token.value) {
@@ -5180,10 +5314,10 @@ var Channel = /*#__PURE__*/function () {
5180
5314
 
5181
5315
  case 5:
5182
5316
  case "end":
5183
- return _context3.stop();
5317
+ return _context6.stop();
5184
5318
  }
5185
5319
  }
5186
- }, _callee3, this);
5320
+ }, _callee6, this);
5187
5321
  }));
5188
5322
 
5189
5323
  function restartAfterStop() {
@@ -5195,30 +5329,30 @@ var Channel = /*#__PURE__*/function () {
5195
5329
  }, {
5196
5330
  key: "play",
5197
5331
  value: function () {
5198
- var _play = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee4() {
5332
+ var _play = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee7() {
5199
5333
  var mediaStream;
5200
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee4$(_context4) {
5334
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee7$(_context7) {
5201
5335
  while (1) {
5202
- switch (_context4.prev = _context4.next) {
5336
+ switch (_context7.prev = _context7.next) {
5203
5337
  case 0:
5204
5338
  mediaStream = this._context.mediaStream.value;
5205
5339
 
5206
5340
  if (mediaStream) {
5207
- _context4.next = 3;
5341
+ _context7.next = 3;
5208
5342
  break;
5209
5343
  }
5210
5344
 
5211
- return _context4.abrupt("return", this.start());
5345
+ return _context7.abrupt("return", this.start());
5212
5346
 
5213
5347
  case 3:
5214
- return _context4.abrupt("return", this.playMediaStreamInVideoElement(mediaStream));
5348
+ return _context7.abrupt("return", this.playMediaStreamInVideoElement(mediaStream));
5215
5349
 
5216
5350
  case 4:
5217
5351
  case "end":
5218
- return _context4.stop();
5352
+ return _context7.stop();
5219
5353
  }
5220
5354
  }
5221
- }, _callee4, this);
5355
+ }, _callee7, this);
5222
5356
  }));
5223
5357
 
5224
5358
  function play() {
@@ -5256,72 +5390,72 @@ var Channel = /*#__PURE__*/function () {
5256
5390
  }, {
5257
5391
  key: "handleStreamFailure",
5258
5392
  value: function () {
5259
- var _handleStreamFailure = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee5() {
5260
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee5$(_context5) {
5393
+ var _handleStreamFailure = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee8() {
5394
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee8$(_context8) {
5261
5395
  while (1) {
5262
- switch (_context5.prev = _context5.next) {
5396
+ switch (_context8.prev = _context8.next) {
5263
5397
  case 0:
5264
- _context5.t0 = this._context.state.value;
5265
- _context5.next = _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Reconnecting ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.StandBy ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Offline ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Recovering ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized ? 5 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoRestricted ? 7 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoBlocked ? 9 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped ? 11 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing ? 13 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused ? 15 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting ? 17 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.UnsupportedFeature ? 19 : 21;
5398
+ _context8.t0 = this._context.state.value;
5399
+ _context8.next = _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Reconnecting ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.StandBy ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Offline ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Recovering ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized ? 5 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoRestricted ? 7 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoBlocked ? 9 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped ? 11 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing ? 13 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused ? 15 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting ? 17 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.UnsupportedFeature ? 19 : 21;
5266
5400
  break;
5267
5401
 
5268
5402
  case 3:
5269
5403
  this._logger.info('Retry start with initial state [%s] [%s]', this._context.state.value, _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default[this._context.state.value]);
5270
5404
 
5271
- return _context5.abrupt("break", 22);
5405
+ return _context8.abrupt("break", 22);
5272
5406
 
5273
5407
  case 5:
5274
5408
  this._logger.info('Channel is unauthorized, skipping retry of start. Please provide a new token and invoke start()');
5275
5409
 
5276
- return _context5.abrupt("return");
5410
+ return _context8.abrupt("return");
5277
5411
 
5278
5412
  case 7:
5279
5413
  this._logger.info('Channel is geo restricted, skipping retry of start. Please provide a new token and invoke start()');
5280
5414
 
5281
- return _context5.abrupt("return");
5415
+ return _context8.abrupt("return");
5282
5416
 
5283
5417
  case 9:
5284
5418
  this._logger.info('Channel is geo blocked, skipping retry of start. Please provide a new token and invoke start()');
5285
5419
 
5286
- return _context5.abrupt("return");
5420
+ return _context8.abrupt("return");
5287
5421
 
5288
5422
  case 11:
5289
5423
  this._logger.info('Channel is stopped, skipping retry of start.');
5290
5424
 
5291
- return _context5.abrupt("return");
5425
+ return _context8.abrupt("return");
5292
5426
 
5293
5427
  case 13:
5294
5428
  this._logger.info('Channel is playing, skipping retry of start');
5295
5429
 
5296
- return _context5.abrupt("return");
5430
+ return _context8.abrupt("return");
5297
5431
 
5298
5432
  case 15:
5299
5433
  this._logger.info('Channel is paused, skipping retry of start. Please invoke play()');
5300
5434
 
5301
- return _context5.abrupt("return");
5435
+ return _context8.abrupt("return");
5302
5436
 
5303
5437
  case 17:
5304
5438
  this._logger.info('Channel is already starting, skipping retry of start');
5305
5439
 
5306
- return _context5.abrupt("return");
5440
+ return _context8.abrupt("return");
5307
5441
 
5308
5442
  case 19:
5309
5443
  this._logger.info('Channel is stopped due to unsupported feature, skipping retry of start.');
5310
5444
 
5311
- return _context5.abrupt("return");
5445
+ return _context8.abrupt("return");
5312
5446
 
5313
5447
  case 21:
5314
5448
  (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_10__.default)(this._context.state.value);
5315
5449
 
5316
5450
  case 22:
5317
- return _context5.abrupt("return", this.start());
5451
+ return _context8.abrupt("return", this.start());
5318
5452
 
5319
5453
  case 23:
5320
5454
  case "end":
5321
- return _context5.stop();
5455
+ return _context8.stop();
5322
5456
  }
5323
5457
  }
5324
- }, _callee5, this);
5458
+ }, _callee8, this);
5325
5459
  }));
5326
5460
 
5327
5461
  function handleStreamFailure() {
@@ -5333,7 +5467,7 @@ var Channel = /*#__PURE__*/function () {
5333
5467
  }, {
5334
5468
  key: "cleanUpResources",
5335
5469
  value: function cleanUpResources() {
5336
- var _this4 = this;
5470
+ var _this7 = this;
5337
5471
 
5338
5472
  var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultStreamTerminationReason;
5339
5473
 
@@ -5365,14 +5499,14 @@ var Channel = /*#__PURE__*/function () {
5365
5499
  var status = _ref2.status;
5366
5500
 
5367
5501
  if (status !== 'ok') {
5368
- _this4._logger.warn('[%s] Failed to destroy stream with reason [%s]', _this4.streamId, status);
5502
+ _this7._logger.warn('[%s] Failed to destroy stream with reason [%s]', _this7.streamId, status);
5369
5503
 
5370
5504
  return;
5371
5505
  }
5372
5506
 
5373
- _this4._logger.info('[%s] Destroyed stream with reason [%s]', _this4.streamId, status);
5507
+ _this7._logger.info('[%s] Destroyed stream with reason [%s]', _this7.streamId, status);
5374
5508
  }).catch(function (e) {
5375
- _this4._logger.error('[%s] Failed to destroy stream', _this4.streamId, e);
5509
+ _this7._logger.error('[%s] Failed to destroy stream', _this7.streamId, e);
5376
5510
  });
5377
5511
  }
5378
5512
 
@@ -5383,22 +5517,23 @@ var Channel = /*#__PURE__*/function () {
5383
5517
 
5384
5518
  this._context.stream.value = null;
5385
5519
  this._context.endPoint.value = null;
5520
+ this._context.peerConnectionReconnectAttempts = 0;
5386
5521
  }
5387
5522
  }, {
5388
5523
  key: "playMediaStreamInVideoElement",
5389
5524
  value: function () {
5390
- var _playMediaStreamInVideoElement = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee6(mediaStream) {
5391
- var _this5 = this;
5525
+ var _playMediaStreamInVideoElement = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee9(mediaStream) {
5526
+ var _this8 = this;
5392
5527
 
5393
5528
  var videoElement, playPromise;
5394
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee6$(_context6) {
5529
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee9$(_context9) {
5395
5530
  while (1) {
5396
- switch (_context6.prev = _context6.next) {
5531
+ switch (_context9.prev = _context9.next) {
5397
5532
  case 0:
5398
5533
  videoElement = this._context.videoElement.value;
5399
5534
 
5400
5535
  if (videoElement) {
5401
- _context6.next = 8;
5536
+ _context9.next = 8;
5402
5537
  break;
5403
5538
  }
5404
5539
 
@@ -5407,14 +5542,14 @@ var Channel = /*#__PURE__*/function () {
5407
5542
  this._context.loading.value = false;
5408
5543
  this._context.playing.value = false;
5409
5544
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped;
5410
- return _context6.abrupt("return");
5545
+ return _context9.abrupt("return");
5411
5546
 
5412
5547
  case 8:
5413
5548
  videoElement.srcObject = mediaStream;
5414
5549
  playPromise = videoElement.play();
5415
5550
 
5416
5551
  if (!(playPromise === undefined)) {
5417
- _context6.next = 17;
5552
+ _context9.next = 17;
5418
5553
  break;
5419
5554
  }
5420
5555
 
@@ -5423,15 +5558,15 @@ var Channel = /*#__PURE__*/function () {
5423
5558
  this._context.loading.value = false;
5424
5559
  this._context.playing.value = true;
5425
5560
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5426
- return _context6.abrupt("return");
5561
+ return _context9.abrupt("return");
5427
5562
 
5428
5563
  case 17:
5429
- return _context6.abrupt("return", playPromise.then(function () {
5430
- _this5._context.autoMuted.value = false;
5431
- _this5._context.autoPaused.value = false;
5432
- _this5._context.loading.value = false;
5433
- _this5._context.playing.value = true;
5434
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5564
+ return _context9.abrupt("return", playPromise.then(function () {
5565
+ _this8._context.autoMuted.value = false;
5566
+ _this8._context.autoPaused.value = false;
5567
+ _this8._context.loading.value = false;
5568
+ _this8._context.playing.value = true;
5569
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5435
5570
  }).catch(function (e) {
5436
5571
  var hasAudioTrack = !!mediaStream.getTracks().filter(function (track) {
5437
5572
  return track.kind === 'audio';
@@ -5439,61 +5574,61 @@ var Channel = /*#__PURE__*/function () {
5439
5574
  var automaticallyMuteVideoOnPlayFailureOff = !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticallyMuteVideoOnPlayFailure;
5440
5575
 
5441
5576
  if (automaticallyMuteVideoOnPlayFailureOff || videoElement.muted || !hasAudioTrack) {
5442
- _this5._context.autoMuted.value = false;
5443
- _this5._context.autoPaused.value = true;
5444
- _this5._context.loading.value = false;
5445
- _this5._context.playing.value = false;
5446
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5577
+ _this8._context.autoMuted.value = false;
5578
+ _this8._context.autoPaused.value = true;
5579
+ _this8._context.loading.value = false;
5580
+ _this8._context.playing.value = false;
5581
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5447
5582
 
5448
5583
  if (automaticallyMuteVideoOnPlayFailureOff) {
5449
- _this5._logger.info('[%s] Paused video after play failed. Manual user action required.', _this5.streamId, e);
5584
+ _this8._logger.info('[%s] Paused video after play failed. Manual user action required.', _this8.streamId, e);
5450
5585
 
5451
5586
  videoElement.srcObject = null;
5452
5587
  return;
5453
5588
  }
5454
5589
 
5455
5590
  if (hasAudioTrack) {
5456
- _this5._logger.info('[%s] Failed to play video. Manual user action required.', _this5.streamId, e);
5591
+ _this8._logger.info('[%s] Failed to play video. Manual user action required.', _this8.streamId, e);
5457
5592
 
5458
5593
  return;
5459
5594
  }
5460
5595
 
5461
- _this5._logger.info('[%s] Failed to play muted video. Manual user action required.', _this5.streamId, e);
5596
+ _this8._logger.info('[%s] Failed to play muted video. Manual user action required.', _this8.streamId, e);
5462
5597
 
5463
5598
  return;
5464
5599
  }
5465
5600
 
5466
5601
  videoElement.muted = true;
5467
5602
  return videoElement.play().then(function () {
5468
- _this5._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', _this5.streamId);
5603
+ _this8._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', _this8.streamId);
5469
5604
 
5470
- _this5._context.autoMuted.value = true;
5471
- _this5._context.autoPaused.value = false;
5472
- _this5._context.loading.value = false;
5473
- _this5._context.playing.value = true;
5474
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5605
+ _this8._context.autoMuted.value = true;
5606
+ _this8._context.autoPaused.value = false;
5607
+ _this8._context.loading.value = false;
5608
+ _this8._context.playing.value = true;
5609
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5475
5610
  }).catch(function (e) {
5476
5611
  videoElement.muted = false;
5477
5612
 
5478
- _this5._logger.info('[%s] Failed to play video. Manual user action required.', _this5.streamId, e);
5613
+ _this8._logger.info('[%s] Failed to play video. Manual user action required.', _this8.streamId, e);
5479
5614
 
5480
- _this5._context.autoMuted.value = false;
5481
- _this5._context.autoPaused.value = true;
5482
- _this5._context.loading.value = false;
5483
- _this5._context.playing.value = false;
5484
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5615
+ _this8._context.autoMuted.value = false;
5616
+ _this8._context.autoPaused.value = true;
5617
+ _this8._context.loading.value = false;
5618
+ _this8._context.playing.value = false;
5619
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5485
5620
  });
5486
5621
  }));
5487
5622
 
5488
5623
  case 18:
5489
5624
  case "end":
5490
- return _context6.stop();
5625
+ return _context9.stop();
5491
5626
  }
5492
5627
  }
5493
- }, _callee6, this);
5628
+ }, _callee9, this);
5494
5629
  }));
5495
5630
 
5496
- function playMediaStreamInVideoElement(_x) {
5631
+ function playMediaStreamInVideoElement(_x2) {
5497
5632
  return _playMediaStreamInVideoElement.apply(this, arguments);
5498
5633
  }
5499
5634
 
@@ -5766,6 +5901,8 @@ var ChannelContext = /*#__PURE__*/function () {
5766
5901
 
5767
5902
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "isDisposed", void 0);
5768
5903
 
5904
+ _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "isStarting", void 0);
5905
+
5769
5906
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "videoTelemetry", void 0);
5770
5907
 
5771
5908
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "sessionTelemetry", void 0);
@@ -5777,6 +5914,7 @@ var ChannelContext = /*#__PURE__*/function () {
5777
5914
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "clearFailureCountTimeout", void 0);
5778
5915
 
5779
5916
  this.isDisposed = false;
5917
+ this.isStarting = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(false);
5780
5918
  this.disposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
5781
5919
  this.channelDisposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
5782
5920
  this.rendererDisposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
@@ -7971,6 +8109,10 @@ var RealTimeStream = /*#__PURE__*/function () {
7971
8109
  var discoveryCompleted = false;
7972
8110
  var candidates = [];
7973
8111
 
8112
+ if (!_this._channelContext.peerConnection.value) {
8113
+ _this._channelContext.peerConnection.value = peerConnection;
8114
+ }
8115
+
7974
8116
  peerConnection.onicecandidate = function (e) {
7975
8117
  if (_this._channelContext.stream.value !== stream) {
7976
8118
  return;
@@ -8501,7 +8643,7 @@ var VersionManager = /*#__PURE__*/function () {
8501
8643
  key: "sdkVersion",
8502
8644
  get: function get() {
8503
8645
  try {
8504
- return "2022-01-10T19:09:12.604Z (2022.0.2)";
8646
+ return "2022-05-05T18:02:55.793Z (2022.0.5)";
8505
8647
  } catch (e) {
8506
8648
  return this._defaultVersion;
8507
8649
  }
@@ -10275,4 +10417,4 @@ try {
10275
10417
  /******/ })()
10276
10418
  ;
10277
10419
  });
10278
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Qcml2YWN5TW9kZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2VkZ2VBdXRoL0VkZ2VBdXRoLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Z1bGwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsIl9kaXNwb3NhYmxlcyIsImRpc3Bvc2UiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJ2YWx1ZSIsIkJyb3dzZXJEZXRlY3RvciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJwYXJzZUJyb3dzZXJOYW1lIiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiaW5jbHVkZXMiLCJQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJuYW1lIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJOZXR3b3JrTW9uaXRvciIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsInJ0dCIsImxpc3RlbmVyIiwiX3J0dCIsImdldFJvdW5kVHJpcFRpbWUiLCJfZWZmZWN0aXZlVHlwZSIsImdldEVmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9pc1N1cHBvcnRlZCIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsIl9fUFJJVkFDWV9NT0RFX18iLCJlIiwiYXBwbHlJc1ByaXZhdGUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJsZW5ndGgiLCJTdHJpbmdzIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsIkVycm9yIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJfYXBwZW5kZXJzIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiX3RocmVzaG9sZCIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwibG9nIiwiZXJyb3IiLCJ0aHJlc2hvbGQiLCJMb2dnZXIiLCJUcmFjZSIsImFyZ3MiLCJEZWJ1ZyIsIkluZm8iLCJXYXJuIiwiRmF0YWwiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIkpTT04iLCJrZXkiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIl9jYXRlZ29yeSIsImFwcGVuZGVycyIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwibG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIm1ldHJpY3MiLCJfbWV0cmljcyIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwidXJsIiwibWV0cmljc1VybCIsIlVSTCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwidGVsZW1ldHJ5TGV2ZWwiLCJ2YWx1ZXMiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibG9jYXRpb24iLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInJlY29yZHMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJzZW5kTWV0cmljcyIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInByb3RvdHlwZSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwic2V0VGltZW91dCIsIndhcm4iLCJQcm9taXNlSGFuZGxlciIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIkZlYXR1cmVFbmFibGVtZW50IiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJhZGRUcmFuc2NlaXZlciIsImRpcmVjdGlvbiIsInZpZGVvVHJhbnNjZWl2ZXIiLCJjcmVhdGVPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwibG9jYWxPZmZlciIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJ1cGRhdGVTdGF0aXN0aWNUaW1lT3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVPdXQiLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0cyIsInJvdW5kVHJpcFRpbWUiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwic3NyYyIsImJ5dGVzUmVjZWl2ZWQiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwiX3J0Y1N0YXRpc3RpYyIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImdldFN0YXRzTGVnYWN5IiwicmVwb3J0IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwic3BsaXRTZHAiLCJ1c2VkQ29kZWNMaW5lIiwiZmluZCIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwib3B0aW9ucyIsImNyZWF0ZUFuc3dlciIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsImhhc0NyeXB0byIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwic2VsZWN0b3IiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImNsb3NlIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJoYW5kbGVyIiwib250cmFjayIsIm9uaWNlY2FuZGlkYXRlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5Iiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJyZW1vdmUiLCJpZ25vcmVkVGVuYW5jeSIsIl9tZXRyaWNzU2VydmljZSIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsIl90ZWxlbWV0cnlMZXZlbCIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJnZXRCb29sZWFuVmFsdWUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwicGFyc2VkVG9rZW4iLCJFZGdlQXV0aCIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiX2luaXRpYWxpemVkIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiaW5pdCIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiam9pbiIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiZGVmYXVsdFRhcmdldExhZyIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJ0b2tlbiIsInRhcmdldExhZyIsIl9jb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwicnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwic2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJzdGFydCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInBhdXNlIiwic3JjT2JqZWN0IiwiY2xlYW5VcFJlc291cmNlcyIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwibXV0ZWQiLCJzdG9wIiwiaXNEaXNwb3NlZCIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJ1cmkiLCJnZXRVcmkiLCJzdHJlYW1QbGF5ZXIiLCJTdHJlYW1GYWN0b3J5IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsImZhaWwiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsImRpc3Bvc2FibGVzIiwibWluIiwicG93IiwibWF4IiwiZGVzdHJveVN0cmVhbSIsInBsYXlQcm9taXNlIiwicGxheSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJDaGFubmVscyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsIl9jYWNoZSIsImRpc2NvdmVyeVNlcnZpY2UiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwidGltZW91dCIsInJhY2UiLCJvayIsInRleHQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJuZXZlclJlc29sdmUiLCJwaW5nIiwidGltZSIsInNka1ZlcnNpb24iLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJfZGlzY292ZXJ5VXJpIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiYnVpbGRQaW5nVXJsIiwiZmluaXNoZWQiLCJfcm91bmRUcmlwVGltZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiYXBwbGljYXRpb25JZCIsImJ1aWxkVXJsIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJlZGdlQXV0aFRva2VuIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUiLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImJvZHlXaXRob3V0T2ZmZXIiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwiaHR0cFJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImRlYnVnIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwicGF0aCIsInBhdGhBc0FycmF5IiwiY29uY2F0IiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicGVlcklkZW50aXR5IiwicnRjcE11eFBvbGljeSIsImNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwicnRjU2Vzc2lvbkRlc2NyaXB0aW9uIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsImlzVmFsaWRUb2tlbiIsImVuY29kZWRFZGdlQXV0aFRva2VuIiwiYXRvYiIsInN1YnN0ciIsInBhcnNlIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiYWxsIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiYXBwbHlTdGF0dXMiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwic3VjY2VzcyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwic3RhdGlzdGljcyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsInRydW5jYXRlSWNlU2VydmVycyIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJpc1J0bXAiLCJjYXBhYmlsaXRpZXMiLCJpc1N0cmVhbWluZyIsIl9fU0RLVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJzZW5kTG9ncyIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsImZsb29yIiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0cmVhbUlkIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlcmVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJlbmQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkE7QUFDQTs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUM7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7QUNKQSx1QkFBdUIsbUJBQU8sQ0FBQyxxRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQSxvQzs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0M7Ozs7Ozs7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsbUM7Ozs7Ozs7Ozs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ05BO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCOzs7Ozs7Ozs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEs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QTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDhDQUE4QyxPQUFPOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBMEIsb0JBQW9CLENBQUU7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O1VDeHRCQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJmdWxsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQ7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdFwiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3RcIik7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXk7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZSAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG4vLyBUaGlzIGZpbGUgaXMgdXNlZCBvbmx5IGZvciB0aGUgc2lsZW50IGJ1aWxkIHRvIG1vY2sgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBjbGFzc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QUklWQUNZX01PREVfXzogYm9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpdmFjeU1vZGUge1xuICBwcml2YXRlIHN0YXRpYyBfaXNQcml2YXRlOiBib29sZWFuO1xuXG4gIHN0YXRpYyBnZXQgaXNQcml2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ByaXZhdGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJc1ByaXZhdGUoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IF9fUFJJVkFDWV9NT0RFX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5faXNQcml2YXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cblByaXZhY3lNb2RlLmFwcGx5SXNQcml2YXRlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbElucHV0VHlwZXMgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBMb2dnaW5nTGV2ZWwuT2ZmIDogTG9nZ2luZ0xldmVsLkFsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsSW5wdXRUeXBlc30gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWwgOiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG4gIC8qIGVzbGludC1lbmFibGUqL1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXJcIicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQ7XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSA9IFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWU7XG5cbiAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKClcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb246ICdyZWN2b25seSd9KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbjogJ3JlY3Zvbmx5J30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPyB1bmRlZmluZWQgOiB7XG4gICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lT3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVPdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBpZiAoaS50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIGkuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IGkuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaS50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBpLmtpbmQgfHwgaS5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKGkpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBpLmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogaS5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBpLnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IGkuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiBpLnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiBpLnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXS5mcmFtZXNEZWNvZGVkID0gaS5mcmFtZXNEZWNvZGVkO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdHNba2luZF1bJ2ZwcyddID0gKGkuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0c1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdHM6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdHNbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0cztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVPdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lT3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNwbGl0U2RwID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNwbGl0U2RwLmZpbmQoaXRlbSA9PiBpdGVtLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NwbGl0U2RwLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwLm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsSW5wdXRUeXBlc30gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcztcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbElucHV0VHlwZXM7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCFQcml2YWN5TW9kZS5pc1ByaXZhdGUpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbik7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5cbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4vQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMjAwMDtcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIgPSBkZWZhdWx0VGFyZ2V0TGFnKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dCh0b2tlbiwgdGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fY29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pIHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl9jb250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdHMoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIHN0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuKTogVVJMIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbik7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aC5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jb250ZXh0LCB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUuYmluZCh0aGlzKSk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRpc2NvdmVyIGVuZCBwb2ludCwgbWFya2luZyBhcyBvZmZsaW5lJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBNYXRoLm1heCgwLCB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSAtIDEpKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgdG9rZW46IFN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG5cbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHNlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4odGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIEVycm9yLFxuICBVbnN1cHBvcnRlZEZlYXR1cmVcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxzIHtcbiAgc3RhdGljIGNyZWF0ZUNoYW5uZWwob3B0aW9uczogQ3JlYXRlQ2hhbm5lbE9wdGlvbnMpOiBDaGFubmVsIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIG9wdGlvbnMudGFyZ2V0TGFnKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcblxuICAgIERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG5cbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5jb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5LnByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5cbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMjAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRGlzY292ZXJ5Jyk7XG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfdXJpOiBVUkw7XG5cbiAgY29uc3RydWN0b3IodXJpOiBVUkwpIHtcbiAgICBpZiAoIXVyaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdXJpJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZSh1cmkudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJOZWFyYnlFbmRQb2ludHModXJpOiBVUkwsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8RW5kUG9pbnRbXT4ge1xuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdGltZW91dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaXNjb3ZlcnkgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBVUkwodXJsKSwgdGltZW91dCk7XG4gICAgY29uc3QgbmV2ZXJSZXNvbHZlID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlcXVlc3QgWyVzXSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nJywgdXJsKTtcbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICByZXR1cm4gbmV2ZXJSZXNvbHZlKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lTZXNzaW9uRGVzY3JpcHRpb24sIFNkcFR5cGV9IGZyb20gJy4uL2FwaS9TZXNzaW9uRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA2O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IHN0cmluZywgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcblxuICAgIGlmICghcGFyc2VkVG9rZW4gfHwgIXBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdGVuYW5jeSA9IHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGVkZ2VBdXRoVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUobG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGVkZ2VBdXRoVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiB0aGlzLmNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7fTtcblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5QmFsYW5jZWQnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdiYWxhbmNlZCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhDb21wYXQnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtY29tcGF0JztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeU1heEJ1bmRsZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ21heC1idW5kbGUnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgICAgICB1cmxzOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgICAgICB1c2VybmFtZTogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgICAgIGNyZWRlbnRpYWw6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5QWxsJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSAnYWxsJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVJlbGF5JzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSAncmVsYXknO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5UHVibGljJzpcbiAgICAgICAgICAgICAgLy8gRGVwcmVjYXRlZCAtIE5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eSkge1xuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucGVlcklkZW50aXR5ID0gZGF0YS5ydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ1J0Y3BNdXhQb2xpY3lOZWdvdGlhdGUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSAnbmVnb3RpYXRlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1J0Y3BNdXhQb2xpY3lSZXF1aXJlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gJ3JlcXVpcmUnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSBydGNDb25maWd1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbjogSVNlc3Npb25EZXNjcmlwdGlvbik6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQge1xuICAgIGNvbnN0IHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCA9IHtzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHB9O1xuXG4gICAgc3dpdGNoIChzZXNzaW9uRGVzY3JpcHRpb24udHlwZSkge1xuICAgICAgY2FzZSAnT2ZmZXInOlxuICAgICAgICBydGNTZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9ICdvZmZlcic7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBbnN3ZXInOlxuICAgICAgICBydGNTZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9ICdhbnN3ZXInO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBydGNTZXNzaW9uRGVzY3JpcHRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLnNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUodHlwZTogUlRDU2RwVHlwZSk6IFNkcFR5cGUge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYW5zd2VyJzpcbiAgICAgICAgcmV0dXJuICdBbnN3ZXInO1xuICAgICAgY2FzZSAnb2ZmZXInOlxuICAgICAgICByZXR1cm4gJ09mZmVyJztcbiAgICAgIGNhc2UgJ3ByYW5zd2VyJzpcbiAgICAgIGNhc2UgJ3JvbGxiYWNrJzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTRFAgdHlwZSBbJHt0eXBlfV0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lFZGdlQXV0aH0gZnJvbSAnLi9FZGdlQXV0aFRva2VuJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi9FZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aCB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGgnKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRWRnZVRva2VuKTogSUVkZ2VBdXRoIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFRva2VuKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGguX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuY29kZWRFZGdlQXV0aFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VBdXRoVG9rZW4gPSBKU09OLnBhcnNlKGVuY29kZWRFZGdlQXV0aFRva2VuKTtcblxuICAgICAgZWRnZUF1dGhUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZUF1dGhUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBlZGdlQXV0aFRva2VuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRVcmkocGFyc2VkVG9rZW46IElFZGdlQXV0aCk6IFVSTCB7XG4gICAgcmV0dXJuIHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLnVyaSA/XG4gICAgICBuZXcgVVJMKHBhcnNlZFRva2VuLnRva2VuLnVyaSkgOiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbmFuY3kocGFyc2VkVG9rZW46IElFZGdlQXV0aCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQgP1xuICAgICAgcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCA6ICcnO1xuICB9XG5cbiAgc3RhdGljIGlzVmFsaWRUb2tlbih0b2tlbjogRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi8uLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSVE1QRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDwgODQpIHx8XG4gICAgICAoQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8IDcwKSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRWRnZScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuLi9jaGFubmVscy9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVuZFBvaW50LCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLCB7SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0fSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0JztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGw8RW5kUG9pbnQsIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4oW1xuICAgICAgRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKSxcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gdGhpcy50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgbG9jYWxPZmZlciA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihsb2NhbE9mZmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGlzUnRtcCA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKTtcblxuICAgIGlmIChpc1J0bXApIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0cmVhbWluZyA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpO1xuXG4gICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBMaXZlIFN0cmVhbSBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFsVGltZVN0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fU0RLVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19TREtWRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9mdWxsL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
10420
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Qcml2YWN5TW9kZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2VkZ2VBdXRoL0VkZ2VBdXRoLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Z1bGwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsIl9kaXNwb3NhYmxlcyIsImRpc3Bvc2UiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJ2YWx1ZSIsIkJyb3dzZXJEZXRlY3RvciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJwYXJzZUJyb3dzZXJOYW1lIiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiaW5jbHVkZXMiLCJQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJuYW1lIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJOZXR3b3JrTW9uaXRvciIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsInJ0dCIsImxpc3RlbmVyIiwiX3J0dCIsImdldFJvdW5kVHJpcFRpbWUiLCJfZWZmZWN0aXZlVHlwZSIsImdldEVmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9pc1N1cHBvcnRlZCIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsIl9fUFJJVkFDWV9NT0RFX18iLCJlIiwiYXBwbHlJc1ByaXZhdGUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJsZW5ndGgiLCJTdHJpbmdzIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsIkVycm9yIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJfYXBwZW5kZXJzIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiX3RocmVzaG9sZCIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwibG9nIiwiZXJyb3IiLCJ0aHJlc2hvbGQiLCJMb2dnZXIiLCJUcmFjZSIsImFyZ3MiLCJEZWJ1ZyIsIkluZm8iLCJXYXJuIiwiRmF0YWwiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIkpTT04iLCJrZXkiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIl9jYXRlZ29yeSIsImFwcGVuZGVycyIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwibG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIm1ldHJpY3MiLCJfbWV0cmljcyIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwidXJsIiwibWV0cmljc1VybCIsIlVSTCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwidGVsZW1ldHJ5TGV2ZWwiLCJ2YWx1ZXMiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibG9jYXRpb24iLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInJlY29yZHMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJzZW5kTWV0cmljcyIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInByb3RvdHlwZSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwic2V0VGltZW91dCIsIndhcm4iLCJQcm9taXNlSGFuZGxlciIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIkZlYXR1cmVFbmFibGVtZW50IiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJhZGRUcmFuc2NlaXZlciIsImRpcmVjdGlvbiIsInZpZGVvVHJhbnNjZWl2ZXIiLCJjcmVhdGVPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwibG9jYWxPZmZlciIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJ1cGRhdGVTdGF0aXN0aWNUaW1lT3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVPdXQiLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0cyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwic3NyYyIsImJ5dGVzUmVjZWl2ZWQiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwiX3J0Y1N0YXRpc3RpYyIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwic3BsaXRTZHAiLCJ1c2VkQ29kZWNMaW5lIiwiZmluZCIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwib3B0aW9ucyIsImNyZWF0ZUFuc3dlciIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsImhhc0NyeXB0byIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwic2VsZWN0b3IiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImNsb3NlIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJoYW5kbGVyIiwib250cmFjayIsIm9uaWNlY2FuZGlkYXRlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5Iiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJyZW1vdmUiLCJpZ25vcmVkVGVuYW5jeSIsIl9tZXRyaWNzU2VydmljZSIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsIl90ZWxlbWV0cnlMZXZlbCIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJnZXRCb29sZWFuVmFsdWUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwicGFyc2VkVG9rZW4iLCJFZGdlQXV0aCIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiX2luaXRpYWxpemVkIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiaW5pdCIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiam9pbiIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiZGVmYXVsdFRhcmdldExhZyIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJ0b2tlbiIsInRhcmdldExhZyIsIl9jb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwicnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwic2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJzdGFydCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsInBhdXNlIiwic3JjT2JqZWN0IiwiY2xlYW5VcFJlc291cmNlcyIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwibXV0ZWQiLCJzdG9wIiwiaXNEaXNwb3NlZCIsInByb2Nlc3NTdGFydCIsImZpbmFsbHkiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwidXJpIiwiZ2V0VXJpIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsInN0cmVhbVBsYXllciIsIlN0cmVhbUZhY3RvcnkiLCJmYWlsIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsImRpc3Bvc2FibGVzIiwibWluIiwicG93IiwibWF4IiwiZGVzdHJveVN0cmVhbSIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJwbGF5UHJvbWlzZSIsInBsYXkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsIl9jYWNoZSIsImRpc2NvdmVyeVNlcnZpY2UiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwidGltZW91dCIsInJhY2UiLCJvayIsInRleHQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJuZXZlclJlc29sdmUiLCJwaW5nIiwidGltZSIsInNka1ZlcnNpb24iLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJfZGlzY292ZXJ5VXJpIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiYnVpbGRQaW5nVXJsIiwiZmluaXNoZWQiLCJfcm91bmRUcmlwVGltZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiYXBwbGljYXRpb25JZCIsImJ1aWxkVXJsIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJlZGdlQXV0aFRva2VuIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUiLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImJvZHlXaXRob3V0T2ZmZXIiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwiaHR0cFJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImRlYnVnIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwicGF0aCIsInBhdGhBc0FycmF5IiwiY29uY2F0IiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicGVlcklkZW50aXR5IiwicnRjcE11eFBvbGljeSIsImNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwicnRjU2Vzc2lvbkRlc2NyaXB0aW9uIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsImlzVmFsaWRUb2tlbiIsImVuY29kZWRFZGdlQXV0aFRva2VuIiwiYXRvYiIsInN1YnN0ciIsInBhcnNlIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiYWxsIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiYXBwbHlTdGF0dXMiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwic3VjY2VzcyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwic3RhdGlzdGljcyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsInRydW5jYXRlSWNlU2VydmVycyIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJpc1J0bXAiLCJjYXBhYmlsaXRpZXMiLCJpc1N0cmVhbWluZyIsIl9fU0RLVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJzZW5kTG9ncyIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsImZsb29yIiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJvdGhlciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0cmVhbUlkIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlcmVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJlbmQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkE7QUFDQTs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUM7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7QUNKQSx1QkFBdUIsbUJBQU8sQ0FBQyxxRkFBb0I7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQSxvQzs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0M7Ozs7Ozs7Ozs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsbUM7Ozs7Ozs7Ozs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQzs7Ozs7Ozs7OztBQ05BO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCOzs7Ozs7Ozs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSw4Q0FBOEMsT0FBTzs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQTBCLG9CQUFvQixDQUFFO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztVQ3h0QkE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDckJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiZnVsbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXk7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZDsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5XCIpO1xuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWdub3JlZCBhcyB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgbGVnYWN5IGdldFN0YXRzIHR5cGVzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuLy8gVGhpcyBmaWxlIGlzIHVzZWQgb25seSBmb3IgdGhlIHNpbGVudCBidWlsZCB0byBtb2NrIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgY2xhc3NcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZVxuICAgIH07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUFJJVkFDWV9NT0RFX186IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXZhY3lNb2RlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzUHJpdmF0ZTogYm9vbGVhbjtcblxuICBzdGF0aWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNQcml2YXRlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SXNQcml2YXRlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBfX1BSSVZBQ1lfTU9ERV9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5Qcml2YWN5TW9kZS5hcHBseUlzUHJpdmF0ZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbElucHV0VHlwZXN9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsIDogVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuICAvKiBlc2xpbnQtZW5hYmxlKi9cblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWR7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyXCInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkgPSBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlO1xuXG4gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9uOiAncmVjdm9ubHknfSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb246ICdyZWN2b25seSd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID8gdW5kZWZpbmVkIDoge1xuICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lT3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVPdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdHNbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0c1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0c1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnBzJ10gPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdHNba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0cztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVPdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lT3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0c1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdHM7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lT3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZU91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGFwcGx5Q29kZWModHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGxpdFNkcCA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzcGxpdFNkcC5maW5kKGl0ZW0gPT4gaXRlbS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzcGxpdFNkcC5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcC5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbElucHV0VHlwZXN9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbElucHV0VHlwZXM7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCghUHJpdmFjeU1vZGUuaXNQcml2YXRlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihTREsuX3BlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pO1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBTREsuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJlxuICAgICAgICBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICBTREsuZGlzcG9zZSgpO1xufSk7XG5cblNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuXG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmNvbnN0IGRlZmF1bHRUYXJnZXRMYWcgPSAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDIwMDA7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBzdHJpbmcsIHRhcmdldExhZzogbnVtYmVyID0gZGVmYXVsdFRhcmdldExhZykge1xuICAgIHRoaXMuX2NvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQodG9rZW4sIHRhcmdldExhZyk7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlWaWRlb0VsZW1lbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX2NvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fY29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbikgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fY29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbik6IFVSTCB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGguaXNWYWxpZFRva2VuKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgTWF0aC5wb3coYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KDAsIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlIC0gMSkpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgdG9rZW46IFN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG5cbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHNlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KHRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBFcnJvcixcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IENoYW5uZWwgZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBvcHRpb25zLnRhcmdldExhZyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG5cbiAgICBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuXG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGNvbnN0IG5ldmVyUmVzb2x2ZSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXF1ZXN0IFslc10gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZycsIHVybCk7XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldmVyUmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJU2Vzc2lvbkRlc2NyaXB0aW9uLCBTZHBUeXBlfSBmcm9tICcuLi9hcGkvU2Vzc2lvbkRlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBzdHJpbmcsIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0b2tlbik7XG5cbiAgICBpZiAoIXBhcnNlZFRva2VuIHx8ICFwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRlbmFuY3kgPSBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBlZGdlQXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLmNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBlZGdlQXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge307XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeUJhbGFuY2VkJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnYmFsYW5jZWQnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4Q29tcGF0JzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnbWF4LWNvbXBhdCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhCdW5kbGUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtYnVuZGxlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICAgICAgdXJsczogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgICAgICBjcmVkZW50aWFsOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeUFsbCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ2FsbCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lSZWxheSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ3JlbGF5JztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVB1YmxpYyc6XG4gICAgICAgICAgICAgIC8vIERlcHJlY2F0ZWQgLSBOb3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkpIHtcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eSA9IGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5TmVnb3RpYXRlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gJ25lZ290aWF0ZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5UmVxdWlyZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICdyZXF1aXJlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gcnRjQ29uZmlndXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb246IElTZXNzaW9uRGVzY3JpcHRpb24pOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0IHtcbiAgICBjb25zdCBydGNTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgPSB7c2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwfTtcblxuICAgIHN3aXRjaCAoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZmVyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnb2ZmZXInO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQW5zd2VyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnYW5zd2VyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjU2Vzc2lvbkRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKHR5cGU6IFJUQ1NkcFR5cGUpOiBTZHBUeXBlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIHJldHVybiAnQW5zd2VyJztcbiAgICAgIGNhc2UgJ29mZmVyJzpcbiAgICAgICAgcmV0dXJuICdPZmZlcic7XG4gICAgICBjYXNlICdwcmFuc3dlcic6XG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU0RQIHR5cGUgWyR7dHlwZX1dIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJRWRnZUF1dGh9IGZyb20gJy4vRWRnZUF1dGhUb2tlbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4vRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGgge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IElFZGdlQXV0aCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbih0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmNvZGVkRWRnZUF1dGhUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlQXV0aFRva2VuID0gSlNPTi5wYXJzZShlbmNvZGVkRWRnZUF1dGhUb2tlbik7XG5cbiAgICAgIGVkZ2VBdXRoVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VBdXRoVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gZWRnZUF1dGhUb2tlbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0VXJpKHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBVUkwge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi51cmkgP1xuICAgICAgbmV3IFVSTChwYXJzZWRUb2tlbi50b2tlbi51cmkpIDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZW5hbmN5KHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkID9cbiAgICAgIHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQgOiAnJztcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRNUEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8IDg0KSB8fFxuICAgICAgKEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPCA3MCkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0VkZ2UnIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFbmRQb2ludCwge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSwge0lQZWVyQ29ubmVjdGlvbk9mZmVySW5pdH0gZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsQ29udGV4dCc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsPEVuZFBvaW50LCBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+KFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gdGhpcy50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgbG9jYWxPZmZlciA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihsb2NhbE9mZmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGlzUnRtcCA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKTtcblxuICAgIGlmIChpc1J0bXApIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0cmVhbWluZyA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpO1xuXG4gICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBMaXZlIFN0cmVhbSBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFsVGltZVN0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fU0RLVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19TREtWRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9mdWxsL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==