@phenixrts/sdk 2025.0.2 → 2025.0.4-beta.409

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 (48) hide show
  1. package/channels/debug/channels.js +1303 -1258
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +1216 -1171
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/debug.provideGlobalScope/channels.js +1275 -1230
  6. package/channels/debug.provideGlobalScope/package.json +1 -1
  7. package/channels/es5.debug.private/channels.js +75 -30
  8. package/channels/es5.debug.private/package.json +1 -1
  9. package/channels/min/channels.js +1 -1
  10. package/channels/min/channels.js.map +1 -1
  11. package/channels/min/package.json +1 -1
  12. package/channels/min.private/channels.js +1 -1
  13. package/channels/min.private/channels.js.map +1 -1
  14. package/channels/min.private/package.json +1 -1
  15. package/channels/min.provideGlobalScope/channels.js +1 -1
  16. package/channels/min.provideGlobalScope/channels.js.map +1 -1
  17. package/channels/min.provideGlobalScope/package.json +1 -1
  18. package/channels/package.json +1 -1
  19. package/full/debug/full.js +1556 -1404
  20. package/full/debug/package.json +1 -1
  21. package/full/debug.private/full.js +1469 -1317
  22. package/full/debug.private/package.json +1 -1
  23. package/full/min/full.js +1 -1
  24. package/full/min/full.js.map +1 -1
  25. package/full/min/package.json +1 -1
  26. package/full/min.private/full.js +1 -1
  27. package/full/min.private/full.js.map +1 -1
  28. package/full/min.private/package.json +1 -1
  29. package/full/package.json +1 -1
  30. package/package.json +1 -1
  31. package/publish/debug/package.json +1 -1
  32. package/publish/debug/publish.js +1020 -869
  33. package/publish/debug.private/package.json +1 -1
  34. package/publish/debug.private/publish.js +1020 -869
  35. package/publish/min/package.json +1 -1
  36. package/publish/min/publish.js +1 -1
  37. package/publish/min/publish.js.map +1 -1
  38. package/publish/min.private/package.json +1 -1
  39. package/publish/min.private/publish.js +1 -1
  40. package/publish/min.private/publish.js.map +1 -1
  41. package/publish/package.json +1 -1
  42. package/types/globalScope/GlobalScope.d.ts +1 -0
  43. package/types/globalScope/IGlobalScope.d.ts +1 -0
  44. package/types/globalScope/IWindow.d.ts +1 -0
  45. package/types/globalScope/ProvidedGlobalScope.d.ts +1 -0
  46. package/types/rtc/PeerConnectionService.d.ts +9 -3
  47. package/types/sdk/publish/PublisherContext.d.ts +7 -2
  48. package/types/sdk/publish/RealTimePublisher.d.ts +1 -0
@@ -871,7 +871,8 @@ var FeatureEnablement = /*#__PURE__*/function () {
871
871
  }, {
872
872
  key: "isRequestVideoFrameCallbackSupported",
873
873
  get: function get() {
874
- return typeof HTMLVideoElement.prototype.requestVideoFrameCallback !== 'undefined';
874
+ var _GlobalScope$value2;
875
+ return typeof ((_GlobalScope$value2 = _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_2__["default"].value) === null || _GlobalScope$value2 === void 0 ? void 0 : _GlobalScope$value2.HTMLVideoElement.prototype.requestVideoFrameCallback) !== 'undefined';
875
876
  }
876
877
  }, {
877
878
  key: "isChannelFrameTimingInformationSupported",
@@ -992,6 +993,11 @@ var GlobalScope = /*#__PURE__*/function () {
992
993
  get: function get() {
993
994
  return this._window.FormData;
994
995
  }
996
+ }, {
997
+ key: "HTMLVideoElement",
998
+ get: function get() {
999
+ return this._window.HTMLVideoElement;
1000
+ }
995
1001
  }, {
996
1002
  key: "MediaStream",
997
1003
  get: function get() {
@@ -2605,7 +2611,9 @@ var TelemetryDefault = /*#__PURE__*/function () {
2605
2611
 
2606
2612
  "use strict";
2607
2613
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2608
- /* harmony export */ "default": function() { return /* binding */ PeerConnectionService; }
2614
+ /* harmony export */ EncodedInsertableStreams: function() { return /* binding */ EncodedInsertableStreams; },
2615
+ /* harmony export */ "default": function() { return /* binding */ PeerConnectionService; },
2616
+ /* harmony export */ defaultTrackKinds: function() { return /* binding */ defaultTrackKinds; }
2609
2617
  /* harmony export */ });
2610
2618
  /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js");
2611
2619
  /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
@@ -2630,6 +2638,12 @@ var TelemetryDefault = /*#__PURE__*/function () {
2630
2638
 
2631
2639
 
2632
2640
 
2641
+ var EncodedInsertableStreams = /*#__PURE__*/function (EncodedInsertableStreams) {
2642
+ EncodedInsertableStreams[EncodedInsertableStreams["Disabled"] = 0] = "Disabled";
2643
+ EncodedInsertableStreams[EncodedInsertableStreams["Enabled"] = 1] = "Enabled";
2644
+ return EncodedInsertableStreams;
2645
+ }({});
2646
+ var defaultTrackKinds = ['audio', 'video'];
2633
2647
  var PeerConnectionService = /*#__PURE__*/function () {
2634
2648
  function PeerConnectionService() {
2635
2649
  (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__["default"])(this, PeerConnectionService);
@@ -2679,6 +2693,7 @@ var PeerConnectionService = /*#__PURE__*/function () {
2679
2693
  value: function () {
2680
2694
  var _createPeerConnectionOffer = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
2681
2695
  var direction,
2696
+ trackKinds,
2682
2697
  encodedInsertableStreams,
2683
2698
  value,
2684
2699
  configuration,
@@ -2687,63 +2702,74 @@ var PeerConnectionService = /*#__PURE__*/function () {
2687
2702
  while (1) switch (_context3.prev = _context3.next) {
2688
2703
  case 0:
2689
2704
  direction = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : 'recvonly';
2690
- encodedInsertableStreams = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : false;
2691
- if (!(PeerConnectionService._cached && PeerConnectionService._cached.direction === direction && !encodedInsertableStreams)) {
2692
- _context3.next = 6;
2705
+ trackKinds = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : defaultTrackKinds;
2706
+ encodedInsertableStreams = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : EncodedInsertableStreams.Disabled;
2707
+ if (!(PeerConnectionService._cached && PeerConnectionService._cached.direction === direction && encodedInsertableStreams === EncodedInsertableStreams.Disabled && this.isTracksKindsEquivalentToDefault(trackKinds))) {
2708
+ _context3.next = 7;
2693
2709
  break;
2694
2710
  }
2695
2711
  value = PeerConnectionService._cached.peerConnection;
2696
2712
  PeerConnectionService._cached = null;
2697
2713
  return _context3.abrupt("return", value);
2698
- case 6:
2714
+ case 7:
2699
2715
  configuration = _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_7__["default"].isEncodedInsertableStreamsSupported ? {
2700
- encodedInsertableStreams: encodedInsertableStreams
2716
+ encodedInsertableStreams: encodedInsertableStreams === EncodedInsertableStreams.Enabled
2701
2717
  } : undefined;
2702
2718
  return _context3.abrupt("return", PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration).then(/*#__PURE__*/function () {
2703
2719
  var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__["default"])(/*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(peerConnection) {
2704
- var supportsAddTransceiver, videoTransceiver, audioTransceiver, options;
2720
+ var supportsAddTransceiver, audioTransceivers, videoTransceivers, options;
2705
2721
  return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
2706
2722
  while (1) switch (_context2.prev = _context2.next) {
2707
2723
  case 0:
2708
2724
  supportsAddTransceiver = peerConnection.supportsAddTransceiver;
2725
+ audioTransceivers = [];
2726
+ videoTransceivers = [];
2709
2727
  if (!supportsAddTransceiver) {
2710
- _context2.next = 11;
2728
+ _context2.next = 12;
2711
2729
  break;
2712
2730
  }
2713
- audioTransceiver = peerConnection.addTransceiver('audio', {
2714
- direction: direction
2715
- });
2716
- videoTransceiver = peerConnection.addTransceiver('video', {
2717
- direction: direction
2731
+ trackKinds.forEach(function (kind) {
2732
+ if (kind === 'audio') {
2733
+ audioTransceivers.push(peerConnection.addTransceiver(kind, {
2734
+ direction: direction
2735
+ }));
2736
+ return;
2737
+ }
2738
+ if (kind === 'video') {
2739
+ videoTransceivers.push(peerConnection.addTransceiver(kind, {
2740
+ direction: direction
2741
+ }));
2742
+ return;
2743
+ }
2718
2744
  });
2719
- _context2.t0 = audioTransceiver;
2720
- _context2.t1 = videoTransceiver;
2745
+ _context2.t0 = audioTransceivers;
2746
+ _context2.t1 = videoTransceivers;
2721
2747
  _context2.t2 = peerConnection;
2722
- _context2.next = 9;
2748
+ _context2.next = 10;
2723
2749
  return peerConnection.createOffer(undefined);
2724
- case 9:
2750
+ case 10:
2725
2751
  _context2.t3 = _context2.sent;
2726
2752
  return _context2.abrupt("return", {
2727
- audioTransceiver: _context2.t0,
2728
- videoTransceiver: _context2.t1,
2753
+ audioTransceivers: _context2.t0,
2754
+ videoTransceivers: _context2.t1,
2729
2755
  peerConnection: _context2.t2,
2730
2756
  localOffer: _context2.t3
2731
2757
  });
2732
- case 11:
2758
+ case 12:
2733
2759
  options = direction === 'recvonly' ? {
2734
2760
  offerToReceiveAudio: true,
2735
2761
  offerToReceiveVideo: true
2736
2762
  } : {};
2737
2763
  _context2.t4 = peerConnection;
2738
- _context2.next = 15;
2764
+ _context2.next = 16;
2739
2765
  return peerConnection.createOffer(options);
2740
- case 15:
2766
+ case 16:
2741
2767
  _context2.t5 = _context2.sent;
2742
2768
  return _context2.abrupt("return", {
2743
2769
  peerConnection: _context2.t4,
2744
2770
  localOffer: _context2.t5
2745
2771
  });
2746
- case 17:
2772
+ case 18:
2747
2773
  case "end":
2748
2774
  return _context2.stop();
2749
2775
  }
@@ -2753,17 +2779,36 @@ var PeerConnectionService = /*#__PURE__*/function () {
2753
2779
  return _ref.apply(this, arguments);
2754
2780
  };
2755
2781
  }()));
2756
- case 8:
2782
+ case 9:
2757
2783
  case "end":
2758
2784
  return _context3.stop();
2759
2785
  }
2760
- }, _callee3);
2786
+ }, _callee3, this);
2761
2787
  }));
2762
2788
  function createPeerConnectionOffer() {
2763
2789
  return _createPeerConnectionOffer.apply(this, arguments);
2764
2790
  }
2765
2791
  return createPeerConnectionOffer;
2766
2792
  }()
2793
+ }, {
2794
+ key: "isTracksKindsEquivalentToDefault",
2795
+ value: function isTracksKindsEquivalentToDefault(tracksKinds) {
2796
+ if (tracksKinds.length !== defaultTrackKinds.length) {
2797
+ return false;
2798
+ }
2799
+ var countTrackKinds = function countTrackKinds(array) {
2800
+ return array.reduce(function (trackKindCount, kind) {
2801
+ trackKindCount[kind] = (trackKindCount[kind] || 0) + 1;
2802
+ return trackKindCount;
2803
+ }, {
2804
+ audio: 0,
2805
+ video: 0
2806
+ });
2807
+ };
2808
+ var countedTrackKinds = countTrackKinds(tracksKinds);
2809
+ var countedDefaultTrackKinds = countTrackKinds(defaultTrackKinds);
2810
+ return countedTrackKinds.audio === countedDefaultTrackKinds.audio && countedTrackKinds.video === countedDefaultTrackKinds.video;
2811
+ }
2767
2812
  }]);
2768
2813
  }();
2769
2814
  (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_3__["default"])(PeerConnectionService, "_logger", _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_5__["default"].getLogger('PeerConnectionService'));
@@ -9214,8 +9259,8 @@ var RealTimeStream = /*#__PURE__*/function () {
9214
9259
  key: "start",
9215
9260
  value: function start(uri, token, listenOnStreamSetup, playMediaStreamInVideoElement) {
9216
9261
  var _this = this;
9217
- var requiresEncodedInsertableStreams = this._streamTransformContext.hasEncodedInsertableStreams.value || this._frameTimingInformationContext.shouldExtractTimecode.value || this._frameTimingInformationContext.shouldExtractTimestamps.value;
9218
- return Promise.all([_discovery_Discovery__WEBPACK_IMPORTED_MODULE_17__["default"].discoverClosestEndPointWithCaching(uri), _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_15__["default"].createPeerConnectionOffer('recvonly', requiresEncodedInsertableStreams).then(function (_ref) {
9262
+ var requiresEncodedInsertableStreams = this._streamTransformContext.hasEncodedInsertableStreams.value || this._frameTimingInformationContext.shouldExtractTimecode.value || this._frameTimingInformationContext.shouldExtractTimestamps.value ? _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_15__.EncodedInsertableStreams.Enabled : _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_15__.EncodedInsertableStreams.Disabled;
9263
+ return Promise.all([_discovery_Discovery__WEBPACK_IMPORTED_MODULE_17__["default"].discoverClosestEndPointWithCaching(uri), _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_15__["default"].createPeerConnectionOffer('recvonly', _rtc_PeerConnectionService__WEBPACK_IMPORTED_MODULE_15__.defaultTrackKinds, requiresEncodedInsertableStreams).then(function (_ref) {
9219
9264
  var localOffer = _ref.localOffer,
9220
9265
  peerConnection = _ref.peerConnection;
9221
9266
  _this._peerConnectionContext.peerConnection.value = peerConnection;
@@ -10426,7 +10471,7 @@ var VersionManager = /*#__PURE__*/function () {
10426
10471
  key: "sdkVersion",
10427
10472
  get: function get() {
10428
10473
  try {
10429
- return "2025-02-05T23:09:47.932Z (2025.0.2)";
10474
+ return "2025-02-06T18:19:43.870Z (2025.0.4-beta.409)";
10430
10475
  } catch (e) {
10431
10476
  return this._defaultVersion;
10432
10477
  }
@@ -13009,4 +13054,4 @@ __webpack_require__.r(__webpack_exports__);
13009
13054
  /******/ })()
13010
13055
  ;
13011
13056
  });
13012
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQTs7QUFFcUQ7QUFDVDtBQUNRO0FBQ2hCO0FBQ2dCO0FBRXBELElBQU1LLHFCQUFxQixHQUFHLGtCQUFrQjtBQUFDLElBRTVCQywwQkFBMEI7RUFNN0MsU0FBQUEsMkJBQUEsRUFBYztJQUFBQyxpRkFBQSxPQUFBRCwwQkFBQTtJQUFBRSxpRkFBQSx1QkFMa0MsSUFBSU4sNERBQWMsQ0FBQyxDQUFDO0lBQUFNLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBLG9DQUdmQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBRzdELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUlSLG1EQUFPLENBQVUsSUFBSSxDQUFDO0lBQy9DLElBQUksQ0FBQ1MscUJBQXFCLEdBQUcsSUFBSVIsMkRBQWUsQ0FBQyxJQUFJLENBQUNPLGFBQWEsQ0FBQztJQUNwRSxJQUFJLENBQUNFLFVBQVUsQ0FBQyxDQUFDO0VBQ25CO0VBQUMsT0FBQUMsOEVBQUEsQ0FBQVIsMEJBQUE7SUFBQVMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QztNQUMzQyxPQUFPLElBQUksQ0FBQ0oscUJBQXFCO0lBQ25DO0VBQUM7SUFBQUcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT0Msc0JBQXNCQSxDQUFBLEVBQVc7TUFDdEMsT0FBT1QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ1MseUJBQXlCO0lBQ3BEO0VBQUM7SUFBQUosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT0csT0FBT0EsQ0FBQSxFQUFTO01BQ3JCLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFKLFVBQVVBLENBQUEsRUFBUztNQUFBLElBQUFTLEtBQUE7TUFDekIsSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBQTtRQUFBLE9BQVNELEtBQUksQ0FBQ1gsYUFBYSxDQUFDTSxLQUFLLEdBQUcsQ0FBQ2pCLGdFQUFXLENBQUNpQixLQUFLLENBQUNPLGdCQUFnQjtNQUFBO01BQ25HLElBQU1DLG9CQUFvQixHQUFHLEtBQUs7TUFFbEN6QixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDUyx3QkFBd0IsQ0FBQ3JCLHFCQUFxQixFQUFFa0Isc0JBQXNCLEVBQUVFLG9CQUFvQixDQUFDO01BRS9HLElBQUksQ0FBQ0osWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUM7UUFBQSxPQUFNRCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDVywyQkFBMkIsQ0FBQ3ZCLHFCQUFxQixFQUFFa0Isc0JBQXNCLEVBQUVFLG9CQUFvQixDQUFDO01BQUEsRUFBQyxDQUFDO0lBQ2pLO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNDSDtBQUNBO0FBQ0E7QUFGQSxJQUlxQkssZUFBZTtFQUFBLFNBQUFBLGdCQUFBO0lBQUF2QixpRkFBQSxPQUFBdUIsZUFBQTtFQUFBO0VBQUEsT0FBQWhCLDhFQUFBLENBQUFnQixlQUFBO0lBQUFmLEdBQUE7SUFBQUMsR0FBQSxFQWtCbEMsU0FBQUEsSUFBQSxFQUEyQztNQUN6QyxPQUFPYyxlQUFlLENBQUNDLHNCQUFzQjtJQUMvQztFQUFDO0lBQUFoQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU8sSUFBSSxDQUFDZ0IsWUFBWTtJQUMxQjtFQUFDO0lBQUFqQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlDO01BQ3ZDLE9BQU8sSUFBSSxDQUFDaUIsb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQWxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBZ0M7TUFDOUIsT0FBT2MsZUFBZSxDQUFDSSxVQUFVO0lBQ25DO0VBQUM7SUFBQW5CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDSyxXQUFXO0lBQ3BDO0VBQUM7SUFBQXBCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDTSxXQUFXO0lBQ3BDO0VBQUM7SUFBQXJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDTyxXQUFXO0lBQ3BDO0VBQUM7SUFBQXRCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDUSxXQUFXO0lBQ3BDO0VBQUM7SUFBQXZCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDUyxXQUFXO0lBQ3BDO0VBQUM7SUFBQXhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDVSxXQUFXO0lBQ3BDO0VBQUM7SUFBQXpCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDVyxXQUFXO0lBQ3BDO0VBQUM7SUFBQTFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBT2MsZUFBZSxDQUFDWSxXQUFXO0lBQ3BDO0VBQUM7SUFBQTNCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU8wQixRQUFRQSxDQUFBLEVBQVk7TUFDekIsT0FBT2IsZUFBZSxDQUFDYyxTQUFTO0lBQ2xDO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWU0QiwwQkFBMEJBLENBQUEsRUFBVztNQUNsRCxJQUFJLENBQUNDLFNBQVMsSUFBSSxDQUFDQSxTQUFTLENBQUNDLFNBQVMsRUFBRTtRQUN0QyxPQUFPLEVBQUU7TUFDWDtNQUVBLElBQU1DLHFCQUFxQixHQUFHRixTQUFTLENBQUNDLFNBQVMsQ0FBQ0UsS0FBSyxDQUFDbkIsZUFBZSxDQUFDb0IsMkJBQTJCLENBQUM7TUFFcEcsSUFBSUYscUJBQXFCLElBQUlBLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JELE9BQU9BLHFCQUFxQixDQUFDLENBQUMsQ0FBQztNQUNqQztNQUVBLE9BQU9sQixlQUFlLENBQUNxQiwrQkFBK0IsQ0FBQyxDQUFDO0lBQzFEO0VBQUM7SUFBQXBDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWVtQyxnQkFBZ0JBLENBQUEsRUFBVztNQUN4QyxJQUFJLENBQUN0QixlQUFlLENBQUNDLHNCQUFzQixFQUFFO1FBQzNDLE9BQU8sRUFBRTtNQUNYO01BRUEsSUFBTXNCLGVBQWUsR0FBR3ZCLGVBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QixLQUFLLENBQUMsR0FBRyxDQUFDO01BRXpFLElBQUksQ0FBQ0QsZUFBZSxJQUFJLENBQUNBLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMzQyxPQUFPLEVBQUU7TUFDWDtNQUVBLE9BQU9BLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDM0I7RUFBQztJQUFBdEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZXNDLHdCQUF3QkEsQ0FBQSxFQUFXO01BQ2hELElBQUksQ0FBQ3pCLGVBQWUsQ0FBQ0Msc0JBQXNCLEVBQUU7UUFDM0MsT0FBTyxDQUFDO01BQ1Y7TUFFQSxJQUFNeUIsa0JBQWtCLEdBQUcxQixlQUFlLENBQUNDLHNCQUFzQixDQUFDdUIsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUU1RSxJQUFJLENBQUNFLGtCQUFrQixJQUFJLENBQUNBLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pELE9BQU8sQ0FBQztNQUNWO01BRUEsSUFBTUMsV0FBVyxHQUFHRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFFekMsSUFBSSxDQUFDQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxDQUFDO01BQ1Y7TUFFQSxPQUFPQyxNQUFNLENBQUNELFdBQVcsQ0FBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvQztFQUFDO0lBQUF2QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFla0MsK0JBQStCQSxDQUFBLEVBQVc7TUFDdkQsSUFBSSxDQUFDTCxTQUFTLElBQUksQ0FBQ0EsU0FBUyxDQUFDQyxTQUFTLEVBQUU7UUFDdEMsT0FBTyxFQUFFO01BQ1g7TUFFQSxJQUFNQSxTQUFTLEdBQUdELFNBQVMsQ0FBQ0MsU0FBUztNQUNyQyxJQUFNWSxJQUFJLEdBQUdaLFNBQVMsQ0FBQ2EsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUV2QyxJQUFJRCxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ1o7UUFDQSxhQUFBRSxNQUFBLENBQWFDLFFBQVEsQ0FBQ2YsU0FBUyxDQUFDZ0IsU0FBUyxDQUFDSixJQUFJLEdBQUcsQ0FBQyxFQUFFWixTQUFTLENBQUNhLE9BQU8sQ0FBQyxHQUFHLEVBQUVELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ3hGO01BRUEsSUFBTUssT0FBTyxHQUFHakIsU0FBUyxDQUFDYSxPQUFPLENBQUMsVUFBVSxDQUFDO01BRTdDLElBQUlJLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDZjtRQUNBLElBQU1DLE9BQU8sR0FBR2xCLFNBQVMsQ0FBQ2EsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUV4QyxhQUFBQyxNQUFBLENBQWFDLFFBQVEsQ0FBQ2YsU0FBUyxDQUFDZ0IsU0FBUyxDQUFDRSxPQUFPLEdBQUcsQ0FBQyxFQUFFbEIsU0FBUyxDQUFDYSxPQUFPLENBQUMsR0FBRyxFQUFFSyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztNQUM5RjtNQUVBLE9BQU8sRUFBRTtJQUNYO0VBQUM7QUFBQTtBQUFBQyxnQkFBQSxHQTdJa0JwQyxlQUFlO0FBQUF0QixpRkFBQSxDQUFmc0IsZUFBZSxpQ0FDb0IsNEpBQTRKO0FBQUF0QixpRkFBQSxDQUQvTHNCLGVBQWUsNEJBRWVBLGdCQUFlLENBQUNlLDBCQUEwQixDQUFDLENBQUM7QUFBQXJDLGlGQUFBLENBRjFFc0IsZUFBZSxrQkFHS0EsZ0JBQWUsQ0FBQ3NCLGdCQUFnQixDQUFDLENBQUM7QUFBQTVDLGlGQUFBLENBSHREc0IsZUFBZSwwQkFJYUEsZ0JBQWUsQ0FBQ3lCLHdCQUF3QixDQUFDLENBQUM7QUFBQS9DLGlGQUFBLENBSnRFc0IsZUFBZSxlQU1HLGlEQUFpRCxDQUFFcUMsSUFBSSxFQUFBQyxVQUFBLEdBQUN0QixTQUFTLGNBQUFzQixVQUFBLHVCQUFUQSxVQUFBLENBQVdyQixTQUFTLENBQUM7QUFBQXZDLGlGQUFBLENBTi9Gc0IsZUFBZSxnQkFPSSxVQUFVLENBQUVxQyxJQUFJLEVBQUFFLFdBQUEsR0FBQ3ZCLFNBQVMsY0FBQXVCLFdBQUEsdUJBQVRBLFdBQUEsQ0FBV3RCLFNBQVMsQ0FBQztBQUFBdkMsaUZBQUEsQ0FQekRzQixlQUFlLGlCQVNJQSxnQkFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFBQTlELGlGQUFBLENBVGhGc0IsZUFBZSxpQkFVSUEsZ0JBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE5RCxpRkFBQSxDQVZoRnNCLGVBQWUsaUJBV0lBLGdCQUFlLENBQUNDLHNCQUFzQixDQUFDdUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBOUQsaUZBQUEsQ0FYaEZzQixlQUFlLGlCQVlJQSxnQkFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFBQTlELGlGQUFBLENBWmhGc0IsZUFBZSxpQkFhSUEsZ0JBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE5RCxpRkFBQSxDQWJoRnNCLGVBQWUsaUJBY0lBLGdCQUFlLENBQUNDLHNCQUFzQixDQUFDdUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBOUQsaUZBQUEsQ0FkaEZzQixlQUFlLGlCQWVJQSxnQkFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFBQTlELGlGQUFBLENBZmhGc0IsZUFBZSxpQkFnQklBLGdCQUFlLENBQUNDLHNCQUFzQixDQUFDdUMsUUFBUSxDQUFDLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQnJHO0FBQ0E7QUFDQTs7QUFFc0U7QUFDWDtBQUNLO0FBQ1Y7O0FBRXREO0FBQ0E7QUFBQSxJQUNxQkssaUNBQWlDO0VBQUEsU0FBQUEsa0NBQUE7SUFBQXBFLGlGQUFBLE9BQUFvRSxpQ0FBQTtFQUFBO0VBQUEsT0FBQTdELDhFQUFBLENBQUE2RCxpQ0FBQTtJQUFBNUQsR0FBQTtJQUFBRSxLQUFBLEVBQ3BELFNBQWMyRCxjQUFjQSxDQUFDQyxJQUFZLEVBQVU7TUFDakQsT0FBT0YsaUNBQWlDLENBQUNHLGtCQUFrQixDQUFDRCxJQUFJLENBQUM7SUFDbkU7RUFBQztJQUFBOUQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBYzhELGVBQWVBLENBQUNGLElBQVksRUFBVztNQUNuRCxPQUFPRixpQ0FBaUMsQ0FBQ0ssbUJBQW1CLENBQUNILElBQUksQ0FBQztJQUNwRTtFQUFDO0lBQUE5RCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW9FO01BQ2xFLE9BQU87UUFDTCxzQkFBc0IsRUFBRXVELHVFQUFxQixDQUFDVSx5Q0FBeUMsQ0FBQ1QsaUVBQWdCLENBQUNVLHFCQUFxQixDQUFDO1FBQy9ILHNCQUFzQixFQUFFVCxtRUFBbUIsQ0FBQ1UscUNBQXFDLENBQUNULDhEQUFjLENBQUNVLG1CQUFtQixDQUFDO1FBQ3JILDhCQUE4QixFQUFFWCxtRUFBbUIsQ0FBQ1UscUNBQXFDLENBQUNULDhEQUFjLENBQUNXLDBCQUEwQixDQUFDO1FBQ3BJLGdDQUFnQyxFQUFFWixtRUFBbUIsQ0FBQ1UscUNBQXFDLENBQUNULDhEQUFjLENBQUNZLDRCQUE0QixDQUFDO1FBQ3hJLHNCQUFzQixFQUFFLEVBQUU7UUFDMUIsWUFBWSxFQUFFLEVBQUU7UUFDaEIsaUJBQWlCLEVBQUU7TUFDckIsQ0FBQztJQUNIO0VBQUM7SUFBQXZFLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0U7TUFDcEUsT0FBTztRQUNMLHVDQUF1QyxFQUFFLElBQUk7UUFDN0MsZ0RBQWdELEVBQUUsSUFBSTtRQUN0RCw0Q0FBNEMsRUFBRSxJQUFJO1FBQ2xELGtEQUFrRCxFQUFFO01BQ3RELENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZDSDtBQUNBO0FBQ0E7O0FBRXFEO0FBQ1k7QUFBQSxJQUU1Q3dFLHVCQUF1QjtFQTBCMUMsU0FBQUEsd0JBQUEsRUFBc0I7SUFBQWpGLGlGQUFBLE9BQUFpRix1QkFBQTtJQUNwQixNQUFNLElBQUlDLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQztFQUMzRjtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBMEUsdUJBQUE7SUFBQXpFLEdBQUE7SUFBQUUsS0FBQSxFQTNCRCxTQUFPeUUsc0JBQXNCQSxDQUFBLEVBQVM7TUFDcEMsSUFBSUgsc0VBQWlCLENBQUNJLHVDQUF1QyxFQUFFO1FBQzdELElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsQ0FBQztNQUNyQztJQUNGO0VBQUM7SUFBQTdFLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWUyRSw0QkFBNEJBLENBQUEsRUFBUztNQUNsRCxJQUFJTCxzRUFBaUIsQ0FBQ00seUJBQXlCLEVBQUU7UUFDL0M3RixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDNkUsY0FBYyxDQUFDLElBQUksQ0FBQ0MsdUNBQXVDLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzRixDQUFDLE1BQU07UUFDTGhHLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUMsSUFBSSxDQUFDRix1Q0FBdUMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUMxRjtJQUNGO0VBQUM7SUFBQWpGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWU4RSx1Q0FBdUNBLENBQUEsRUFBUztNQUM3RCxJQUFJRyxHQUE0QixHQUFHbEcsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2tGLHFCQUFxQixDQUFtQixLQUFLLENBQUM7TUFFbkdELEdBQUcsQ0FBQ0UsR0FBRyxHQUFHcEcsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ29GLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDLElBQUlDLElBQUksQ0FBQyxDQUFDLElBQUlDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JGTixHQUFHLENBQUNPLE9BQU8sR0FBRyxZQUFXO1FBQ3ZCekcsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ29GLEdBQUcsQ0FBQ0ssZUFBZSxDQUFDLElBQUksQ0FBQ04sR0FBRyxDQUFDO1FBRS9DRixHQUFHLEdBQUcsSUFBSTtNQUNaLENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkg7QUFDQTtBQUNBOztBQUVxRDtBQUVUO0FBQ1E7QUFDaEI7QUFBQSxJQUVmUyxjQUFjO0VBT2pDLFNBQUFBLGVBQUEsRUFBYztJQUFBcEcsaUZBQUEsT0FBQW9HLGNBQUE7SUFBQW5HLGlGQUFBLHVCQU5rQyxJQUFJTiw0REFBYyxDQUFDLENBQUM7SUFBQU0saUZBQUEsdUJBQzNCUixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDMkYsbUJBQW1CLEtBQUtDLFNBQVM7SUFBQXJHLGlGQUFBLGVBQ3ZDLElBQUlMLG1EQUFPLENBQXFCMEcsU0FBUyxDQUFDO0lBQUFyRyxpRkFBQSx5QkFDaEMsSUFBSUwsbURBQU8sQ0FBcUIwRyxTQUFTLENBQUM7SUFBQXJHLGlGQUFBLHNDQUM3QixJQUFJTCxtREFBTyxDQUFxQjBHLFNBQVMsQ0FBQztJQUdwSCxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLEVBQUU7TUFDckI7SUFDRjtJQUVBLElBQUksQ0FBQ0MsMkJBQTJCLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUM7RUFDekI7RUFBQyxPQUFBbEcsOEVBQUEsQ0FBQTZGLGNBQUE7SUFBQTVGLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNpRyxZQUFZO0lBQzFCO0VBQUM7SUFBQWxHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUM7TUFDckMsT0FBTyxJQUFJLENBQUNrRyxJQUFJO0lBQ2xCO0VBQUM7SUFBQW5HLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUQ7TUFDL0MsT0FBTyxJQUFJLENBQUNtRyxjQUFjO0lBQzVCO0VBQUM7SUFBQXBHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEQ7TUFDNUQsT0FBTyxJQUFJLENBQUNvRywyQkFBMkI7SUFDekM7RUFBQztJQUFBckcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUW9HLDZCQUE2QkEsQ0FBQSxFQUFXO01BQUEsSUFBQUMsSUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUM5QyxRQUFBSCxJQUFBLElBQUFDLHFCQUFBLElBQUFDLHNCQUFBLEdBQU94SCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDMkYsbUJBQW1CLGNBQUFZLHNCQUFBLHVCQUFyQ0Esc0JBQUEsQ0FBdUNFLFFBQVEsY0FBQUgscUJBQUEsY0FBQUEscUJBQUEsSUFBQUUsc0JBQUEsR0FBSXpILGdFQUFXLENBQUNpQixLQUFLLENBQUMyRixtQkFBbUIsY0FBQWEsc0JBQUEsdUJBQXJDQSxzQkFBQSxDQUF1Q0UsV0FBVyxjQUFBTCxJQUFBLGNBQUFBLElBQUEsR0FBSSxDQUFDLENBQUM7SUFDcEg7RUFBQztJQUFBdkcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJHLGdCQUFnQkEsQ0FBQSxFQUFXO01BQUEsSUFBQUMsS0FBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUNqQyxRQUFBSCxLQUFBLElBQUFDLHNCQUFBLElBQUFDLHNCQUFBLEdBQU8vSCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDMkYsbUJBQW1CLGNBQUFtQixzQkFBQSx1QkFBckNBLHNCQUFBLENBQXVDRSxhQUFhLGNBQUFILHNCQUFBLGNBQUFBLHNCQUFBLElBQUFFLHNCQUFBLEdBQUloSSxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDMkYsbUJBQW1CLGNBQUFvQixzQkFBQSx1QkFBckNBLHNCQUFBLENBQXVDRSxJQUFJLGNBQUFMLEtBQUEsY0FBQUEsS0FBQSxHQUFJLFNBQVM7SUFDekg7RUFBQztJQUFBOUcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWtILGdCQUFnQkEsQ0FBQSxFQUFXO01BQUEsSUFBQUMsc0JBQUEsRUFBQUMsc0JBQUE7TUFDakMsUUFBQUQsc0JBQUEsSUFBQUMsc0JBQUEsR0FBT3JJLGdFQUFXLENBQUNpQixLQUFLLENBQUMyRixtQkFBbUIsY0FBQXlCLHNCQUFBLHVCQUFyQ0Esc0JBQUEsQ0FBdUNDLEdBQUcsY0FBQUYsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxDQUFDLENBQUM7SUFDekQ7RUFBQztJQUFBckgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUThGLDJCQUEyQkEsQ0FBQSxFQUFTO01BQUEsSUFBQXpGLEtBQUE7UUFBQWlILHNCQUFBO01BQzFDLElBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBO1FBQUEsT0FBZWxILEtBQUksQ0FBQzBGLGdCQUFnQixDQUFDLENBQUM7TUFBQTtNQUVwRCxDQUFBdUIsc0JBQUEsR0FBQXZJLGdFQUFXLENBQUNpQixLQUFLLENBQUMyRixtQkFBbUIsY0FBQTJCLHNCQUFBLHVCQUFyQ0Esc0JBQUEsQ0FBdUNFLGdCQUFnQixDQUFDLFFBQVEsRUFBRUQsUUFBUSxDQUFDO01BRTNFLElBQUksQ0FBQ25ILFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDO1FBQUEsSUFBQXlJLHVCQUFBO1FBQUEsUUFBQUEsdUJBQUEsR0FBTTFJLGdFQUFXLENBQUNpQixLQUFLLENBQUMyRixtQkFBbUIsY0FBQThCLHVCQUFBLHVCQUFyQ0EsdUJBQUEsQ0FBdUNDLG1CQUFtQixDQUFDLFFBQVEsRUFBRUgsUUFBUSxDQUFDO01BQUEsRUFBQyxDQUFDO0lBQzdIO0VBQUM7SUFBQXpILEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVErRixnQkFBZ0JBLENBQUEsRUFBUztNQUMvQixJQUFJLENBQUNFLElBQUksQ0FBQ2pHLEtBQUssR0FBRyxJQUFJLENBQUNrSCxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3pDLElBQUksQ0FBQ2hCLGNBQWMsQ0FBQ2xHLEtBQUssR0FBRyxJQUFJLENBQUMyRyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ25ELElBQUksQ0FBQ1IsMkJBQTJCLENBQUNuRyxLQUFLLEdBQUcsSUFBSSxDQUFDb0csNkJBQTZCLENBQUMsQ0FBQztJQUMvRTtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEVIO0FBQ0E7QUFDQTs7QUFFaUQ7QUFDRjtBQUNOO0FBRVo7QUFDdUI7QUFFN0MsSUFBTTRCLG1CQUFtQjtFQU85QixTQUFBQSxvQkFBWUMsWUFBb0IsRUFBRTtJQUFBM0ksaUZBQUEsT0FBQTBJLG1CQUFBO0lBQUF6SSxpRkFBQSxrQkFORXdJLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztJQUFBM0ksaUZBQUEseUJBQ2hEdUksZ0RBQUcsQ0FBQ0ssY0FBYztJQUFBNUksaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUEsMkJBR3pCLEtBQUs7SUFHOUIsSUFBSSxDQUFDNkksVUFBVSxHQUFHNUksSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUM0SSxhQUFhLEdBQUdKLFlBQVk7RUFDbkM7RUFBQyxPQUFBcEksOEVBQUEsQ0FBQW1JLG1CQUFBO0lBQUFsSSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBc0ksT0FBT0EsQ0FBQ0MsUUFBZ0IsRUFBUTtNQUM5QixJQUFJLENBQUNDLGtCQUFrQixDQUFDYiw0REFBVyxDQUFDYyxjQUFjLEVBQUVGLFFBQVEsQ0FBQztJQUMvRDtFQUFDO0lBQUF6SSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMEksSUFBSUEsQ0FBQSxFQUFTO01BQ1gsSUFBSSxDQUFDRixrQkFBa0IsQ0FBQ2IsNERBQVcsQ0FBQ2dCLFdBQVcsQ0FBQztJQUNsRDtFQUFDO0lBQUE3SSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRd0ksa0JBQWtCQSxDQUFDSSxVQUF1QixFQUFFTCxRQUFpQixFQUFRO01BQzNFLElBQUksSUFBSSxDQUFDTSxnQkFBZ0IsRUFBRTtRQUN6QjtNQUNGO01BRUEsSUFBSSxDQUFDQSxnQkFBZ0IsR0FBRyxJQUFJO01BRTVCLElBQU1wSixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFDdEIsSUFBTXFKLFNBQVMsR0FBR3JKLEdBQUcsR0FBRyxJQUFJLENBQUMySSxVQUFVO01BQ3ZDLElBQU1XLFVBQVUsR0FBRyxJQUFJbkIsMkRBQVUsQ0FBQ2dCLFVBQVUsQ0FBQyxDQUFDSSxPQUFPLENBQUMsQ0FBQztNQUV2RCxJQUFJLENBQUNiLGNBQWMsQ0FBQ2MsSUFBSSxDQUFDO1FBQ3ZCTCxVQUFVLEVBQVZBLFVBQVU7UUFDVk0sT0FBTyxFQUFFLENBQUN6SixHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxJQUFJLElBQUk7UUFDMUNySSxLQUFLLEVBQUU7VUFBQ21KLE1BQU0sRUFBRUw7UUFBUyxDQUFDO1FBQzFCUCxRQUFRLEVBQVJBO01BQ0YsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDYSxPQUFPLENBQUNDLElBQUksQ0FDZixzQ0FBc0MsRUFDdEMsSUFBSXhCLHNEQUFTLENBQUNwSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxDQUFDLENBQUNpQixXQUFXLENBQUMsQ0FBQyxFQUNyRGYsUUFBUSxFQUNSUSxVQUFVLEVBQ1YsSUFBSWxCLHNEQUFTLENBQUNpQixTQUFTLENBQUMsQ0FBQ1EsV0FBVyxDQUFDLENBQ3ZDLENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4REg7QUFDQTtBQUNBOztBQUVvRDtBQUVoQjtBQUdwQyxJQUFNRSxtQkFBbUIsR0FBRyxTQUFTO0FBQUMsSUFFakJDLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFuSyxpRkFBQSxPQUFBbUssY0FBQTtFQUFBO0VBQUEsT0FBQTVKLDhFQUFBLENBQUE0SixjQUFBO0lBQUEzSixHQUFBO0lBQUFFLEtBQUEsRUFHakMsU0FBTzBKLFVBQVVBLENBQUNDLEtBQXVCLEVBQWE7TUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQ0MsdUJBQXVCLENBQUNELEtBQUssQ0FBQyxFQUFFO1FBQ3hDRixjQUFjLENBQUNMLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHlCQUF5QixFQUFFRixLQUFLLENBQUM7UUFFOUQsT0FBTyxJQUFJSixrREFBUyxDQUFDLElBQUksQ0FBQztNQUM1QjtNQUVBLElBQUk7UUFDRixJQUFNTyxZQUFZLEdBQUdDLElBQUksQ0FBQ0osS0FBSyxDQUFDSyxNQUFNLENBQUNSLG1CQUFtQixDQUFDUyxNQUFNLENBQUMsQ0FBQztRQUNuRSxJQUFNQyxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDTixZQUFZLENBQUM7UUFFMUNJLFNBQVMsQ0FBQ1AsS0FBSyxHQUFHUSxJQUFJLENBQUNDLEtBQUssQ0FBQ0YsU0FBUyxDQUFDUCxLQUFLLENBQUM7UUFFN0MsT0FBTyxJQUFJSixrREFBUyxDQUFDVyxTQUFTLENBQUM7TUFDakMsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtRQUNWWixjQUFjLENBQUNMLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDBCQUEwQixFQUFFUSxDQUFDLENBQUM7UUFFM0QsT0FBTyxJQUFJZCxrREFBUyxDQUFDLElBQUksQ0FBQztNQUM1QjtJQUNGO0VBQUM7SUFBQXpKLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU80Six1QkFBdUJBLENBQUNELEtBQXVCLEVBQVc7TUFDL0QsT0FBTyxDQUFDLENBQUNBLEtBQUssSUFBSUEsS0FBSyxDQUFDVyxVQUFVLENBQUNkLG1CQUFtQixDQUFDO0lBQ3pEO0VBQUM7QUFBQTtBQUFBakssaUZBQUEsQ0ExQmtCa0ssY0FBYyxhQUNDMUIsNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWjdFO0FBQ0E7QUFDQTs7QUFFcUQ7QUFBQSxJQVloQ3FCLFNBQVM7RUFJNUIsU0FBQUEsVUFBWVcsU0FBNEIsRUFBRTtJQUFBLElBQUFLLGdCQUFBLEVBQUFDLGlCQUFBO0lBQUFsTCxpRkFBQSxPQUFBaUssU0FBQTtJQUFBaEssaUZBQUE7SUFBQUEsaUZBQUE7SUFDeEMsSUFBSSxDQUFDa0wsY0FBYyxHQUFHLENBQUFQLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFUSxhQUFhLEtBQUksRUFBRTtJQUNwRCxJQUFJLENBQUNDLE1BQU0sR0FBRztNQUNaQyxHQUFHLEVBQUVWLFNBQVMsYUFBVEEsU0FBUyxnQkFBQUssZ0JBQUEsR0FBVEwsU0FBUyxDQUFFUCxLQUFLLGNBQUFZLGdCQUFBLGVBQWhCQSxnQkFBQSxDQUFrQkssR0FBRyxHQUFHLElBQUk3TCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDb0YsR0FBRyxDQUFDOEUsU0FBUyxDQUFDUCxLQUFLLENBQUNpQixHQUFHLENBQUMsR0FBRyxJQUFJO01BQ2xGQyxZQUFZLEVBQUUsQ0FBQVgsU0FBUyxhQUFUQSxTQUFTLHdCQUFBTSxpQkFBQSxHQUFUTixTQUFTLENBQUVQLEtBQUssY0FBQWEsaUJBQUEsdUJBQWhCQSxpQkFBQSxDQUFrQkssWUFBWSxLQUFJO0lBQ2xELENBQUM7RUFDSDtFQUFDLE9BQUFoTCw4RUFBQSxDQUFBMEosU0FBQTtJQUFBekosR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQjtNQUNwQixPQUFPLElBQUksQ0FBQzRLLE1BQU0sQ0FBQ0MsR0FBRztJQUN4QjtFQUFDO0lBQUE5SyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTZCO01BQzNCLE9BQU8sSUFBSSxDQUFDNEssTUFBTSxDQUFDRSxZQUFZO0lBQ2pDO0VBQUM7SUFBQS9LLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUMwSyxjQUFjO0lBQzVCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdENIO0FBQ0E7QUFDQTtBQUZBLElBY3FCSyxhQUFhO0VBQUEsU0FBQUEsY0FBQTtJQUFBeEwsaUZBQUEsT0FBQXdMLGFBQUE7RUFBQTtFQUFBLE9BQUFqTCw4RUFBQSxDQUFBaUwsYUFBQTtJQUFBaEwsR0FBQTtJQUFBQyxHQUFBLEVBTWhDLFNBQUFBLElBQUEsRUFBMEM7TUFDeEMsT0FBTyxJQUFJLENBQUNnTCxvQkFBb0I7SUFDbEM7RUFBQztJQUFBakwsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQ2lMLFNBQVM7SUFDdkI7RUFBQztJQUFBbEwsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QztNQUMzQyxPQUFPLElBQUksQ0FBQ2tMLFlBQVk7SUFDMUI7RUFBQztJQUFBbkwsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxPQUFPLElBQUksQ0FBQ21MLGFBQWE7SUFDM0I7RUFBQztJQUFBcEwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT21MLGFBQWFBLENBQUEsRUFBUztNQUMzQixJQUFJO1FBQ0YsSUFBTUMsUUFBUSxHQUFHQyw2RkFBWTtRQUU3QixJQUFJLENBQUNOLG9CQUFvQixHQUFHLHFCQUFxQixJQUFJSyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0UsbUJBQW1CLEdBQUcsSUFBSTtRQUNuRyxJQUFJLENBQUNOLFNBQVMsR0FBRyxVQUFVLElBQUlJLFFBQVEsR0FBR0EsUUFBUSxDQUFDRyxRQUFRLEdBQUcsS0FBSztRQUNuRSxJQUFJLENBQUNOLFlBQVksR0FBRyxhQUFhLElBQUlHLFFBQVEsR0FBR0EsUUFBUSxDQUFDSSxXQUFXLEdBQUcsS0FBSztRQUM1RSxJQUFJLENBQUNOLGFBQWEsR0FBRyxjQUFjLElBQUlFLFFBQVEsR0FBR0EsUUFBUSxDQUFDSyxZQUFZLEdBQUcsS0FBSztNQUNqRixDQUFDLENBQUMsT0FBT3BCLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQ1Usb0JBQW9CLEdBQUcsSUFBSTtRQUNoQyxJQUFJLENBQUNDLFNBQVMsR0FBRyxLQUFLO1FBQ3RCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLEtBQUs7UUFDekIsSUFBSSxDQUFDQyxhQUFhLEdBQUcsS0FBSztNQUM1QjtJQUNGO0VBQUM7QUFBQTtBQUFBM0wsaUZBQUEsQ0FwQ2tCdUwsYUFBYTtBQUFBdkwsaUZBQUEsQ0FBYnVMLGFBQWE7QUFBQXZMLGlGQUFBLENBQWJ1TCxhQUFhO0FBQUF2TCxpRkFBQSxDQUFidUwsYUFBYTtBQUFBO0FBdUNsQ0EsYUFBYSxDQUFDSyxhQUFhLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyRDdCO0FBQ0E7QUFDQTs7QUFFcUQ7QUFDQTtBQUFBLElBRWhDN0csaUJBQWlCO0VBQUEsU0FBQUEsa0JBQUE7SUFBQWhGLGlGQUFBLE9BQUFnRixpQkFBQTtFQUFBO0VBQUEsT0FBQXpFLDhFQUFBLENBQUF5RSxpQkFBQTtJQUFBeEUsR0FBQTtJQUFBQyxHQUFBLEVBQ3BDLFNBQUFBLElBQUEsRUFBMEM7TUFDeEM7TUFDQSxPQUFPYyw0REFBZSxDQUFDNkssVUFBVSxJQUMvQjdLLDREQUFlLENBQUM4SyxVQUFVLElBQzFCOUssNERBQWUsQ0FBQytLLFVBQVUsSUFDMUIvSyw0REFBZSxDQUFDZ0wsVUFBVTtJQUM5QjtFQUFDO0lBQUEvTCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU91RSxpQkFBaUIsQ0FBQ3dILHFCQUFxQjtJQUNoRDtFQUFDO0lBQUFoTSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDO01BQ0EsT0FBT2MsNERBQWUsQ0FBQ2tMLFVBQVUsSUFDL0JsTCw0REFBZSxDQUFDbUwsVUFBVSxJQUMxQm5MLDREQUFlLENBQUNvTCxVQUFVLElBQzFCcEwsNERBQWUsQ0FBQ3FMLFVBQVU7SUFDOUI7RUFBQztJQUFBcE0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPYyw0REFBZSxDQUFDc0wsV0FBVyxLQUFLLFFBQVEsSUFBSXRMLDREQUFlLENBQUN1TCxtQkFBbUIsSUFBSSxFQUFFO0lBQzlGO0VBQUM7SUFBQXRNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBT2MsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxRQUFRLElBQUl0TCw0REFBZSxDQUFDdUwsbUJBQW1CLElBQUksRUFBRSxJQUMxRnZMLDREQUFlLENBQUNzTCxXQUFXLEtBQUssU0FBUyxJQUFJdEwsNERBQWUsQ0FBQ3VMLG1CQUFtQixJQUFJLEVBQUU7SUFDMUY7RUFBQztJQUFBdE0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQztNQUNwQyxPQUFPYyw0REFBZSxDQUFDc0wsV0FBVyxLQUFLLFFBQVEsSUFBSXRMLDREQUFlLENBQUN1TCxtQkFBbUIsSUFBSSxFQUFFLElBQzFGdkwsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxTQUFTLElBQUl0TCw0REFBZSxDQUFDdUwsbUJBQW1CLElBQUksRUFBRTtJQUMxRjtFQUFDO0lBQUF0TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXFEO01BQ25ELE9BQU9jLDREQUFlLENBQUNzTCxXQUFXLEtBQUssUUFBUSxJQUFJdEwsNERBQWUsQ0FBQ3VMLG1CQUFtQixJQUFJLEVBQUU7SUFDOUY7RUFBQztJQUFBdE0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRDtNQUNsRCxPQUFPYyw0REFBZSxDQUFDc0wsV0FBVyxLQUFLLFNBQVMsSUFBSXRMLDREQUFlLENBQUN1TCxtQkFBbUIsSUFBSSxFQUFFO0lBQy9GO0VBQUM7SUFBQXRNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUM7TUFDdkMsT0FBT2MsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxRQUFRLElBQzdDdEwsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxnQkFBZ0I7SUFDcEQ7RUFBQztJQUFBck0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQztNQUN4QyxPQUFPYyw0REFBZSxDQUFDc0wsV0FBVyxLQUFLLElBQUk7SUFDN0M7RUFBQztJQUFBck0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4RDtNQUFBLElBQUFzTSxrQkFBQTtNQUM1RCxPQUFPeEwsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxRQUFRLElBQUksU0FBQUUsa0JBQUEsR0FBT3ROLGdFQUFXLENBQUNpQixLQUFLLGNBQUFxTSxrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CbkgscUJBQXFCLE1BQUssVUFBVTtJQUNuSDtFQUFDO0lBQUFwRixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU9jLDREQUFlLENBQUNzTCxXQUFXLEtBQUssUUFBUSxJQUFJdEwsNERBQWUsQ0FBQ3VMLG1CQUFtQixJQUFJLEVBQUUsSUFDMUZ2TCw0REFBZSxDQUFDc0wsV0FBVyxLQUFLLFNBQVMsSUFBSXRMLDREQUFlLENBQUN1TCxtQkFBbUIsSUFBSSxFQUFFLElBQ3RGdkwsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxRQUFRO0lBQzVDO0VBQUM7SUFBQXJNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0I7TUFDN0IsT0FBT2MsNERBQWUsQ0FBQ2EsUUFBUSxDQUFDLENBQUM7SUFDbkM7RUFBQztJQUFBNUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPLEVBQUUsT0FBT3VNLHlCQUF5QixLQUFLLFdBQVcsSUFDdkQsT0FBT0MseUJBQXlCLEtBQUssV0FBVyxDQUFDO0lBQ3JEO0VBQUM7SUFBQXpNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEQ7TUFDeEQsT0FBTyxPQUFPeU0sY0FBYyxLQUFLLFdBQVcsSUFBSSxPQUFPQSxjQUFjLENBQUNDLFNBQVMsQ0FBQ0Msb0JBQW9CLEtBQUssV0FBVztJQUN0SDtFQUFDO0lBQUE1TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVEO01BQ3JELE9BQU8sT0FBTzRNLHFCQUFxQixLQUFLLFdBQVc7SUFDckQ7RUFBQztJQUFBN00sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyRDtNQUN6RCxPQUFPLE9BQU82TSxnQkFBZ0IsQ0FBQ0gsU0FBUyxDQUFDSSx5QkFBeUIsS0FBSyxXQUFXO0lBQ3BGO0VBQUM7SUFBQS9NLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0Q7TUFDN0QsT0FBT3VFLGlCQUFpQixDQUFDd0ksb0NBQW9DLEtBQ3ZEeEksaUJBQWlCLENBQUN5SSxtQ0FBbUMsSUFBSXpJLGlCQUFpQixDQUFDMEksZ0NBQWdDLENBQUM7SUFDcEg7RUFBQztJQUFBbE4sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRDtNQUNsRCxPQUFPYyw0REFBZSxDQUFDc0wsV0FBVyxLQUFLLFNBQVMsSUFBSXRMLDREQUFlLENBQUNzTCxXQUFXLEtBQUssUUFBUTtJQUM5RjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pHSDtBQUNBO0FBQ0E7QUFGQSxJQVlxQmMsVUFBVTtFQUFBLFNBQUFBLFdBQUE7SUFBQTNOLGlGQUFBLE9BQUEyTixVQUFBO0VBQUE7RUFBQSxPQUFBcE4sOEVBQUEsQ0FBQW9OLFVBQUE7SUFBQW5OLEdBQUE7SUFBQUMsR0FBQSxFQUc3QixTQUFBQSxJQUFBLEVBQXNEO01BQ3BELE9BQU8sSUFBSSxDQUFDbU4sb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQXBOLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9tTixlQUFlQSxDQUFBLEVBQVM7TUFDN0IsSUFBSTtRQUNGLElBQU1DLFVBQVUsR0FBR0MsMkNBQWM7UUFFakMsSUFBSSxDQUFDSCxvQkFBb0IsR0FBRyxXQUFXLElBQUlFLFVBQVUsR0FBR0EsVUFBVSxDQUFDRSxTQUFTLEdBQUc7VUFBQ0MsVUFBVSxFQUFFO1FBQUUsQ0FBQztNQUNqRyxDQUFDLENBQUMsT0FBT2xELENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQzZDLG9CQUFvQixHQUFHO1VBQUNLLFVBQVUsRUFBRTtRQUFFLENBQUM7TUFDOUM7SUFDRjtFQUFDO0FBQUE7QUFBQWhPLGlGQUFBLENBZmtCME4sVUFBVTtBQUFBO0FBa0IvQkEsVUFBVSxDQUFDRSxlQUFlLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5QjVCO0FBQ0E7QUFDQTs7QUFVb0M7QUFDZ0I7QUFJcEQsSUFBTUssa0JBQXNDLEdBQUc7RUFDN0NDLFFBQVEsRUFBUkEsUUFBUTtFQUNSQyxRQUFRLEVBQVJBLFFBQVE7RUFDUjdMLFNBQVMsRUFBVEEsU0FBUztFQUNUOEwsTUFBTSxFQUFOQTtBQUNGLENBQUM7QUFFTSxJQUFNNU8sV0FBVztFQVF0QixTQUFBQSxZQUFZNk8sV0FBK0IsRUFBRTtJQUFBdE8saUZBQUEsT0FBQVAsV0FBQTtJQUFBUSxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQTtJQUMzQyxJQUFJLENBQUNzTyxTQUFTLEdBQUdELFdBQVcsQ0FBQ0gsUUFBUTtJQUNyQyxJQUFJLENBQUNLLFNBQVMsR0FBR0YsV0FBVyxDQUFDRixRQUFRO0lBQ3JDLElBQUksQ0FBQ3ZLLFVBQVUsR0FBR3lLLFdBQVcsQ0FBQy9MLFNBQVM7SUFDdkMsSUFBSSxDQUFDa00sT0FBTyxHQUFHSCxXQUFXLENBQUNELE1BQU07RUFDbkM7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFBQSxPQUFBOU4sOEVBQUEsQ0FBQWQsV0FBQTtJQUFBZSxHQUFBO0lBQUFDLEdBQUEsRUFhQSxTQUFBQSxJQUFBLEVBQWdDO01BQzlCLE9BQU8sSUFBSSxDQUFDZ08sT0FBTyxDQUFDQyxRQUFRO0lBQzlCO0VBQUM7SUFBQWxPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0M7TUFDcEMsT0FBTyxJQUFJLENBQUNnTyxPQUFPLENBQUNFLFdBQVc7SUFDakM7RUFBQztJQUFBbk8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnRDtNQUM5QyxPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQ0csZ0JBQWdCO0lBQ3RDO0VBQUM7SUFBQXBPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0Q7TUFDaEQsT0FBTyxJQUFJLENBQUNnTyxPQUFPLENBQUNJLGlCQUFpQjtJQUN2QztFQUFDO0lBQUFyTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBEO01BQ3hELE9BQU8sSUFBSSxDQUFDZ08sT0FBTyxDQUFDSyxxQkFBcUI7SUFDM0M7RUFBQztJQUFBdE8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQ00sZUFBZTtJQUNyQztFQUFDO0lBQUF2TyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU8sSUFBSSxDQUFDZ08sT0FBTyxDQUFDM0ksR0FBRztJQUN6QjtFQUFDO0lBQUF0RixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU8sSUFBSSxDQUFDZ08sT0FBTyxDQUFDTyxlQUFlO0lBQ3JDO0VBQUM7SUFBQXhPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0k7TUFDcEksT0FBTyxJQUFJLENBQUM4TixTQUFTLENBQUNyRyxnQkFBZ0IsQ0FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUM4SSxTQUFTLENBQUM7SUFDN0Q7RUFBQztJQUFBL04sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvSTtNQUNsSSxPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQ3ZHLGdCQUFnQixDQUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQ2dKLE9BQU8sQ0FBQztJQUN6RDtFQUFDO0lBQUFqTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVEO01BQ3JELE9BQU8sSUFBSSxDQUFDZ08sT0FBTyxDQUFDUSxhQUFhLENBQUN4SixJQUFJLENBQUMsSUFBSSxDQUFDZ0osT0FBTyxDQUFDO0lBQ3REO0VBQUM7SUFBQWpPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0Q7TUFDcEQsT0FBTyxJQUFJLENBQUNnTyxPQUFPLENBQUNTLFlBQVksQ0FBQ3pKLElBQUksQ0FBQyxJQUFJLENBQUNnSixPQUFPLENBQUM7SUFDckQ7RUFBQztJQUFBak8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRjtNQUNqRixPQUFPLElBQUksQ0FBQzhOLFNBQVMsQ0FBQ1ksYUFBYSxDQUFDMUosSUFBSSxDQUFDLElBQUksQ0FBQzhJLFNBQVMsQ0FBQztJQUMxRDtFQUFDO0lBQUEvTixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU8sSUFBSSxDQUFDOE4sU0FBUyxDQUFDYSxRQUFRLENBQUMzSixJQUFJLENBQUMsSUFBSSxDQUFDOEksU0FBUyxDQUFDO0lBQ3JEO0VBQUM7SUFBQS9OLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBZ0M7TUFDOUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDOE4sU0FBUyxDQUFDYyxNQUFNO0lBQ2hDO0VBQUM7SUFBQTdPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEY7TUFDeEYsT0FBTyxJQUFJLENBQUM4TixTQUFTLENBQUNlLGFBQWEsQ0FBQzdKLElBQUksQ0FBQyxJQUFJLENBQUM4SSxTQUFTLENBQUM7SUFDMUQ7RUFBQztJQUFBL04sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRjtNQUNwRixPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQ2MsS0FBSyxDQUFDOUosSUFBSSxDQUFDLElBQUksQ0FBQ2dKLE9BQU8sQ0FBQztJQUM5QztFQUFDO0lBQUFqTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQStCO01BQzdCLE9BQU8sSUFBSSxDQUFDK04sU0FBUyxDQUFDZ0IsUUFBUTtJQUNoQztFQUFDO0lBQUFoUCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTZCO01BQzNCLE9BQU8sSUFBSSxDQUFDK04sU0FBUyxDQUFDaUIsTUFBTTtJQUM5QjtFQUFDO0lBQUFqUCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU8sSUFBSSxDQUFDb0QsVUFBVSxDQUFDNkwsVUFBVTtJQUNuQztFQUFDO0lBQUFsUCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU8sSUFBSSxDQUFDb0QsVUFBVSxDQUFDOEwsTUFBTTtJQUMvQjtFQUFDO0lBQUFuUCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVDO01BQ3JDLE9BQU8sSUFBSSxDQUFDZ08sT0FBTyxDQUFDLHNCQUFzQixDQUFDLElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDL0U7RUFBQztJQUFBak8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQ2xKLGNBQWMsQ0FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQ2dKLE9BQU8sQ0FBQztJQUN2RDtFQUFDO0lBQUFqTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlJO01BQ3ZJLE9BQU8sSUFBSSxDQUFDOE4sU0FBUyxDQUFDbkcsbUJBQW1CLENBQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDOEksU0FBUyxDQUFDO0lBQ2hFO0VBQUM7SUFBQS9OLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUk7TUFDckksT0FBTyxJQUFJLENBQUNnTyxPQUFPLENBQUNyRyxtQkFBbUIsQ0FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUNnSixPQUFPLENBQUM7SUFDNUQ7RUFBQztJQUFBak8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3RjtNQUN0RixPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQ21CLFdBQVcsQ0FBQ25LLElBQUksQ0FBQyxJQUFJLENBQUNnSixPQUFPLENBQUM7SUFDcEQ7RUFBQztJQUFBak8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1RjtNQUNyRixPQUFPLElBQUksQ0FBQ2dPLE9BQU8sQ0FBQy9JLFVBQVUsQ0FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQ2dKLE9BQU8sQ0FBQztJQUNuRDtFQUFDO0lBQUFqTyxHQUFBO0lBQUFFLEtBQUEsRUF0SEQsU0FBY21QLFdBQVdBLENBQUNDLG1CQUF5QyxFQUFRO01BQ3pFLE1BQU0sSUFBSTVLLEtBQUssQ0FBQyxxREFBcUQsQ0FBQztJQUN4RTtFQUFDO0lBQUExRSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFjcVAsV0FBV0EsQ0FBQSxFQUFrQztNQUN6RCxPQUFPdFEsV0FBVyxDQUFDdVEsaUJBQWlCO0lBQ3RDO0VBQUM7SUFBQXhQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWN1UCxTQUFTQSxDQUFDQyxRQUE4QyxFQUFlO01BQ25GLE9BQU96USxXQUFXLENBQUN1USxpQkFBaUIsQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLENBQUM7SUFDMUQ7RUFBQztBQUFBO0FBNkdGQyxZQUFBLEdBMUlZMVEsV0FBVztBQUFBUSxpRkFBQSxDQUFYUixXQUFXLGVBQ2MsSUFBSUcsbURBQU8sQ0FBZSxJQUFJSCxZQUFXLENBQUN5TyxrQkFBa0IsQ0FBQyxDQUFDO0FBQUFqTyxpRkFBQSxDQUR2RlIsV0FBVyx1QkFFcUQsSUFBSUksMkRBQWUsQ0FBQ0osWUFBVyxDQUFDMlEsU0FBUyxDQUFDO0FBMEl2SCwrREFBZTNRLFdBQVcsQ0FBQ3NRLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BLeEM7QUFDQTtBQUNBO0FBRkEsSUFNcUJyUSxVQUFVO0VBSTdCLFNBQUFBLFdBQVkyUSxVQUFzQixFQUFFO0lBQUFyUSxpRkFBQSxPQUFBTixVQUFBO0lBQUFPLGlGQUFBO0lBQUFBLGlGQUFBO0lBQ2xDLElBQUksQ0FBQ3FRLFNBQVMsR0FBRyxLQUFLO0lBQ3RCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixVQUFVO0VBQy9CO0VBQUMsT0FBQTlQLDhFQUFBLENBQUFiLFVBQUE7SUFBQWMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxJQUFJLENBQUN5UCxTQUFTLEVBQUU7UUFDbEI7TUFDRjtNQUVBLElBQUksQ0FBQ0EsU0FBUyxHQUFHLElBQUk7TUFFckIsT0FBTyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNwQztFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCSDtBQUNBO0FBQ0E7QUFGQSxJQU1xQjdRLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFLLGlGQUFBLE9BQUFMLGNBQUE7SUFBQU0saUZBQUEsZ0JBQ08sRUFBRTtFQUFBO0VBQUEsT0FBQU0sOEVBQUEsQ0FBQVosY0FBQTtJQUFBYSxHQUFBO0lBQUFFLEtBQUEsRUFFMUMsU0FBQVUsR0FBR0EsQ0FBQ2lQLFVBQXVCLEVBQVE7TUFDakMsSUFBSSxDQUFDSSxLQUFLLENBQUM5RyxJQUFJLENBQUMwRyxVQUFVLENBQUM7SUFDN0I7RUFBQztJQUFBN1AsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDNFAsS0FBSyxDQUFDQyxPQUFPLENBQUMsVUFBQUwsVUFBVTtRQUFBLE9BQUlBLFVBQVUsQ0FBQ3hQLE9BQU8sQ0FBQyxDQUFDO01BQUEsRUFBQztNQUN0RCxJQUFJLENBQUM0UCxLQUFLLENBQUM5RixNQUFNLEdBQUcsQ0FBQztJQUN2QjtFQUFDO0lBQUFuSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaVEsUUFBUUEsQ0FBQSxFQUFXO01BQ2pCLHFDQUFBck4sTUFBQSxDQUFxQyxJQUFJLENBQUNtTixLQUFLLENBQUM5RixNQUFNO0lBQ3hEO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFNaUcsd0JBQXdCLEdBQUcsRUFBRTtBQUFDLElBRWZDLE9BQU87RUE0QzFCLFNBQUFBLFFBQUEsRUFBc0I7SUFBQTdRLGlGQUFBLE9BQUE2USxPQUFBO0lBQ3BCLE1BQU0sSUFBSTNMLEtBQUssQ0FBQyx3REFBd0QsQ0FBQztFQUMzRTtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBc1EsT0FBQTtJQUFBclEsR0FBQTtJQUFBRSxLQUFBLEVBN0NELFNBQU9vUSxpQkFBaUJBLENBQUNwUSxLQUFhLEVBQVU7TUFDOUMsSUFBSXFRLHlCQUF5QixHQUFHLENBQUM7TUFDakMsSUFBSUMsTUFBTSxHQUFHdFEsS0FBSztNQUVsQixJQUFJc1EsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNkQSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ1pELHlCQUF5QixFQUFFO01BQzdCO01BRUEsT0FBT0YsT0FBTyxDQUFDSSx3QkFBd0IsQ0FBQ0QsTUFBTSxDQUFDLEdBQUdELHlCQUF5QixJQUFJQyxNQUFNLEtBQUtFLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxNQUFNLENBQUMsR0FBR0gsT0FBTyxDQUFDTyx1QkFBdUIsQ0FBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqSztFQUFDO0lBQUF4USxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFlMlEsV0FBV0EsQ0FBQzNRLEtBQWEsRUFBRTRRLFNBQWlCLEVBQVU7TUFDbkUsSUFBTUMsS0FBSyxHQUFHTCxJQUFJLENBQUNNLEdBQUcsQ0FBQyxFQUFFLEVBQUVGLFNBQVMsQ0FBQztNQUVyQyxPQUFPSixJQUFJLENBQUNPLEtBQUssQ0FBQy9RLEtBQUssR0FBRzZRLEtBQUssQ0FBQyxHQUFHQSxLQUFLO0lBQzFDO0VBQUM7SUFBQS9RLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWV1USx3QkFBd0JBLENBQUN2USxLQUFhLEVBQVU7TUFDN0QsSUFBSWdSLG1CQUFtQixHQUFHLENBQUM7TUFDM0IsSUFBSVYsTUFBTSxHQUFHdFEsS0FBSztNQUVsQixPQUFPc1EsTUFBTSxJQUFJLEVBQUUsRUFBRTtRQUNuQkEsTUFBTSxHQUFHQSxNQUFNLEdBQUcsRUFBRTtRQUNwQlUsbUJBQW1CLEVBQUU7TUFDdkI7TUFFQSxPQUFPQSxtQkFBbUI7SUFDNUI7RUFBQztJQUFBbFIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZTBRLHVCQUF1QkEsQ0FBQzFRLEtBQWEsRUFBVTtNQUM1RCxJQUFNaVIsYUFBYSxHQUFHalIsS0FBSztNQUMzQixJQUFJa1IsYUFBYSxHQUFHVixJQUFJLENBQUNDLEtBQUssQ0FBQ3pRLEtBQUssQ0FBQztNQUNyQyxJQUFJbVIsS0FBSyxHQUFHLENBQUM7TUFFYixPQUFPRCxhQUFhLEtBQUtELGFBQWEsSUFBSUUsS0FBSyxHQUFHakIsd0JBQXdCLEVBQUU7UUFDMUVpQixLQUFLLEVBQUU7UUFDUEQsYUFBYSxHQUFHZixPQUFPLENBQUNRLFdBQVcsQ0FBQ00sYUFBYSxFQUFFRSxLQUFLLENBQUM7TUFDM0Q7TUFFQSxPQUFPQSxLQUFLO0lBQ2Q7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakRIO0FBQ0E7QUFDQTtBQUZBLElBSXFCQyxPQUFPO0VBYTFCLFNBQUFBLFFBQUEsRUFBc0I7SUFBQTlSLGlGQUFBLE9BQUE4UixPQUFBO0lBQ3BCLE1BQU0sSUFBSTVNLEtBQUssQ0FBQyx3REFBd0QsQ0FBQztFQUMzRTtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBdVIsT0FBQTtJQUFBdFIsR0FBQTtJQUFBRSxLQUFBLEVBZEQsU0FBT3FSLE1BQU1BLENBQUNwSCxNQUFjLEVBQVU7TUFDcEMsSUFBTXFILGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUEsRUFBaUI7UUFDdkMsT0FBT2QsSUFBSSxDQUFDYSxNQUFNLENBQUMsQ0FBQyxDQUFDcEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDbk4sU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDcEQsQ0FBQztNQUVELElBQU15TyxLQUFhLEdBQUdmLElBQUksQ0FBQ2dCLElBQUksQ0FBQ3ZILE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFNUMsT0FBTyxJQUFJd0gsS0FBSyxDQUFDRixLQUFLLENBQUMsQ0FBQ0csSUFBSSxDQUFDSixrQkFBa0IsQ0FBQyxDQUFDSyxNQUFNLENBQUMsVUFBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUs7UUFDeEUsT0FBT0QsTUFBTSxHQUFHQyxJQUFJLENBQUMsQ0FBQztNQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMvTyxTQUFTLENBQUMsQ0FBQyxFQUFFbUgsTUFBTSxDQUFDO0lBQzdCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZIO0FBQ0E7QUFDQTtBQUZBLElBSXFCNkgsV0FBVztFQXFDOUIsU0FBQUEsWUFBQSxFQUFzQjtJQUFBeFMsaUZBQUEsT0FBQXdTLFdBQUE7SUFDcEIsTUFBTSxJQUFJdE4sS0FBSyxDQUFDLDREQUE0RCxDQUFDO0VBQy9FO0VBQUMsT0FBQTNFLDhFQUFBLENBQUFpUyxXQUFBO0lBQUFoUyxHQUFBO0lBQUFFLEtBQUEsRUF0Q0QsU0FBYytSLGdDQUFnQ0EsQ0FBQ0Msa0JBQThCLEVBQUVDLElBQWdCLEVBQUVDLE1BQWMsRUFBVztNQUN4SCxLQUFLLElBQUlDLEdBQUcsR0FBRyxDQUFDLEVBQUVBLEdBQUcsR0FBR0gsa0JBQWtCLENBQUMvSCxNQUFNLEVBQUVrSSxHQUFHLEVBQUUsRUFBRTtRQUN4RCxJQUFJSCxrQkFBa0IsQ0FBQ0csR0FBRyxDQUFDLEtBQUtGLElBQUksQ0FBQ0MsTUFBTSxHQUFHQyxHQUFHLENBQUMsRUFBRTtVQUNsRCxPQUFPLEtBQUs7UUFDZDtNQUNGO01BRUEsT0FBTyxJQUFJO0lBQ2I7RUFBQztJQUFBclMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBY29TLHFDQUFxQ0EsQ0FBQ0osa0JBQThCLEVBQUVDLElBQWdCLEVBQUVDLE1BQWMsRUFBd0M7TUFBQSxJQUF0Q0csdUJBQXVCLEdBQUFDLFNBQUEsQ0FBQXJJLE1BQUEsUUFBQXFJLFNBQUEsUUFBQTFNLFNBQUEsR0FBQTBNLFNBQUEsTUFBRyxDQUFDLENBQUM7TUFDaEosS0FBSyxJQUFJQyxZQUFZLEdBQUdMLE1BQU0sRUFBRUssWUFBWSxJQUFJTixJQUFJLENBQUNPLFVBQVUsRUFBRUQsWUFBWSxFQUFFLEVBQUU7UUFDL0UsSUFBSVQsV0FBVyxDQUFDQyxnQ0FBZ0MsQ0FBQ0Msa0JBQWtCLEVBQUVDLElBQUksRUFBRU0sWUFBWSxDQUFDLEVBQUU7VUFDeEYsT0FBT0EsWUFBWTtRQUNyQjtNQUNGO01BRUEsT0FBT0YsdUJBQXVCO0lBQ2hDO0VBQUM7SUFBQXZTLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWN5UywyQkFBMkJBLENBQUNSLElBQWdCLEVBQStCO01BQUEsSUFBN0JTLGNBQWMsR0FBQUosU0FBQSxDQUFBckksTUFBQSxRQUFBcUksU0FBQSxRQUFBMU0sU0FBQSxHQUFBME0sU0FBQSxNQUFHLEVBQUU7TUFDN0UsSUFBTUssSUFBYyxHQUFHLEVBQUU7TUFFekIsS0FBSyxJQUFJUixHQUFHLEdBQUcsQ0FBQyxFQUFFQSxHQUFHLEdBQUdPLGNBQWMsRUFBRVAsR0FBRyxFQUFFLEVBQUU7UUFDN0MsSUFBTVMsT0FBTyxHQUFHWCxJQUFJLENBQUNFLEdBQUcsQ0FBQyxDQUFDbEMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDNEMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7UUFFdkRGLElBQUksQ0FBQzFKLElBQUksQ0FBQzJKLE9BQU8sQ0FBQztRQUVsQixJQUFJVCxHQUFHLEtBQUssQ0FBQyxJQUFJQSxHQUFHLEtBQUssQ0FBQyxJQUFJQSxHQUFHLEtBQUssQ0FBQyxJQUFJQSxHQUFHLEtBQUssQ0FBQyxFQUFFO1VBQ3BEUSxJQUFJLENBQUMxSixJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2hCO01BQ0Y7TUFFQSxPQUFPMEosSUFBSSxDQUFDRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7OztBQ3ZDSDtBQUNBO0FBQ0E7O0FBRU8sU0FBU0MsaUJBQWlCQSxDQUFDQyxDQUFRLEVBQVM7RUFDakQsTUFBTSxJQUFJeE8sS0FBSyxzQkFBQTVCLE1BQUEsQ0FBc0JvUSxDQUFDLG9DQUFpQyxDQUFDO0FBQzFFO0FBRUEsK0RBQWVELGlCQUFpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSaEM7QUFDQTtBQUNBO0FBRkEsSUFNcUJFLFNBQVM7RUFBQSxTQUFBQSxVQUFBO0lBQUEzVCxpRkFBQSxPQUFBMlQsU0FBQTtJQUFBMVQsaUZBQUEscUJBQ1csRUFBRTtFQUFBO0VBQUEsT0FBQU0sOEVBQUEsQ0FBQW9ULFNBQUE7SUFBQW5ULEdBQUE7SUFBQUMsR0FBQSxFQUV6QyxTQUFBQSxJQUFBLEVBQThCO01BQzVCLE9BQU8sSUFBSSxDQUFDbVQsVUFBVTtJQUN4QjtFQUFDO0lBQUFwVCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBVSxHQUFHQSxDQUFDeVMsUUFBbUIsRUFBUTtNQUM3QixJQUFJLENBQUNELFVBQVUsQ0FBQ2pLLElBQUksQ0FBQ2tLLFFBQVEsQ0FBQztJQUNoQztFQUFDO0lBQUFyVCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb1QsTUFBTUEsQ0FBQ0QsUUFBbUIsRUFBUTtNQUNoQyxJQUFJLENBQUNELFVBQVUsR0FBRyxJQUFJLENBQUNBLFVBQVUsQ0FBQ3ZCLE1BQU0sQ0FBQyxVQUFDMEIsS0FBSyxFQUFFQyxJQUFJLEVBQUs7UUFDeEQsSUFBSSxFQUFFQSxJQUFJLEtBQUtILFFBQVEsQ0FBQyxFQUFFO1VBQ3hCRSxLQUFLLENBQUNwSyxJQUFJLENBQUNxSyxJQUFJLENBQUM7UUFDbEI7UUFFQSxPQUFPRCxLQUFLO01BQ2QsQ0FBQyxFQUFFLEVBQXNCLENBQUM7SUFDNUI7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekJIO0FBQ0E7QUFDQTs7QUFHc0M7QUFBQSxJQUVqQkcsZUFBZTtFQW1CbEMsU0FBQUEsZ0JBQVlDLFNBQXVCLEVBQUU7SUFBQW5VLGlGQUFBLE9BQUFrVSxlQUFBO0lBQUFqVSxpRkFBQTtJQUNuQyxJQUFJLENBQUNtVSxVQUFVLEdBQUdELFNBQVM7RUFDN0I7RUFBQyxPQUFBNVQsOEVBQUEsQ0FBQTJULGVBQUE7SUFBQTFULEdBQUE7SUFBQUUsS0FBQSxFQWxCRCxTQUFBMlQsR0FBR0EsQ0FBQ0MsUUFBc0IsRUFBRUMsT0FBZSxFQUFFQyxRQUFnQixFQUFFQyxJQUFVLEVBQVE7TUFDL0UsSUFBSUgsUUFBUSxHQUFHLElBQUksQ0FBQ0YsVUFBVSxFQUFFO1FBQzlCO01BQ0Y7TUFFQSxJQUFNTSxXQUFXLE1BQUFwUixNQUFBLENBQU1tUixJQUFJLENBQUNFLFdBQVcsQ0FBQyxDQUFDLFFBQUFyUixNQUFBLENBQUtrUixRQUFRLFNBQUFsUixNQUFBLENBQU0yUSxpREFBWSxDQUFDSyxRQUFRLENBQUMsUUFBQWhSLE1BQUEsQ0FBS2lSLE9BQU8sQ0FBRTtNQUVoRyxJQUFJRCxRQUFRLEdBQUdMLGlEQUFZLENBQUNXLElBQUksRUFBRTtRQUNoQ0MsT0FBTyxDQUFDUixHQUFHLENBQUNLLFdBQVcsQ0FBQztRQUV4QjtNQUNGO01BRUFHLE9BQU8sQ0FBQ3RLLEtBQUssQ0FBQ21LLFdBQVcsQ0FBQztJQUM1QjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEJIO0FBQ0E7QUFDQTs7QUFFQTs7QUFJaUU7QUFFMUQsSUFBS1QsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBU3ZCLElBSW9CYSxNQUFNO0VBa016QixTQUFBQSxPQUFZTixRQUFnQixFQUFFTyxTQUFvQixFQUFFWixTQUEyQixFQUFFO0lBQUFuVSxpRkFBQSxPQUFBOFUsTUFBQTtJQUFBN1UsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFDL0UsSUFBSSxDQUFDK1UsU0FBUyxHQUFHUixRQUFRO0lBQ3pCLElBQUksQ0FBQ1osVUFBVSxHQUFHbUIsU0FBUztJQUMzQixJQUFJLENBQUNYLFVBQVUsR0FBR0QsU0FBUztFQUM3QjtFQUFDLE9BQUE1VCw4RUFBQSxDQUFBdVUsTUFBQTtJQUFBdFUsR0FBQTtJQUFBQyxHQUFBLEVBak1ELFNBQUFBLElBQUEsRUFBdUI7TUFDckIsT0FBTyxJQUFJLENBQUN1VSxTQUFTO0lBQ3ZCO0VBQUM7SUFBQXhVLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNtVCxVQUFVO0lBQ3hCO0VBQUM7SUFBQXBULEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0M7TUFDaEMsT0FBTyxJQUFJLENBQUMyVCxVQUFVO0lBQ3hCO0VBQUM7SUFBQTVULEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF1VSxLQUFLQSxDQUFBLEVBQXFCO01BQ3hCLElBQUksQ0FBQyxJQUFJLENBQUNiLFVBQVUsQ0FBQzFULEtBQUssSUFBSSxJQUFJLENBQUMwVCxVQUFVLENBQUMxVCxLQUFLLEdBQUd1VCxZQUFZLENBQUNpQixLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUFDLElBQUEsR0FBQW5DLFNBQUEsQ0FBQXJJLE1BQUEsRUFITXlLLElBQUksT0FBQWpELEtBQUEsQ0FBQWdELElBQUEsR0FBQUUsSUFBQSxNQUFBQSxJQUFBLEdBQUFGLElBQUEsRUFBQUUsSUFBQTtRQUFKRCxJQUFJLENBQUFDLElBQUEsSUFBQXJDLFNBQUEsQ0FBQXFDLElBQUE7TUFBQTtNQUtYLElBQUksQ0FBQ2hCLEdBQUcsQ0FBQ0osWUFBWSxDQUFDaUIsS0FBSyxFQUFFRSxJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBNVUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRVLEtBQUtBLENBQUEsRUFBcUI7TUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQzFULEtBQUssSUFBSSxJQUFJLENBQUMwVCxVQUFVLENBQUMxVCxLQUFLLEdBQUd1VCxZQUFZLENBQUNzQixLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUFDLEtBQUEsR0FBQXhDLFNBQUEsQ0FBQXJJLE1BQUEsRUFITXlLLElBQUksT0FBQWpELEtBQUEsQ0FBQXFELEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKTCxJQUFJLENBQUFLLEtBQUEsSUFBQXpDLFNBQUEsQ0FBQXlDLEtBQUE7TUFBQTtNQUtYLElBQUksQ0FBQ3BCLEdBQUcsQ0FBQ0osWUFBWSxDQUFDc0IsS0FBSyxFQUFFSCxJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBNVUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFKLElBQUlBLENBQUEsRUFBcUI7TUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQ3FLLFVBQVUsQ0FBQzFULEtBQUssSUFBSSxJQUFJLENBQUMwVCxVQUFVLENBQUMxVCxLQUFLLEdBQUd1VCxZQUFZLENBQUN5QixJQUFJLEVBQUU7UUFDdkU7TUFDRjtNQUFDLFNBQUFDLEtBQUEsR0FBQTNDLFNBQUEsQ0FBQXJJLE1BQUEsRUFIS3lLLElBQUksT0FBQWpELEtBQUEsQ0FBQXdELEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKUixJQUFJLENBQUFRLEtBQUEsSUFBQTVDLFNBQUEsQ0FBQTRDLEtBQUE7TUFBQTtNQUtWLElBQUksQ0FBQ3ZCLEdBQUcsQ0FBQ0osWUFBWSxDQUFDeUIsSUFBSSxFQUFFTixJQUFJLENBQUM7SUFDbkM7RUFBQztJQUFBNVUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1WLElBQUlBLENBQUEsRUFBcUI7TUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQ3pCLFVBQVUsQ0FBQzFULEtBQUssSUFBSSxJQUFJLENBQUMwVCxVQUFVLENBQUMxVCxLQUFLLEdBQUd1VCxZQUFZLENBQUNXLElBQUksRUFBRTtRQUN2RTtNQUNGO01BQUMsU0FBQWtCLEtBQUEsR0FBQTlDLFNBQUEsQ0FBQXJJLE1BQUEsRUFIS3lLLElBQUksT0FBQWpELEtBQUEsQ0FBQTJELEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKWCxJQUFJLENBQUFXLEtBQUEsSUFBQS9DLFNBQUEsQ0FBQStDLEtBQUE7TUFBQTtNQUtWLElBQUksQ0FBQzFCLEdBQUcsQ0FBQ0osWUFBWSxDQUFDVyxJQUFJLEVBQUVRLElBQUksQ0FBQztJQUNuQztFQUFDO0lBQUE1VSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNkosS0FBS0EsQ0FBQSxFQUFxQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDNkosVUFBVSxDQUFDMVQsS0FBSyxJQUFJLElBQUksQ0FBQzBULFVBQVUsQ0FBQzFULEtBQUssR0FBR3VULFlBQVksQ0FBQy9PLEtBQUssRUFBRTtRQUN4RTtNQUNGO01BQUMsU0FBQThRLEtBQUEsR0FBQWhELFNBQUEsQ0FBQXJJLE1BQUEsRUFITXlLLElBQUksT0FBQWpELEtBQUEsQ0FBQTZELEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKYixJQUFJLENBQUFhLEtBQUEsSUFBQWpELFNBQUEsQ0FBQWlELEtBQUE7TUFBQTtNQUtYLElBQUksQ0FBQzVCLEdBQUcsQ0FBQ0osWUFBWSxDQUFDL08sS0FBSyxFQUFFa1EsSUFBSSxDQUFDO0lBQ3BDO0VBQUM7SUFBQTVVLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3VixLQUFLQSxDQUFBLEVBQXFCO01BQ3hCLElBQUksQ0FBQyxJQUFJLENBQUM5QixVQUFVLENBQUMxVCxLQUFLLElBQUksSUFBSSxDQUFDMFQsVUFBVSxDQUFDMVQsS0FBSyxHQUFHdVQsWUFBWSxDQUFDa0MsS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFwRCxTQUFBLENBQUFySSxNQUFBLEVBSE15SyxJQUFJLE9BQUFqRCxLQUFBLENBQUFpRSxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSmpCLElBQUksQ0FBQWlCLEtBQUEsSUFBQXJELFNBQUEsQ0FBQXFELEtBQUE7TUFBQTtNQUtYLElBQUksQ0FBQ2hDLEdBQUcsQ0FBQ0osWUFBWSxDQUFDa0MsS0FBSyxFQUFFZixJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBNVUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJULEdBQUdBLENBQUNpQyxLQUFhLEVBQUVsQixJQUFTLEVBQVE7TUFBQSxJQUFBclUsS0FBQTtNQUMxQyxJQUFNMFQsSUFBSSxHQUFHLElBQUl2VSxJQUFJLENBQUMsQ0FBQztNQUN2QixJQUFNcVUsT0FBTyxHQUFHLElBQUksQ0FBQ2dDLG1CQUFtQixDQUFDbkIsSUFBSSxDQUFDO01BRTlDLElBQUksQ0FBQ3hCLFVBQVUsQ0FBQ2xULEtBQUssQ0FBQ2dRLE9BQU8sQ0FBQyxVQUFDbUQsUUFBbUIsRUFBSztRQUNyREEsUUFBUSxDQUFDUSxHQUFHLENBQUNpQyxLQUFLLEVBQUUvQixPQUFPLEVBQUV4VCxLQUFJLENBQUN5VCxRQUFRLEVBQUVDLElBQUksQ0FBQztNQUNuRCxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFqVSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRNlYsbUJBQW1CQSxDQUFDbkIsSUFBUyxFQUFVO01BQUEsSUFBQW9CLE1BQUE7TUFDN0MsSUFBSUMseUJBQXlCLEdBQUdyQixJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ3ZDLElBQUlzQixLQUFLLEdBQUcsQ0FBQztNQUViLE9BQU9ELHlCQUF5QixDQUFDcFQsT0FBTyxJQUFJK1IsSUFBSSxDQUFDekssTUFBTSxHQUFHLENBQUMsSUFBSStMLEtBQUssSUFBSSxDQUFDLEVBQUU7UUFDekVBLEtBQUssR0FBR0QseUJBQXlCLENBQUNwVCxPQUFPLENBQUMsR0FBRyxFQUFFcVQsS0FBSyxDQUFDO1FBRXJELElBQUlBLEtBQUssR0FBRyxDQUFDLEVBQUU7VUFDYixJQUFNL08sSUFBSSxHQUFHOE8seUJBQXlCLENBQUNqVCxTQUFTLENBQUNrVCxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1VBRXRFLFFBQVEvTyxJQUFJO1lBQ1YsS0FBSyxHQUFHO2NBQ047Y0FDQThPLHlCQUF5QixHQUFHQSx5QkFBeUIsQ0FBQ2pULFNBQVMsQ0FBQyxDQUFDLEVBQUVrVCxLQUFLLENBQUMsR0FBR0QseUJBQXlCLENBQUNqVCxTQUFTLENBQUNrVCxLQUFLLEdBQUcsQ0FBQyxDQUFDO2NBQzFIQSxLQUFLLEVBQUU7Y0FFUDtZQUNGLEtBQUssR0FBRztZQUNSLEtBQUssR0FBRztjQUNOO2NBQ0F0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdxQix5QkFBeUIsR0FBRyxJQUFJLENBQUNFLGVBQWUsQ0FDeEQsSUFBSSxDQUFDaEcsUUFBUSxDQUFDeUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3RCcUIseUJBQXlCLEVBQ3pCQyxLQUNGLENBQUM7Y0FDRHRCLElBQUksQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2NBRWpCO1lBQ0YsS0FBSyxHQUFHO2NBQ047Y0FDQXhCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBR3FCLHlCQUF5QixHQUFHLElBQUksQ0FBQ0UsZUFBZSxDQUN4RCxJQUFJLENBQUNFLFNBQVMsQ0FBQ3pCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN2QnFCLHlCQUF5QixFQUN6QkMsS0FDRixDQUFDO2NBRUR0QixJQUFJLENBQUN3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUVqQjtZQUNGO2NBQ0UsT0FBT3hCLElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDO1VBQzFCO1FBQ0Y7TUFDRjtNQUVBLElBQUl5RSxJQUFJLENBQUN6SyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25CeUssSUFBSSxHQUFHQSxJQUFJLENBQUMvQyxNQUFNLENBQUMsVUFBQ3lFLFdBQW1CLEVBQUVDLFlBQTRCLEVBQUVMLEtBQWEsRUFBRU0sS0FBZSxFQUFLO1VBQ3hHLElBQUlOLEtBQUssR0FBRyxDQUFDLEtBQUtNLEtBQUssQ0FBQ3JNLE1BQU0sSUFBSW9NLFlBQVksWUFBWTdSLEtBQUssRUFBRTtZQUMvRCxJQUFJRixzRUFBaUIsQ0FBQ2lTLDZCQUE2QixFQUFFO2NBQ25ELE9BQU9ILFdBQVcsR0FBRyxJQUFJLEdBQUdOLE1BQUksQ0FBQzdGLFFBQVEsQ0FBQ29HLFlBQVksQ0FBQ0csS0FBSyxDQUFDO1lBQy9EO1lBRUEsT0FBT0osV0FBVyxHQUFHLElBQUksR0FBR04sTUFBSSxDQUFDN0YsUUFBUSxDQUFDb0csWUFBWSxDQUFDeEMsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHaUMsTUFBSSxDQUFDN0YsUUFBUSxDQUFDb0csWUFBWSxDQUFDRyxLQUFLLENBQUM7VUFDNUc7VUFFQSxPQUFPSixXQUFXLE9BQUF4VCxNQUFBLENBQU9rVCxNQUFJLENBQUM3RixRQUFRLENBQUNvRyxZQUFZLENBQUMsTUFBRztRQUN6RCxDQUFDLENBQUM7TUFDSjtNQUVBLE9BQU8zQixJQUFJLENBQUN6RSxRQUFRLENBQUMsQ0FBQztJQUN4QjtFQUFDO0lBQUFuUSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRbVcsU0FBU0EsQ0FBQ00sR0FBUSxFQUFVO01BQ2xDLElBQU1DLEtBQWUsR0FBRyxFQUFFO01BRTFCLElBQUk7UUFDRixPQUFPdk0sSUFBSSxDQUFDZ00sU0FBUyxDQUNuQk0sR0FBRyxZQUFZalMsS0FBSyxHQUFHLElBQUksQ0FBQ3lMLFFBQVEsQ0FBQ3dHLEdBQUcsQ0FBQyxHQUFHQSxHQUFHLEVBQy9DLFVBQUNFLENBQUMsRUFBRTNXLEtBQUssRUFBSztVQUNaLElBQUksQ0FBQyxDQUFDQSxLQUFLLElBQUlBLEtBQUssWUFBWTRXLE1BQU0sRUFBRTtZQUN0QyxJQUFJRixLQUFLLENBQUNyVCxRQUFRLENBQUNyRCxLQUFLLENBQUMsRUFBRTtjQUN6QixPQUFPLGFBQWE7WUFDdEI7WUFFQTBXLEtBQUssQ0FBQ3pOLElBQUksQ0FBQ2pKLEtBQUssQ0FBQztVQUNuQjtVQUVBLE9BQU9BLEtBQUs7UUFDZCxDQUFDLEVBQ0QsQ0FDRixDQUFDO01BQ0gsQ0FBQyxDQUFDLE9BQU9xSyxDQUFDLEVBQUU7UUFDVixPQUFPLGlDQUFpQztNQUMxQztJQUNGO0VBQUM7SUFBQXZLLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFpVyxlQUFlQSxDQUFDWSxRQUFhLEVBQUVkLHlCQUFpQyxFQUFFQyxLQUFhLEVBQVU7TUFDL0YsT0FBT0QseUJBQXlCLENBQUNqVCxTQUFTLENBQUMsQ0FBQyxFQUFFa1QsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDL0YsUUFBUSxDQUFDNEcsUUFBUSxDQUFDLEdBQUdkLHlCQUF5QixDQUFDalQsU0FBUyxDQUFDa1QsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqSTtFQUFDO0lBQUFsVyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRaVEsUUFBUUEsQ0FBQ2dDLElBQVMsRUFBVTtNQUNsQyxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDNUIsT0FBT0EsSUFBSTtNQUNiO01BRUEsSUFBSSxPQUFPQSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQzdCLE9BQU9BLElBQUksR0FBRyxNQUFNLEdBQUcsT0FBTztNQUNoQztNQUVBLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPQSxJQUFJLENBQUNoQyxRQUFRLENBQUMsQ0FBQztNQUN4QjtNQUVBLElBQUk2RyxXQUFXLEdBQUcsRUFBRTtNQUVwQixJQUFJN0UsSUFBSSxFQUFFO1FBQ1IsSUFBSSxPQUFPQSxJQUFJLEtBQUssVUFBVSxFQUFFO1VBQzlCNkUsV0FBVyxHQUFHN0UsSUFBSSxDQUFDaEMsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxNQUFNLElBQUlnQyxJQUFJLFlBQVkyRSxNQUFNLEVBQUU7VUFDakMsSUFBSTtZQUNGRSxXQUFXLEdBQUc3RSxJQUFJLENBQUNoQyxRQUFRLENBQUMsQ0FBQztVQUMvQixDQUFDLENBQUMsT0FBTzVGLENBQUMsRUFBRTtZQUNWeU0sV0FBVyxHQUFHLDZCQUE2QjtVQUM3QztRQUNGO01BQ0Y7TUFFQSxPQUFPQSxXQUFXO0lBQ3BCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdk5IO0FBQ0E7QUFDQTs7QUFFeUQ7QUFDWDtBQUFBLElBRXpCclQsY0FBYztFQUFBLFNBQUFBLGVBQUE7SUFBQW5FLGlGQUFBLE9BQUFtRSxjQUFBO0VBQUE7RUFBQSxPQUFBNUQsOEVBQUEsQ0FBQTRELGNBQUE7SUFBQTNELEdBQUE7SUFBQUMsR0FBQSxFQUNqQyxTQUFBQSxJQUFBLEVBQStDO01BQzdDLE9BQU93VCx3REFBWSxDQUFDekksa0VBQWEsQ0FBQ1MsUUFBUSxDQUFDO0lBQzdDO0VBQUM7SUFBQXpMLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0Q7TUFDcEQsT0FBT3dULHdEQUFZLENBQUN6SSxrRUFBYSxDQUFDVyxZQUFZLENBQUM7SUFDakQ7RUFBQztJQUFBM0wsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3RDtNQUN0RCxPQUFPd1Qsd0RBQVksQ0FBQ3lCLElBQUk7SUFDMUI7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCSDtBQUNBO0FBQ0E7O0FBR2dFO0FBQzVCO0FBQ2M7QUFDRjtBQUNjO0FBQ1c7QUFDTTtBQUNqQztBQUFBLElBRXpCak4sYUFBYTtFQTREaEMsU0FBQUEsY0FBQSxFQUFzQjtJQUFBekksaUZBQUEsT0FBQXlJLGFBQUE7SUFDcEIsTUFBTSxJQUFJdkQsS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMsT0FBQTNFLDhFQUFBLENBQUFrSSxhQUFBO0lBQUFqSSxHQUFBO0lBQUFDLEdBQUEsRUF4REQsU0FBQUEsSUFBQSxFQUE0RDtNQUMxRCxPQUFPZ0ksYUFBYSxDQUFDb1AsdUJBQXVCO0lBQzlDO0VBQUM7SUFBQXJYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9rSSxTQUFTQSxDQUFDNEwsUUFBZ0IsRUFBVztNQUMxQyxJQUFJLE9BQU9BLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaENBLFFBQVEsR0FBRyxLQUFLO01BQ2xCO01BRUEsSUFBTXNELE1BQU0sR0FBR3JQLGFBQWEsQ0FBQ3NQLFFBQVEsQ0FBQ3ZELFFBQVEsQ0FBQztNQUUvQyxJQUFJc0QsTUFBTSxFQUFFO1FBQ1YsT0FBT0EsTUFBTTtNQUNmO01BRUEsT0FBT3JQLGFBQWEsQ0FBQ3NQLFFBQVEsQ0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLElBQUlNLCtDQUFNLENBQUNOLFFBQVEsRUFBRSxJQUFJLENBQUNaLFVBQVUsRUFBRSxJQUFJLENBQUNRLFVBQVUsQ0FBQztJQUNsRztFQUFDO0lBQUE1VCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPc1gsMkNBQTJDQSxDQUFBLEVBQVM7TUFDekR2UCxhQUFhLENBQUN3UCxpQkFBaUIsQ0FBQyxDQUFDO01BQ2pDeFAsYUFBYSxDQUFDeVAseUJBQXlCLENBQUMsU0FBUyxFQUFFelAsYUFBYSxDQUFDMFAsa0JBQWtCLENBQUMxUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDL0ZnRCxhQUFhLENBQUN5UCx5QkFBeUIsQ0FBQyxXQUFXLEVBQUV6UCxhQUFhLENBQUMyUCxvQkFBb0IsQ0FBQzNTLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRztFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFldVgsaUJBQWlCQSxDQUFBLEVBQVM7TUFDdkMsSUFBTUksY0FBYyxHQUFHVCx5RUFBNEIsQ0FBQ3ZULGNBQWMsQ0FBQyxzQkFBc0IsQ0FBcUI7TUFFOUcsSUFBSTRQLGlEQUFZLENBQUNvRSxjQUFjLENBQUMsRUFBRTtRQUNoQyxJQUFJLENBQUNqRSxVQUFVLENBQUNrRSxZQUFZLENBQUNyRSxpREFBWSxDQUFDb0UsY0FBYyxDQUFDLENBQUM7TUFDNUQ7TUFFQTtJQUNGO0VBQUM7SUFBQTdYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWV3WCx5QkFBeUJBLENBQUM1VCxJQUFZLEVBQUVpVSxhQUE0QyxFQUFRO01BQ3pHLElBQU1GLGNBQWMsR0FBR1QseUVBQTRCLENBQUN2VCxjQUFjLFdBQUFmLE1BQUEsQ0FBV2dCLElBQUksbUJBQWdCLENBQXFCO01BRXRILElBQUkrVCxjQUFjLEtBQUssS0FBSyxFQUFFO1FBQzVCO01BQ0Y7TUFFQUUsYUFBYSxDQUFDdEUsaURBQVksQ0FBQ29FLGNBQWMsQ0FBQyxDQUFDO0lBQzdDO0VBQUM7SUFBQTdYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWV5WCxrQkFBa0JBLENBQUM3QixLQUFtQixFQUFRO01BQzNELElBQUksQ0FBQzFDLFVBQVUsQ0FBQ3hTLEdBQUcsQ0FBQyxJQUFJOFMsd0RBQWUsQ0FBQ29DLEtBQUssSUFBSW5TLHdEQUFjLENBQUNXLDBCQUEwQixDQUFDLENBQUM7SUFDOUY7RUFBQztJQUFBdEUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZTBYLG9CQUFvQkEsQ0FBQzlCLEtBQW1CLEVBQVE7TUFDN0QsSUFBSSxDQUFDdUIsdUJBQXVCLENBQUMxRCxTQUFTLEdBQUdtQyxLQUFLLElBQUluUyx3REFBYyxDQUFDWSw0QkFBNEI7TUFFN0YsSUFBSSxDQUFDNk8sVUFBVSxDQUFDeFMsR0FBRyxDQUFDLElBQUlzVyxtRUFBaUIsQ0FBQyxJQUFJLENBQUNHLHVCQUF1QixDQUFDLENBQUM7SUFDMUU7RUFBQztBQUFBO0FBQUE1WCxpRkFBQSxDQTFEa0J3SSxhQUFhLGNBQ3lCLENBQUMsQ0FBQztBQUFBeEksaUZBQUEsQ0FEeEN3SSxhQUFhLGdCQUVPLElBQUlrTCxrREFBUyxDQUFDLENBQUM7QUFBQTFULGlGQUFBLENBRm5Dd0ksYUFBYSxnQkFHYyxJQUFJZ1AseURBQWdCLENBQUMsQ0FBQztBQUFBeFgsaUZBQUEsQ0FIakR3SSxhQUFhLDZCQUlpQyxJQUFJa1AseUVBQXNCLENBQUMsQ0FBQztBQUo3RDtBQWlFbENsUCxhQUFhLENBQUN1UCwyQ0FBMkMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9FM0Q7QUFDQTtBQUNBOztBQUUwRDtBQUNGO0FBQUEsSUFFbkM5VCxtQkFBbUI7RUFBQSxTQUFBQSxvQkFBQTtJQUFBbEUsaUZBQUEsT0FBQWtFLG1CQUFBO0VBQUE7RUFBQSxPQUFBM0QsOEVBQUEsQ0FBQTJELG1CQUFBO0lBQUExRCxHQUFBO0lBQUFFLEtBQUEsRUFDdEMsU0FBT2tFLHFDQUFxQ0EsQ0FBQzRULFlBQTBCLEVBQW9CO01BQ3pGLFFBQVFBLFlBQVk7UUFDbEIsS0FBS3ZFLGlEQUFZLENBQUN3RSxHQUFHO1VBQ25CLE9BQU8sS0FBSztRQUNkLEtBQUt4RSxpREFBWSxDQUFDaUIsS0FBSztVQUNyQixPQUFPLE9BQU87UUFDaEIsS0FBS2pCLGlEQUFZLENBQUNzQixLQUFLO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLdEIsaURBQVksQ0FBQ3lCLElBQUk7VUFDcEIsT0FBTyxPQUFPO1FBQ2hCLEtBQUt6QixpREFBWSxDQUFDVyxJQUFJO1VBQ3BCLE9BQU8sTUFBTTtRQUNmLEtBQUtYLGlEQUFZLENBQUMvTyxLQUFLO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLK08saURBQVksQ0FBQ2tDLEtBQUs7VUFDckIsT0FBTyxPQUFPO1FBQ2hCLEtBQUtsQyxpREFBWSxDQUFDeUUsR0FBRztVQUNuQixPQUFPLEtBQUs7UUFDZDtVQUNFakYsbUVBQWlCLENBQUMrRSxZQUFZLENBQUM7TUFDbkM7SUFDRjtFQUFDO0lBQUFoWSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPaVkscUNBQXFDQSxDQUFDQyxnQkFBa0MsRUFBZ0I7TUFDN0YsUUFBUUEsZ0JBQWdCO1FBQ3RCLEtBQUssS0FBSztVQUNSLE9BQU8zRSxpREFBWSxDQUFDd0UsR0FBRztRQUN6QixLQUFLLE9BQU87VUFDVixPQUFPeEUsaURBQVksQ0FBQ2lCLEtBQUs7UUFDM0IsS0FBSyxPQUFPO1VBQ1YsT0FBT2pCLGlEQUFZLENBQUNzQixLQUFLO1FBQzNCLEtBQUssTUFBTTtVQUNULE9BQU90QixpREFBWSxDQUFDeUIsSUFBSTtRQUMxQixLQUFLLE1BQU07VUFDVCxPQUFPekIsaURBQVksQ0FBQ1csSUFBSTtRQUMxQixLQUFLLE9BQU87VUFDVixPQUFPWCxpREFBWSxDQUFDL08sS0FBSztRQUMzQixLQUFLLE9BQU87VUFDVixPQUFPK08saURBQVksQ0FBQ2tDLEtBQUs7UUFDM0IsS0FBSyxLQUFLO1VBQ1IsT0FBT2xDLGlEQUFZLENBQUN5RSxHQUFHO1FBQ3pCO1VBQ0VqRixtRUFBaUIsQ0FBQ21GLGdCQUFnQixDQUFDO01BQ3ZDO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcERIO0FBQ0E7QUFDQTs7QUFFOEM7QUFBQSxJQUd6Qm5CLGdCQUFnQjtFQUFBLFNBQUFBLGlCQUFBO0lBQUF6WCxpRkFBQSxPQUFBeVgsZ0JBQUE7SUFBQXhYLGlGQUFBLHFCQUNBa0UsdURBQWMsQ0FBQ1UsbUJBQW1CO0VBQUE7RUFBQSxPQUFBdEUsOEVBQUEsQ0FBQWtYLGdCQUFBO0lBQUFqWCxHQUFBO0lBQUFDLEdBQUEsRUFFckUsU0FBQUEsSUFBQSxFQUEwQjtNQUN4QixPQUFPLElBQUksQ0FBQzJULFVBQVU7SUFDeEI7RUFBQztJQUFBNVQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRYLFlBQVlBLENBQUNuRSxTQUF1QixFQUFRO01BQzFDLElBQUksQ0FBQ0MsVUFBVSxHQUFHRCxTQUFTO0lBQzdCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEJIO0FBQ0E7QUFDQTs7QUFFc0Q7QUFDSTtBQUNsQjtBQUFBLElBRW5CN0wsVUFBVTtFQUc3QixTQUFBQSxXQUFZd1EsT0FBb0IsRUFBRTtJQUFBOVksaUZBQUEsT0FBQXNJLFVBQUE7SUFBQXJJLGlGQUFBO0lBQ2hDLElBQUksQ0FBQzhZLFFBQVEsR0FBR0QsT0FBTztFQUN6QjtFQUFDLE9BQUF2WSw4RUFBQSxDQUFBK0gsVUFBQTtJQUFBOUgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWdKLE9BQU9BLENBQUEsRUFBVztNQUNoQixPQUFPckIsb0RBQVcsQ0FBQyxJQUFJLENBQUMwUSxRQUFRLENBQUM7SUFDbkM7RUFBQztJQUFBdlksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXNZLGlCQUFpQkEsQ0FBQSxFQUFtQjtNQUNsQyxRQUFRLElBQUksQ0FBQ0QsUUFBUTtRQUNuQixLQUFLMVEsb0RBQVcsQ0FBQzRRLGdCQUFnQjtVQUMvQixPQUFPSixpRUFBYyxDQUFDSyxTQUFTO1FBQ2pDLEtBQUs3USxvREFBVyxDQUFDOFEsK0JBQStCO1VBQzlDLE9BQU9OLGlFQUFjLENBQUNLLFNBQVM7UUFDakMsS0FBSzdRLG9EQUFXLENBQUMrUSxPQUFPO1VBQ3RCLE9BQU9QLGlFQUFjLENBQUNILEdBQUc7UUFDM0IsS0FBS3JRLG9EQUFXLENBQUNnUixTQUFTO1VBQ3hCLE9BQU9SLGlFQUFjLENBQUNILEdBQUc7UUFDM0IsS0FBS3JRLG9EQUFXLENBQUNjLGNBQWM7VUFDN0IsT0FBTzBQLGlFQUFjLENBQUNILEdBQUc7UUFDM0IsS0FBS3JRLG9EQUFXLENBQUNnQixXQUFXO1VBQzFCLE9BQU93UCxpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtyUSxvREFBVyxDQUFDaVIsYUFBYTtVQUM1QixPQUFPVCxpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtyUSxvREFBVyxDQUFDa1IsMEJBQTBCO1VBQ3pDLE9BQU9WLGlFQUFjLENBQUNILEdBQUc7UUFDM0IsS0FBS3JRLG9EQUFXLENBQUNtUixXQUFXO1VBQzFCLE9BQU9YLGlFQUFjLENBQUNILEdBQUc7UUFDM0IsS0FBS3JRLG9EQUFXLENBQUNvUixpQkFBaUI7VUFDaEMsT0FBT1osaUVBQWMsQ0FBQ0gsR0FBRztRQUMzQixLQUFLclEsb0RBQVcsQ0FBQ3FSLHFCQUFxQjtVQUNwQyxPQUFPYixpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtyUSxvREFBVyxDQUFDc1IscUJBQXFCO1VBQ3BDLE9BQU9kLGlFQUFjLENBQUNILEdBQUc7UUFDM0I7VUFDRWpGLG1FQUFpQixDQUFDLElBQUksQ0FBQ3NGLFFBQVEsQ0FBQztNQUNwQztJQUNGO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaERIO0FBQ0E7QUFDQTs7QUFFcUQ7QUFDSDtBQUUzQyxJQUFLRixjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQUEsT0FBZEEsY0FBYztBQUFBO0FBSXpCLElBSW9CZSxvQkFBb0I7RUFBQSxTQUFBQSxxQkFBQTtJQUFBNVosaUZBQUEsT0FBQTRaLG9CQUFBO0lBQUEzWixpRkFBQSxlQUN4QixtREFBbUQ7SUFBQUEsaUZBQUEsbUJBQ3ZDLEdBQUc7SUFBQUEsaUZBQUEscUJBQ0QsR0FBRztJQUFBQSxpRkFBQSx1QkFDRCxHQUFHO0lBQUFBLGlGQUFBLHFCQUNHZ0UseURBQWdCLENBQUNVLHFCQUFxQjtFQUFBO0VBQUEsT0FBQXBFLDhFQUFBLENBQUFxWixvQkFBQTtJQUFBcFosR0FBQTtJQUFBQyxHQUFBLEVBRTNFLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJLENBQUNvWixJQUFJO0lBQ2xCLENBQUM7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQVFDLEdBQVcsRUFBRTtNQUNuQixJQUFNQyxVQUFVLEdBQUcsSUFBSXZhLGdFQUFXLENBQUNpQixLQUFLLENBQUNvRixHQUFHLENBQUNpVSxHQUFHLENBQUM7TUFFakRDLFVBQVUsQ0FBQ0MsUUFBUSxHQUFHRCxVQUFVLENBQUNDLFFBQVEsR0FBRyxVQUFVO01BRXRELElBQUksQ0FBQ0osSUFBSSxHQUFHRyxVQUFVLENBQUNySixRQUFRLENBQUMsQ0FBQztJQUNuQztFQUFDO0lBQUFuUSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBCO01BQ3hCLE9BQU8sSUFBSSxDQUFDeVosWUFBWTtJQUMxQixDQUFDO0lBQUFKLEdBQUEsRUFFRCxTQUFBQSxJQUFnQkssV0FBbUIsRUFBRTtNQUNuQyxJQUFJLENBQUNELFlBQVksR0FBR0MsV0FBVztJQUNqQztFQUFDO0lBQUEzWixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU8sSUFBSSxDQUFDMlosUUFBUTtJQUN0QixDQUFDO0lBQUFOLEdBQUEsRUFFRCxTQUFBQSxJQUFZTyxPQUFlLEVBQUU7TUFDM0IsSUFBSSxDQUFDRCxRQUFRLEdBQUdDLE9BQU87SUFDekI7RUFBQztJQUFBN1osR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QjtNQUN0QixPQUFPLElBQUksQ0FBQzZaLFVBQVU7SUFDeEIsQ0FBQztJQUFBUixHQUFBLEVBRUQsU0FBQUEsSUFBY1MsU0FBaUIsRUFBRTtNQUMvQixJQUFJLENBQUNELFVBQVUsR0FBR0MsU0FBUztJQUM3QjtFQUFDO0lBQUEvWixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdDO01BQzlCLE9BQU8sSUFBSSxDQUFDMlQsVUFBVTtJQUN4QixDQUFDO0lBQUEwRixHQUFBLEVBRUQsU0FBQUEsSUFBYzNGLFNBQXlCLEVBQUU7TUFDdkMsSUFBSSxDQUFDQyxVQUFVLEdBQUdELFNBQVM7SUFDN0I7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hFSDtBQUNBO0FBQ0E7O0FBRThDO0FBQzhCO0FBQy9DO0FBQ2tCO0FBQ0Y7QUFDZ0I7QUFBQSxJQUV4Q3dHLGNBQWM7RUFzQ2pDLFNBQUFBLGVBQUEsRUFBc0I7SUFBQTNhLGlGQUFBLE9BQUEyYSxjQUFBO0lBQ3BCLE1BQU0sSUFBSXpWLEtBQUssQ0FBQywrREFBK0QsQ0FBQztFQUNsRjtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBb2EsY0FBQTtJQUFBbmEsR0FBQTtJQUFBRSxLQUFBLEVBckNELFNBQU9rYSxpQkFBaUJBLENBQUNiLEdBQVcsRUFBa0I7TUFDcEQsSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLE1BQU0sSUFBSTdVLEtBQUssMkNBQUE1QixNQUFBLENBQUF1WCx5RUFBQSxDQUFrRGQsR0FBRyxPQUFHLENBQUM7TUFDMUU7TUFFQSxJQUFNZSxlQUFlLEdBQUdILGNBQWMsQ0FBQ0ksZ0JBQWdCLENBQUNoQixHQUFHLENBQUM7TUFFNUQsSUFBSWUsZUFBZSxFQUFFO1FBQ25CLE9BQU9BLGVBQWU7TUFDeEI7TUFFQSxJQUFNRSxvQkFBb0IsR0FBRyxJQUFJcEIsNkRBQW9CLENBQUMsQ0FBQztNQUV2RG9CLG9CQUFvQixDQUFDVCxTQUFTLEdBQUcvUixnREFBRyxDQUFDeVMsZUFBZTtNQUNwREQsb0JBQW9CLENBQUNYLE9BQU8sR0FBRzdSLGdEQUFHLENBQUM2UixPQUFPLENBQUMzWixLQUFLO01BQ2hEc2Esb0JBQW9CLENBQUNqQixHQUFHLEdBQUdVLHlEQUFZLENBQUNTLGVBQWUsQ0FBQ25CLEdBQUcsQ0FBQztNQUM1RGlCLG9CQUFvQixDQUFDYixXQUFXLEdBQUdPLHdEQUFXLENBQUNTLHFCQUFxQixDQUFDcEIsR0FBRyxDQUFDO01BRXpFaUIsb0JBQW9CLENBQUM3RyxTQUFTLEdBQUduUSwrREFBcUIsQ0FBQ29YLHlDQUF5QyxDQUFDNVMsZ0RBQUcsQ0FBQzZTLGNBQWMsQ0FBQztNQUVwSCxPQUFPVixjQUFjLENBQUNJLGdCQUFnQixDQUFDaEIsR0FBRyxDQUFDLEdBQUcsSUFBSVMsdURBQWMsQ0FBQ1Esb0JBQW9CLENBQUM7SUFDeEY7RUFBQztJQUFBeGEsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzRhLGlCQUFpQkEsQ0FBQ0QsY0FBOEIsRUFBUTtNQUM3RCxJQUFNUCxlQUFlLEdBQUd4RCxNQUFNLENBQUNpRSxNQUFNLENBQUNaLGNBQWMsQ0FBQ0ksZ0JBQWdCLENBQUM7TUFFdEUsSUFBSUQsZUFBZSxJQUFJQSxlQUFlLENBQUNuUSxNQUFNLEVBQUU7UUFDN0NtUSxlQUFlLENBQUNwSyxPQUFPLENBQUMsVUFBQTdILGNBQWMsRUFBSTtVQUN4QyxJQUFNbVMsb0JBQW9CLEdBQUduUyxjQUFjLENBQUNtUyxvQkFBb0I7VUFFaEVBLG9CQUFvQixDQUFDN0csU0FBUyxHQUFHa0gsY0FBYztRQUNqRCxDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7QUFBQTtBQUFBcGIsaUZBQUEsQ0FwQ2tCMGEsY0FBYyxzQkFDdUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaNUU7QUFDQTtBQUNBOztBQUVxRDtBQUVEO0FBQ1E7QUFDRDtBQUNyQjtBQUl0QyxJQUFNZSxnQkFBZ0IsR0FBRyxJQUFJO0FBQzdCLElBQU1DLGtCQUFrQixHQUFHLElBQUk7QUFBQyxJQWtDWG5CLGNBQWM7RUFTakMsU0FBQUEsZUFBWVEsb0JBQTBDLEVBQUU7SUFBQSxJQUFBamEsS0FBQTtJQUFBZixpRkFBQSxPQUFBd2EsY0FBQTtJQUFBdmEsaUZBQUEsa0JBUnBCd0ksNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGdCQUFnQixDQUFDO0lBQUEzSSxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQSxtQkFHcEMsRUFBRTtJQUFBQSxpRkFBQSxxQkFDYixLQUFLO0lBQUFBLGlGQUFBLHdCQUNYLENBQUM7SUFBQUEsaUZBQUEsa0JBQ1AsRUFBRTtJQUdsQixJQUFJLENBQUMyYixxQkFBcUIsR0FBR1osb0JBQW9CO0lBQ2pELElBQUksQ0FBQ2EsbUJBQW1CLEdBQUcsSUFBSUwsZ0VBQWtCLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUNNLGtDQUFrQyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQUFDLGdCQUFnQixFQUFJO01BQ2pFamIsS0FBSSxDQUFDa2IsT0FBTyxHQUFHRCxnQkFBZ0IsYUFBaEJBLGdCQUFnQixjQUFoQkEsZ0JBQWdCLEdBQUksRUFBRTtJQUN2QyxDQUFDLENBQUM7RUFDSjtFQUFDLE9BQUF6Yiw4RUFBQSxDQUFBaWEsY0FBQTtJQUFBaGEsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpRDtNQUMvQyxPQUFPLElBQUksQ0FBQ21iLHFCQUFxQjtJQUNuQztFQUFDO0lBQUFwYixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaUosSUFBSUEsQ0FBQ3VTLE1BQWUsRUFBUTtNQUMxQixJQUFPalQsUUFBUSxHQUFtRGlULE1BQU0sQ0FBakVqVCxRQUFRO1FBQUV2SSxLQUFLLEdBQTRDd2IsTUFBTSxDQUF2RHhiLEtBQUs7UUFBRXliLGFBQWEsR0FBNkJELE1BQU0sQ0FBaERDLGFBQWE7UUFBRXZTLE9BQU8sR0FBb0JzUyxNQUFNLENBQWpDdFMsT0FBTztRQUFFd1MsUUFBUSxHQUFVRixNQUFNLENBQXhCRSxRQUFRO1FBQUVDLElBQUksR0FBSUgsTUFBTSxDQUFkRyxJQUFJO01BQzlELElBQU0vUyxVQUFVLEdBQUcsSUFBSWhCLG9EQUFVLENBQUM0VCxNQUFNLENBQUM1UyxVQUFVLENBQUM7TUFFcEQsSUFBSSxJQUFJLENBQUNzUyxxQkFBcUIsQ0FBQ3pILFNBQVMsR0FBRzdLLFVBQVUsQ0FBQzBQLGlCQUFpQixDQUFDLENBQUMsRUFBRTtRQUN6RTtNQUNGO01BRUEsSUFBTXNELFlBQVksR0FBRztRQUNuQkMsU0FBUyxFQUFFLElBQUlyYyxJQUFJLENBQUMsQ0FBQyxDQUFDeVUsV0FBVyxDQUFDLENBQUM7UUFDbkMwRixPQUFPLEVBQUUsSUFBSSxDQUFDdUIscUJBQXFCLENBQUN2QixPQUFPO1FBQzNDRSxTQUFTLEVBQUUsSUFBSSxDQUFDcUIscUJBQXFCLENBQUNyQixTQUFTO1FBQy9DdFIsUUFBUSxFQUFSQSxRQUFRO1FBQ1JpVCxNQUFNLEVBQUU1UyxVQUFVLENBQUNJLE9BQU8sQ0FBQyxDQUFDO1FBQzVCaEosS0FBSyxFQUFMQSxLQUFLO1FBQ0x5YixhQUFhLEVBQWJBLGFBQWE7UUFDYkssaUJBQWlCLEVBQUUsSUFBSSxDQUFDUCxPQUFPO1FBQy9COUIsV0FBVyxFQUFFLElBQUksQ0FBQ3lCLHFCQUFxQixDQUFDekIsV0FBVztRQUNuRHpXLE9BQU8sRUFBRStYLG1FQUFjLENBQUNnQixVQUFVO1FBQ2xDN1MsT0FBTyxFQUFQQSxPQUFPO1FBQ1B3UyxRQUFRLEVBQVJBLFFBQVE7UUFDUkMsSUFBSSxFQUFKQTtNQUNGLENBQUM7TUFFRCxJQUFJLENBQUN0RCxRQUFRLENBQUNwUCxJQUFJLENBQUMyUyxZQUFZLENBQUM7TUFFaEMsSUFBTUksT0FBTyxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUMxQztFQUFDO0lBQUFuYyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRb2Isa0NBQWtDQSxDQUFBLEVBQW9CO01BQzVELE9BQU8sSUFBSWMsT0FBTyxDQUFTLFVBQUFDLE9BQU8sRUFBSTtRQUNwQyxJQUFNQyxZQUFZLEdBQUdyZCxnRUFBVyxDQUFDd1EsU0FBUyxDQUFDLFVBQUEzQixXQUFXLEVBQUk7VUFDeEQsSUFBSUEsV0FBVyxFQUFFO1lBQ2Z1TyxPQUFPLENBQUN2TyxXQUFXLENBQUMwTixnQkFBZ0IsQ0FBQztZQUNyQ2MsWUFBWSxDQUFDamMsT0FBTyxDQUFDLENBQUM7VUFDeEI7UUFDRixDQUFDLENBQUM7TUFDSixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFpTCxZQUFBLEdBQUFvUixtRkFBQSxjQUFBQyxzRUFBQSxDQUVELFNBQUFFLFFBQTBCQyxlQUFxQztRQUFBLElBQUFDLFFBQUE7UUFBQSxPQUFBSixzRUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUN2REwsUUFBUSxHQUFHLElBQUkzZCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ08sUUFBUSxDQUFDLENBQUM7Y0FFakQwTyxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUU3UyxJQUFJLENBQUNnTSxTQUFTLENBQUM7Z0JBQUM4RyxPQUFPLEVBQUVSO2NBQWUsQ0FBQyxDQUFDLENBQUM7Y0FBQ0ksUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FFM0RoZSxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDNk8sS0FBSyxDQUFDLElBQUksQ0FBQ3FNLHFCQUFxQixDQUFDN0IsR0FBRyxFQUFFO2dCQUNuRTZELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVUO2NBQ1IsQ0FBQyxDQUFDO1lBQUE7Y0FBQSxPQUFBRyxRQUFBLENBQUFPLE1BQUEsV0FBQVAsUUFBQSxDQUFBUSxJQUFBO1lBQUE7WUFBQTtjQUFBLE9BQUFSLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ0g7TUFBQSxTQVRhaFIsV0FBV0EsQ0FBQStSLEVBQUE7UUFBQSxPQUFBdFMsWUFBQSxDQUFBdVMsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBWDlHLFdBQVc7SUFBQTtFQUFBO0lBQUExTCxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBeWQsa0JBQUEsR0FBQXBCLG1GQUFBLGNBQUFDLHNFQUFBLENBV3pCLFNBQUFvQixTQUFBO1FBQUEsSUFBQTVILE1BQUE7UUFBQSxJQUFBMkcsZUFBQTtRQUFBLE9BQUFILHNFQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUFBLE1BQ00sSUFBSSxDQUFDMUUsUUFBUSxDQUFDcE8sTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM0VCxVQUFVLElBQUksQ0FBQzllLGdFQUFXLENBQUNpQixLQUFLO2dCQUFBNGQsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBYSxTQUFBLENBQUFSLE1BQUE7WUFBQTtjQUl0RSxJQUFJLENBQUNTLFVBQVUsR0FBRyxJQUFJO2NBRWhCcEIsZUFBZSxHQUFHLElBQUksQ0FBQ3BFLFFBQVEsQ0FBQ3lGLEtBQUssQ0FBQyxDQUFDLEVBQUU5QyxnQkFBZ0IsQ0FBQztjQUVoRSxJQUFJLENBQUMzQyxRQUFRLEdBQUcsSUFBSSxDQUFDQSxRQUFRLENBQUN5RixLQUFLLENBQUM5QyxnQkFBZ0IsQ0FBQztjQUFDLE9BQUE0QyxTQUFBLENBQUFSLE1BQUEsV0FFL0MsSUFBSSxDQUFDNVIsV0FBVyxDQUFDaVIsZUFBZSxDQUFDLENBQUNwQixJQUFJLENBQUMsVUFBQTBDLFFBQVEsRUFBSTtnQkFDeEQsSUFBSWpJLE1BQUksQ0FBQ2tJLDZCQUE2QixDQUFDRCxRQUFRLENBQUMsRUFBRTtrQkFDaEQsSUFBSWpJLE1BQUksQ0FBQ3VDLFFBQVEsQ0FBQ3BPLE1BQU0sSUFBSWdSLGtCQUFrQixFQUFFO29CQUM5Q25GLE1BQUksQ0FBQ21JLGFBQWEsRUFBRTtvQkFFcEJsZixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07c0JBQ2pDOFEsTUFBSSxDQUFDdUMsUUFBUSxNQUFBelYsTUFBQSxDQUFBc2Isb0ZBQUEsQ0FBT3pCLGVBQWUsR0FBQXlCLG9GQUFBLENBQUtwSSxNQUFJLENBQUN1QyxRQUFRLEVBQUM7c0JBRXREdkMsTUFBSSxDQUFDK0gsVUFBVSxHQUFHLEtBQUs7c0JBRXZCLElBQU03QixPQUFPLEdBQUdsRyxNQUFJLENBQUNtRyxpQkFBaUIsQ0FBQyxDQUFDO29CQUMxQyxDQUFDLEVBQUVuRyxNQUFJLENBQUNxRixtQkFBbUIsQ0FBQ2dELDJDQUEyQyxDQUFDckksTUFBSSxDQUFDbUksYUFBYSxDQUFDLENBQUM7b0JBRTVGO2tCQUNGO2tCQUVBbkksTUFBSSxDQUFDMU0sT0FBTyxDQUFDUyxLQUFLLENBQUMsNERBQTRELEVBQUVpTSxNQUFJLENBQUN1QyxRQUFRLENBQUNwTyxNQUFNLEVBQUV3UyxlQUFlLENBQUN4UyxNQUFNLENBQUM7Z0JBQ2hJO2dCQUVBNkwsTUFBSSxDQUFDK0gsVUFBVSxHQUFHLEtBQUs7Z0JBQ3ZCL0gsTUFBSSxDQUFDbUksYUFBYSxHQUFHLENBQUM7Z0JBRXRCLElBQU1qQyxPQUFPLEdBQUdsRyxNQUFJLENBQUNtRyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUV4QyxPQUFPOEIsUUFBUTtjQUNqQixDQUFDLENBQUMsU0FBTSxDQUFDLFlBQU07Z0JBQ2JqSSxNQUFJLENBQUMrSCxVQUFVLEdBQUcsS0FBSztnQkFFdkIsSUFBTTdCLE9BQU8sR0FBR2xHLE1BQUksQ0FBQ21HLGlCQUFpQixDQUFDLENBQUM7Y0FDMUMsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEyQixTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUNIO01BQUEsU0F6Q2F6QixpQkFBaUJBLENBQUE7UUFBQSxPQUFBd0Isa0JBQUEsQ0FBQUQsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBakIySixpQkFBaUI7SUFBQTtFQUFBO0lBQUFuYyxHQUFBO0lBQUFFLEtBQUEsRUEyQy9CLFNBQVFnZSw2QkFBNkJBLENBQUEzWCxJQUFBLEVBQThCO01BQUEsSUFBNUIrWCxNQUFNLEdBQUEvWCxJQUFBLENBQU4rWCxNQUFNO01BQzNDLE9BQU8sVUFBVSxDQUFDbGIsSUFBSSxDQUFDa2IsTUFBTSxDQUFDbk8sUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzQztFQUFDO0FBQUE7Ozs7Ozs7Ozs7OztBQ3JLSDtBQUNBO0FBQ0E7QUFGQSxJQUlLdEksV0FBVywwQkFBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFBLE9BQVhBLFdBQVc7QUFBQSxFQUFYQSxXQUFXO0FBZWhCLCtEQUFlQSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25CMUI7QUFDQTtBQUNBOztBQUUwRTtBQUNoQjtBQUFBLElBRXJDckUscUJBQXFCO0VBQUEsU0FBQUEsc0JBQUE7SUFBQWhFLGlGQUFBLE9BQUFnRSxxQkFBQTtFQUFBO0VBQUEsT0FBQXpELDhFQUFBLENBQUF5RCxxQkFBQTtJQUFBeEQsR0FBQTtJQUFBRSxLQUFBLEVBQ3hDLFNBQU9nRSx5Q0FBeUNBLENBQUMyVyxjQUE4QixFQUFzQjtNQUNuRyxRQUFRQSxjQUFjO1FBQ3BCLEtBQUt4QyxpRUFBYyxDQUFDSixHQUFHO1VBQ3JCLE9BQU8sS0FBSztRQUNkLEtBQUtJLGlFQUFjLENBQUNLLFNBQVM7VUFDM0IsT0FBTyxXQUFXO1FBQ3BCLEtBQUtMLGlFQUFjLENBQUNILEdBQUc7VUFDckIsT0FBTyxLQUFLO1FBQ2Q7VUFDRWpGLG1FQUFpQixDQUFDNEgsY0FBYyxDQUFDO01BQ3JDO0lBQ0Y7RUFBQztJQUFBN2EsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzBhLHlDQUF5Q0EsQ0FBQzJELGtCQUFzQyxFQUFrQjtNQUN2RyxRQUFRQSxrQkFBa0I7UUFDeEIsS0FBSyxLQUFLO1VBQ1IsT0FBT2xHLGlFQUFjLENBQUNKLEdBQUc7UUFDM0IsS0FBSyxXQUFXO1VBQ2QsT0FBT0ksaUVBQWMsQ0FBQ0ssU0FBUztRQUNqQyxLQUFLLEtBQUs7VUFDUixPQUFPTCxpRUFBYyxDQUFDSCxHQUFHO1FBQzNCO1VBQ0VqRixtRUFBaUIsQ0FBQ3NMLGtCQUFrQixDQUFDO01BQ3pDO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQ0g7QUFDQTtBQUNBOztBQUV5RDtBQUNNO0FBQUEsSUFFMUM5YSxnQkFBZ0I7RUFBQSxTQUFBQSxpQkFBQTtJQUFBakUsaUZBQUEsT0FBQWlFLGdCQUFBO0VBQUE7RUFBQSxPQUFBMUQsOEVBQUEsQ0FBQTBELGdCQUFBO0lBQUF6RCxHQUFBO0lBQUFDLEdBQUEsRUFDbkMsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPb1kseUVBQWMsQ0FBQ3JOLGtFQUFhLENBQUNVLFdBQVcsQ0FBQztJQUNsRDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZIO0FBQ0E7QUFDQTs7QUFFb0Q7QUFFaEI7QUFDNkI7QUFHUztBQUFBLElBU3JEK1MscUJBQXFCO0VBdUV4QyxTQUFBQSxzQkFBQSxFQUFzQjtJQUFBamYsaUZBQUEsT0FBQWlmLHFCQUFBO0lBQ3BCLE1BQU0sSUFBSS9aLEtBQUssQ0FBQyxzRUFBc0UsQ0FBQztFQUN6RjtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBMGUscUJBQUE7SUFBQXplLEdBQUE7SUFBQUMsR0FBQSxFQWpFRCxTQUFBQSxJQUFBLEVBQW9FO01BQ2xFLE9BQU93ZSxxQkFBcUIsQ0FBQ0Msc0JBQXNCO0lBQ3JEO0VBQUM7SUFBQTFlLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU95ZSx5QkFBeUJBLENBQUEsRUFBUztNQUN2QyxJQUFJbmEsc0VBQWlCLENBQUNvYSxtQkFBbUIsRUFBRTtRQUN6QyxJQUFNMUMsT0FBTyxHQUFHdUMscUJBQXFCLENBQUNJLGlDQUFpQyxDQUFDLENBQUMsU0FDakUsQ0FBQyxVQUFBdFUsQ0FBQztVQUFBLE9BQUlrVSxxQkFBcUIsQ0FBQ25WLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDJDQUEyQyxFQUFFUSxDQUFDLENBQUM7UUFBQSxFQUFDO01BQ3BHO0lBQ0Y7RUFBQztJQUFBdkssR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTRlLGtDQUFBLEdBQUF2QyxtRkFBQSxjQUFBQyxzRUFBQSxDQUVELFNBQUFFLFFBQUE7UUFBQSxPQUFBRixzRUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQU8sTUFBQSxXQUNTbUIscUJBQXFCLENBQUNNLE9BQU8sR0FBRztnQkFDckNDLFNBQVMsRUFBRSxVQUFVO2dCQUNyQkMsY0FBYyxFQUFFUixxQkFBcUIsQ0FBQ1MseUJBQXlCLENBQUMsQ0FBQyxTQUN6RCxDQUFDLFVBQUEzVSxDQUFDLEVBQUk7a0JBQ1ZrVSxxQkFBcUIsQ0FBQ00sT0FBTyxHQUFHLElBQUk7a0JBRXBDLE1BQU14VSxDQUFDO2dCQUNULENBQUM7Y0FDTCxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF3UyxRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQUNGO01BQUEsU0FWWW1DLGlDQUFpQ0EsQ0FBQTtRQUFBLE9BQUFDLGtDQUFBLENBQUFwQixLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFqQ3FNLGlDQUFpQztJQUFBO0VBQUE7SUFBQTdlLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFpZiwwQkFBQSxHQUFBNUMsbUZBQUEsY0FBQUMsc0VBQUEsQ0FZOUMsU0FBQTRDLFNBQUE7UUFBQSxJQUFBSixTQUFBO1VBQUFLLHdCQUFBO1VBQUFuZixLQUFBO1VBQUFvZixhQUFBO1VBQUFDLE1BQUEsR0FBQS9NLFNBQUE7UUFBQSxPQUFBZ0ssc0VBQUEsVUFBQWdELFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBekMsSUFBQSxHQUFBeUMsU0FBQSxDQUFBeEMsSUFBQTtZQUFBO2NBQXVDK0IsU0FBcUMsR0FBQU8sTUFBQSxDQUFBcFYsTUFBQSxRQUFBb1YsTUFBQSxRQUFBelosU0FBQSxHQUFBeVosTUFBQSxNQUFHLFVBQVU7Y0FBRUYsd0JBQXdCLEdBQUFFLE1BQUEsQ0FBQXBWLE1BQUEsUUFBQW9WLE1BQUEsUUFBQXpaLFNBQUEsR0FBQXlaLE1BQUEsTUFBRyxLQUFLO2NBQUEsTUFDckhkLHFCQUFxQixDQUFDTSxPQUFPLElBQUlOLHFCQUFxQixDQUFDTSxPQUFPLENBQUNDLFNBQVMsS0FBS0EsU0FBUyxJQUFJLENBQUNLLHdCQUF3QjtnQkFBQUksU0FBQSxDQUFBeEMsSUFBQTtnQkFBQTtjQUFBO2NBQy9HL2MsS0FBSyxHQUFHdWUscUJBQXFCLENBQUNNLE9BQU8sQ0FBQ0UsY0FBYztjQUUxRFIscUJBQXFCLENBQUNNLE9BQU8sR0FBRyxJQUFJO2NBQUMsT0FBQVUsU0FBQSxDQUFBbkMsTUFBQSxXQUU5QnBkLEtBQUs7WUFBQTtjQUdSb2YsYUFBMkMsR0FBRzlhLHNFQUFpQixDQUFDeUksbUNBQW1DLEdBQUc7Z0JBQUNvUyx3QkFBd0IsRUFBeEJBO2NBQXdCLENBQUMsR0FBR3ZaLFNBQVM7Y0FBQSxPQUFBMlosU0FBQSxDQUFBbkMsTUFBQSxXQUUzSW1CLHFCQUFxQixDQUFDQyxzQkFBc0IsQ0FBQ3hlLEtBQUssQ0FBQ3dmLG9CQUFvQixDQUFDSixhQUFhLENBQUMsQ0FDMUYvRCxJQUFJO2dCQUFBLElBQUFoVixJQUFBLEdBQUFnVyxtRkFBQSxjQUFBQyxzRUFBQSxDQUFDLFNBQUFvQixTQUFNcUIsY0FBYztrQkFBQSxJQUFBVSxzQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxPQUFBO2tCQUFBLE9BQUF0RCxzRUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtvQkFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtzQkFBQTt3QkFDbEIwQyxzQkFBc0IsR0FBR1YsY0FBYyxDQUFDVSxzQkFBc0I7d0JBQUEsS0FHaEVBLHNCQUFzQjswQkFBQTdCLFNBQUEsQ0FBQWIsSUFBQTswQkFBQTt3QkFBQTt3QkFDeEI0QyxnQkFBZ0IsR0FBR1osY0FBYyxDQUFDYyxjQUFjLENBQUMsT0FBTyxFQUFFOzBCQUFDZixTQUFTLEVBQVRBO3dCQUFTLENBQUMsQ0FBQzt3QkFDdEVZLGdCQUFnQixHQUFHWCxjQUFjLENBQUNjLGNBQWMsQ0FBQyxPQUFPLEVBQUU7MEJBQUNmLFNBQVMsRUFBVEE7d0JBQVMsQ0FBQyxDQUFDO3dCQUFDbEIsU0FBQSxDQUFBa0MsRUFBQSxHQUdyRUgsZ0JBQWdCO3dCQUFBL0IsU0FBQSxDQUFBbUMsRUFBQSxHQUNoQkwsZ0JBQWdCO3dCQUFBOUIsU0FBQSxDQUFBb0MsRUFBQSxHQUNBakIsY0FBYzt3QkFBQW5CLFNBQUEsQ0FBQWIsSUFBQTt3QkFBQSxPQUNaZ0MsY0FBYyxDQUFDa0IsV0FBVyxDQUFDcmEsU0FBUyxDQUFDO3NCQUFBO3dCQUFBZ1ksU0FBQSxDQUFBc0MsRUFBQSxHQUFBdEMsU0FBQSxDQUFBUCxJQUFBO3dCQUFBLE9BQUFPLFNBQUEsQ0FBQVIsTUFBQTswQkFIdkR1QyxnQkFBZ0IsRUFBQS9CLFNBQUEsQ0FBQWtDLEVBQUE7MEJBQ2hCSixnQkFBZ0IsRUFBQTlCLFNBQUEsQ0FBQW1DLEVBQUE7MEJBQ2hCaEIsY0FBYyxFQUFBbkIsU0FBQSxDQUFBb0MsRUFBQTswQkFDZEcsVUFBVSxFQUFBdkMsU0FBQSxDQUFBc0M7d0JBQUE7c0JBQUE7d0JBSVJOLE9BQU8sR0FBR2QsU0FBUyxLQUFLLFVBQVUsR0FBRzswQkFDekNzQixtQkFBbUIsRUFBRSxJQUFJOzBCQUN6QkMsbUJBQW1CLEVBQUU7d0JBQ3ZCLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQUF6QyxTQUFBLENBQUEwQyxFQUFBLEdBR1l2QixjQUFjO3dCQUFBbkIsU0FBQSxDQUFBYixJQUFBO3dCQUFBLE9BQ1pnQyxjQUFjLENBQUNrQixXQUFXLENBQUNMLE9BQU8sQ0FBQztzQkFBQTt3QkFBQWhDLFNBQUEsQ0FBQTJDLEVBQUEsR0FBQTNDLFNBQUEsQ0FBQVAsSUFBQTt3QkFBQSxPQUFBTyxTQUFBLENBQUFSLE1BQUE7MEJBRHJEMkIsY0FBYyxFQUFBbkIsU0FBQSxDQUFBMEMsRUFBQTswQkFDZEgsVUFBVSxFQUFBdkMsU0FBQSxDQUFBMkM7d0JBQUE7c0JBQUE7c0JBQUE7d0JBQUEsT0FBQTNDLFNBQUEsQ0FBQU4sSUFBQTtvQkFBQTtrQkFBQSxHQUFBSSxRQUFBO2dCQUFBLENBRWI7Z0JBQUEsaUJBQUFILEVBQUE7a0JBQUEsT0FBQWxYLElBQUEsQ0FBQW1YLEtBQUEsT0FBQWxMLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFpTixTQUFBLENBQUFqQyxJQUFBO1VBQUE7UUFBQSxHQUFBNEIsUUFBQTtNQUFBLENBQ0w7TUFBQSxTQXRDWUYseUJBQXlCQSxDQUFBO1FBQUEsT0FBQUMsMEJBQUEsQ0FBQXpCLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQXpCME0seUJBQXlCO0lBQUE7RUFBQTtBQUFBO0FBQUF6ZixpRkFBQSxDQS9CbkJnZixxQkFBcUIsYUFDTnhXLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztBQUFBM0ksaUZBQUEsQ0FEL0RnZixxQkFBcUIsNEJBRTBDLElBQUlyZixtREFBTyxDQUF5QixJQUFJb2YscUVBQTRCLENBQUMsQ0FBQyxDQUFDO0FBQUEvZSxpRkFBQSxDQUZ0SWdmLHFCQUFxQjtBQUFBO0FBNEUxQ0EscUJBQXFCLENBQUNFLHlCQUF5QixDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9GakQ7QUFDQTtBQUNBO0FBRkEsSUFJcUIrQix1QkFBdUI7RUErQjFDLFNBQUFBLHdCQUFBLEVBQXNCO0lBQUFsaEIsaUZBQUEsT0FBQWtoQix1QkFBQTtJQUNwQixNQUFNLElBQUloYyxLQUFLLENBQUMsd0VBQXdFLENBQUM7RUFDM0Y7RUFBQyxPQUFBM0UsOEVBQUEsQ0FBQTJnQix1QkFBQTtJQUFBMWdCLEdBQUE7SUFBQUUsS0FBQSxFQWhDRCxTQUFPeWdCLGtCQUFrQkEsQ0FBQ3JCLGFBQStCLEVBQW9CO01BQzNFLElBQU1zQixVQUEwQixHQUFHLEVBQUU7TUFFckMsSUFBSSxDQUFDdEIsYUFBYSxDQUFDc0IsVUFBVSxFQUFFO1FBQzdCLE9BQU90QixhQUFhO01BQ3RCO01BRUEsS0FBSyxJQUFJdUIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHdkIsYUFBYSxDQUFDc0IsVUFBVSxDQUFDelcsTUFBTSxFQUFFMFcsQ0FBQyxFQUFFLEVBQUU7UUFDeEQsSUFBTUMsSUFBYyxHQUFHLEVBQUU7UUFFekIsS0FBSyxJQUFJNUssS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxFQUFFLEVBQUU7VUFDdEMsSUFBTXFELEdBQUcsR0FBRytGLGFBQWEsQ0FBQ3NCLFVBQVUsQ0FBQ0MsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQzVLLEtBQUssQ0FBQztVQUVuRCxJQUFJcUQsR0FBRyxFQUFFO1lBQ1B1SCxJQUFJLENBQUMzWCxJQUFJLENBQUNtVyxhQUFhLENBQUNzQixVQUFVLENBQUNDLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUM1SyxLQUFLLENBQUMsQ0FBQztVQUNwRDtRQUNGO1FBRUEwSyxVQUFVLENBQUN6WCxJQUFJLENBQUM7VUFDZDJYLElBQUksRUFBRUEsSUFBSTtVQUNWQyxRQUFRLEVBQUV6QixhQUFhLENBQUNzQixVQUFVLENBQUNDLENBQUMsQ0FBQyxDQUFDRSxRQUFRO1VBQzlDQyxVQUFVLEVBQUUxQixhQUFhLENBQUNzQixVQUFVLENBQUNDLENBQUMsQ0FBQyxDQUFDRztRQUMxQyxDQUFDLENBQUM7TUFDSjtNQUVBMUIsYUFBYSxDQUFDc0IsVUFBVSxHQUFHQSxVQUFVO01BRXJDLE9BQU90QixhQUFhO0lBQ3RCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakNIO0FBQ0E7QUFDQTs7QUFFcUQ7QUFDWTtBQUU3QjtBQUVBO0FBK0JwQyxJQUFNNEIsc0JBQXNCLEdBQUcsSUFBSTtBQUFDLElBRWZDLG9CQUFvQjtFQVV2QyxTQUFBQSxxQkFBWWxDLGNBQStCLEVBQUVtQyxXQUF3QixFQUFFQyxzQkFBOEIsRUFBRTtJQUFBN2hCLGlGQUFBLE9BQUEyaEIsb0JBQUE7SUFBQTFoQixpRkFBQTtJQUFBQSxpRkFBQSwrQkFSdkQsU0FBUztJQUFBQSxpRkFBQSwrQkFDVCxTQUFTO0lBQUFBLGlGQUFBLHdCQUNjLElBQUlMLG1EQUFPLENBQThCLENBQUMsQ0FBQyxDQUFDO0lBQUFLLGlGQUFBO0lBQUFBLGlGQUFBLDRCQUV2RixJQUFJO0lBQUFBLGlGQUFBLHlCQUNRLElBQUk7SUFBQUEsaUZBQUE7SUFJMUMsSUFBSSxDQUFDNmhCLGVBQWUsR0FBR3JDLGNBQWM7SUFDckMsSUFBSSxDQUFDc0MsdUJBQXVCLEdBQUdGLHNCQUFzQjtJQUNyRCxJQUFJLENBQUNHLGdCQUFnQixHQUFHSixXQUFXLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBQyxVQUFBQyxLQUFLO01BQUEsT0FBSUEsS0FBSyxDQUFDOUYsSUFBSTtJQUFBLEVBQUMsSUFBSSxFQUFFO0lBRTlFLElBQUksSUFBSSxDQUFDeUYsZUFBZSxFQUFFO01BQUEsSUFBQU0scUJBQUEsRUFBQUMsc0JBQUE7TUFDeEIsSUFBSSxDQUFDcmQsc0VBQWlCLENBQUNzZCx1QkFBdUIsS0FBQUYscUJBQUEsR0FBSSxJQUFJLENBQUNOLGVBQWUsY0FBQU0scUJBQUEsZ0JBQUFDLHNCQUFBLEdBQXBCRCxxQkFBQSxDQUFzQkcsd0JBQXdCLGNBQUFGLHNCQUFBLGVBQTlDQSxzQkFBQSxDQUFnREcsR0FBRyxFQUFFO1FBQ3JHLElBQU1DLFNBQVMsR0FBRyxJQUFJaEIsa0RBQVMsQ0FBQyxJQUFJLENBQUNLLGVBQWUsQ0FBQ1Msd0JBQXdCLENBQUNDLEdBQUcsQ0FBQztRQUVsRixJQUFJLENBQUNFLG9CQUFvQixHQUFHRCxTQUFTLENBQUNFLFVBQVU7UUFDaEQsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0gsU0FBUyxDQUFDSSxVQUFVO01BQ2xEO01BRUEsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQztJQUN4QjtFQUNGO0VBQUMsT0FBQXZpQiw4RUFBQSxDQUFBb2hCLG9CQUFBO0lBQUFuaEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF5RDtNQUN2RCxPQUFPLElBQUksQ0FBQ3NpQixhQUFhO0lBQzNCO0VBQUM7SUFBQXZpQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxPQUFPQSxDQUFBLEVBQVM7TUFDZCxJQUFJLENBQUNtaUIsaUJBQWlCLEdBQUcsS0FBSztNQUM5QixJQUFJLENBQUNsQixlQUFlLEdBQUcsSUFBSTtNQUUzQixJQUFJLElBQUksQ0FBQ21CLGNBQWMsRUFBRTtRQUN2QnhqQixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDd08sWUFBWSxDQUFDLElBQUksQ0FBQytULGNBQWMsQ0FBQztRQUNuRCxJQUFJLENBQUNBLGNBQWMsR0FBRyxJQUFJO01BQzVCO0lBQ0Y7RUFBQztJQUFBemlCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUF3aUIsZ0JBQUEsR0FBQW5HLG1GQUFBLGNBQUFDLHNFQUFBLENBRUQsU0FBQUUsUUFBQTtRQUFBLElBQUFpRyxzQkFBQTtVQUFBcGlCLEtBQUE7UUFBQSxJQUFBcWlCLFFBQUEsRUFBQUMsa0JBQUEsRUFBQTNHLE9BQUE7UUFBQSxPQUFBTSxzRUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLEtBQ016WSxzRUFBaUIsQ0FBQ3NlLDRCQUE0QjtnQkFBQS9GLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUFGLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BQzFCLElBQUksQ0FBQzhGLHFCQUFxQixDQUFDLENBQUM7WUFBQTtjQUE1QzdHLFFBQU8sR0FBQWEsUUFBQSxDQUFBUSxJQUFBO2NBQUEsT0FBQVIsUUFBQSxDQUFBTyxNQUFBO1lBQUE7Y0FLZjtjQUNNdUYsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSXJQLElBQWtCO2dCQUFBLE9BQWFBLElBQUksQ0FBQ3dQLEVBQUUsQ0FBQ3pmLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUdpUSxJQUFJLENBQUN3UCxFQUFFLENBQUN6ZixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUU7Y0FBQTtjQUFBd1osUUFBQSxDQUFBRSxJQUFBO2NBQUEsUUFBQTBGLHNCQUFBLEdBQ25ILElBQUksQ0FBQ3JCLGVBQWUsY0FBQXFCLHNCQUFBLHVCQUFwQkEsc0JBQUEsQ0FBc0JNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdkQxSCxJQUFJLENBQUMsVUFBQTJILEtBQUssRUFBSTtnQkFDYixJQUFNQyxhQUFtQyxHQUFHLENBQUMsQ0FBQztnQkFFOUMsSUFBSUQsS0FBSyxFQUFFO2tCQUNULElBQUlFLGFBQWEsR0FBRzdpQixLQUFJLENBQUNnaEIsdUJBQXVCO2tCQUNoRCxJQUFJOEIsMkJBQStDO2tCQUVuREgsS0FBSyxDQUFDaFQsT0FBTyxDQUFDLFVBQUFvVCxNQUFNLEVBQUk7b0JBQ3RCLElBQUlBLE1BQU0sQ0FBQ25jLElBQUksS0FBSyxnQkFBZ0IsSUFBSW1jLE1BQU0sQ0FBQ0Msb0JBQW9CLEVBQUU7c0JBQ25FSCxhQUFhLEdBQUdFLE1BQU0sQ0FBQ0Msb0JBQW9CLEdBQUcsSUFBSTtzQkFFbEQsSUFBSUosYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMxQkEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDQyxhQUFhLEdBQUdBLGFBQWE7c0JBQ3REO3NCQUVBLElBQUlELGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0MsYUFBYSxHQUFHQSxhQUFhO3NCQUN0RDtvQkFDRjtvQkFFQSxJQUFJRSxNQUFNLENBQUNuYyxJQUFJLEtBQUssZ0JBQWdCLElBQUltYyxNQUFNLENBQUNELDJCQUEyQixFQUFFO3NCQUMxRUEsMkJBQTJCLEdBQUdDLE1BQU0sQ0FBQ0QsMkJBQTJCO3NCQUVoRSxJQUFJRixhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzFCQSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUNFLDJCQUEyQixHQUFHQSwyQkFBMkI7c0JBQ2xGO3NCQUVBLElBQUlGLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsMkJBQTJCLEdBQUdBLDJCQUEyQjtzQkFDbEY7b0JBQ0Y7b0JBRUEsSUFBSUMsTUFBTSxDQUFDbmMsSUFBSSxLQUFLLGFBQWEsRUFBRTtzQkFDakMsSUFBTTBVLEtBQUksR0FBR3lILE1BQU0sQ0FBQ3pILElBQUksSUFBSXlILE1BQU0sQ0FBQ0UsU0FBUyxJQUFJWCxrQkFBa0IsQ0FBQ1MsTUFBTSxDQUFDO3NCQUMxRSxJQUFJRyxLQUFLLEdBQUcsRUFBRTtzQkFFZFAsS0FBSyxDQUFDaFQsT0FBTyxDQUFDLFVBQUFzRCxJQUFJLEVBQUk7d0JBQ3BCLElBQUlBLElBQUksQ0FBQ3dQLEVBQUUsS0FBS00sTUFBTSxDQUFDSSxPQUFPLEVBQUU7MEJBQzlCRCxLQUFLLEdBQUdqUSxJQUFJLENBQUNtUSxRQUFRO3dCQUN2QjtzQkFDRixDQUFDLENBQUM7c0JBRUYsSUFBSTlILEtBQUksSUFBSXRiLEtBQUksQ0FBQ2loQixnQkFBZ0IsQ0FBQ2plLFFBQVEsQ0FBQ3NZLEtBQUksQ0FBQyxFQUFFO3dCQUFBLElBQUErSCxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTt3QkFDaEQsSUFBTUMsS0FBSyxHQUFHYixNQUFNLENBQUNjLGFBQWEsSUFBSSxDQUFDO3dCQUN2QyxJQUFNQyxxQkFBcUIsSUFBQVQscUJBQUEsSUFBQUMsc0JBQUEsR0FBR3RqQixLQUFJLENBQUNnaUIsYUFBYSxDQUFDcmlCLEtBQUssY0FBQTJqQixzQkFBQSx3QkFBQUMsc0JBQUEsR0FBeEJELHNCQUFBLENBQTJCaEksS0FBSSxDQUFDLGNBQUFpSSxzQkFBQSx1QkFBaENBLHNCQUFBLENBQWtDTSxhQUFhLGNBQUFSLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQzt3QkFDbEYsSUFBTVUsVUFBVSxHQUFHSCxLQUFLLEdBQUdFLHFCQUFxQjt3QkFDaEQsSUFBTUUsU0FBUyxHQUFHakIsTUFBTSxDQUFDdkgsU0FBUyxJQUFJLEVBQUFnSSxzQkFBQSxHQUFBeGpCLEtBQUksQ0FBQ2dpQixhQUFhLENBQUNyaUIsS0FBSyxjQUFBNmpCLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUF4QkQsc0JBQUEsQ0FBMkJsSSxLQUFJLENBQUMsY0FBQW1JLHNCQUFBLHVCQUFoQ0Esc0JBQUEsQ0FBa0NqSSxTQUFTLEtBQUksQ0FBQyxDQUFDO3dCQUN2RixJQUFNeUksT0FBTyxHQUFHRixVQUFVLElBQUlDLFNBQVMsR0FBRzdULElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsR0FBRzJULFVBQVUsR0FDakVDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUV2QnBCLGFBQWEsQ0FBQ3RILEtBQUksQ0FBQyxHQUFHOzBCQUNwQjRJLElBQUksRUFBRW5CLE1BQU0sQ0FBQ21CLElBQUk7MEJBQ2pCakIsU0FBUyxFQUFFM0gsS0FBSTswQkFDZkUsU0FBUyxFQUFFdUgsTUFBTSxDQUFDdkgsU0FBUzswQkFDM0J5SSxPQUFPLEVBQVBBLE9BQU87MEJBQ1BKLGFBQWEsRUFBRWQsTUFBTSxDQUFDYyxhQUFhOzBCQUNuQ00sV0FBVyxFQUFFcEIsTUFBTSxDQUFDb0IsV0FBVzswQkFDL0JDLGVBQWUsRUFBRXJCLE1BQU0sQ0FBQ3FCLGVBQWU7MEJBQ3ZDbEIsS0FBSyxFQUFFQSxLQUFLLElBQUlsakIsS0FBSSxDQUFDcWtCLGNBQWMsQ0FBQy9JLEtBQUksQ0FBQzswQkFDekN1SCxhQUFhLEVBQWJBO3dCQUNGLENBQUM7d0JBRUQsSUFBSUUsTUFBTSxDQUFDRCwyQkFBMkIsSUFBSUEsMkJBQTJCLEVBQUU7MEJBQ3JFRixhQUFhLENBQUN0SCxLQUFJLENBQUMsQ0FBQ3dILDJCQUEyQixHQUFHQyxNQUFNLENBQUNELDJCQUEyQixJQUFJQSwyQkFBMkI7d0JBQ3JIO3dCQUVBLElBQUl4SCxLQUFJLEtBQUssT0FBTyxLQUFBb0ksc0JBQUEsR0FBSTFqQixLQUFJLENBQUNnaUIsYUFBYSxDQUFDcmlCLEtBQUssY0FBQStqQixzQkFBQSxnQkFBQUMsc0JBQUEsR0FBeEJELHNCQUFBLENBQTBCWSxLQUFLLGNBQUFYLHNCQUFBLGVBQS9CQSxzQkFBQSxDQUFpQ1ksYUFBYSxFQUFFOzBCQUN0RTNCLGFBQWEsQ0FBQ3RILEtBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHeUgsTUFBTSxDQUFDd0IsYUFBYTswQkFFM0QsSUFBTUMsR0FBRyxHQUFHLENBQUN6QixNQUFNLENBQUN3QixhQUFhLEdBQUd2a0IsS0FBSSxDQUFDZ2lCLGFBQWEsQ0FBQ3JpQixLQUFLLENBQUMya0IsS0FBSyxDQUFDQyxhQUFhLEtBQzdFM0IsYUFBYSxDQUFDdEgsS0FBSSxDQUFDLENBQUNFLFNBQVMsR0FBR3hiLEtBQUksQ0FBQ2dpQixhQUFhLENBQUNyaUIsS0FBSyxDQUFDMmtCLEtBQUssQ0FBQzlJLFNBQVMsQ0FBQyxHQUMxRSxJQUFJOzBCQUVOb0gsYUFBYSxDQUFDdEgsS0FBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUdrSixHQUFHLEdBQUdyVSxJQUFJLENBQUNPLEtBQUssQ0FBQzhULEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDcEU7c0JBQ0Y7b0JBQ0Y7a0JBQ0YsQ0FBQyxDQUFDO2dCQUNKO2dCQUVBeGtCLEtBQUksQ0FBQ2dpQixhQUFhLENBQUNyaUIsS0FBSyxHQUFHaWpCLGFBQWE7Y0FDMUMsQ0FBQyxDQUFDLENBQUM1SCxJQUFJLENBQUMsWUFBTTtnQkFDWixJQUFJaGIsS0FBSSxDQUFDaWlCLGlCQUFpQixFQUFFO2tCQUMxQmppQixLQUFJLENBQUNraUIsY0FBYyxHQUFHeGpCLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUM7b0JBQUEsT0FBTTNFLEtBQUksQ0FBQytoQixlQUFlLENBQUMsQ0FBQztrQkFBQSxHQUFFcEIsc0JBQXNCLENBQUM7Z0JBQzFHO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0F0RkVoRixPQUFPLEdBQUFhLFFBQUEsQ0FBQVEsSUFBQTtZQUFBO1lBQUE7Y0FBQSxPQUFBUixRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQXVGZDtNQUFBLFNBaEdhNEYsZUFBZUEsQ0FBQTtRQUFBLE9BQUFJLGdCQUFBLENBQUFoRixLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFmOFAsZUFBZTtJQUFBO0VBQUE7SUFBQXRpQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBOGtCLHNCQUFBLEdBQUF6SSxtRkFBQSxjQUFBQyxzRUFBQSxDQWtHN0IsU0FBQW9CLFNBQUE7UUFBQSxJQUFBcUgsc0JBQUE7VUFBQWpQLE1BQUE7UUFBQSxJQUFBa0csT0FBQTtRQUFBLE9BQUFNLHNFQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUFBYSxTQUFBLENBQUFiLElBQUE7Y0FBQSxRQUFBZ0ksc0JBQUEsR0FDd0IsSUFBSSxDQUFDM0QsZUFBZSxjQUFBMkQsc0JBQUEsdUJBQXBCQSxzQkFBQSxDQUFzQkMsY0FBYyxDQUFDLENBQUMsQ0FBQzNKLElBQUksQ0FBQyxVQUFBMkgsS0FBSyxFQUFJO2dCQUN6RSxJQUFNQyxhQUFtQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSUMsYUFBYSxHQUFHcE4sTUFBSSxDQUFDdUwsdUJBQXVCO2dCQUVoRDJCLEtBQUssQ0FBQ2lDLE1BQU0sQ0FBQyxDQUFDLENBQUNqVixPQUFPLENBQUMsVUFBQW9ULE1BQU0sRUFBSTtrQkFDL0JBLE1BQU0sQ0FBQzhCLEtBQUssQ0FBQyxDQUFDLENBQUNsVixPQUFPLENBQUMsVUFBQXBNLElBQUksRUFBSTtvQkFDN0IsSUFBSUEsSUFBSSxLQUFLLFNBQVMsRUFBRTtzQkFDdEJzZixhQUFhLEdBQUdFLE1BQU0sQ0FBQytCLElBQUksQ0FBQ3ZoQixJQUFJLENBQUM7b0JBQ25DO2tCQUNGLENBQUMsQ0FBQztrQkFFRixJQUFJd2YsTUFBTSxDQUFDbmMsSUFBSSxLQUFLLE1BQU0sRUFBRTtvQkFBQSxJQUFBbWUscUJBQUEsRUFBQUMsc0JBQUE7b0JBQzFCLElBQU0vQixTQUFTLEdBQUdGLE1BQU0sQ0FBQytCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQ2xWLFFBQVEsQ0FBQyxDQUFDO29CQUVyRGdULGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLEdBQUc7c0JBQUN6SCxTQUFTLEVBQUVyYyxJQUFJLENBQUNDLEdBQUcsQ0FBQztvQkFBQyxDQUFDO29CQUNsRHdqQixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHRixNQUFNLENBQUMrQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUNsVixRQUFRLENBQUMsQ0FBQztvQkFDakVnVCxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHQSxTQUFTO29CQUNqREwsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBR0YsTUFBTSxDQUFDK0IsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQkFDeEVsQyxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHRixNQUFNLENBQUMrQixJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNwRWxDLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBR0YsTUFBTSxDQUFDK0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDO29CQUM1RWxDLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUdGLE1BQU0sQ0FBQytCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ2xWLFFBQVEsQ0FBQyxDQUFDLElBQUk2RixNQUFJLENBQUM0TyxjQUFjLENBQUNwQixTQUFTLENBQUM7b0JBQzdHTCxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHSixhQUFhO29CQUV6RCxJQUFJSSxTQUFTLEtBQUssT0FBTyxLQUFBOEIscUJBQUEsR0FBSXRQLE1BQUksQ0FBQ3VNLGFBQWEsQ0FBQ3JpQixLQUFLLGNBQUFvbEIscUJBQUEsZ0JBQUFDLHNCQUFBLEdBQXhCRCxxQkFBQSxDQUEwQlQsS0FBSyxjQUFBVSxzQkFBQSxlQUEvQkEsc0JBQUEsQ0FBaUNULGFBQWEsRUFBRTtzQkFDM0UzQixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHRixNQUFNLENBQUMrQixJQUFJLENBQUMsZUFBZSxDQUFDO3NCQUN4RWxDLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQ0wsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQ3NCLGFBQWEsR0FBRzlPLE1BQUksQ0FBQ3VNLGFBQWEsQ0FBQ3JpQixLQUFLLENBQUMya0IsS0FBSyxDQUFDQyxhQUFhLEtBQ3JIM0IsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQ3pILFNBQVMsR0FBRy9GLE1BQUksQ0FBQ3VNLGFBQWEsQ0FBQ3JpQixLQUFLLENBQUMya0IsS0FBSyxDQUFDOUksU0FBUyxDQUFDLEdBQ2pGLElBQUksSUFBSSxDQUFDO29CQUNYO2tCQUNGO2dCQUNGLENBQUMsQ0FBQztnQkFDRi9GLE1BQUksQ0FBQ3VNLGFBQWEsQ0FBQ3JpQixLQUFLLEdBQUdpakIsYUFBYTtjQUMxQyxDQUFDLENBQUMsQ0FBQzVILElBQUksQ0FBQyxZQUFNO2dCQUNaLElBQUl2RixNQUFJLENBQUN3TSxpQkFBaUIsRUFBRTtrQkFDMUJ4TSxNQUFJLENBQUN5TSxjQUFjLEdBQUd4akIsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2dGLFVBQVUsQ0FBQztvQkFBQSxPQUFNOFEsTUFBSSxDQUFDc00sZUFBZSxDQUFDLENBQUM7a0JBQUEsR0FBRXBCLHNCQUFzQixDQUFDO2dCQUMxRztjQUNGLENBQUMsQ0FBQztZQUFBO2NBcENJaEYsT0FBTyxHQUFBNEIsU0FBQSxDQUFBUCxJQUFBO1lBQUE7WUFBQTtjQUFBLE9BQUFPLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBcUNkO01BQUEsU0F0Q2FtRixxQkFBcUJBLENBQUE7UUFBQSxPQUFBaUMsc0JBQUEsQ0FBQXRILEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQXJCdVEscUJBQXFCO0lBQUE7RUFBQTtJQUFBL2lCLEdBQUE7SUFBQUUsS0FBQSxFQXdDbkMsU0FBUTBrQixjQUFjQSxDQUFDemQsSUFBWSxFQUFVO01BQzNDLFFBQVFBLElBQUk7UUFDVixLQUFLLE9BQU87VUFDVixPQUFPLElBQUksQ0FBQythLG9CQUFvQixJQUFJLFNBQVM7UUFDL0MsS0FBSyxPQUFPO1VBQ1YsT0FBTyxJQUFJLENBQUNFLG9CQUFvQixJQUFJLFNBQVM7UUFDL0M7VUFDRSxPQUFPLFNBQVM7TUFDcEI7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RPSDtBQUNBO0FBQ0E7QUFGQSxJQUlxQm5CLFNBQVM7RUFPNUIsU0FBQUEsVUFBWWUsR0FBVyxFQUFFO0lBQUF4aUIsaUZBQUEsT0FBQXloQixTQUFBO0lBQUF4aEIsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFDdkIsSUFBSSxDQUFDK2xCLElBQUksR0FBR3hELEdBQUc7SUFFZixJQUFNeUQsZUFBZSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxDQUFDampCLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDdkQsSUFBTW1qQixnQkFBZ0IsR0FBRyxJQUFJLENBQUNGLElBQUksQ0FBQ2pqQixLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFFMUQsSUFBSSxDQUFDb2pCLFdBQVcsR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxPQUFPLEVBQUVILGVBQWUsQ0FBQztJQUM1RCxJQUFJLENBQUNJLFdBQVcsR0FBRyxJQUFJLENBQUNELFVBQVUsQ0FBQyxPQUFPLEVBQUVILGVBQWUsQ0FBQztJQUM1RCxJQUFJLENBQUNLLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsT0FBTyxFQUFFTCxnQkFBZ0IsQ0FBQztJQUNoRixJQUFJLENBQUNNLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUMsT0FBTyxFQUFFTCxnQkFBZ0IsQ0FBQztFQUNsRjtFQUFDLE9BQUEzbEIsOEVBQUEsQ0FBQWtoQixTQUFBO0lBQUFqaEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF5QjtNQUN2QixPQUFPLElBQUksQ0FBQzBsQixXQUFXO0lBQ3pCO0VBQUM7SUFBQTNsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlCO01BQ3ZCLE9BQU8sSUFBSSxDQUFDNGxCLFdBQVc7SUFDekI7RUFBQztJQUFBN2xCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUM7TUFDakMsT0FBTyxJQUFJLENBQUM2bEIsb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQTlsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1DO01BQ2pDLE9BQU8sSUFBSSxDQUFDK2xCLG9CQUFvQjtJQUNsQztFQUFDO0lBQUFobUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTZsQixvQkFBb0JBLENBQUM1ZSxJQUFZLEVBQUV1ZSxnQkFBMEIsRUFBVztNQUM5RSxJQUFNTyxpQkFBaUIsR0FBR1AsZ0JBQWdCLENBQUNRLElBQUksQ0FBQyxVQUFBQyxRQUFRO1FBQUEsT0FBSUEsUUFBUSxDQUFDM2IsVUFBVSxDQUFDckQsSUFBSSxDQUFDO01BQUEsRUFBQztNQUV0RixJQUFJLENBQUM4ZSxpQkFBaUIsRUFBRTtRQUN0QixPQUFPLEtBQUs7TUFDZDtNQUVBLE9BQU8sQ0FBQ0EsaUJBQWlCLENBQUMxaUIsUUFBUSxhQUFhLENBQUM7SUFDbEQ7RUFBQztJQUFBdkQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTBsQixVQUFVQSxDQUFDemUsSUFBWSxFQUFFc2UsZUFBMEIsRUFBVTtNQUFBLElBQUFXLHFCQUFBO01BQ25FLElBQU1DLEtBQUssR0FBRyxFQUFBRCxxQkFBQSxHQUFBWCxlQUFlLENBQUNTLElBQUksQ0FBQyxVQUFBSSxPQUFPO1FBQUEsT0FBSUEsT0FBTyxDQUFDL2lCLFFBQVEsTUFBQVQsTUFBQSxDQUFNcUUsSUFBSSxDQUFFLENBQUM7TUFBQSxFQUFDLGNBQUFpZixxQkFBQSx1QkFBOURBLHFCQUFBLENBQWdFN2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxFQUFFO01BQ2pHLElBQU1na0IsYUFBYSxHQUFHZCxlQUFlLENBQUNTLElBQUksQ0FBQyxVQUFBSSxPQUFPO1FBQUEsT0FBSUEsT0FBTyxDQUFDL2lCLFFBQVEsYUFBQVQsTUFBQSxDQUFhdWpCLEtBQUssQ0FBRSxDQUFDO01BQUEsRUFBQztNQUM1RixJQUFNRyxTQUFTLEdBQUcsQ0FBQUQsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVoa0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLEVBQUU7TUFDcEQsSUFBTWtrQixTQUFTLEdBQUdELFNBQVMsQ0FBQ2prQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BRXpDLE9BQU9ra0IsU0FBUztJQUNsQjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeERIO0FBQ0E7QUFDQTtBQUNxRDtBQUNEO0FBR2E7QUFBQSxJQUczREMscUJBQXFCO0VBSXpCLFNBQUFBLHNCQUFZcEgsYUFBZ0MsRUFBRTtJQUFBOWYsaUZBQUEsT0FBQWtuQixxQkFBQTtJQUFBam5CLGlGQUFBLGtCQUhWd0ksNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLHVCQUF1QixDQUFDO0lBQUEzSSxpRkFBQTtJQUlsRixJQUFJK0Usc0VBQWlCLENBQUNtaUIsOEJBQThCLEVBQUU7TUFDcEQ7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBLElBQUksQ0FBQ3JGLGVBQWUsR0FBRyxJQUFJc0YsdUJBQXVCLENBQUN0SCxhQUFhLENBQUM7TUFFakU7SUFDRjtJQUVBLElBQUksQ0FBQ2dDLGVBQWUsR0FBRyxJQUFJcmlCLGdFQUFXLENBQUNpQixLQUFLLENBQUNtTyxpQkFBaUIsQ0FBQ2lSLGFBQWEsQ0FBQztFQUMvRTtFQUFDLE9BQUF2Ziw4RUFBQSxDQUFBMm1CLHFCQUFBO0lBQUExbUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QztNQUNyQyxPQUFPLElBQUksQ0FBQ3FoQixlQUFlO0lBQzdCO0VBQUM7SUFBQXRoQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTREO01BQUEsSUFBQTJoQixxQkFBQTtNQUMxRCxPQUFPLEVBQUFBLHFCQUFBLE9BQUksQ0FBQ04sZUFBZSxjQUFBTSxxQkFBQSx1QkFBcEJBLHFCQUFBLENBQXNCaUYsdUJBQXVCLEtBQUksSUFBSTtJQUM5RDtFQUFDO0lBQUE3bUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2RDtNQUFBLElBQUE0aEIsc0JBQUE7TUFDM0QsT0FBTyxFQUFBQSxzQkFBQSxPQUFJLENBQUNQLGVBQWUsY0FBQU8sc0JBQUEsdUJBQXBCQSxzQkFBQSxDQUFzQkUsd0JBQXdCLEtBQUksSUFBSTtJQUMvRDtFQUFDO0lBQUEvaEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFxRDtNQUFBLElBQUEwaUIsc0JBQUE7TUFDbkQsT0FBTyxFQUFBQSxzQkFBQSxPQUFJLENBQUNyQixlQUFlLGNBQUFxQixzQkFBQSx1QkFBcEJBLHNCQUFBLENBQXNCbUUsZUFBZSxLQUFJLElBQUk7SUFDdEQ7RUFBQztJQUFBOW1CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUQ7TUFBQSxJQUFBZ2xCLHNCQUFBO01BQ3JELE9BQU8sRUFBQUEsc0JBQUEsT0FBSSxDQUFDM0QsZUFBZSxjQUFBMkQsc0JBQUEsdUJBQXBCQSxzQkFBQSxDQUFzQjhCLGtCQUFrQixLQUFJLElBQUk7SUFDekQ7RUFBQztJQUFBL21CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFBQSxJQUFBK21CLHNCQUFBO01BQ3RDLE9BQU8sU0FBQUEsc0JBQUEsR0FBTyxJQUFJLENBQUMxRixlQUFlLGNBQUEwRixzQkFBQSx1QkFBcEJBLHNCQUFBLENBQXNCQyxnQkFBZ0IsTUFBSyxVQUFVO0lBQ3JFO0VBQUM7SUFBQWpuQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQUEsSUFBQWluQixzQkFBQTtNQUN0QyxPQUFPLFNBQUFBLHNCQUFBLEdBQU8sSUFBSSxDQUFDNUYsZUFBZSxjQUFBNEYsc0JBQUEsdUJBQXBCQSxzQkFBQSxDQUFzQkMsZ0JBQWdCLE1BQUssVUFBVTtJQUNyRTtFQUFDO0lBQUFubkIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QztNQUFBLElBQUFtbkIsc0JBQUE7TUFDckMsT0FBTyxDQUFDNWlCLHNFQUFpQixDQUFDNmlCLHVCQUF1QixJQUFJLFNBQUFELHNCQUFBLEdBQU8sSUFBSSxDQUFDOUYsZUFBZSxjQUFBOEYsc0JBQUEsdUJBQXBCQSxzQkFBQSxDQUFzQkUsZUFBZSxNQUFLLFVBQVU7SUFDbEg7RUFBQztJQUFBdG5CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0M7TUFBQSxJQUFBc25CLHNCQUFBO01BQ3BDLE9BQU8sQ0FBQy9pQixzRUFBaUIsQ0FBQ3dILHFCQUFxQixJQUFJLFNBQUF1YixzQkFBQSxHQUFPLElBQUksQ0FBQ2pHLGVBQWUsY0FBQWlHLHNCQUFBLHVCQUFwQkEsc0JBQUEsQ0FBc0J4SCxjQUFjLE1BQUssVUFBVTtJQUMvRztFQUFDO0lBQUEvZixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBc25CLFlBQUEsR0FBQWpMLG1GQUFBLGNBQUFDLHNFQUFBLENBRUQsU0FBQUUsUUFBa0JvRCxPQUF5QjtRQUFBLElBQUF2ZixLQUFBO1FBQUEsT0FBQWljLHNFQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsSUFDcEMsSUFBSSxDQUFDcUUsZUFBZTtnQkFBQXZFLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDakIsSUFBSXZZLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztZQUFBO2NBQUEsS0FHOUNGLHNFQUFpQixDQUFDaWpCLDZCQUE2QjtnQkFBQTFLLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBTyxNQUFBLFdBSzFDLElBQUlsQixPQUFPLENBQUMsVUFBQ0MsT0FBTyxFQUFFcUwsTUFBTTtnQkFBQSxPQUFLbm5CLEtBQUksQ0FBQytnQixlQUFlLENBQUNuQixXQUFXLENBQUM5RCxPQUFPLEVBQUVxTCxNQUFNLEVBQUU1SCxPQUFPLENBQUM7Y0FBQSxFQUFDO1lBQUE7Y0FBQSxPQUFBL0MsUUFBQSxDQUFBTyxNQUFBLFdBRzlGLElBQUksQ0FBQ2dFLGVBQWUsQ0FBQ25CLFdBQVcsQ0FBQ0wsT0FBTyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEvQyxRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQUNqRDtNQUFBLFNBZEt5RCxXQUFXQSxDQUFBMUMsRUFBQTtRQUFBLE9BQUErSixZQUFBLENBQUE5SixLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFYMk4sV0FBVztJQUFBO0VBQUE7SUFBQW5nQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBeW5CLGFBQUEsR0FBQXBMLG1GQUFBLGNBQUFDLHNFQUFBLENBZ0JqQixTQUFBb0IsU0FBbUJrQyxPQUEwQjtRQUFBLElBQUE5SixNQUFBO1FBQUEsT0FBQXdHLHNFQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUFBLElBQ3RDLElBQUksQ0FBQ3FFLGVBQWU7Z0JBQUF4RCxTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ2pCLElBQUl2WSxLQUFLLENBQUMsK0JBQStCLENBQUM7WUFBQTtjQUFBLEtBRzlDRixzRUFBaUIsQ0FBQ2lqQiw2QkFBNkI7Z0JBQUEzSixTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFhLFNBQUEsQ0FBQVIsTUFBQSxXQUsxQyxJQUFJbEIsT0FBTyxDQUFDLFVBQUNDLE9BQU8sRUFBRXFMLE1BQU07Z0JBQUEsT0FBSzFSLE1BQUksQ0FBQ3NMLGVBQWUsQ0FBQ3NHLFlBQVksQ0FBQ3ZMLE9BQU8sRUFBRXFMLE1BQU0sRUFBRTVILE9BQU8sQ0FBQztjQUFBLEVBQUM7WUFBQTtjQUFBLE9BQUFoQyxTQUFBLENBQUFSLE1BQUEsV0FHL0YsSUFBSSxDQUFDZ0UsZUFBZSxDQUFDc0csWUFBWSxDQUFDOUgsT0FBTyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFoQyxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUNsRDtNQUFBLFNBZEtnSyxZQUFZQSxDQUFBQyxHQUFBO1FBQUEsT0FBQUYsYUFBQSxDQUFBakssS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBWm9WLFlBQVk7SUFBQTtFQUFBO0lBQUE1bkIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTRuQixvQkFBQSxHQUFBdkwsbUZBQUEsY0FBQUMsc0VBQUEsQ0FnQmxCLFNBQUE0QyxTQUEwQjJJLFdBQXNDO1FBQUEsT0FBQXZMLHNFQUFBLFVBQUFnRCxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXpDLElBQUEsR0FBQXlDLFNBQUEsQ0FBQXhDLElBQUE7WUFBQTtjQUFBLElBQ3pELElBQUksQ0FBQ3FFLGVBQWU7Z0JBQUE3QixTQUFBLENBQUF4QyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNqQixJQUFJdlksS0FBSyxDQUFDLCtCQUErQixDQUFDO1lBQUE7Y0FBQSxPQUFBK2EsU0FBQSxDQUFBbkMsTUFBQSxXQUczQyxJQUFJLENBQUNnRSxlQUFlLENBQUMwRyxtQkFBbUIsQ0FBQ3hqQixzRUFBaUIsQ0FBQ2lqQiw2QkFBNkIsR0FDN0YsSUFBSW5aLHFCQUFxQixDQUFDeVosV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBdEksU0FBQSxDQUFBakMsSUFBQTtVQUFBO1FBQUEsR0FBQTRCLFFBQUE7TUFBQSxDQUN4RDtNQUFBLFNBUEs0SSxtQkFBbUJBLENBQUFDLEdBQUE7UUFBQSxPQUFBSCxvQkFBQSxDQUFBcEssS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBbkJ3VixtQkFBbUI7SUFBQTtFQUFBO0lBQUFob0IsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWdvQixxQkFBQSxHQUFBM0wsbUZBQUEsY0FBQUMsc0VBQUEsQ0FTekIsU0FBQTJMLFNBQTJCSixXQUFzQztRQUFBLElBQUFLLGdCQUFBO1FBQUEsSUFBQUMsU0FBQTtRQUFBLE9BQUE3TCxzRUFBQSxVQUFBOEwsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUF2TCxJQUFBLEdBQUF1TCxTQUFBLENBQUF0TCxJQUFBO1lBQUE7Y0FBQSxJQUMxRCxJQUFJLENBQUNxRSxlQUFlO2dCQUFBaUgsU0FBQSxDQUFBdEwsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDakIsSUFBSXZZLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztZQUFBO2NBRzVDMmpCLFNBQVMsSUFBQUQsZ0JBQUEsR0FBR0wsV0FBVyxDQUFDL0YsR0FBRyxjQUFBb0csZ0JBQUEsdUJBQWZBLGdCQUFBLENBQWlCbG1CLEtBQUssQ0FBQyxZQUFZLENBQUM7Y0FFdEQsSUFBSW1tQixTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDL2UsT0FBTyxDQUFDK0wsSUFBSSxDQUFDLCtCQUErQixDQUFDO2NBQ3BEO2NBQUMsT0FBQWtULFNBQUEsQ0FBQWpMLE1BQUEsV0FFTSxJQUFJLENBQUNnRSxlQUFlLENBQUNrSCxvQkFBb0IsQ0FBQ2hrQixzRUFBaUIsQ0FBQ2lqQiw2QkFBNkIsR0FDOUYsSUFBSW5aLHFCQUFxQixDQUFDeVosV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBUSxTQUFBLENBQUEvSyxJQUFBO1VBQUE7UUFBQSxHQUFBMkssUUFBQTtNQUFBLENBQ3hEO01BQUEsU0FiS0ssb0JBQW9CQSxDQUFBQyxHQUFBO1FBQUEsT0FBQVAscUJBQUEsQ0FBQXhLLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQXBCZ1csb0JBQW9CO0lBQUE7RUFBQTtJQUFBeG9CLEdBQUE7SUFBQUUsS0FBQSxFQWUxQixTQUFBd29CLFVBQVVBLENBQUEsRUFBbUI7TUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQ3BILGVBQWUsRUFBRTtRQUN6QixNQUFNLElBQUk1YyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFFQSxPQUFPLElBQUksQ0FBQzRjLGVBQWUsQ0FBQ29ILFVBQVUsQ0FBQyxDQUFDO0lBQzFDO0VBQUM7SUFBQTFvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBeW9CLFlBQVlBLENBQUEsRUFBcUI7TUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQ3JILGVBQWUsRUFBRTtRQUN6QixNQUFNLElBQUk1YyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFFQSxPQUFPLElBQUksQ0FBQzRjLGVBQWUsQ0FBQ3FILFlBQVksQ0FBQyxDQUFDO0lBQzVDO0VBQUM7SUFBQTNvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBK2lCLFFBQVFBLENBQUMyRixRQUFrQyxFQUEyQjtNQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDdEgsZUFBZSxFQUFFO1FBQ3pCLE1BQU0sSUFBSTVjLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztNQUNsRDtNQUVBLE9BQU8sSUFBSSxDQUFDNGMsZUFBZSxDQUFDMkIsUUFBUSxDQUFDMkYsUUFBUSxDQUFDO0lBQ2hEO0VBQUM7SUFBQTVvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ2xCLGNBQWNBLENBQUEsRUFBbUM7TUFBQSxJQUFBMkQsTUFBQTtNQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDdkgsZUFBZSxFQUFFO1FBQ3pCLE1BQU0sSUFBSTVjLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztNQUNsRDtNQUVBLE9BQU8sSUFBSTBYLE9BQU8sQ0FBQyxVQUFBQyxPQUFPLEVBQUk7UUFDNUI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBTUgsT0FBTyxHQUFHMk0sTUFBSSxDQUFDdkgsZUFBZSxDQUFDMkIsUUFBUSxDQUFDNUcsT0FBTyxDQUFDO01BQ3hELENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQXJjLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3SCxnQkFBZ0JBLENBQTRDUCxJQUFPLEVBQUVNLFFBQW1GLEVBQUVxWSxPQUEyQyxFQUFRO01BQzNNLElBQUksQ0FBQyxJQUFJLENBQUN3QixlQUFlLEVBQUU7UUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BRUEsSUFBSSxDQUFDNGMsZUFBZSxDQUFDNVosZ0JBQWdCLENBQUNQLElBQUksRUFBRU0sUUFBUSxFQUFFcVksT0FBTyxDQUFDO0lBQ2hFO0VBQUM7SUFBQTlmLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwSCxtQkFBbUJBLENBQTRDVCxJQUFPLEVBQUVNLFFBQW1GLEVBQUVxWSxPQUEyQyxFQUFRO01BQzlNLElBQUksQ0FBQyxJQUFJLENBQUN3QixlQUFlLEVBQUU7UUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BRUEsSUFBSSxDQUFDNGMsZUFBZSxDQUFDMVosbUJBQW1CLENBQUNULElBQUksRUFBRU0sUUFBUSxFQUFFcVksT0FBTyxDQUFDO0lBQ25FO0VBQUM7SUFBQTlmLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvbkIsZUFBZUEsQ0FBQSxFQUF3QjtNQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDaEcsZUFBZSxFQUFFO1FBQ3pCLE1BQU0sSUFBSTVjLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztNQUNsRDtNQUVBLE9BQU8sSUFBSSxDQUFDNGMsZUFBZSxDQUFDZ0csZUFBZSxDQUFDLENBQUM7SUFDL0M7RUFBQztJQUFBdG5CLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE2ZixjQUFjQSxDQUFDamMsSUFBWSxFQUFFZ2MsT0FBOEIsRUFBcUI7TUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQ3dCLGVBQWUsRUFBRTtRQUN6QixNQUFNLElBQUk1YyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFFQSxPQUFPLElBQUksQ0FBQzRjLGVBQWUsQ0FBQ3ZCLGNBQWMsQ0FBQ2pjLElBQUksRUFBRWdjLE9BQU8sQ0FBQztJQUMzRDtFQUFDO0lBQUE5ZixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNG9CLFNBQVNBLENBQUMxSCxXQUF3QixFQUFRO01BQUEsSUFBQTJILE1BQUE7TUFDeEMzSCxXQUFXLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUN2UixPQUFPLENBQUMsVUFBQXlSLEtBQUssRUFBSTtRQUN2QyxJQUFJLENBQUNvSCxNQUFJLENBQUN6SCxlQUFlLEVBQUU7VUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO1FBQ2xEO1FBRUFxa0IsTUFBSSxDQUFDekgsZUFBZSxDQUFDMEgsUUFBUSxDQUFDckgsS0FBSyxDQUFDO01BQ3RDLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQTNoQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBK21CLGdCQUFnQkEsQ0FBQSxFQUFxQjtNQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDM0YsZUFBZSxFQUFFO1FBQ3pCLE1BQU0sSUFBSTVjLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztNQUNsRDtNQUVBLE9BQU8sSUFBSSxDQUFDNGMsZUFBZSxDQUFDMkYsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRDtFQUFDO0lBQUFqbkIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWluQixnQkFBZ0JBLENBQUM3SCxhQUErQixFQUFRO01BQ3RELElBQUksQ0FBQyxJQUFJLENBQUNnQyxlQUFlLEVBQUU7UUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BRUEsSUFBSSxDQUFDNGMsZUFBZSxDQUFDNkYsZ0JBQWdCLENBQUM3SCxhQUFhLENBQUM7SUFDdEQ7RUFBQztJQUFBdGYsR0FBQTtJQUFBQyxHQUFBLEVBVUQsU0FBQUEsSUFBQSxFQUFtRjtNQUNqRixJQUFJLENBQUMsSUFBSSxDQUFDcWhCLGVBQWUsRUFBRTtRQUN6QixNQUFNLElBQUk1YyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFFQSxPQUFPLElBQUksQ0FBQzRjLGVBQWUsQ0FBQzJILE9BQU87SUFDckMsQ0FBQztJQUFBM1AsR0FBQSxFQWRELFNBQUFBLElBQVk0UCxPQUE0RSxFQUFFO01BQ3hGLElBQUksQ0FBQyxJQUFJLENBQUM1SCxlQUFlLEVBQUU7UUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BRUEsSUFBSSxDQUFDNGMsZUFBZSxDQUFDMkgsT0FBTyxHQUFHQyxPQUFPO0lBQ3hDO0VBQUM7SUFBQWxwQixHQUFBO0lBQUFDLEdBQUEsRUFrQkQsU0FBQUEsSUFBQSxFQUFzRztNQUNwRyxJQUFJLENBQUMsSUFBSSxDQUFDcWhCLGVBQWUsRUFBRTtRQUN6QixNQUFNLElBQUk1YyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFFQSxPQUFPLElBQUksQ0FBQzRjLGVBQWUsQ0FBQzZILGNBQWM7SUFDNUMsQ0FBQztJQUFBN1AsR0FBQSxFQWRELFNBQUFBLElBQW1CNFAsT0FBd0YsRUFBRTtNQUMzRyxJQUFJLENBQUMsSUFBSSxDQUFDNUgsZUFBZSxFQUFFO1FBQ3pCLE1BQU0sSUFBSTVjLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztNQUNsRDtNQUVBLElBQUksQ0FBQzRjLGVBQWUsQ0FBQzZILGNBQWMsR0FBR0QsT0FBTztJQUMvQztFQUFDO0lBQUFscEIsR0FBQTtJQUFBQyxHQUFBLEVBa0JELFNBQUFBLElBQUEsRUFBMkY7TUFDekYsSUFBSSxDQUFDLElBQUksQ0FBQ3FoQixlQUFlLEVBQUU7UUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BRUEsT0FBTyxJQUFJLENBQUM0YyxlQUFlLENBQUM4SCx1QkFBdUI7SUFDckQsQ0FBQztJQUFBOVAsR0FBQSxFQWRELFNBQUFBLElBQTRCNFAsT0FBb0UsRUFBRTtNQUNoRyxJQUFJLENBQUMsSUFBSSxDQUFDNUgsZUFBZSxFQUFFO1FBQ3pCLE1BQU0sSUFBSTVjLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztNQUNsRDtNQUVBLElBQUksQ0FBQzRjLGVBQWUsQ0FBQzhILHVCQUF1QixHQUFHRixPQUFPO0lBQ3hEO0VBQUM7SUFBQWxwQixHQUFBO0lBQUFDLEdBQUEsRUFrQkQsU0FBQUEsSUFBQSxFQUE4RjtNQUM1RixJQUFJLENBQUMsSUFBSSxDQUFDcWhCLGVBQWUsRUFBRTtRQUN6QixNQUFNLElBQUk1YyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFFQSxPQUFPLElBQUksQ0FBQzRjLGVBQWUsQ0FBQytILDBCQUEwQjtJQUN4RCxDQUFDO0lBQUEvUCxHQUFBLEVBZEQsU0FBQUEsSUFBK0I0UCxPQUFvRSxFQUFFO01BQ25HLElBQUksQ0FBQyxJQUFJLENBQUM1SCxlQUFlLEVBQUU7UUFDekIsTUFBTSxJQUFJNWMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BRUEsSUFBSSxDQUFDNGMsZUFBZSxDQUFDK0gsMEJBQTBCLEdBQUdILE9BQU87SUFDM0Q7RUFBQztJQUFBbHBCLEdBQUE7SUFBQUUsS0FBQSxFQVVELFNBQUFvcEIsS0FBS0EsQ0FBQSxFQUFTO01BQUEsSUFBQUMsc0JBQUE7TUFDWixDQUFBQSxzQkFBQSxPQUFJLENBQUNqSSxlQUFlLGNBQUFpSSxzQkFBQSx1QkFBcEJBLHNCQUFBLENBQXNCRCxLQUFLLENBQUMsQ0FBQztJQUMvQjtFQUFDO0lBQUF0cEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDaWhCLGVBQWUsR0FBRyxJQUFJO0lBQzdCO0VBQUM7QUFBQTtBQUdILCtEQUFlb0YscUJBQXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcFNwQztBQUNBO0FBQ0E7QUFDcUQ7QUFHTztBQUFBLElBRXZDbEksNEJBQTRCO0VBQUEsU0FBQUEsNkJBQUE7SUFBQWhmLGlGQUFBLE9BQUFnZiw0QkFBQTtFQUFBO0VBQUEsT0FBQXplLDhFQUFBLENBQUF5ZSw0QkFBQTtJQUFBeGUsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQXNwQixxQkFBQSxHQUFBak4sbUZBQUEsY0FBQUMsc0VBQUEsQ0FDL0MsU0FBQUUsUUFBMkI0QyxhQUFnQztRQUFBLE9BQUE5QyxzRUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQU8sTUFBQSxXQUNsRCxJQUFJbEIsT0FBTyxDQUFrQixVQUFBcU4sNEJBQTRCLEVBQUk7Z0JBQ2xFLElBQU12TixPQUFPLEdBQUdqZCxnRUFBVyxDQUFDd1EsU0FBUyxDQUFDLFVBQUEzQixXQUFXLEVBQUk7a0JBQ25ELElBQUksQ0FBQ0EsV0FBVyxFQUFFO29CQUNoQjtrQkFDRjtrQkFFQTJiLDRCQUE0QixDQUFDLElBQUkvQyw4REFBcUIsQ0FBQ3BILGFBQWEsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUM7Y0FDSixDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXZDLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ0g7TUFBQSxTQVZLZ0Qsb0JBQW9CQSxDQUFBakMsRUFBQTtRQUFBLE9BQUErTCxxQkFBQSxDQUFBOUwsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBcEJrTixvQkFBb0I7SUFBQTtFQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1Q1QjtBQUNBO0FBQ0E7QUFGQSxJQU9xQnJnQixlQUFlO0VBR2xDLFNBQUFBLGdCQUFZcXFCLE9BQW1CLEVBQUU7SUFBQWxxQixpRkFBQSxPQUFBSCxlQUFBO0lBQUFJLGlGQUFBO0lBQy9CLElBQUksQ0FBQ2txQixRQUFRLEdBQUdELE9BQU87RUFDekI7RUFBQyxPQUFBM3BCLDhFQUFBLENBQUFWLGVBQUE7SUFBQVcsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFlO01BQ2IsT0FBTyxJQUFJLENBQUMwcEIsUUFBUSxDQUFDenBCLEtBQUs7SUFDNUI7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdVAsU0FBU0EsQ0FBQ2hJLFFBQTRCLEVBQWU7TUFDbkQsT0FBTyxJQUFJLENBQUNraUIsUUFBUSxDQUFDbGEsU0FBUyxDQUFDaEksUUFBUSxDQUFDO0lBQzFDO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJIO0FBQ0E7QUFDQTs7QUFHNEM7QUFBQSxJQUd0Q21pQixrQkFBa0IsMEJBQUFDLFdBQUE7RUFDdEIsU0FBQUQsbUJBQVlFLFNBQWMsRUFBRXJpQixRQUFXLEVBQUU7SUFBQWpJLGlGQUFBLE9BQUFvcUIsa0JBQUE7SUFBQSxPQUFBRyxVQUFBLE9BQUFILGtCQUFBLEdBQ2pDLFlBQU07TUFDVixJQUFNdlgsR0FBRyxHQUFHeVgsU0FBUyxDQUFDam5CLE9BQU8sQ0FBQzRFLFFBQVEsQ0FBQztNQUV2QyxJQUFJNEssR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNaeVgsU0FBUyxDQUFDMVQsTUFBTSxDQUFDL0QsR0FBRyxFQUFFLENBQUMsQ0FBQztNQUMxQjtJQUNGLENBQUM7RUFDSDtFQUFDMlgsMkVBQUEsQ0FBQUosa0JBQUEsRUFBQUMsV0FBQTtFQUFBLE9BQUE5cEIsOEVBQUEsQ0FBQTZwQixrQkFBQTtBQUFBLEVBVGlDMXFCLHdEQUFVO0FBQUEsSUFZekJFLE9BQU87RUFJMUIsU0FBQUEsUUFBWWMsS0FBUSxFQUFFO0lBQUFWLGlGQUFBLE9BQUFKLE9BQUE7SUFBQUssaUZBQUE7SUFBQUEsaUZBQUE7SUFDcEIsSUFBSSxDQUFDd3FCLFVBQVUsR0FBRyxFQUFFO0lBQ3BCLElBQUksQ0FBQ0MsTUFBTSxHQUFHaHFCLEtBQUs7RUFDckI7RUFBQyxPQUFBSCw4RUFBQSxDQUFBWCxPQUFBO0lBQUFZLEdBQUE7SUFBQUMsR0FBQSxFQXdCRCxTQUFBQSxJQUFBLEVBQWU7TUFDYixPQUFPLElBQUksQ0FBQ2lxQixNQUFNO0lBQ3BCLENBQUM7SUFBQTVRLEdBQUEsRUF4QkQsU0FBQUEsSUFBVXBaLEtBQVEsRUFBRTtNQUNsQixJQUFJaXFCLE9BQU8sR0FBRyxJQUFJLENBQUNELE1BQU0sS0FBS2hxQixLQUFLO01BRW5DLElBQUlpcUIsT0FBTyxJQUFJanFCLEtBQUssRUFBRTtRQUNwQixJQUFNa3FCLFVBQVUsR0FBR2xxQixLQUFrQztRQUVyRCxJQUFJLE9BQU9rcUIsVUFBVSxDQUFDQyxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQzNDRixPQUFPLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDSCxNQUFNLENBQUM7UUFDM0M7TUFDRjtNQUVBLElBQUksQ0FBQ0MsT0FBTyxFQUFFO1FBQ1o7TUFDRjtNQUVBLElBQUksQ0FBQ0QsTUFBTSxHQUFHaHFCLEtBQUs7TUFFbkIsSUFBSSxDQUFDK3BCLFVBQVUsQ0FBQy9aLE9BQU8sQ0FBQyxVQUFBekksUUFBUSxFQUFJO1FBQ2xDQSxRQUFRLENBQUN2SCxLQUFLLENBQUM7TUFDakIsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFNRCxTQUFBdVAsU0FBU0EsQ0FBQ2hJLFFBQTRCLEVBQWU7TUFDbkQsSUFBSSxDQUFDd2lCLFVBQVUsQ0FBQzlnQixJQUFJLENBQUMxQixRQUFRLENBQUM7TUFFOUJBLFFBQVEsQ0FBQyxJQUFJLENBQUN5aUIsTUFBTSxDQUFDO01BRXJCLE9BQU8sSUFBSU4sa0JBQWtCLENBQXFCLElBQUksQ0FBQ0ssVUFBVSxFQUFFeGlCLFFBQVEsQ0FBQztJQUM5RTtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0RIO0FBQ0E7QUFDQTs7QUFFcUQ7QUFBQSxJQUVoQ3lTLFdBQVc7RUFBQSxTQUFBQSxZQUFBO0lBQUExYSxpRkFBQSxPQUFBMGEsV0FBQTtFQUFBO0VBQUEsT0FBQW5hLDhFQUFBLENBQUFtYSxXQUFBO0lBQUFsYSxHQUFBO0lBQUFFLEtBQUEsRUFDOUIsU0FBT3lhLHFCQUFxQkEsQ0FBQ3BCLEdBQVcsRUFBVTtNQUNoRCxJQUFJO1FBQ0YsSUFBTStRLE9BQU8sR0FBRyxJQUFJcnJCLGdFQUFXLENBQUNpQixLQUFLLENBQUNvRixHQUFHLENBQUNpVSxHQUFHLENBQUM7UUFFOUMsT0FBTytRLE9BQU8sQ0FBQ0MsTUFBTTtNQUN2QixDQUFDLENBQUMsT0FBT2hnQixDQUFDLEVBQUU7UUFDVixPQUFPLEVBQUU7TUFDWDtJQUNGO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNmSDtBQUNBO0FBQ0E7O0FBRXVEO0FBQ0g7QUFDZDtBQUNGO0FBQ2dCO0FBQ0k7QUFFUTtBQUNSO0FBQ007QUFDaUI7QUFDMEI7QUFFbkM7QUFDTjtBQUNQO0FBQ0o7QUFDc0I7QUFFVjtBQUN2QjtBQUNGO0FBQ1k7QUFDRztBQUNJO0FBTTNELElBQU1wQyxZQUFZLEdBQUcsRUFBQXNpQixxQkFBQSxHQUFBeHJCLGlFQUFXLENBQUNzUSxXQUFXLENBQUMsQ0FBQyxDQUFDclAsS0FBSyxjQUFBdXFCLHFCQUFBLHVCQUEvQkEscUJBQUEsQ0FBaUN0aUIsWUFBWSxLQUFJekksSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztBQUFDLElBZTVEcUksR0FBRztFQW1XdEIsU0FBQUEsSUFBQSxFQUFzQjtJQUFBeEksaUZBQUEsT0FBQXdJLEdBQUE7SUFDcEIsTUFBTSxJQUFJdEQsS0FBSyxDQUFDLG9EQUFvRCxDQUFDO0VBQ3ZFO0VBQUMsT0FBQTNFLDhFQUFBLENBQUFpSSxHQUFBO0lBQUFoSSxHQUFBO0lBQUFDLEdBQUEsRUExVUQsU0FBQUEsSUFBQSxFQUFrQztNQUNoQyxPQUFPa0ksWUFBWTtJQUNyQjtFQUFDO0lBQUFuSSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU8sSUFBSSxDQUFDZ0wsb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQWpMLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0M7TUFDcEMsT0FBTyxJQUFJLENBQUMyWixRQUFRO0lBQ3RCO0VBQUM7SUFBQTVaLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUM7TUFDbkMsT0FBTytILEdBQUcsQ0FBQzBpQixnQkFBZ0I7SUFDN0I7RUFBQztJQUFBMXFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUM7TUFDakMsT0FBTytILEdBQUcsQ0FBQzJpQixnQkFBZ0I7SUFDN0I7RUFBQztJQUFBM3FCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTytILEdBQUcsQ0FBQzRpQixvQkFBb0I7SUFDakM7RUFBQztJQUFBNXFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTytILEdBQUcsQ0FBQzZpQixxQkFBcUI7SUFDbEM7RUFBQztJQUFBN3FCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEU7TUFDMUUsT0FBTytILEdBQUcsQ0FBQzhpQiw4QkFBOEI7SUFDM0M7RUFBQztJQUFBOXFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBTytILEdBQUcsQ0FBQytpQiw0QkFBNEI7SUFDekM7RUFBQztJQUFBL3FCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkQ7TUFDekQsT0FBTytILEdBQUcsQ0FBQ2dqQixxQ0FBcUM7SUFDbEQ7RUFBQztJQUFBaHJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTytILEdBQUcsQ0FBQ2lqQiw2QkFBNkI7SUFDMUM7RUFBQztJQUFBanJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEQ7TUFDeEQsT0FBTytILEdBQUcsQ0FBQ2tqQixvQ0FBb0M7SUFDakQ7RUFBQztJQUFBbHJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0Q7TUFDcEQsT0FBTyxJQUFJLENBQUNrckIsZ0NBQWdDO0lBQzlDO0VBQUM7SUFBQW5yQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU8sSUFBSSxDQUFDbXJCLHFDQUFxQztJQUNuRDtFQUFDO0lBQUFwckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUErRTtNQUM3RSxPQUFPLElBQUksQ0FBQ29yQixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBcnJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUY7TUFDakYsT0FBTyxJQUFJLENBQUNxckIsa0JBQWtCO0lBQ2hDO0VBQUM7SUFBQXRyQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJFO01BQ3pFLE9BQU8sSUFBSSxDQUFDc3JCLFlBQVk7SUFDMUI7RUFBQztJQUFBdnJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUMsT0FBTytILEdBQUcsQ0FBQ3dqQixlQUFlO0lBQzVCO0VBQUM7SUFBQXhyQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJFO01BQ3pFLE9BQU8sSUFBSSxDQUFDd3JCLDJCQUEyQjtJQUN6QztFQUFDO0lBQUF6ckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQztNQUN6QyxPQUFPLElBQUksQ0FBQ3lyQixhQUFhO0lBQzNCO0VBQUM7SUFBQTFyQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW9FO01BQ2xFLE9BQU8sSUFBSSxDQUFDMHJCLCtDQUErQztJQUM3RCxDQUFDO0lBQUFyUyxHQUFBLEVBRUQsU0FBQUEsSUFBMERzUyxhQUFxQixFQUFFO01BQy9FLElBQUksQ0FBQ0QsK0NBQStDLEdBQUdDLGFBQWE7SUFDdEU7RUFBQztJQUFBNXJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUMsT0FBT3lELG9FQUFtQixDQUFDVSxxQ0FBcUMsQ0FBQyxJQUFJLENBQUNrRixPQUFPLENBQUNxSyxTQUFTLENBQUN6VCxLQUFLLENBQUM7SUFDaEc7RUFBQztJQUFBRixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU91RCx3RUFBcUIsQ0FBQ1UseUNBQXlDLENBQUM4RCxHQUFHLENBQUM2akIsZUFBZSxDQUFDM3JCLEtBQUssQ0FBQztJQUNuRztFQUFDO0lBQUFGLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBT2MsNkRBQWU7SUFDeEI7RUFBQztJQUFBZixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPNHJCLDJCQUEyQkEsQ0FBQSxFQUFTO01BQUEsSUFBQXZyQixLQUFBO01BQ3pDLElBQU13ckIsc0JBQXNCLEdBQUc5akIsNkRBQWEsQ0FBQzhqQixzQkFBc0I7TUFFbkVBLHNCQUFzQixDQUFDaFMsU0FBUyxHQUFHL1IsR0FBRyxDQUFDeVMsZUFBZTtNQUN0RHNSLHNCQUFzQixDQUFDNWpCLFlBQVksR0FBR0gsR0FBRyxDQUFDRyxZQUFZO01BRXRELElBQU02akIsa0JBQWtCLEdBQUdoa0IsR0FBRyxDQUFDMFIsWUFBWSxDQUFDakssU0FBUyxDQUFDLFVBQUFrSyxXQUFXLEVBQUk7UUFDbkVvUyxzQkFBc0IsQ0FBQ3BTLFdBQVcsR0FBR0EsV0FBVztNQUNsRCxDQUFDLENBQUM7TUFDRixJQUFNc1MsbUJBQW1CLEdBQUdqa0IsR0FBRyxDQUFDa2tCLFlBQVksQ0FBQ3pjLFNBQVMsQ0FBQyxVQUFBdlAsS0FBSyxFQUFJO1FBQzlELElBQU1pc0IsaUJBQWlCLEdBQUc1ckIsS0FBSSxDQUFDK0ksT0FBTyxDQUFDaUwsU0FBUyxDQUFDclUsS0FBSyxDQUFDZ21CLElBQUksQ0FBQyxVQUFBN1MsUUFBUTtVQUFBLE9BQUlBLFFBQVEsWUFBWTZELG9FQUFpQjtRQUFBLEVBQUM7UUFFOUcsSUFBSWlWLGlCQUFpQixFQUFFO1VBQ3JCSixzQkFBc0IsQ0FBQ3hTLEdBQUcsR0FBR3JaLEtBQUs7VUFFbENLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ2lMLFNBQVMsQ0FBQ2pCLE1BQU0sQ0FBQzZZLGlCQUFpQixDQUFDO1VBQ2hENXJCLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ2lMLFNBQVMsQ0FBQzNULEdBQUcsQ0FBQyxJQUFJc1csb0VBQWlCLENBQUM2VSxzQkFBc0IsQ0FBQyxDQUFDO1VBQ3pFeHJCLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLCtCQUErQixFQUFFd2lCLHNCQUFzQixDQUFDeFMsR0FBRyxDQUFDO1FBQ2hGO01BQ0YsQ0FBQyxDQUFDO01BQ0YsSUFBTTZTLGNBQWMsR0FBR3BrQixHQUFHLENBQUM0UixRQUFRLENBQUNuSyxTQUFTLENBQUMsVUFBQW9LLE9BQU8sRUFBSTtRQUN2RCxJQUFNc1MsaUJBQWlCLEdBQUc1ckIsS0FBSSxDQUFDK0ksT0FBTyxDQUFDaUwsU0FBUyxDQUFDclUsS0FBSyxDQUFDZ21CLElBQUksQ0FBQyxVQUFBN1MsUUFBUTtVQUFBLE9BQUlBLFFBQVEsWUFBWTZELG9FQUFpQjtRQUFBLEVBQUM7UUFFOUcsSUFBSWlWLGlCQUFpQixJQUFJdFMsT0FBTyxFQUFFO1VBQ2hDa1Msc0JBQXNCLENBQUNsUyxPQUFPLEdBQUdBLE9BQU87VUFFeEN0WixLQUFJLENBQUMrSSxPQUFPLENBQUNpTCxTQUFTLENBQUNqQixNQUFNLENBQUM2WSxpQkFBaUIsQ0FBQztVQUNoRDVyQixLQUFJLENBQUMrSSxPQUFPLENBQUNpTCxTQUFTLENBQUMzVCxHQUFHLENBQUMsSUFBSXNXLG9FQUFpQixDQUFDNlUsc0JBQXNCLENBQUMsQ0FBQztVQUN6RXhyQixLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRXdpQixzQkFBc0IsQ0FBQ2xTLE9BQU8sQ0FBQztRQUN4RjtNQUNGLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQTdaLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9tc0IseUJBQXlCQSxDQUFBLEVBQVM7TUFDdkNya0IsR0FBRyxDQUFDd2pCLGVBQWUsR0FBR3JSLGdFQUFjLENBQUNDLGlCQUFpQixDQUFDb1EsZ0VBQVksQ0FBQzFmLEdBQUcsQ0FBQzVLLEtBQUssQ0FBQztNQUM5RThILEdBQUcsQ0FBQ29ULHFCQUFxQixHQUFHcFQsR0FBRyxDQUFDd2pCLGVBQWUsQ0FBQ2hSLG9CQUFvQjtNQUVwRXhTLEdBQUcsQ0FBQ29ULHFCQUFxQixDQUFDckIsU0FBUyxHQUFHL1IsR0FBRyxDQUFDeVMsZUFBZTtNQUV6RCxJQUFNdVIsa0JBQWtCLEdBQUdoa0IsR0FBRyxDQUFDMFIsWUFBWSxDQUFDakssU0FBUyxDQUFDLFVBQUFrSyxXQUFXLEVBQUk7UUFDbkUzUixHQUFHLENBQUNvVCxxQkFBcUIsQ0FBQ3pCLFdBQVcsR0FBR0EsV0FBVztNQUNyRCxDQUFDLENBQUM7TUFDRixJQUFNc1MsbUJBQW1CLEdBQUdqa0IsR0FBRyxDQUFDa2tCLFlBQVksQ0FBQ3pjLFNBQVMsQ0FBQyxVQUFBdlAsS0FBSyxFQUFJO1FBQzlEOEgsR0FBRyxDQUFDb1QscUJBQXFCLENBQUM3QixHQUFHLEdBQUdyWixLQUFLO01BQ3ZDLENBQUMsQ0FBQztNQUNGLElBQU1rc0IsY0FBYyxHQUFHcGtCLEdBQUcsQ0FBQzRSLFFBQVEsQ0FBQ25LLFNBQVMsQ0FBQyxVQUFBb0ssT0FBTyxFQUFJO1FBQ3ZEN1IsR0FBRyxDQUFDb1QscUJBQXFCLENBQUN2QixPQUFPLEdBQUdBLE9BQU87TUFDN0MsQ0FBQyxDQUFDO01BQ0YsSUFBTTNaLEtBQUssR0FBR2tYLDBFQUE0QixDQUFDdlQsY0FBYyxDQUFDLHNCQUFzQixDQUF1QjtNQUV2RyxJQUFJM0QsS0FBSyxFQUFFO1FBQ1RpYSxnRUFBYyxDQUFDVyxpQkFBaUIsQ0FBQ3pDLDBFQUFjLENBQUNuWSxLQUFLLENBQUMsQ0FBQztNQUN6RDtNQUVBLElBQU1vc0IscUJBQXFCLEdBQUd0a0IsR0FBRyxDQUFDNmpCLGVBQWUsQ0FBQ3BjLFNBQVMsQ0FBQyxVQUFBb0wsY0FBYyxFQUFJO1FBQzVFVixnRUFBYyxDQUFDVyxpQkFBaUIsQ0FBQ0QsY0FBYyxDQUFDO01BQ2xELENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQTdhLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9xc0IsMERBQTBEQSxDQUFBLEVBQVM7TUFDeEUsSUFBSSxDQUFDeEIsNEJBQTRCLEdBQUczVCwwRUFBNEIsQ0FBQ3BULGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQztNQUN6SCxJQUFJLENBQUNzRixPQUFPLENBQUNDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLENBQUN3aEIsNEJBQTRCLENBQUM7TUFFdEc7SUFDRjtFQUFDO0lBQUEvcUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3NzQixtRUFBbUVBLENBQUEsRUFBUztNQUNqRixJQUFJLENBQUN4QixxQ0FBcUMsR0FBRzVULDBFQUE0QixDQUFDcFQsZUFBZSxDQUFDLGdEQUFnRCxDQUFDO01BQzNJLElBQUksQ0FBQ3NGLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLElBQUksQ0FBQ3loQixxQ0FBcUMsQ0FBQztNQUV4SDtJQUNGO0VBQUM7SUFBQWhyQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPdXNCLDhEQUE4REEsQ0FBQSxFQUFTO01BQzVFLElBQUksQ0FBQ3RCLGdDQUFnQyxHQUFHL1QsMEVBQTRCLENBQUNwVCxlQUFlLENBQUMsNENBQTRDLENBQUM7TUFDbEksSUFBSSxDQUFDc0YsT0FBTyxDQUFDQyxJQUFJLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDNGhCLGdDQUFnQyxDQUFDO01BRS9HO0lBQ0Y7RUFBQztJQUFBbnJCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU93c0IsbUVBQW1FQSxDQUFBLEVBQVM7TUFDakYsSUFBSSxDQUFDdEIscUNBQXFDLEdBQUdoVSwwRUFBNEIsQ0FBQ3BULGVBQWUsQ0FBQyxrREFBa0QsQ0FBQztNQUM3SSxJQUFJLENBQUNzRixPQUFPLENBQUNDLElBQUksQ0FBQyxzRUFBc0UsRUFBRSxJQUFJLENBQUM2aEIscUNBQXFDLENBQUM7TUFFckk7SUFDRjtFQUFDO0lBQUFwckIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3lzQixrREFBa0RBLENBQUEsRUFBUztNQUNoRTNrQixHQUFHLENBQUM0a0IsWUFBWSxDQUFDbmQsU0FBUyxDQUFDLFVBQUF2UCxLQUFLLEVBQUk7UUFDbEM4SCxHQUFHLENBQUNra0IsWUFBWSxDQUFDaHNCLEtBQUssR0FBRzhILEdBQUcsQ0FBQzBTLGVBQWUsQ0FBQ3hhLEtBQUssQ0FBQztRQUNuRDhILEdBQUcsQ0FBQzBSLFlBQVksQ0FBQ3haLEtBQUssR0FBR2dhLHFEQUFXLENBQUNTLHFCQUFxQixDQUFDemEsS0FBSyxDQUFDO01BQ25FLENBQUMsQ0FBQztNQUVGLElBQU0yc0IsWUFBWSxHQUFHelYsMEVBQTRCLENBQUN2VCxjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFeEYsSUFBSWdwQixZQUFZLEVBQUU7UUFDaEIsSUFBTXppQixTQUFTLEdBQUdULGdFQUFjLENBQUNDLFVBQVUsQ0FBQ2lqQixZQUFZLENBQUM7UUFFekQ3a0IsR0FBRyxDQUFDNFIsUUFBUSxDQUFDMVosS0FBSyxHQUFHa0ssU0FBUyxDQUFDeVAsT0FBTztRQUN0QzJRLGdFQUFZLENBQUMxZixHQUFHLENBQUM1SyxLQUFLLEdBQUcsQ0FBQ2tLLFNBQVMsQ0FBQ1UsR0FBRyxJQUFJOUMsR0FBRyxDQUFDNGtCLFlBQVksQ0FBQzFzQixLQUFLLEVBQUVpUSxRQUFRLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUM3RyxPQUFPLENBQUNDLElBQUksQ0FBQyx3REFBd0QsRUFBRXZCLEdBQUcsQ0FBQzRrQixZQUFZLENBQUMxc0IsS0FBSyxDQUFDO1FBRW5HO01BQ0Y7TUFFQSxJQUFNNHNCLFFBQVEsR0FBRzFWLDBFQUE0QixDQUFDdlQsY0FBYyxDQUFDLFlBQVksQ0FBQztNQUUxRSxJQUFJaXBCLFFBQVEsRUFBRTtRQUNadEMsZ0VBQVksQ0FBQzFmLEdBQUcsQ0FBQzVLLEtBQUssR0FBRzRzQixRQUFRO1FBQ2pDLElBQUksQ0FBQ3hqQixPQUFPLENBQUNDLElBQUksQ0FBQyx5RUFBeUUsRUFBRXZCLEdBQUcsQ0FBQzRrQixZQUFZLENBQUMxc0IsS0FBSyxDQUFDO1FBRXBIO01BQ0Y7TUFFQSxJQUFNNnNCLFlBQVksR0FBRzNWLDBFQUE0QixDQUFDdlQsY0FBYyxDQUFDLGlCQUFpQixDQUFDO01BRW5GLElBQUlrcEIsWUFBWSxFQUFFO1FBQ2hCLElBQU1qZixXQUFXLEdBQUc3TyxpRUFBVyxDQUFDc1EsV0FBVyxDQUFDLENBQUMsQ0FBQ3JQLEtBQUs7UUFDbkQsSUFBTTRLLEdBQUcsR0FBRyxJQUFJZ0QsV0FBVyxDQUFDeEksR0FBRyxDQUFDeW5CLFlBQVksQ0FBQztRQUU3Q2ppQixHQUFHLENBQUMyTyxRQUFRLEdBQUcsa0JBQWtCO1FBQ2pDK1EsZ0VBQVksQ0FBQzFmLEdBQUcsQ0FBQzVLLEtBQUssR0FBRzRLLEdBQUcsQ0FBQ3FGLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQzdHLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDhFQUE4RSxFQUFFdkIsR0FBRyxDQUFDNGtCLFlBQVksQ0FBQzFzQixLQUFLLENBQUM7UUFFekg7TUFDRjtJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzhzQixNQUFNQSxDQUFDbGYsV0FBZ0MsRUFBUTtNQUNwRCxJQUFJLENBQUNBLFdBQVcsRUFBRTtRQUNoQjtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUNtZixZQUFZLENBQUMvc0IsS0FBSyxFQUFFO1FBQzNCLElBQUksQ0FBQ29KLE9BQU8sQ0FBQytMLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztRQUVoRDtNQUNGO01BRUF2SCxXQUFXLENBQUNvZixzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsWUFBTTtRQUNqRGxsQixHQUFHLENBQUMzSCxPQUFPLENBQUMsQ0FBQztNQUNmLENBQUMsQ0FBQztNQUVGMkgsR0FBRyxDQUFDMmtCLGtEQUFrRCxDQUFDLENBQUM7TUFDeEQza0IsR0FBRyxDQUFDcWtCLHlCQUF5QixDQUFDLENBQUM7TUFDL0Jya0IsR0FBRyxDQUFDOGpCLDJCQUEyQixDQUFDLENBQUM7TUFFakMsSUFBSSxDQUFDTCwyQkFBMkIsR0FBRyxJQUFJbHNCLHdFQUEwQixDQUFDLENBQUM7TUFFbkUsSUFBSSxDQUFDK0osT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsSUFBSSxDQUFDd2hCLDRCQUE0QixDQUFDO01BQ3RHLElBQUksQ0FBQ3poQixPQUFPLENBQUNDLElBQUksQ0FBQyx5REFBeUQsRUFBRSxJQUFJLENBQUN5aEIscUNBQXFDLENBQUM7TUFDeEgsSUFBSSxDQUFDMWhCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLElBQUksQ0FBQzRoQixnQ0FBZ0MsQ0FBQztNQUMvRyxJQUFJLENBQUM3aEIsT0FBTyxDQUFDQyxJQUFJLENBQUMsc0VBQXNFLEVBQUUsSUFBSSxDQUFDNmhCLHFDQUFxQyxDQUFDO01BRXJJLElBQUksQ0FBQzZCLFlBQVksQ0FBQy9zQixLQUFLLEdBQUcsSUFBSTtJQUNoQztFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9pdEIsSUFBSUEsQ0FBQ3JOLE9BQXNCLEVBQVE7TUFDeEMsSUFBSSxDQUFDQSxPQUFPLEVBQUU7UUFDWjtNQUNGO01BRUEsSUFBTXNOLDhCQUFtRixHQUFHdE4sT0FBTztNQUVuRyxJQUFJc04sOEJBQThCLENBQUN0ZixXQUFXLEVBQUU7UUFDOUM3TyxpRUFBVyxDQUFDb1EsV0FBVyxDQUFDK2QsOEJBQThCLENBQUN0ZixXQUFXLENBQUM7TUFDckU7TUFFQSxJQUFJZ1MsT0FBTyxDQUFDOE0sWUFBWSxFQUFFO1FBQ3hCcEMsZ0VBQVksQ0FBQzFmLEdBQUcsQ0FBQzVLLEtBQUssR0FBRzRmLE9BQU8sQ0FBQzhNLFlBQVk7TUFDL0M7TUFFQSxJQUFJOU0sT0FBTyxDQUFDdU4scUJBQXFCLEVBQUU7UUFDakM1TyxtRUFBcUIsQ0FBQzRPLHFCQUFxQixDQUFDbnRCLEtBQUssR0FBRzRmLE9BQU8sQ0FBQ3VOLHFCQUFxQjtNQUNuRjtNQUVBLElBQUl2TixPQUFPLENBQUNqRixjQUFjLElBQUl4QywwRUFBYyxDQUFDeUgsT0FBTyxDQUFDakYsY0FBYyxDQUFDLEVBQUU7UUFDcEU3UyxHQUFHLENBQUM2akIsZUFBZSxDQUFDM3JCLEtBQUssR0FBR3NELHdFQUFxQixDQUFDb1gseUNBQXlDLENBQUNrRixPQUFPLENBQUNqRixjQUFjLENBQUM7TUFDckg7TUFFQSxJQUFJaUYsT0FBTyxDQUFDOUgsWUFBWSxJQUFJdkUsd0RBQVksQ0FBQ3FNLE9BQU8sQ0FBQzlILFlBQVksQ0FBQyxFQUFFO1FBQzlELElBQUksQ0FBQzFPLE9BQU8sQ0FBQ3FLLFNBQVMsQ0FBQ21FLFlBQVksQ0FBQ3BVLG9FQUFtQixDQUFDeVUscUNBQXFDLENBQUMySCxPQUFPLENBQUM5SCxZQUFZLENBQUMsQ0FBQztNQUN0SDtNQUVBLElBQUk4SCxPQUFPLENBQUN3TixtQkFBbUIsSUFBSTdaLHdEQUFZLENBQUNxTSxPQUFPLENBQUN3TixtQkFBbUIsQ0FBQyxFQUFFO1FBQzVFLElBQU1DLGVBQWUsR0FBRyxJQUFJLENBQUNqa0IsT0FBTyxDQUFDaUwsU0FBUyxDQUFDclUsS0FBSyxDQUFDZ21CLElBQUksQ0FBQyxVQUFBN1MsUUFBUTtVQUFBLE9BQUlBLFFBQVEsWUFBWUssZ0VBQWU7UUFBQSxFQUFDO1FBRTFHLElBQUk2WixlQUFlLEVBQUU7VUFDbkIsSUFBSSxDQUFDamtCLE9BQU8sQ0FBQ2lMLFNBQVMsQ0FBQ2pCLE1BQU0sQ0FBQ2lhLGVBQWUsQ0FBQztRQUNoRDtRQUVBLElBQUl6TixPQUFPLENBQUN3TixtQkFBbUIsS0FBSyxLQUFLLEVBQUU7VUFDekMsSUFBSSxDQUFDaGtCLE9BQU8sQ0FBQ2lMLFNBQVMsQ0FBQzNULEdBQUcsQ0FBQyxJQUFJOFMsZ0VBQWUsQ0FBQ2hRLG9FQUFtQixDQUFDeVUscUNBQXFDLENBQUMySCxPQUFPLENBQUN3TixtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDekk7TUFDRjtNQUVBLElBQUksT0FBT3hOLE9BQU8sQ0FBQzBOLDRCQUE0QixLQUFLLFNBQVMsRUFBRTtRQUM3RCxJQUFJLENBQUN2Qyw2QkFBNkIsR0FBR25MLE9BQU8sQ0FBQzBOLDRCQUE0QjtNQUMzRTtNQUVBLElBQUksT0FBTzFOLE9BQU8sQ0FBQzJOLG1DQUFtQyxLQUFLLFNBQVMsRUFBRTtRQUNwRSxJQUFJLENBQUN2QyxvQ0FBb0MsR0FBR3BMLE9BQU8sQ0FBQzJOLG1DQUFtQztNQUN6RjtNQUVBLElBQUkzTixPQUFPLENBQUM0TixlQUFlLEVBQUU7UUFDM0IsSUFBSSxDQUFDckMsZ0JBQWdCLEdBQUd2TCxPQUFPLENBQUM0TixlQUFlO01BQ2pEO01BRUEsSUFBSTVOLE9BQU8sQ0FBQzZOLGlCQUFpQixFQUFFO1FBQzdCLElBQUksQ0FBQ3JDLGtCQUFrQixHQUFHeEwsT0FBTyxDQUFDNk4saUJBQWlCO01BQ3JEO01BRUEsSUFBSTdOLE9BQU8sQ0FBQzhOLFdBQVcsRUFBRTtRQUN2QixJQUFJLENBQUNyQyxZQUFZLEdBQUd6TCxPQUFPLENBQUM4TixXQUFXO01BQ3pDO0lBQ0Y7RUFBQztJQUFBNXRCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9HLE9BQU9BLENBQUEsRUFBUztNQUFBLElBQUF3dEIscUJBQUE7TUFDckI3bEIsR0FBRyxDQUFDaWxCLFlBQVksQ0FBQy9zQixLQUFLLEdBQUcsS0FBSztNQUM5QixDQUFBMnRCLHFCQUFBLE9BQUksQ0FBQ3BDLDJCQUEyQixjQUFBb0MscUJBQUEsdUJBQWhDQSxxQkFBQSxDQUFrQ3h0QixPQUFPLENBQUMsQ0FBQztNQUMzQyxJQUFJLENBQUNvckIsMkJBQTJCLEdBQUcsSUFBSTtJQUN6QztFQUFDO0lBQUF6ckIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3dhLGVBQWVBLENBQUNuQixHQUFXLEVBQVU7TUFDMUMsT0FBT1Usc0RBQVksQ0FBQ1MsZUFBZSxDQUFDbkIsR0FBRyxDQUFDO0lBQzFDO0VBQUM7QUFBQTtBQUFBdVUsSUFBQSxHQWpXa0I5bEIsR0FBRztBQUFBdkksaUZBQUEsQ0FBSHVJLEdBQUcsa0NBQ3dCb1AsMEVBQTRCLENBQUNwVCxlQUFlLENBQUMsdUNBQXVDLENBQUM7QUFBQXZFLGlGQUFBLENBRGhIdUksR0FBRywyQ0FFaUNvUCwwRUFBNEIsQ0FBQ3BULGVBQWUsQ0FBQyxnREFBZ0QsQ0FBQztBQUFBdkUsaUZBQUEsQ0FGbEl1SSxHQUFHLG1DQUd5QixJQUFJO0FBQUF2SSxpRkFBQSxDQUhoQ3VJLEdBQUcsMENBSWdDLElBQUk7QUFBQXZJLGlGQUFBLENBSnZDdUksR0FBRyxzQ0FLNEJvUCwwRUFBNEIsQ0FBQ3BULGVBQWUsQ0FBQyw0Q0FBNEMsQ0FBQztBQUFBdkUsaUZBQUEsQ0FMekh1SSxHQUFHLDJDQU1pQ29QLDBFQUE0QixDQUFDcFQsZUFBZSxDQUFDLGtEQUFrRCxDQUFDO0FBQUF2RSxpRkFBQSxDQU5wSXVJLEdBQUc7QUFBQXZJLGlGQUFBLENBQUh1SSxHQUFHO0FBQUF2SSxpRkFBQSxDQUFIdUksR0FBRztBQUFBdkksaUZBQUEsQ0FBSHVJLEdBQUc7QUFBQXZJLGlGQUFBLENBQUh1SSxHQUFHLGtCQVd5QixJQUFJNUksbURBQU8sQ0FBUyxFQUFFLENBQUM7QUFBQUssaUZBQUEsQ0FYbkR1SSxHQUFHLG1CQVkwQixJQUFJNUksbURBQU8sQ0FBUywyQ0FBMkMsQ0FBQztBQUFBSyxpRkFBQSxDQVo3RnVJLEdBQUcscURBYTJDLENBQUM7QUFBQXZJLGlGQUFBLENBYi9DdUksR0FBRyxxQkFjb0MsSUFBSTVJLG1EQUFPLENBQWlCcUUsa0VBQWdCLENBQUNVLHFCQUFxQixDQUFDO0FBQUExRSxpRkFBQSxDQWQxR3VJLEdBQUc7QUFBQXZJLGlGQUFBLENBQUh1SSxHQUFHO0FBQUF2SSxpRkFBQSxDQUFIdUksR0FBRywwQkFpQjJDLElBQUk1SSxtREFBTyxDQUFDNEwsbUVBQWEsQ0FBQ1EsbUJBQW1CLENBQUM7QUFBQS9MLGlGQUFBLENBakI1RnVJLEdBQUcsY0FrQjhCLElBQUk1SSxtREFBTyxDQUFTLEVBQUUsQ0FBQztBQUFBSyxpRkFBQSxDQWxCeER1SSxHQUFHLHNCQW1CNkJzSixxREFBTyxDQUFDQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQUE5UixpRkFBQSxDQW5CbER1SSxHQUFHLHNCQW9CMkIsSUFBSXRJLElBQUksQ0FBQyxDQUFDO0FBQUFELGlGQUFBLENBcEJ4Q3VJLEdBQUcsYUFxQnFCQyw2REFBYSxDQUFDRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQUEzSSxpRkFBQSxDQXJCdER1SSxHQUFHLGtCQXNCbUMsSUFBSTVJLG1EQUFPLENBQVUsS0FBSyxDQUFDO0FBQUFLLGlGQUFBLENBdEJqRXVJLEdBQUcsMEJBdUJtRCxJQUFJM0ksMkRBQWUsQ0FBVTJJLElBQUcsQ0FBQ2lsQixZQUFZLENBQUM7QUFBQXh0QixpRkFBQSxDQXZCcEd1SSxHQUFHLDJCQXdCbUQsSUFBSTNJLDJEQUFlLENBQVNtckIsZ0VBQVksQ0FBQzFmLEdBQUcsQ0FBQztBQUFBckwsaUZBQUEsQ0F4Qm5HdUksR0FBRyxvQ0F5QjRFLElBQUkzSSwyREFBZSxDQUF5Qm9mLG1FQUFxQixDQUFDNE8scUJBQXFCLENBQUM7QUF6QnBLO0FBd1d4QnB1QixpRUFBVyxDQUFDd1EsU0FBUyxDQUFDekgsR0FBRyxDQUFDZ2xCLE1BQU0sQ0FBQy9uQixJQUFJLENBQUMrQyxHQUFHLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3paM0M7QUFDQTtBQUNBOztBQUVxRDtBQUFBLElBRWhDaVMsWUFBWTtFQUFBLFNBQUFBLGFBQUE7SUFBQXphLGlGQUFBLE9BQUF5YSxZQUFBO0VBQUE7RUFBQSxPQUFBbGEsOEVBQUEsQ0FBQWthLFlBQUE7SUFBQWphLEdBQUE7SUFBQUUsS0FBQSxFQUMvQixTQUFPd2EsZUFBZUEsQ0FBQ25CLEdBQVcsRUFBVTtNQUMxQyxJQUFJO1FBQ0YsSUFBTStRLE9BQU8sR0FBRyxJQUFJcnJCLGdFQUFXLENBQUNpQixLQUFLLENBQUNvRixHQUFHLENBQUNpVSxHQUFHLENBQUM7UUFDOUMsSUFBTXdVLFFBQVEsR0FBR3pELE9BQU8sQ0FBQ3RiLFFBQVEsQ0FBQ3pNLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFNUMsUUFBUStuQixPQUFPLENBQUMwRCxRQUFRO1VBQ3RCLEtBQUssS0FBSztZQUNSMUQsT0FBTyxDQUFDMEQsUUFBUSxHQUFHLE9BQU87WUFFMUI7VUFDRixLQUFLLE1BQU07WUFDVDFELE9BQU8sQ0FBQzBELFFBQVEsR0FBRyxRQUFRO1lBRTNCO1VBRUY7WUFDRTtRQUNKO1FBRUEsSUFBSUQsUUFBUSxDQUFDNWpCLE1BQU0sS0FBSyxDQUFDLElBQ3BCNGpCLFFBQVEsQ0FBQzVqQixNQUFNLEtBQUssQ0FBQyxJQUFJNGpCLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDNWpCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSTRqQixRQUFRLENBQUNBLFFBQVEsQ0FBQzVqQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNBLE1BQU0sSUFBSSxDQUFFLEVBQ25IO1VBQ0E0akIsUUFBUSxDQUFDRSxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQy9CLENBQUMsTUFBTSxJQUFJRixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN2akIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJdWpCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJSCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN4cUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJd3FCLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7VUFDbklBLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlO1FBQy9CLENBQUMsTUFBTSxJQUFJQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUN2akIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJdWpCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQzVFO1FBQUEsQ0FDRCxNQUFNO1VBQ0xILFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXO1FBQzNCO1FBRUF6RCxPQUFPLENBQUN0YixRQUFRLEdBQUcrZSxRQUFRLENBQUMvYSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRXJDLFVBQUFsUSxNQUFBLENBQVV3bkIsT0FBTyxDQUFDQyxNQUFNO01BQzFCLENBQUMsQ0FBQyxPQUFPaGdCLENBQUMsRUFBRTtRQUNWLE9BQU9nUCxHQUFHO01BQ1o7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Q0g7QUFDQTtBQUNBOztBQUtPLElBQUs0VSxZQUFZLDBCQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBQSxPQUFaQSxZQUFZO0FBQUE7QUFLakIsSUFBS0MsV0FBVywwQkFBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFBLE9BQVhBLFdBQVc7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1p2QjtBQUNBO0FBQ0E7O0FBRXdEO0FBQ0Q7QUFFQTtBQUNUO0FBQ2lCO0FBRXRDO0FBQytDO0FBRTlCO0FBQ21CO0FBQ2Q7QUFFUztBQUNJO0FBRWdCO0FBQ2pCO0FBSVI7QUFDNkI7QUFDVTtBQUNTO0FBQ0s7QUFDbkM7QUFDbEI7QUFDa0M7QUFFOUI7QUFDUjtBQUNNO0FBQ0s7QUFFVTtBQUVwRSxJQUFNZSw4QkFBOEIsR0FBRyxvQkFBb0I7QUFDM0QsSUFBTUMseUNBQXlDLEdBQUcsSUFBSTtBQUN0RCxJQUFNQyxvQ0FBb0MsR0FBRyxLQUFLO0FBQUMsSUFVOUJDLE9BQU87RUFzQzFCLFNBQUFBLFFBQVlDLFlBQThCLEVBQUUxbEIsS0FBdUIsRUFBRWlXLE9BQXdCLEVBQUU7SUFBQSxJQUFBdmYsS0FBQTtJQUFBZixpRkFBQSxPQUFBOHZCLE9BQUE7SUFBQTd2QixpRkFBQSxrQkFyQzNEd0ksNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUFBM0ksaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFzQ3BFLElBQU0ySyxTQUFTLEdBQUdULGlFQUFjLENBQUNDLFVBQVUsQ0FBQ0MsS0FBSyxDQUFDO0lBQ2xELElBQU0ybEIscUJBQTRDLEdBQUc7TUFBQ0MsU0FBUyxFQUFFM1AsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUyUDtJQUFTLENBQUM7SUFDcEYsSUFBTUMsNkJBQTRELEdBQUc7TUFDbkVDLG9CQUFvQixFQUFFdmxCLFNBQVMsQ0FBQ1csWUFBWSxDQUFDeEgsUUFBUSxDQUFDLG9CQUFvQixDQUFDO01BQzNFcXNCLDJCQUEyQixFQUFFeGxCLFNBQVMsQ0FBQ1csWUFBWSxDQUFDeEgsUUFBUSxDQUFDLDRCQUE0QixDQUFDO01BQzFGc3NCLDRCQUE0QixFQUFFL1AsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUrUCw0QkFBNEI7TUFDbkVDLDRCQUE0QixFQUFFaFEsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVnUSw0QkFBNEI7TUFDbkVDLHNCQUFzQixFQUFFalEsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVpUSxzQkFBc0I7TUFDdkRDLHNCQUFzQixFQUFFbFEsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVrUTtJQUNuQyxDQUFDO0lBRUQsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSXhCLDhEQUFZLENBQUM1a0IsS0FBSyxDQUFDO0lBQzVDLElBQUksQ0FBQ3FtQixlQUFlLEdBQUcsSUFBSXhCLGdFQUFjLENBQUNjLHFCQUFxQixDQUFDO0lBQ2hFLElBQUksQ0FBQ1csc0JBQXNCLEdBQUcsSUFBSXJCLHVFQUFxQixDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDc0IsdUJBQXVCLEdBQUcsSUFBSXZCLHdFQUFzQixDQUFDYSw2QkFBNkIsQ0FBQztJQUN4RixJQUFJLENBQUNXLGFBQWEsR0FBRyxJQUFJdEIsOERBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQzFULG1CQUFtQixHQUFHLElBQUlMLGdFQUFrQixDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDc1YsaUJBQWlCLEdBQUc1d0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUM0d0IsdUJBQXVCLEdBQUcsSUFBSWx4QiwyREFBZSxDQUF5QixJQUFJLENBQUM4d0Isc0JBQXNCLENBQUNsUixjQUFjLENBQUM7SUFDdEgsSUFBSSxDQUFDdVIsY0FBYyxHQUFHLElBQUlueEIsMkRBQWUsQ0FBZSxJQUFJLENBQUM2d0IsZUFBZSxDQUFDTyxLQUFLLENBQUM7SUFDbkYsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJcnhCLDJEQUFlLENBQVUsSUFBSSxDQUFDNndCLGVBQWUsQ0FBQ1MsU0FBUyxDQUFDO0lBQ3RGLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsSUFBSXZ4QiwyREFBZSxDQUFVLElBQUksQ0FBQzZ3QixlQUFlLENBQUNXLFVBQVUsQ0FBQztJQUN4RixJQUFJLENBQUNDLHNCQUFzQixHQUFHLElBQUl6eEIsMkRBQWUsQ0FBVSxJQUFJLENBQUM0d0IsYUFBYSxDQUFDYyxhQUFhLENBQUM7SUFDNUYsSUFBSSxDQUFDQyxtQkFBbUIsR0FBRyxJQUFJM3hCLDJEQUFlLENBQVUsSUFBSSxDQUFDNndCLGVBQWUsQ0FBQ2UsVUFBVSxDQUFDO0lBQ3hGLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUk3eEIsMkRBQWUsQ0FBVSxJQUFJLENBQUM2d0IsZUFBZSxDQUFDaUIsTUFBTSxDQUFDO0lBQ2hGLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSS94QiwyREFBZSxDQUFVLElBQUksQ0FBQzZ3QixlQUFlLENBQUNtQixPQUFPLENBQUM7SUFDbEYsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxJQUFJanlCLDJEQUFlLENBQVUsSUFBSSxDQUFDNndCLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQztJQUNsRixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUlueUIsMkRBQWUsQ0FBVSxJQUFJLENBQUM2d0IsZUFBZSxDQUFDdUIsT0FBTyxDQUFDO0lBQ2xGLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSXJ5QiwyREFBZSxDQUFVLElBQUksQ0FBQzZ3QixlQUFlLENBQUN5QixPQUFPLENBQUM7SUFDbEYsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJdnlCLDJEQUFlLENBQVMsSUFBSSxDQUFDNndCLGVBQWUsQ0FBQ1QsU0FBUyxDQUFDO0lBQ3JGLElBQUksQ0FBQ29DLFlBQVksR0FBRyxJQUFJeHlCLDJEQUFlLENBQXFCLElBQUksQ0FBQzZ3QixlQUFlLENBQUM0QixHQUFHLENBQUM7SUFDckYsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxJQUFJMXlCLDJEQUFlLENBQVMsSUFBSSxDQUFDNndCLGVBQWUsQ0FBQzhCLFlBQVksQ0FBQztJQUMzRixJQUFJLENBQUNDLG1CQUFtQixHQUFHLElBQUk1eUIsMkRBQWUsQ0FBWSxJQUFJLENBQUM2d0IsZUFBZSxDQUFDZ0MsVUFBVSxDQUFDO0lBQzFGLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsSUFBSTl5QiwyREFBZSxDQUFTLElBQUksQ0FBQzZ3QixlQUFlLENBQUNrQyxZQUFZLENBQUM7SUFDM0YsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxJQUFJaHpCLDJEQUFlLENBQWtCLElBQUksQ0FBQzZ3QixlQUFlLENBQUNvQyxRQUFRLENBQUM7SUFDNUYsSUFBSSxDQUFDQyxlQUFlLEdBQUcsSUFBSWx6QiwyREFBZSxDQUFpQixJQUFJLENBQUM2d0IsZUFBZSxDQUFDc0MsTUFBTSxDQUFDO0lBQ3ZGLElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcsSUFBSXB6QiwyREFBZSxDQUE4QixJQUFJLENBQUM2d0IsZUFBZSxDQUFDL00sYUFBYSxDQUFDO0lBQ2xILElBQUksQ0FBQ3VQLG9CQUFvQixHQUFHLElBQUlyekIsMkRBQWUsQ0FBcUIsSUFBSSxDQUFDOHdCLHNCQUFzQixDQUFDL08sV0FBVyxDQUFDO0lBRTVHLElBQU13TCxZQUFZLEdBQUcsQ0FBQ3hpQixTQUFTLENBQUNVLEdBQUcsSUFBSTlDLDZDQUFHLENBQUM0a0IsWUFBWSxDQUFDMXNCLEtBQUssRUFBRWlRLFFBQVEsQ0FBQyxDQUFDO0lBRXpFbkksNkNBQUcsQ0FBQzZSLE9BQU8sQ0FBQzNaLEtBQUssR0FBR2tLLFNBQVMsQ0FBQ3lQLE9BQU8sSUFBSTdSLDZDQUFHLENBQUM2UixPQUFPLENBQUMzWixLQUFLO0lBQzFEc3FCLGdFQUFZLENBQUMxZixHQUFHLENBQUM1SyxLQUFLLEdBQUcwc0IsWUFBWTtJQUNyQyxJQUFJLENBQUNwQixlQUFlLEdBQUdyUixnRUFBYyxDQUFDQyxpQkFBaUIsQ0FBQ3dTLFlBQVksQ0FBQztJQUNyRSxJQUFJLENBQUMrRixpQkFBaUIsR0FBRyxJQUFJbkUsZ0VBQWdCLENBQUN4bUIsNkNBQUcsQ0FBQ0csWUFBWSxFQUFFLElBQUksQ0FBQ3FqQixlQUFlLENBQUM7SUFDckYsSUFBSSxDQUFDMEUsZUFBZSxDQUFDMEMsa0JBQWtCLENBQUNoeUIsR0FBRyxDQUFDLElBQUksQ0FBQyt4QixpQkFBaUIsQ0FBQztJQUNuRSxJQUFJLENBQUNFLDRCQUE0QixHQUFHLElBQUksQ0FBQ0MsMEJBQTBCLENBQUM3dEIsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5RSxJQUFJLENBQUNzcUIsWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ3dELDhCQUE4QixHQUFHLElBQUkvRCwrRUFBNkIsQ0FBQyxDQUFDO0lBQ3pFLElBQUksQ0FBQ2dFLCtCQUErQixDQUFDNW9CLFNBQVMsQ0FBQztJQUMvQyxJQUFJLENBQUM2b0Isd0NBQXdDLEdBQUcsSUFBSTV6QiwyREFBZSxDQUFVLElBQUksQ0FBQzB6Qiw4QkFBOEIsQ0FBQ0csU0FBUyxDQUFDO0lBQzNILElBQUksQ0FBQ0Msc0NBQXNDLEdBQUcsSUFBSTl6QiwyREFBZSxDQUF1QyxJQUFJLENBQUMwekIsOEJBQThCLENBQUNLLDZCQUE2QixDQUFDO0lBQzFLLElBQUksQ0FBQ0MsdUNBQXVDLEdBQUcsSUFBSWgwQiwyREFBZSxDQUF3QyxJQUFJLENBQUMwekIsOEJBQThCLENBQUNPLDhCQUE4QixDQUFDO0lBRTdLLElBQUksQ0FBQ3BELGVBQWUsQ0FBQzBDLGtCQUFrQixDQUFDaHlCLEdBQUcsQ0FDekMsSUFBSSxDQUFDc3ZCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDOWYsU0FBUyxDQUFDLFVBQUE4ZixZQUFZLEVBQUk7TUFDMURodkIsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ3FELG1CQUFtQixDQUFDbHpCLE9BQU8sQ0FBQyxDQUFDO01BRWxELElBQUksQ0FBQ2t2QixZQUFZLEVBQUU7UUFDakI7TUFDRjtNQUVBaHZCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNxRCxtQkFBbUIsQ0FBQzN5QixHQUFHLENBQUNMLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNzQyxNQUFNLENBQUMvaUIsU0FBUyxDQUFDLFVBQUEraUIsTUFBTSxFQUFJO1FBQzNGLElBQUlqeUIsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ3NELGNBQWMsRUFBRTtVQUN2Q2p6QixLQUFJLENBQUMydkIsZUFBZSxDQUFDc0QsY0FBYyxDQUFDbnpCLE9BQU8sQ0FBQyxDQUFDO1FBQy9DO1FBRUEsSUFBSSxDQUFDbXlCLE1BQU0sRUFBRTtVQUNYO1FBQ0Y7UUFFQSxJQUFJLENBQUNqeUIsS0FBSSxDQUFDZ3ZCLFlBQVksRUFBRTtVQUN0QjtRQUNGO1FBRUEsSUFBSWh2QixLQUFJLENBQUNndkIsWUFBWSxDQUFDa0UsT0FBTyxFQUFFO1VBQzdCbHpCLEtBQUksQ0FBQ2d2QixZQUFZLENBQUNrRSxPQUFPLENBQUMxWixTQUFTLEdBQUcvUiw2Q0FBRyxDQUFDeVMsZUFBZTtVQUN6RGxhLEtBQUksQ0FBQ2d2QixZQUFZLENBQUNrRSxPQUFPLENBQUNockIsUUFBUSxHQUFHbEksS0FBSSxDQUFDa0ksUUFBUTtRQUNwRDtRQUVBbEksS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ3NELGNBQWMsR0FBRyxJQUFJakYsOERBQWMsQ0FBQ2h1QixLQUFJLENBQUNrSSxRQUFRLEVBQUVULDZDQUFHLENBQUNHLFlBQVksRUFBRTVILEtBQUksQ0FBQyt2QixpQkFBaUIsRUFBRS92QixLQUFJLENBQUNpckIsZUFBZSxDQUFDO1FBQ3ZJanJCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNzRCxjQUFjLENBQUNFLCtCQUErQixDQUFDbnpCLEtBQUksQ0FBQ2d2QixZQUFZLENBQUM7UUFDdEZodkIsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ3NELGNBQWMsQ0FBQ0csMkJBQTJCLENBQUNwekIsS0FBSSxDQUFDZ3ZCLFlBQVksQ0FBQztRQUVsRixJQUFJaHZCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEtBQUtvdUIsc0RBQVksQ0FBQ3NGLE9BQU8sRUFBRTtVQUM3RCxJQUFNMVgsT0FBTyxHQUFHM2IsS0FBSSxDQUFDc3pCLGdCQUFnQixDQUFDLENBQUM7UUFDekM7TUFDRixDQUFDLENBQUMsQ0FBQztNQUVIdHpCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUMwQyxrQkFBa0IsQ0FBQ2h5QixHQUFHLENBQUNMLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNxRCxtQkFBbUIsQ0FBQztJQUN2RixDQUFDLENBQUMsQ0FBQztJQUNMLElBQUksQ0FBQ3JELGVBQWUsQ0FBQzBDLGtCQUFrQixDQUFDaHlCLEdBQUcsQ0FDekMsSUFBSSxDQUFDc3ZCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDaGhCLFNBQVMsQ0FBQyxVQUFBZ2hCLEtBQUssRUFBSTtNQUM1QyxJQUFJbHdCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUM0RCx3QkFBd0IsRUFBRTtRQUNqRDcwQixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDd08sWUFBWSxDQUFDbk8sS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQzRELHdCQUF3QixDQUFDO01BQy9FO01BRUEsSUFBSSxDQUFDdnpCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNrQyxZQUFZLENBQUNseUIsS0FBSyxFQUFFO1FBQzVDO01BQ0Y7TUFFQSxJQUFJdXdCLEtBQUssS0FBS25DLHNEQUFZLENBQUN5RixPQUFPLEVBQUU7UUFDbEM7TUFDRjtNQUVBeHpCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUM0RCx3QkFBd0IsR0FBRzcwQixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07UUFDakYzRSxLQUFJLENBQUMydkIsZUFBZSxDQUFDa0MsWUFBWSxDQUFDbHlCLEtBQUssR0FBRyxDQUFDO01BQzdDLENBQUMsRUFBRWt2Qix5Q0FBeUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLElBQUksQ0FBQ2MsZUFBZSxDQUFDMEMsa0JBQWtCLENBQUNoeUIsR0FBRyxDQUN6QyxJQUFJLENBQUNzdkIsZUFBZSxDQUFDZ0MsVUFBVSxDQUFDemlCLFNBQVMsQ0FBQyxVQUFBeWlCLFVBQVUsRUFBSTtNQUN0RCxJQUFJM3hCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNzRCxjQUFjLEVBQUU7UUFDdkNqekIsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ3NELGNBQWMsQ0FBQ1Esd0JBQXdCLENBQUM5QixVQUFVLENBQUMvaEIsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUNyRjtJQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsSUFBSSxDQUFDK2YsZUFBZSxDQUFDMEMsa0JBQWtCLENBQUNoeUIsR0FBRyxDQUN6QyxJQUFJLENBQUNzdkIsZUFBZSxDQUFDOEIsWUFBWSxDQUFDdmlCLFNBQVMsQ0FBQyxVQUFBdWlCLFlBQVksRUFBSTtNQUMxRCxJQUFJQSxZQUFZLElBQUl6eEIsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQ3B5QixLQUFLLElBQUlLLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNzQyxNQUFNLENBQUN0eUIsS0FBSyxFQUFFO1FBQzVGLElBQU0rekIscUJBQXFCLEdBQUd2MEIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHWSxLQUFJLENBQUMydkIsZUFBZSxDQUFDZ0UscUJBQXFCLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLElBQU1qWSxPQUFPLEdBQUczYixLQUFJLENBQUMydkIsZUFBZSxDQUFDb0MsUUFBUSxDQUFDcHlCLEtBQUssQ0FBQ2swQixZQUFZLENBQzlEN3pCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNzQyxNQUFNLENBQUN0eUIsS0FBSyxFQUNqQyt6QixxQkFBcUIsRUFDckJqQyxZQUFZLEVBQ1o3RCwwRUFBWSxDQUFDa0csSUFBSSxFQUNqQmpHLHlFQUFXLENBQUNrRyxNQUNkLENBQUMsU0FDTyxDQUFDLFVBQUEvcEIsQ0FBQyxFQUFJO1VBQ1ZoSyxLQUFJLENBQUMrSSxPQUFPLENBQUNTLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRVEsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQztNQUNOO0lBQ0YsQ0FBQyxDQUNILENBQUM7SUFFRCxJQUFNZ3FCLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUEsRUFBUztNQUNuQyxJQUFJaDBCLEtBQUksQ0FBQzJ2QixlQUFlLENBQUNzQyxNQUFNLENBQUN0eUIsS0FBSyxJQUFJSyxLQUFJLENBQUMydkIsZUFBZSxDQUFDb0MsUUFBUSxDQUFDcHlCLEtBQUssRUFBRTtRQUM1RSxJQUFNZ2MsT0FBTyxHQUFHM2IsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQ3B5QixLQUFLLENBQUNxMEIsc0JBQXNCLENBQUNoMEIsS0FBSSxDQUFDMnZCLGVBQWUsQ0FBQ3NDLE1BQU0sQ0FBQ3R5QixLQUFLLEVBQUUscUNBQXFDLENBQUM7TUFDdEo7SUFDRixDQUFDO0lBRURqQixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ3RCLHNCQUFzQixDQUFDLGNBQWMsRUFBRXFILHNCQUFzQixDQUFDO0lBRWhGLElBQUksQ0FBQ3JFLGVBQWUsQ0FBQzBDLGtCQUFrQixDQUFDaHlCLEdBQUcsQ0FBQyxJQUFJMUIseURBQVUsQ0FBQyxZQUFNO01BQy9ERCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDczBCLHlCQUF5QixDQUFDLGNBQWMsRUFBRUQsc0JBQXNCLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUNFLEtBQUssQ0FBQyxDQUFDO0VBQ2Q7RUFBQyxPQUFBMTBCLDhFQUFBLENBQUF1dkIsT0FBQTtJQUFBdHZCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUMsT0FBTyxJQUFJLENBQUNpd0IsZUFBZSxDQUFDWCxZQUFZLENBQUNydkIsS0FBSztJQUNoRCxDQUFDO0lBQUFvWixHQUFBLEVBRUQsU0FBQUEsSUFBaUJpVyxZQUE4QixFQUFFO01BQy9DLElBQUksSUFBSSxDQUFDVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLEVBQUU7UUFDM0MsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUssQ0FBQzBILG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUNpckIsNEJBQTRCLENBQUM7UUFDNUcsSUFBSSxDQUFDM0MsZUFBZSxDQUFDWCxZQUFZLENBQUNydkIsS0FBSyxDQUFDMEgsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDaXJCLDRCQUE0QixDQUFDO1FBQ2hILElBQUksQ0FBQzNDLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUssQ0FBQzBILG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUNpckIsNEJBQTRCLENBQUM7UUFFeEcsSUFBSSxJQUFJLENBQUMzQyxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN1ekIsT0FBTyxFQUFFO1VBQ25ELElBQUksQ0FBQ3ZELGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUssQ0FBQ3V6QixPQUFPLENBQUMxWixTQUFTLEdBQUcsRUFBRTtVQUM5RCxJQUFJLENBQUNtVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN1ekIsT0FBTyxDQUFDaHJCLFFBQVEsR0FBRyxFQUFFO1FBQy9EO1FBRUEsSUFBSSxDQUFDeW5CLGVBQWUsQ0FBQ3FELG1CQUFtQixDQUFDbHpCLE9BQU8sQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQzZ2QixlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN3MEIsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDeEUsZUFBZSxDQUFDWCxZQUFZLENBQUNydkIsS0FBSyxDQUFDeTBCLFNBQVMsR0FBRyxJQUFJO01BQzFEO01BRUEsSUFBSSxDQUFDekUsZUFBZSxDQUFDUyxTQUFTLENBQUN6d0IsS0FBSyxHQUFHLEtBQUs7TUFDNUMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ1csVUFBVSxDQUFDM3dCLEtBQUssR0FBRyxLQUFLO01BQzdDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNtQixPQUFPLENBQUNueEIsS0FBSyxHQUFHLEtBQUs7TUFDMUMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3J4QixLQUFLLEdBQUcsS0FBSztNQUUxQyxJQUFJLElBQUksQ0FBQ2d3QixlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEtBQUtvdUIsc0RBQVksQ0FBQ3NHLFlBQVksRUFBRTtRQUNsRSxJQUFJLENBQUMxRSxlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQ3NGLE9BQU87TUFDekQ7TUFFQSxJQUFJLENBQUMxRCxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLEdBQUdxdkIsWUFBWTtNQUV0RCxJQUFJLElBQUksQ0FBQ1csZUFBZSxDQUFDWCxZQUFZLENBQUNydkIsS0FBSyxFQUFFO1FBQzNDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN3SCxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDbXJCLDRCQUE0QixDQUFDO1FBQ3pHLElBQUksQ0FBQzNDLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUssQ0FBQ3dILGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQ21yQiw0QkFBNEIsQ0FBQztRQUM3RyxJQUFJLENBQUMzQyxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN3SCxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDbXJCLDRCQUE0QixDQUFDO01BQ3ZHO0lBQ0Y7RUFBQztJQUFBN3lCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE0eUIsMEJBQTBCQSxDQUFBLEVBQVM7TUFDekMsSUFBTXZELFlBQVksR0FBRyxJQUFJLENBQUNXLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUs7TUFFNUQsSUFBSXF2QixZQUFZLEVBQUU7UUFDaEIsSUFBSSxJQUFJLENBQUMyQyxVQUFVLENBQUNoeUIsS0FBSyxDQUFDMjBCLEtBQUssS0FBS3RGLFlBQVksQ0FBQ3VGLFVBQVUsSUFBSSxJQUFJLENBQUM1QyxVQUFVLENBQUNoeUIsS0FBSyxDQUFDNjBCLE1BQU0sS0FBS3hGLFlBQVksQ0FBQ3lGLFdBQVcsRUFBRTtVQUN4SCxJQUFJLENBQUM5RSxlQUFlLENBQUNnQyxVQUFVLENBQUNoeUIsS0FBSyxHQUFHLElBQUltdUIsd0RBQVMsQ0FBQ2tCLFlBQVksQ0FBQ3VGLFVBQVUsRUFBRXZGLFlBQVksQ0FBQ3lGLFdBQVcsQ0FBQztRQUMxRztNQUNGLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQzlFLGVBQWUsQ0FBQ2dDLFVBQVUsQ0FBQ2h5QixLQUFLLEdBQUdtdUIsd0RBQVMsQ0FBQzRHLEtBQUs7TUFDekQ7SUFDRjtFQUFDO0lBQUFqMUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUksQ0FBQ2d3QixhQUFhLENBQUNwbUIsS0FBSyxDQUFDM0osS0FBSztJQUN2QyxDQUFDO0lBQUFvWixHQUFBLEVBRUQsU0FBQUEsSUFBVXpQLEtBQXVCLEVBQUU7TUFDakMsSUFBSSxDQUFDcW1CLGVBQWUsQ0FBQ2dGLFdBQVcsQ0FBQzcwQixPQUFPLENBQUMsQ0FBQztNQUUxQyxJQUFJLENBQUM0dkIsYUFBYSxDQUFDcG1CLEtBQUssQ0FBQzNKLEtBQUssR0FBRzJKLEtBQUs7TUFDdEMsSUFBSSxDQUFDb21CLGFBQWEsQ0FBQ2MsYUFBYSxDQUFDN3dCLEtBQUssR0FBRyxLQUFLO01BRTlDLElBQU1rSyxTQUFTLEdBQUdULGlFQUFjLENBQUNDLFVBQVUsQ0FBQyxJQUFJLENBQUNxbUIsYUFBYSxDQUFDcG1CLEtBQUssQ0FBQzNKLEtBQUssQ0FBQztNQUMzRSxJQUFNMHNCLFlBQVksR0FBRyxDQUFDeGlCLFNBQVMsQ0FBQ1UsR0FBRyxJQUFJOUMsNkNBQUcsQ0FBQzRrQixZQUFZLENBQUMxc0IsS0FBSyxFQUFFaVEsUUFBUSxDQUFDLENBQUM7TUFFekVuSSw2Q0FBRyxDQUFDNlIsT0FBTyxDQUFDM1osS0FBSyxHQUFHa0ssU0FBUyxDQUFDeVAsT0FBTyxJQUFJN1IsNkNBQUcsQ0FBQzZSLE9BQU8sQ0FBQzNaLEtBQUs7TUFDMURzcUIsZ0VBQVksQ0FBQzFmLEdBQUcsQ0FBQzVLLEtBQUssR0FBRzBzQixZQUFZO01BRXJDLElBQUksQ0FBQ3BCLGVBQWUsR0FBR3JSLGdFQUFjLENBQUNDLGlCQUFpQixDQUFDd1MsWUFBWSxDQUFDO01BRXJFLElBQUksQ0FBQ3dELHVCQUF1QixDQUFDVCxvQkFBb0IsQ0FBQ3p2QixLQUFLLEdBQUdrSyxTQUFTLENBQUNXLFlBQVksQ0FBQ3hILFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztNQUMvRyxJQUFJLENBQUM2c0IsdUJBQXVCLENBQUNSLDJCQUEyQixDQUFDMXZCLEtBQUssR0FBR2tLLFNBQVMsQ0FBQ1csWUFBWSxDQUFDeEgsUUFBUSxDQUFDLDRCQUE0QixDQUFDO01BRTlILElBQUksQ0FBQ3l2QiwrQkFBK0IsQ0FBQzVvQixTQUFTLENBQUM7TUFFL0MsSUFBSSxDQUFDcXFCLEtBQUssQ0FBQyxDQUFDO0lBQ2Q7RUFBQztJQUFBejBCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEQ7TUFDNUQsT0FBTyxJQUFJLENBQUNzd0IsdUJBQXVCO0lBQ3JDO0VBQUM7SUFBQXZ3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJDO01BQ3pDLE9BQU8sSUFBSSxDQUFDdXdCLGNBQWM7SUFDNUI7RUFBQztJQUFBeHdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEM7TUFDeEMsT0FBTyxJQUFJLENBQUN5d0Isa0JBQWtCO0lBQ2hDO0VBQUM7SUFBQTF3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJDO01BQ3pDLE9BQU8sSUFBSSxDQUFDMndCLG1CQUFtQjtJQUNqQztFQUFDO0lBQUE1d0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPLElBQUksQ0FBQzZ3QixzQkFBc0I7SUFDcEM7RUFBQztJQUFBOXdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUMrd0IsbUJBQW1CO0lBQ2pDO0VBQUM7SUFBQWh4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVDO01BQ3JDLE9BQU8sSUFBSSxDQUFDaXhCLGVBQWU7SUFDN0I7RUFBQztJQUFBbHhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUNteEIsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQXB4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sSUFBSSxDQUFDcXhCLGdCQUFnQjtJQUM5QjtFQUFDO0lBQUF0eEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQ3V4QixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBeHhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUN5eEIsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQTF4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU8sSUFBSSxDQUFDMnhCLGtCQUFrQjtJQUNoQztFQUFDO0lBQUE1eEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRDtNQUNsRCxPQUFPLElBQUksQ0FBQzR4QixZQUFZO0lBQzFCO0VBQUM7SUFBQTd4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJCO01BQ3pCLE9BQU8sSUFBSSxDQUFDOHhCLHFCQUFxQixDQUFDN3hCLEtBQUs7SUFDekM7RUFBQztJQUFBRixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTZDO01BQzNDLE9BQU8sSUFBSSxDQUFDZ3lCLG1CQUFtQjtJQUNqQztFQUFDO0lBQUFqeUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxPQUFPLElBQUksQ0FBQ2t5QixxQkFBcUI7SUFDbkM7RUFBQztJQUFBbnlCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUQ7TUFDL0MsT0FBTyxJQUFJLENBQUNveUIsaUJBQWlCO0lBQy9CO0VBQUM7SUFBQXJ5QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU8sSUFBSSxDQUFDc3lCLGVBQWU7SUFDN0I7RUFBQztJQUFBdnlCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUI7TUFDckIsT0FBTyxJQUFJLENBQUNpd0IsZUFBZSxDQUFDem5CLFFBQVE7SUFDdEM7RUFBQztJQUFBekksR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFrRTtNQUNoRSxPQUFPLElBQUksQ0FBQ3d5QixzQkFBc0I7SUFDcEM7RUFBQztJQUFBenlCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUQ7TUFDckQsT0FBTyxJQUFJLENBQUN5eUIsb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQTF5QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdFO01BQzlELE9BQU8sSUFBSSxDQUFDZ3pCLHdDQUF3QztJQUN0RDtFQUFDO0lBQUFqekIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyRjtNQUN6RixPQUFPLElBQUksQ0FBQ2t6QixzQ0FBc0M7SUFDcEQ7RUFBQztJQUFBbnpCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkY7TUFDM0YsT0FBTyxJQUFJLENBQUNvekIsdUNBQXVDO0lBQ3JEO0VBQUM7SUFBQXJ6QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaTFCLGVBQWVBLENBQUNuRCxZQUEyQixFQUFRO01BQ2pELElBQUksQ0FBQzlCLGVBQWUsQ0FBQzhCLFlBQVksQ0FBQzl4QixLQUFLLEdBQUc4eEIsWUFBWTtJQUN4RDtFQUFDO0lBQUFoeUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWsxQixpQkFBaUJBLENBQUEsRUFBUztNQUFBLElBQUFwZixNQUFBO01BQ3hCLElBQUksSUFBSSxDQUFDa2EsZUFBZSxDQUFDOEIsWUFBWSxDQUFDOXhCLEtBQUssSUFBSSxJQUFJLENBQUNnd0IsZUFBZSxDQUFDb0MsUUFBUSxDQUFDcHlCLEtBQUssSUFBSSxJQUFJLENBQUNnd0IsZUFBZSxDQUFDc0MsTUFBTSxDQUFDdHlCLEtBQUssRUFBRTtRQUN2SCxJQUFNK3pCLHFCQUFxQixHQUFHdjBCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUN1d0IsZUFBZSxDQUFDZ0UscUJBQXFCLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLElBQU1rQixzQkFBc0IsR0FBRyxDQUFDO1FBQ2hDLElBQU1uWixPQUFPLEdBQUcsSUFBSSxDQUFDZ1UsZUFBZSxDQUFDb0MsUUFBUSxDQUFDcHlCLEtBQUssQ0FBQ2swQixZQUFZLENBQzlELElBQUksQ0FBQ2xFLGVBQWUsQ0FBQ3NDLE1BQU0sQ0FBQ3R5QixLQUFLLEVBQ2pDK3pCLHFCQUFxQixFQUNyQm9CLHNCQUFzQixFQUN0QmxILDBFQUFZLENBQUNrRyxJQUFJLEVBQ2pCakcseUVBQVcsQ0FBQ2tILEtBQ2QsQ0FBQyxDQUNFL1osSUFBSSxDQUFDLFVBQUFoVixJQUFBLEVBQWM7VUFBQSxJQUFaK1gsTUFBTSxHQUFBL1gsSUFBQSxDQUFOK1gsTUFBTTtVQUNaLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDbkJ0SSxNQUFJLENBQUNrYSxlQUFlLENBQUM4QixZQUFZLENBQUM5eEIsS0FBSyxHQUFHLENBQUM7VUFDN0M7UUFDRixDQUFDLENBQUMsU0FDSSxDQUFDLFVBQUFxSyxDQUFDLEVBQUk7VUFDVnlMLE1BQUksQ0FBQzFNLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFUSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO01BQ047SUFDRjtFQUFDO0lBQUF2SyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBcTFCLGVBQWVBLENBQUN6RCxHQUFnQixFQUFRO01BQ3RDLElBQUksQ0FBQzVCLGVBQWUsQ0FBQ1QsU0FBUyxDQUFDdnZCLEtBQUssR0FBRzR4QixHQUFHO0lBQzVDO0VBQUM7SUFBQTl4QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBczFCLEtBQUEsR0FBQWpaLG1GQUFBLGNBQUFDLHNFQUFBLENBRUQsU0FBQUUsUUFBVytZLE1BQWM7UUFBQSxJQUFBNU0sTUFBQTtRQUFBLE9BQUFyTSxzRUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQU8sTUFBQSxXQUNoQixJQUFJbEIsT0FBTyxDQUFDLFVBQUFDLE9BQU8sRUFBSTtnQkFDNUIsSUFBSSxDQUFDd00sTUFBSSxDQUFDd0gsYUFBYSxDQUFDcUYsVUFBVSxDQUFDeDFCLEtBQUssRUFBRTtrQkFDeEMyb0IsTUFBSSxDQUFDOE0sV0FBVyxDQUFDRixNQUFNLENBQUM7a0JBRXhCcFosT0FBTyxDQUFDLENBQUM7a0JBRVQ7Z0JBQ0Y7Z0JBRUF3TSxNQUFJLENBQUNxSCxlQUFlLENBQUNxRCxtQkFBbUIsQ0FBQzN5QixHQUFHLENBQUNpb0IsTUFBSSxDQUFDd0gsYUFBYSxDQUFDcUYsVUFBVSxDQUFDam1CLFNBQVMsQ0FBQyxVQUFBaW1CLFVBQVUsRUFBSTtrQkFDakcsSUFBSSxDQUFDQSxVQUFVLEVBQUU7b0JBQ2Y3TSxNQUFJLENBQUM4TSxXQUFXLENBQUNGLE1BQU0sQ0FBQztvQkFDeEJwWixPQUFPLENBQUMsQ0FBQztrQkFDWDtnQkFDRixDQUFDLENBQUMsQ0FBQztjQUNMLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBVSxRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQUNIO01BQUEsU0FqQktjLElBQUlBLENBQUFDLEVBQUE7UUFBQSxPQUFBK1gsS0FBQSxDQUFBOVgsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBSmdMLElBQUk7SUFBQTtFQUFBO0lBQUF4ZCxHQUFBO0lBQUFFLEtBQUEsRUFtQlYsU0FBUXkxQixXQUFXQSxDQUFDRixNQUFjLEVBQVE7TUFDeEMsSUFBSSxJQUFJLENBQUN2RixlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLEVBQUU7UUFDM0MsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUssQ0FBQ3cwQixLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUN4RSxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN5MEIsU0FBUyxHQUFHLElBQUk7TUFDMUQ7TUFFQSxJQUFJLENBQUN6RSxlQUFlLENBQUNxRCxtQkFBbUIsQ0FBQ2x6QixPQUFPLENBQUMsQ0FBQztNQUVsRCxJQUFJLENBQUN1MUIsZ0JBQWdCLENBQUNILE1BQU0sQ0FBQztNQUU3QixJQUFJLENBQUN2RixlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQ3NGLE9BQU87SUFDekQ7RUFBQztJQUFBNXpCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUEyMUIsT0FBQSxHQUFBdFosbUZBQUEsY0FBQUMsc0VBQUEsQ0FFRCxTQUFBb0IsU0FBQTtRQUFBLE9BQUFwQixzRUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFkLElBQUEsR0FBQWMsU0FBQSxDQUFBYixJQUFBO1lBQUE7Y0FBQSxLQUNNLElBQUksQ0FBQ2tULHNCQUFzQixDQUFDL08sV0FBVyxDQUFDbGhCLEtBQUs7Z0JBQUE0ZCxTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUMvQyxJQUFJLENBQUNpVCxlQUFlLENBQUNXLFVBQVUsQ0FBQzN3QixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUE0ZCxTQUFBLENBQUFSLE1BQUEsV0FFdkMsSUFBSSxDQUFDd1ksNkJBQTZCLENBQUMsSUFBSSxDQUFDM0Ysc0JBQXNCLENBQUMvTyxXQUFXLENBQUNsaEIsS0FBSyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE0ZCxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUUzRjtNQUFBLFNBTkttWSxNQUFNQSxDQUFBO1FBQUEsT0FBQUYsT0FBQSxDQUFBblksS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBTnVqQixNQUFNO0lBQUE7RUFBQTtJQUFBLzFCLEdBQUE7SUFBQUUsS0FBQSxFQVFaLFNBQUE4MUIsSUFBSUEsQ0FBQSxFQUFTO01BQ1gsSUFBTXpHLFlBQVksR0FBRyxJQUFJLENBQUNXLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUs7TUFFNUQsSUFBSXF2QixZQUFZLEVBQUU7UUFDaEJBLFlBQVksQ0FBQzBHLEtBQUssR0FBRyxJQUFJO01BQzNCO0lBQ0Y7RUFBQztJQUFBajJCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnMkIsTUFBTUEsQ0FBQSxFQUFTO01BQ2IsSUFBTTNHLFlBQVksR0FBRyxJQUFJLENBQUNXLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDcnZCLEtBQUs7TUFFNUQsSUFBSXF2QixZQUFZLEVBQUU7UUFDaEJBLFlBQVksQ0FBQzBHLEtBQUssR0FBRyxLQUFLO1FBQzFCLElBQUksQ0FBQy9GLGVBQWUsQ0FBQ1MsU0FBUyxDQUFDendCLEtBQUssR0FBRyxLQUFLO01BQzlDO0lBQ0Y7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBaTJCLFFBQUEsR0FBQTVaLG1GQUFBLGNBQUFDLHNFQUFBLENBRUQsU0FBQTRDLFNBQUE7UUFBQSxJQUFBMkosTUFBQTtRQUFBLE9BQUF2TSxzRUFBQSxVQUFBZ0QsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUF6QyxJQUFBLEdBQUF5QyxTQUFBLENBQUF4QyxJQUFBO1lBQUE7Y0FBQSxPQUFBd0MsU0FBQSxDQUFBbkMsTUFBQSxXQUNTLElBQUksQ0FBQ0UsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUNqQyxJQUFJLENBQUMsWUFBTTtnQkFDcER3TixNQUFJLENBQUNtSCxlQUFlLENBQUMwQyxrQkFBa0IsQ0FBQ3Z5QixPQUFPLENBQUMsQ0FBQztnQkFDakQwb0IsTUFBSSxDQUFDc0gsYUFBYSxDQUFDK0YsVUFBVSxHQUFHLElBQUk7Y0FDdEMsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEzVyxTQUFBLENBQUFqQyxJQUFBO1VBQUE7UUFBQSxHQUFBNEIsUUFBQTtNQUFBLENBQ0g7TUFBQSxTQUxLL2UsT0FBT0EsQ0FBQTtRQUFBLE9BQUE4MUIsUUFBQSxDQUFBelksS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBUG5TLE9BQU87SUFBQTtFQUFBO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQU9iLFNBQUFtMkIsTUFBTUEsQ0FBQ3hzQixLQUF1QixFQUFPO01BQ25DLElBQU0wUCxHQUFHLEdBQUc1UCxpRUFBYyxDQUFDQyxVQUFVLENBQUNDLEtBQUssQ0FBQyxDQUFDaUIsR0FBRztNQUVoRCxJQUFJeU8sR0FBRyxFQUFFO1FBQ1AsT0FBT0EsR0FBRztNQUNaO01BRUEsSUFBSSxDQUFDalEsT0FBTyxDQUFDQyxJQUFJLENBQUMsNENBQTRDLEVBQUV2Qiw2Q0FBRyxDQUFDNGtCLFlBQVksQ0FBQzFzQixLQUFLLENBQUM7TUFFdkYsT0FBTyxJQUFJakIsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ29GLEdBQUcsQ0FBQzBDLDZDQUFHLENBQUM0a0IsWUFBWSxDQUFDMXNCLEtBQUssQ0FBQztJQUMxRDtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFvMkIsTUFBQSxHQUFBL1osbUZBQUEsY0FBQUMsc0VBQUEsQ0FFRCxTQUFBMkwsU0FBQTtRQUFBLE9BQUEzTCxzRUFBQSxVQUFBOEwsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUF2TCxJQUFBLEdBQUF1TCxTQUFBLENBQUF0TCxJQUFBO1lBQUE7Y0FBQSxLQUNNLElBQUksQ0FBQ29ULGFBQWEsQ0FBQytGLFVBQVU7Z0JBQUE3TixTQUFBLENBQUF0TCxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUN6QixJQUFJdlksS0FBSyxDQUFDLDhCQUE4QixDQUFDO1lBQUE7Y0FBQSxLQUc3QyxJQUFJLENBQUMyckIsYUFBYSxDQUFDcUYsVUFBVSxDQUFDeDFCLEtBQUs7Z0JBQUFxb0IsU0FBQSxDQUFBdEwsSUFBQTtnQkFBQTtjQUFBO2NBQ3JDLElBQUksQ0FBQzNULE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZDQUE2QyxDQUFDO2NBQUMsT0FBQWdmLFNBQUEsQ0FBQWpMLE1BQUE7WUFBQTtjQUtuRSxJQUFJLENBQUMrUyxhQUFhLENBQUNxRixVQUFVLENBQUN4MUIsS0FBSyxHQUFHLElBQUk7Y0FBQyxPQUFBcW9CLFNBQUEsQ0FBQWpMLE1BQUEsV0FFcEMsSUFBSSxDQUFDaVosWUFBWSxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQWhPLFNBQUEsQ0FBQS9LLElBQUE7VUFBQTtRQUFBLEdBQUEySyxRQUFBO01BQUEsQ0FDM0I7TUFBQSxTQWRLc00sS0FBS0EsQ0FBQTtRQUFBLE9BQUE2QixNQUFBLENBQUE1WSxLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFMaWlCLEtBQUs7SUFBQTtFQUFBO0lBQUF6MEIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQXMyQixhQUFBLEdBQUFqYSxtRkFBQSxjQUFBQyxzRUFBQSxDQWdCWCxTQUFBaWEsU0FBQTtRQUFBLElBQUFDLE1BQUE7UUFBQSxJQUFBN3NCLEtBQUEsRUFBQThzQixtQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxLQUFBLEVBQUFDLGdCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLE1BQUEsRUFBQUMsaUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsT0FBQSxFQUFBQyxrQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxPQUFBLEVBQUFDLGtCQUFBLEVBQUFDLDBCQUFBLEVBQUFDLG9CQUFBLEVBQUEzc0IsR0FBQSxFQUFBNHNCLDJCQUFBLEVBQUFDLFlBQUE7UUFBQSxPQUFBbmIsc0VBQUEsVUFBQW9iLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBN2EsSUFBQSxHQUFBNmEsU0FBQSxDQUFBNWEsSUFBQTtZQUFBO2NBQ0UsSUFBSSxDQUFDaVQsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUN3SixRQUFRO2NBQ3hELElBQUksQ0FBQ2xDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztjQUUvQi9yQixLQUF1QixHQUFHLElBQUksQ0FBQ29tQixhQUFhLENBQUNwbUIsS0FBSyxDQUFDM0osS0FBSztjQUN4RHkyQixtQkFBbUIsR0FBRyxJQUFJLENBQUNoRSxpQkFBaUIsQ0FBQ2dFLG1CQUFtQixDQUFDLENBQUM7Y0FBQSxJQUVuRWh0QixpRUFBYyxDQUFDRyx1QkFBdUIsQ0FBQ0QsS0FBSyxDQUFDO2dCQUFBZ3VCLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUNoRCxJQUFJLENBQUMzVCxPQUFPLENBQUNTLEtBQUssQ0FBQyw0QkFBNEIsRUFBRUYsS0FBSyxDQUFDO2NBQ3ZELElBQUksQ0FBQ3FtQixlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQ3lKLFlBQVk7Y0FDNUQsSUFBSSxDQUFDN0gsZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBQUEsS0FLMUMsSUFBSSxDQUFDOFMsdUJBQXVCLENBQUNQLDRCQUE0QjtnQkFBQWdJLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUFBMloscUJBQUEsR0FDekJoSSw2RUFBb0IsQ0FBQ29KLGlDQUFpQyxDQUFhLE9BQU8sRUFBRSxJQUFJLENBQUM1SCx1QkFBdUIsQ0FBQ1AsNEJBQTRCLENBQUMsRUFBaktnSCxLQUFLLEdBQUFELHFCQUFBLENBQUxDLEtBQUssRUFBRUMsZ0JBQWdCLEdBQUFGLHFCQUFBLENBQWhCRSxnQkFBZ0I7Y0FBQSxJQUV6QkQsS0FBSztnQkFBQWdCLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUNSLElBQUksQ0FBQzNULE9BQU8sQ0FBQ1MsS0FBSyxDQUFDK3NCLGdCQUFnQixDQUFDO2NBQ3BDLElBQUksQ0FBQzVHLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssR0FBR291QixzREFBWSxDQUFDMkosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQy9ILGVBQWUsQ0FBQ2UsVUFBVSxDQUFDL3dCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ213QixhQUFhLENBQUNxRixVQUFVLENBQUN4MUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBMjNCLFNBQUEsQ0FBQXZhLE1BQUE7WUFBQTtjQUFBLEtBTTVDLElBQUksQ0FBQzhTLHVCQUF1QixDQUFDTiw0QkFBNEI7Z0JBQUErSCxTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FBQThaLHNCQUFBLEdBQ3pCbkksNkVBQW9CLENBQUNvSixpQ0FBaUMsQ0FBWSxPQUFPLEVBQUUsSUFBSSxDQUFDNUgsdUJBQXVCLENBQUNOLDRCQUE0QixDQUFDLEVBQWhLK0csTUFBSyxHQUFBRSxzQkFBQSxDQUFMRixLQUFLLEVBQUVDLGlCQUFnQixHQUFBQyxzQkFBQSxDQUFoQkQsZ0JBQWdCO2NBQUEsSUFFekJELE1BQUs7Z0JBQUFnQixTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FDUixJQUFJLENBQUMzVCxPQUFPLENBQUNTLEtBQUssQ0FBQytzQixpQkFBZ0IsQ0FBQztjQUNwQyxJQUFJLENBQUM1RyxlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQzJKLGtCQUFrQjtjQUNsRSxJQUFJLENBQUMvSCxlQUFlLENBQUNlLFVBQVUsQ0FBQy93QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNtd0IsYUFBYSxDQUFDcUYsVUFBVSxDQUFDeDFCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQTIzQixTQUFBLENBQUF2YSxNQUFBO1lBQUE7Y0FBQSxLQU01QyxJQUFJLENBQUM4Uyx1QkFBdUIsQ0FBQ0wsc0JBQXNCO2dCQUFBOEgsU0FBQSxDQUFBNWEsSUFBQTtnQkFBQTtjQUFBO2NBQUFpYSxxQkFBQSxHQUNuQnZJLDBFQUFpQixDQUFDdUoseUJBQXlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQzlILHVCQUF1QixDQUFDTCxzQkFBc0IsQ0FBQyxFQUFwSThHLE9BQUssR0FBQUsscUJBQUEsQ0FBTEwsS0FBSyxFQUFFQyxrQkFBZ0IsR0FBQUkscUJBQUEsQ0FBaEJKLGdCQUFnQjtjQUFBLElBRXpCRCxPQUFLO2dCQUFBZ0IsU0FBQSxDQUFBNWEsSUFBQTtnQkFBQTtjQUFBO2NBQ1IsSUFBSSxDQUFDM1QsT0FBTyxDQUFDUyxLQUFLLENBQUMrc0Isa0JBQWdCLENBQUM7Y0FDcEMsSUFBSSxDQUFDNUcsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUMySixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDL0gsZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBQUEsS0FNNUMsSUFBSSxDQUFDOFMsdUJBQXVCLENBQUNKLHNCQUFzQjtnQkFBQTZILFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUFBb2Esc0JBQUEsR0FDbkIxSSwwRUFBaUIsQ0FBQ3VKLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM5SCx1QkFBdUIsQ0FBQ0osc0JBQXNCLENBQUMsRUFBcEk2RyxPQUFLLEdBQUFRLHNCQUFBLENBQUxSLEtBQUssRUFBRUMsa0JBQWdCLEdBQUFPLHNCQUFBLENBQWhCUCxnQkFBZ0I7Y0FBQSxJQUV6QkQsT0FBSztnQkFBQWdCLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUNSLElBQUksQ0FBQzNULE9BQU8sQ0FBQ1MsS0FBSyxDQUFDK3NCLGtCQUFnQixDQUFDO2NBQ3BDLElBQUksQ0FBQzVHLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssR0FBR291QixzREFBWSxDQUFDMkosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQy9ILGVBQWUsQ0FBQ2UsVUFBVSxDQUFDL3dCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ213QixhQUFhLENBQUNxRixVQUFVLENBQUN4MUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBMjNCLFNBQUEsQ0FBQXZhLE1BQUE7WUFBQTtjQUFBLE1BTTVDLElBQUksQ0FBQzhTLHVCQUF1QixDQUFDVCxvQkFBb0IsQ0FBQ3p2QixLQUFLLElBQUksSUFBSSxDQUFDa3dCLHVCQUF1QixDQUFDUiwyQkFBMkIsQ0FBQzF2QixLQUFLO2dCQUFBMjNCLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUMzSCxJQUFJLENBQUMzVCxPQUFPLENBQUNTLEtBQUssQ0FBQywrRkFBK0YsQ0FBQztjQUNuSCxJQUFJLENBQUNtbUIsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUMySixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDL0gsZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBS3hDa2EsMEJBQTBCLEdBQUcsT0FBTyxJQUFJLENBQUNwSCx1QkFBdUIsQ0FBQ1AsNEJBQTRCLEtBQUssVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDTyx1QkFBdUIsQ0FBQ04sNEJBQTRCLEtBQUssVUFBVTtjQUMvTDJILG9CQUFvQixHQUFHLE9BQU8sSUFBSSxDQUFDckgsdUJBQXVCLENBQUNMLHNCQUFzQixLQUFLLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQ0ssdUJBQXVCLENBQUNKLHNCQUFzQixLQUFLLFVBQVU7Y0FBQSxNQUUvS3dILDBCQUEwQixJQUFJQyxvQkFBb0I7Z0JBQUFJLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUNwRCxJQUFJLENBQUMzVCxPQUFPLENBQUNTLEtBQUssQ0FBQyw2SEFBNkgsQ0FBQztjQUNqSixJQUFJLENBQUNtbUIsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUMySixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDL0gsZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBQUEsS0FLMUMsSUFBSSxDQUFDOFMsdUJBQXVCLENBQUNULG9CQUFvQixDQUFDenZCLEtBQUs7Z0JBQUEyM0IsU0FBQSxDQUFBNWEsSUFBQTtnQkFBQTtjQUFBO2NBQUEsSUFDcER6WSx1RUFBaUIsQ0FBQzJ6Qiw0QkFBNEI7Z0JBQUFOLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUNqRCxJQUFJLENBQUMzVCxPQUFPLENBQUNTLEtBQUssQ0FBQyxpREFBaUQsQ0FBQztjQUNyRSxJQUFJLENBQUNtbUIsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUM4SixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDbEksZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBQUEsSUFLekNrYSwwQkFBMEI7Z0JBQUFLLFNBQUEsQ0FBQTVhLElBQUE7Z0JBQUE7Y0FBQTtjQUM3QixJQUFJLENBQUMzVCxPQUFPLENBQUNTLEtBQUssQ0FBQyxxR0FBcUcsQ0FBQztjQUN6SCxJQUFJLENBQUNtbUIsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUMySixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDL0gsZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBQUF1YSxTQUFBLENBQUE1YSxJQUFBO2NBQUE7WUFBQTtjQUFBLEtBSzFDdWEsMEJBQTBCO2dCQUFBSyxTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FDNUIsSUFBSSxDQUFDM1QsT0FBTyxDQUFDUyxLQUFLLHFHQUFxRyxDQUFDO2NBQ3hILElBQUksQ0FBQ21tQixlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQzJKLGtCQUFrQjtjQUNsRSxJQUFJLENBQUMvSCxlQUFlLENBQUNlLFVBQVUsQ0FBQy93QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNtd0IsYUFBYSxDQUFDcUYsVUFBVSxDQUFDeDFCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQTIzQixTQUFBLENBQUF2YSxNQUFBO1lBQUE7Y0FBQSxLQU01QyxJQUFJLENBQUM4Uyx1QkFBdUIsQ0FBQ1IsMkJBQTJCLENBQUMxdkIsS0FBSztnQkFBQTIzQixTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxJQUMxRHpZLHVFQUFpQixDQUFDeUksbUNBQW1DLElBQUl6SSx1RUFBaUIsQ0FBQzBJLGdDQUFnQztnQkFBQTJxQixTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FDL0csSUFBSSxDQUFDM1QsT0FBTyxDQUFDUyxLQUFLLENBQUMsdURBQXVELENBQUM7Y0FDM0UsSUFBSSxDQUFDbW1CLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssR0FBR291QixzREFBWSxDQUFDOEosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ2xJLGVBQWUsQ0FBQ2UsVUFBVSxDQUFDL3dCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ213QixhQUFhLENBQUNxRixVQUFVLENBQUN4MUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBMjNCLFNBQUEsQ0FBQXZhLE1BQUE7WUFBQTtjQUFBLElBS3pDbWEsb0JBQW9CO2dCQUFBSSxTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FDdkIsSUFBSSxDQUFDM1QsT0FBTyxDQUFDUyxLQUFLLENBQUMseUdBQXlHLENBQUM7Y0FDN0gsSUFBSSxDQUFDbW1CLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssR0FBR291QixzREFBWSxDQUFDMkosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQy9ILGVBQWUsQ0FBQ2UsVUFBVSxDQUFDL3dCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ213QixhQUFhLENBQUNxRixVQUFVLENBQUN4MUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBMjNCLFNBQUEsQ0FBQXZhLE1BQUE7WUFBQTtjQUFBdWEsU0FBQSxDQUFBNWEsSUFBQTtjQUFBO1lBQUE7Y0FBQSxLQUsxQ3dhLG9CQUFvQjtnQkFBQUksU0FBQSxDQUFBNWEsSUFBQTtnQkFBQTtjQUFBO2NBQ3RCLElBQUksQ0FBQzNULE9BQU8sQ0FBQ1MsS0FBSyx5R0FBeUcsQ0FBQztjQUM1SCxJQUFJLENBQUNtbUIsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUMySixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDL0gsZUFBZSxDQUFDZSxVQUFVLENBQUMvd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDbXdCLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyM0IsU0FBQSxDQUFBdmEsTUFBQTtZQUFBO2NBTWhELElBQUksQ0FBQzRTLGVBQWUsQ0FBQ21CLE9BQU8sQ0FBQ254QixLQUFLLEdBQUcsSUFBSTtjQUVuQzRLLEdBQUcsR0FBRyxJQUFJLENBQUN1ckIsTUFBTSxDQUFDeHNCLEtBQUssQ0FBQztjQUU5QixJQUFJLENBQUNxbUIsZUFBZSxDQUFDZ0YsV0FBVyxDQUFDdDBCLEdBQUcsQ0FDbEMsSUFBSSxDQUFDc3ZCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDaGhCLFNBQVMsQ0FBQyxVQUFBZ2hCLEtBQUssRUFBSTtnQkFDNUMsSUFBSUEsS0FBSyxLQUFLbkMsc0RBQVksQ0FBQzVwQixLQUFLLElBQUkrckIsS0FBSyxLQUFLbkMsc0RBQVksQ0FBQytKLFVBQVUsRUFBRTtrQkFDckVuSiw2REFBUyxDQUFDb0osMEJBQTBCLENBQUN4dEIsR0FBRyxDQUFDO2dCQUMzQztjQUNGLENBQUMsQ0FDSCxDQUFDO2NBRUs0c0IsMkJBQWdELEdBQUcsU0FBbkRBLDJCQUFnREEsQ0FBQTtnQkFBQSxPQUFTLElBQUl0YixPQUFPLENBQUMsVUFBQ0MsT0FBTyxFQUFXO2tCQUM1RjtrQkFDQXFhLE1BQUksQ0FBQ3JHLGFBQWEsQ0FBQ3FGLFVBQVUsQ0FBQ3gxQixLQUFLLEdBQUcsS0FBSztrQkFFM0MsT0FBT21jLE9BQU8sQ0FBQ3FhLE1BQUksQ0FBQzZCLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDO2NBQUE7Y0FDSVosWUFBWSxHQUFHMUksaUVBQWEsQ0FBQ3VKLE1BQU0sQ0FBQzN1QixLQUFLLEVBQUUsSUFBSSxDQUFDcW1CLGVBQWUsRUFBRSxJQUFJLENBQUNDLHNCQUFzQixFQUFFLElBQUksQ0FBQ0MsdUJBQXVCLEVBQUUsSUFBSSxDQUFDMkMsOEJBQThCLEVBQUUyRSwyQkFBMkIsQ0FBQztjQUFBLElBRTlMQyxZQUFZO2dCQUFBRSxTQUFBLENBQUE1YSxJQUFBO2dCQUFBO2NBQUE7Y0FDZixJQUFJLENBQUNvVCxhQUFhLENBQUNxRixVQUFVLENBQUN4MUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBMjNCLFNBQUEsQ0FBQXZhLE1BQUE7WUFBQTtjQUFBLE9BQUF1YSxTQUFBLENBQUF2YSxNQUFBLFdBS3ZDcWEsWUFBWSxDQUFDbEQsS0FBSyxDQUN2QjNwQixHQUFHLEVBQ0hqQixLQUFLLEVBQ0w4c0IsbUJBQW1CLEVBQ25CLElBQUksQ0FBQ2IsNkJBQTZCLENBQUM3d0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzdDc1csSUFBSSxDQUFDLFlBQU07Z0JBQ1ZtYixNQUFJLENBQUN4RyxlQUFlLENBQUNtQixPQUFPLENBQUNueEIsS0FBSyxHQUFHLEtBQUs7Y0FDNUMsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFBcUssQ0FBQyxFQUFJO2dCQUNWb3NCLG1CQUFtQixDQUFDL3RCLElBQUksQ0FBQyxDQUFDO2dCQUUxQjh0QixNQUFJLENBQUN4RyxlQUFlLENBQUNrQyxZQUFZLENBQUNseUIsS0FBSyxFQUFFO2dCQUV6Q3cyQixNQUFJLENBQUN4RyxlQUFlLENBQUNpQixNQUFNLENBQUNqeEIsS0FBSyxHQUFHLEtBQUs7Z0JBRXpDdzJCLE1BQUksQ0FBQ2QsZ0JBQWdCLENBQUMsbUNBQW1DLENBQUM7Z0JBRTFEYyxNQUFJLENBQUN4RyxlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQ21LLGdCQUFnQjtnQkFFaEUvQixNQUFJLENBQUNwdEIsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVRLENBQUMsQ0FBQztjQUNsRCxDQUFDLENBQUMsV0FDTSxDQUFDLFlBQU07Z0JBQ2Jtc0IsTUFBSSxDQUFDckcsYUFBYSxDQUFDcUYsVUFBVSxDQUFDeDFCLEtBQUssR0FBRyxLQUFLO2dCQUUzQyxJQUFJdzJCLE1BQUksQ0FBQ3hHLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssS0FBS291QixzREFBWSxDQUFDeUYsT0FBTyxJQUFJLENBQUMvckIsNkNBQUcsQ0FBQzB3Qix1QkFBdUIsRUFBRTtrQkFDN0Y7Z0JBQ0Y7Z0JBRUEsSUFBTUMsU0FBUyxHQUFHMTVCLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUMsWUFBTTtrQkFDbkQsSUFBTWdYLE9BQU8sR0FBR3dhLE1BQUksQ0FBQzZCLG1CQUFtQixDQUFDLENBQUMsU0FDbEMsQ0FBQyxVQUFBaHVCLENBQUMsRUFBSTtvQkFDVm1zQixNQUFJLENBQUNwdEIsT0FBTyxDQUFDUyxLQUFLLENBQUMsZ0NBQWdDLEVBQUVRLENBQUMsQ0FBQztrQkFDekQsQ0FBQyxDQUFDO2dCQUNOLENBQUMsRUFBRW1zQixNQUFJLENBQUNrQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBRTNCbEMsTUFBSSxDQUFDeEcsZUFBZSxDQUFDZ0YsV0FBVyxDQUFDdDBCLEdBQUcsQ0FBQyxJQUFJMUIseURBQVUsQ0FBQyxZQUFNO2tCQUN4REQsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ3dPLFlBQVksQ0FBQ2lxQixTQUFTLENBQUM7Z0JBQzNDLENBQUMsQ0FBQyxDQUFDO2NBQ0wsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFkLFNBQUEsQ0FBQXJhLElBQUE7VUFBQTtRQUFBLEdBQUFpWixRQUFBO01BQUEsQ0FDTDtNQUFBLFNBcE5hRixZQUFZQSxDQUFBO1FBQUEsT0FBQUMsYUFBQSxDQUFBOVksS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBWitqQixZQUFZO0lBQUE7RUFBQTtJQUFBdjJCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUEyNEIsaUJBQUEsR0FBQXRjLG1GQUFBLGNBQUFDLHNFQUFBLENBc04xQixTQUFBc2MsU0FBQTtRQUFBLElBQUE1YyxPQUFBO1FBQUEsT0FBQU0sc0VBQUEsVUFBQXVjLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBaGMsSUFBQSxHQUFBZ2MsU0FBQSxDQUFBL2IsSUFBQTtZQUFBO2NBQUEsS0FDTSxJQUFJLENBQUNvVCxhQUFhLENBQUMrRixVQUFVO2dCQUFBNEMsU0FBQSxDQUFBL2IsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDekIsSUFBSXZZLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQztZQUFBO2NBQUEsS0FHN0MsSUFBSSxDQUFDeXJCLHNCQUFzQixDQUFDL08sV0FBVyxDQUFDbGhCLEtBQUs7Z0JBQUE4NEIsU0FBQSxDQUFBL2IsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQStiLFNBQUEsQ0FBQTFiLE1BQUEsV0FDeEMsSUFBSSxDQUFDd1ksNkJBQTZCLENBQUMsSUFBSSxDQUFDM0Ysc0JBQXNCLENBQUMvTyxXQUFXLENBQUNsaEIsS0FBSyxDQUFDO1lBQUE7Y0FHMUYsSUFBSSxJQUFJLENBQUMrdkIsYUFBYSxDQUFDcG1CLEtBQUssQ0FBQzNKLEtBQUssRUFBRTtnQkFDNUJnYyxPQUFPLEdBQUcsSUFBSSxDQUFDdVksS0FBSyxDQUFDLENBQUM7Y0FDOUI7WUFBQztZQUFBO2NBQUEsT0FBQXVFLFNBQUEsQ0FBQXhiLElBQUE7VUFBQTtRQUFBLEdBQUFzYixRQUFBO01BQUEsQ0FDRjtNQUFBLFNBWmFqRixnQkFBZ0JBLENBQUE7UUFBQSxPQUFBZ0YsaUJBQUEsQ0FBQW5iLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQWhCcWhCLGdCQUFnQjtJQUFBO0VBQUE7SUFBQTd6QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBKzRCLEtBQUEsR0FBQTFjLG1GQUFBLGNBQUFDLHNFQUFBLENBYzlCLFNBQUEwYyxTQUFBO1FBQUEsSUFBQTlYLFdBQUE7UUFBQSxPQUFBNUUsc0VBQUEsVUFBQTJjLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBcGMsSUFBQSxHQUFBb2MsU0FBQSxDQUFBbmMsSUFBQTtZQUFBO2NBQ1FtRSxXQUFXLEdBQUcsSUFBSSxDQUFDK08sc0JBQXNCLENBQUMvTyxXQUFXLENBQUNsaEIsS0FBSztjQUFBLElBRTVEa2hCLFdBQVc7Z0JBQUFnWSxTQUFBLENBQUFuYyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBbWMsU0FBQSxDQUFBOWIsTUFBQSxXQUNQLElBQUksQ0FBQ21YLEtBQUssQ0FBQyxDQUFDO1lBQUE7Y0FBQSxPQUFBMkUsU0FBQSxDQUFBOWIsTUFBQSxXQUdkLElBQUksQ0FBQ3dZLDZCQUE2QixDQUFDMVUsV0FBVyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFnWSxTQUFBLENBQUE1YixJQUFBO1VBQUE7UUFBQSxHQUFBMGIsUUFBQTtNQUFBLENBQ3ZEO01BQUEsU0FSWUcsSUFBSUEsQ0FBQTtRQUFBLE9BQUFKLEtBQUEsQ0FBQXZiLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQUo2bUIsSUFBSTtJQUFBO0VBQUE7SUFBQXI1QixHQUFBO0lBQUFFLEtBQUEsRUFVakIsU0FBUTA0QixnQkFBZ0JBLENBQUEsRUFBVztNQUNqQyxRQUFRLElBQUksQ0FBQzFJLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUs7UUFDdEMsS0FBS291QixzREFBWSxDQUFDc0csWUFBWTtRQUM5QixLQUFLdEcsc0RBQVksQ0FBQ2dMLE9BQU87UUFDekIsS0FBS2hMLHNEQUFZLENBQUNpTCxPQUFPO1VBQ3ZCLE9BQU9sSyxvQ0FBb0M7UUFDN0MsS0FBS2Ysc0RBQVksQ0FBQzVwQixLQUFLO1FBQ3ZCLEtBQUs0cEIsc0RBQVksQ0FBQytKLFVBQVU7UUFDNUIsS0FBSy9KLHNEQUFZLENBQUN5SixZQUFZO1FBQzlCLEtBQUt6SixzREFBWSxDQUFDa0wsYUFBYTtRQUMvQixLQUFLbEwsc0RBQVksQ0FBQ21MLFVBQVU7UUFDNUIsS0FBS25MLHNEQUFZLENBQUNzRixPQUFPO1FBQ3pCLEtBQUt0RixzREFBWSxDQUFDd0osUUFBUTtRQUMxQixLQUFLeEosc0RBQVksQ0FBQ3lGLE9BQU87UUFDekIsS0FBS3pGLHNEQUFZLENBQUNvTCxNQUFNO1FBQ3hCLEtBQUtwTCxzREFBWSxDQUFDcUwsWUFBWTtRQUM5QixLQUFLckwsc0RBQVksQ0FBQzhKLGtCQUFrQjtRQUNwQyxLQUFLOUosc0RBQVksQ0FBQzJKLGtCQUFrQjtRQUNwQyxLQUFLM0osc0RBQVksQ0FBQ3NMLDJCQUEyQjtRQUM3QyxLQUFLdEwsc0RBQVksQ0FBQ3VMLGVBQWU7UUFDakMsS0FBS3ZMLHNEQUFZLENBQUNtSyxnQkFBZ0I7VUFDaEM7VUFDQSxPQUFPLElBQUksQ0FBQ3BkLG1CQUFtQixDQUFDZ0QsMkNBQTJDLENBQUMsSUFBSSxDQUFDNlIsZUFBZSxDQUFDa0MsWUFBWSxDQUFDbHlCLEtBQUssQ0FBQztRQUN0SDtVQUNFK1Msb0VBQWlCLENBQUMsSUFBSSxDQUFDaWQsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxDQUFDO01BQ3ZEO0lBQ0Y7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBNDVCLG9CQUFBLEdBQUF2ZCxtRkFBQSxjQUFBQyxzRUFBQSxDQUVELFNBQUF1ZCxTQUFBO1FBQUEsT0FBQXZkLHNFQUFBLFVBQUF3ZCxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWpkLElBQUEsR0FBQWlkLFNBQUEsQ0FBQWhkLElBQUE7WUFBQTtjQUFBZ2QsU0FBQSxDQUFBamEsRUFBQSxHQUNVLElBQUksQ0FBQ2tRLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUs7Y0FBQSs1QixTQUFBLENBQUFoZCxJQUFBLEdBQUFnZCxTQUFBLENBQUFqYSxFQUFBLEtBQ2pDc08sc0RBQVksQ0FBQzVwQixLQUFLLE9BQUF1MUIsU0FBQSxDQUFBamEsRUFBQSxLQUNsQnNPLHNEQUFZLENBQUNxTCxZQUFZLE9BQUFNLFNBQUEsQ0FBQWphLEVBQUEsS0FDekJzTyxzREFBWSxDQUFDZ0wsT0FBTyxPQUFBVyxTQUFBLENBQUFqYSxFQUFBLEtBQ3BCc08sc0RBQVksQ0FBQ2lMLE9BQU8sT0FBQVUsU0FBQSxDQUFBamEsRUFBQSxLQUNwQnNPLHNEQUFZLENBQUMrSixVQUFVLE9BQUE0QixTQUFBLENBQUFqYSxFQUFBLEtBQ3ZCc08sc0RBQVksQ0FBQ3NMLDJCQUEyQixPQUFBSyxTQUFBLENBQUFqYSxFQUFBLEtBQ3hDc08sc0RBQVksQ0FBQ3VMLGVBQWUsT0FBQUksU0FBQSxDQUFBamEsRUFBQSxLQUM1QnNPLHNEQUFZLENBQUNtSyxnQkFBZ0IsT0FBQXdCLFNBQUEsQ0FBQWphLEVBQUEsS0FJN0JzTyxzREFBWSxDQUFDeUosWUFBWSxPQUFBa0MsU0FBQSxDQUFBamEsRUFBQSxLQUl6QnNPLHNEQUFZLENBQUNrTCxhQUFhLE9BQUFTLFNBQUEsQ0FBQWphLEVBQUEsS0FJMUJzTyxzREFBWSxDQUFDbUwsVUFBVSxPQUFBUSxTQUFBLENBQUFqYSxFQUFBLEtBSXZCc08sc0RBQVksQ0FBQ3NGLE9BQU8sUUFBQXFHLFNBQUEsQ0FBQWphLEVBQUEsS0FJcEJzTyxzREFBWSxDQUFDc0csWUFBWSxRQUFBcUYsU0FBQSxDQUFBamEsRUFBQSxLQUl6QnNPLHNEQUFZLENBQUN5RixPQUFPLFFBQUFrRyxTQUFBLENBQUFqYSxFQUFBLEtBSXBCc08sc0RBQVksQ0FBQ29MLE1BQU0sUUFBQU8sU0FBQSxDQUFBamEsRUFBQSxLQUluQnNPLHNEQUFZLENBQUN3SixRQUFRLFFBQUFtQyxTQUFBLENBQUFqYSxFQUFBLEtBSXJCc08sc0RBQVksQ0FBQzhKLGtCQUFrQixRQUFBNkIsU0FBQSxDQUFBamEsRUFBQSxLQUkvQnNPLHNEQUFZLENBQUMySixrQkFBa0I7Y0FBQTtZQUFBO2NBdkNsQyxJQUFJLENBQUMzdUIsT0FBTyxDQUFDQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsSUFBSSxDQUFDMm1CLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssRUFBRW91QixzREFBWSxDQUFDLElBQUksQ0FBQzRCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssQ0FBQyxDQUFDO2NBQUMsT0FBQSs1QixTQUFBLENBQUEzYyxNQUFBO1lBQUE7Y0FJaEosSUFBSSxDQUFDaFUsT0FBTyxDQUFDQyxJQUFJLENBQUMsaUdBQWlHLENBQUM7Y0FBQyxPQUFBMHdCLFNBQUEsQ0FBQTNjLE1BQUE7WUFBQTtjQUlySCxJQUFJLENBQUNoVSxPQUFPLENBQUNDLElBQUksQ0FBQyxtR0FBbUcsQ0FBQztjQUFDLE9BQUEwd0IsU0FBQSxDQUFBM2MsTUFBQTtZQUFBO2NBSXZILElBQUksQ0FBQ2hVLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdHQUFnRyxDQUFDO2NBQUMsT0FBQTB3QixTQUFBLENBQUEzYyxNQUFBO1lBQUE7Y0FJcEgsSUFBSSxDQUFDaFUsT0FBTyxDQUFDQyxJQUFJLENBQUMsOENBQThDLENBQUM7Y0FBQyxPQUFBMHdCLFNBQUEsQ0FBQTNjLE1BQUE7WUFBQTtjQUlsRSxJQUFJLENBQUNoVSxPQUFPLENBQUNDLElBQUksQ0FBQywwREFBMEQsQ0FBQztjQUFDLE9BQUEwd0IsU0FBQSxDQUFBM2MsTUFBQTtZQUFBO2NBSTlFLElBQUksQ0FBQ2hVLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZDQUE2QyxDQUFDO2NBQUMsT0FBQTB3QixTQUFBLENBQUEzYyxNQUFBO1lBQUE7Y0FJakUsSUFBSSxDQUFDaFUsT0FBTyxDQUFDQyxJQUFJLENBQUMsa0VBQWtFLENBQUM7Y0FBQyxPQUFBMHdCLFNBQUEsQ0FBQTNjLE1BQUE7WUFBQTtjQUl0RixJQUFJLENBQUNoVSxPQUFPLENBQUNDLElBQUksQ0FBQyxzREFBc0QsQ0FBQztjQUFDLE9BQUEwd0IsU0FBQSxDQUFBM2MsTUFBQTtZQUFBO2NBSTFFLElBQUksQ0FBQ2hVLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlFQUF5RSxDQUFDO2NBQUMsT0FBQTB3QixTQUFBLENBQUEzYyxNQUFBO1lBQUE7Y0FJN0YsSUFBSSxDQUFDaFUsT0FBTyxDQUFDQyxJQUFJLENBQUMseUVBQXlFLENBQUM7Y0FBQyxPQUFBMHdCLFNBQUEsQ0FBQTNjLE1BQUE7WUFBQTtjQUk3RnJLLG9FQUFpQixDQUFDLElBQUksQ0FBQ2lkLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssQ0FBQztZQUFDO2NBQUEsT0FBQSs1QixTQUFBLENBQUEzYyxNQUFBLFdBR2pELElBQUksQ0FBQ21YLEtBQUssQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF3RixTQUFBLENBQUF6YyxJQUFBO1VBQUE7UUFBQSxHQUFBdWMsUUFBQTtNQUFBLENBQ3BCO01BQUEsU0ExRGF4QixtQkFBbUJBLENBQUE7UUFBQSxPQUFBdUIsb0JBQUEsQ0FBQXBjLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQW5CK2xCLG1CQUFtQjtJQUFBO0VBQUE7SUFBQXY0QixHQUFBO0lBQUFFLEtBQUEsRUE0RGpDLFNBQVEwMUIsZ0JBQWdCQSxDQUFBLEVBQXdEO01BQUEsSUFBQXNFLE1BQUE7TUFBQSxJQUF2RHpFLE1BQWMsR0FBQWpqQixTQUFBLENBQUFySSxNQUFBLFFBQUFxSSxTQUFBLFFBQUExTSxTQUFBLEdBQUEwTSxTQUFBLE1BQUcyYyw4QkFBOEI7TUFDdEUsSUFBSSxDQUFDZSxlQUFlLENBQUNnRixXQUFXLENBQUM3MEIsT0FBTyxDQUFDLENBQUM7TUFFMUMsSUFBTTRlLGNBQWMsR0FBRyxJQUFJLENBQUNrUixzQkFBc0IsQ0FBQ2xSLGNBQWMsQ0FBQy9lLEtBQUs7TUFFdkUsSUFBSStlLGNBQWMsRUFBRTtRQUNsQixJQUFJLENBQUNrUixzQkFBc0IsQ0FBQ2xSLGNBQWMsQ0FBQy9lLEtBQUssR0FBRyxJQUFJO1FBQ3ZEK2UsY0FBYyxDQUFDcUssS0FBSyxDQUFDLENBQUM7UUFDdEJySyxjQUFjLENBQUM1ZSxPQUFPLENBQUMsQ0FBQztRQUV4QixJQUFJMkgsNkNBQUcsQ0FBQ215QiwrQkFBK0IsSUFBSSxFQUFFMzFCLHVFQUFpQixDQUFDNUMsUUFBUSxJQUFJb0csNkNBQUcsQ0FBQ295QixvQ0FBb0MsQ0FBQyxFQUFFO1VBQ3BIMzFCLHFFQUF1QixDQUFDRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xEO01BQ0Y7TUFFQSxJQUFJLElBQUksQ0FBQ3dyQixzQkFBc0IsQ0FBQy9PLFdBQVcsQ0FBQ2xoQixLQUFLLEVBQUU7UUFDakQsSUFBSSxDQUFDaXdCLHNCQUFzQixDQUFDL08sV0FBVyxDQUFDbGhCLEtBQUssQ0FBQ3VoQixTQUFTLENBQUMsQ0FBQyxDQUFDdlIsT0FBTyxDQUFDLFVBQUF5UixLQUFLO1VBQUEsT0FBSUEsS0FBSyxDQUFDbkUsSUFBSSxDQUFDLENBQUM7UUFBQSxFQUFDO1FBQ3hGLElBQUksQ0FBQzJTLHNCQUFzQixDQUFDL08sV0FBVyxDQUFDbGhCLEtBQUssR0FBRyxJQUFJO01BQ3REO01BRUEsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ1csVUFBVSxDQUFDM3dCLEtBQUssR0FBRyxLQUFLO01BQzdDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNTLFNBQVMsQ0FBQ3p3QixLQUFLLEdBQUcsS0FBSztNQUM1QyxJQUFJLENBQUNnd0IsZUFBZSxDQUFDcUIsT0FBTyxDQUFDcnhCLEtBQUssR0FBRyxLQUFLO01BQzFDLElBQUksQ0FBQ2d3QixlQUFlLENBQUN5QixPQUFPLENBQUN6eEIsS0FBSyxHQUFHLElBQUk7TUFDekMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQ3Z4QixLQUFLLEdBQUcsS0FBSztNQUUxQyxJQUFJLElBQUksQ0FBQ2d3QixlQUFlLENBQUNzQyxNQUFNLENBQUN0eUIsS0FBSyxJQUFJLElBQUksQ0FBQ2d3QixlQUFlLENBQUNvQyxRQUFRLENBQUNweUIsS0FBSyxFQUFFO1FBQzVFLElBQU1nYyxPQUFPLEdBQUcsSUFBSSxDQUFDZ1UsZUFBZSxDQUFDb0MsUUFBUSxDQUFDcHlCLEtBQUssQ0FBQ202QixhQUFhLENBQUMsSUFBSSxDQUFDbkssZUFBZSxDQUFDc0MsTUFBTSxDQUFDdHlCLEtBQUssRUFBRXUxQixNQUFNLENBQUMsQ0FDekdsYSxJQUFJLENBQUMsVUFBQXpVLEtBQUEsRUFBYztVQUFBLElBQVp3WCxNQUFNLEdBQUF4WCxLQUFBLENBQU53WCxNQUFNO1VBQ1osSUFBSUEsTUFBTSxLQUFLLElBQUksRUFBRTtZQUNuQjRiLE1BQUksQ0FBQzV3QixPQUFPLENBQUMrTCxJQUFJLENBQUMsZ0RBQWdELEVBQUU2a0IsTUFBSSxDQUFDenhCLFFBQVEsRUFBRTZWLE1BQU0sQ0FBQztZQUUxRjtVQUNGO1VBRUE0YixNQUFJLENBQUM1d0IsT0FBTyxDQUFDQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUyd0IsTUFBSSxDQUFDenhCLFFBQVEsRUFBRTZWLE1BQU0sQ0FBQztRQUNwRixDQUFDLENBQUMsU0FDSSxDQUFDLFVBQUEvVCxDQUFDLEVBQUk7VUFDVjJ2QixNQUFJLENBQUM1d0IsT0FBTyxDQUFDUyxLQUFLLENBQUMsK0JBQStCLEVBQUVtd0IsTUFBSSxDQUFDenhCLFFBQVEsRUFBRThCLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7TUFDTjtNQUVBLElBQUksSUFBSSxDQUFDZ2xCLFlBQVksSUFBSSxJQUFJLENBQUNBLFlBQVksQ0FBQ2tFLE9BQU8sRUFBRTtRQUNsRCxJQUFJLENBQUNsRSxZQUFZLENBQUNrRSxPQUFPLENBQUMxWixTQUFTLEdBQUcsRUFBRTtRQUN4QyxJQUFJLENBQUN3VixZQUFZLENBQUNrRSxPQUFPLENBQUNockIsUUFBUSxHQUFHLEVBQUU7TUFDekM7TUFFQSxJQUFJLENBQUN5bkIsZUFBZSxDQUFDc0MsTUFBTSxDQUFDdHlCLEtBQUssR0FBRyxJQUFJO01BQ3hDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNvQyxRQUFRLENBQUNweUIsS0FBSyxHQUFHLElBQUk7TUFDMUMsSUFBSSxDQUFDaXdCLHNCQUFzQixDQUFDbUssK0JBQStCLEdBQUcsQ0FBQztJQUNqRTtFQUFDO0lBQUF0NkIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTh5QiwrQkFBK0JBLENBQUNucEIsS0FBZ0IsRUFBUTtNQUFBLElBQUEwd0IsTUFBQTtNQUM5RCxJQUFNQyxnQ0FBZ0MsR0FBRzN3QixLQUFLLENBQUNrQixZQUFZLENBQUNtYixJQUFJLENBQUMsVUFBQXVVLFVBQVU7UUFBQSxPQUFJQSxVQUFVLENBQUNqd0IsVUFBVSxDQUFDLDJCQUEyQixDQUFDO01BQUEsRUFBQztNQUVsSSxJQUFJLENBQUN1b0IsOEJBQThCLENBQUMySCxxQkFBcUIsQ0FBQ3g2QixLQUFLLEdBQUcsS0FBSztNQUN2RSxJQUFJLENBQUM2eUIsOEJBQThCLENBQUM0SCx1QkFBdUIsQ0FBQ3o2QixLQUFLLEdBQUcsS0FBSztNQUN6RSxJQUFJLENBQUM2eUIsOEJBQThCLENBQUNHLFNBQVMsQ0FBQ2h6QixLQUFLLEdBQUcsS0FBSztNQUUzRCxJQUFJLENBQUNzNkIsZ0NBQWdDLEVBQUU7UUFDckMsSUFBSSxDQUFDbHhCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLCtEQUErRCxDQUFDO1FBRWxGO01BQ0Y7TUFFQSxJQUFJLENBQUMvRSx1RUFBaUIsQ0FBQ28yQix3Q0FBd0MsRUFBRTtRQUMvRCxJQUFJLENBQUN0eEIsT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0ZBQWdGLEVBQUVpeEIsZ0NBQWdDLENBQUM7UUFFckk7TUFDRjtNQUVBQSxnQ0FBZ0MsQ0FBQ2o0QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzNDQSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1ZtZixHQUFHLENBQUMsVUFBQW1aLE1BQU07UUFBQSxPQUFJQSxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDO01BQUEsRUFBQyxDQUM1QjVxQixPQUFPLENBQUMsVUFBQTJxQixNQUFNLEVBQUk7UUFDakIsUUFBUUEsTUFBTTtVQUNaLEtBQUssVUFBVTtZQUNiTixNQUFJLENBQUN4SCw4QkFBOEIsQ0FBQzJILHFCQUFxQixDQUFDeDZCLEtBQUssR0FBRyxJQUFJO1lBRXRFO1VBQ0YsS0FBSyxZQUFZO1lBQ2ZxNkIsTUFBSSxDQUFDeEgsOEJBQThCLENBQUM0SCx1QkFBdUIsQ0FBQ3o2QixLQUFLLEdBQUcsSUFBSTtZQUV4RTtVQUNGO1lBQ0VxNkIsTUFBSSxDQUFDanhCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHVEQUF1RCxFQUFFc3hCLE1BQU0sQ0FBQztZQUVsRjtRQUNKO01BQ0YsQ0FBQyxDQUFDO01BRUosSUFBSSxDQUFDdnhCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDJFQUEyRSxFQUFFLElBQUksQ0FBQ3dwQiw4QkFBOEIsQ0FBQzJILHFCQUFxQixDQUFDeDZCLEtBQUssRUFBRSxJQUFJLENBQUM2eUIsOEJBQThCLENBQUM0SCx1QkFBdUIsQ0FBQ3o2QixLQUFLLENBQUM7SUFDcE87RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBNjZCLDhCQUFBLEdBQUF4ZSxtRkFBQSxjQUFBQyxzRUFBQSxDQUVELFNBQUF3ZSxTQUE0QzVaLFdBQXdCO1FBQUEsSUFBQTZaLE1BQUE7UUFBQSxJQUFBMUwsWUFBQSxFQUFBMkwsV0FBQTtRQUFBLE9BQUExZSxzRUFBQSxVQUFBMmUsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFwZSxJQUFBLEdBQUFvZSxTQUFBLENBQUFuZSxJQUFBO1lBQUE7Y0FDNURzUyxZQUFZLEdBQUcsSUFBSSxDQUFDVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3J2QixLQUFLO2NBQUEsSUFFdkRxdkIsWUFBWTtnQkFBQTZMLFNBQUEsQ0FBQW5lLElBQUE7Z0JBQUE7Y0FBQTtjQUNmLElBQUksQ0FBQ2lULGVBQWUsQ0FBQ1MsU0FBUyxDQUFDendCLEtBQUssR0FBRyxLQUFLO2NBQzVDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNXLFVBQVUsQ0FBQzN3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNnd0IsZUFBZSxDQUFDbUIsT0FBTyxDQUFDbnhCLEtBQUssR0FBRyxLQUFLO2NBQzFDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNxQixPQUFPLENBQUNyeEIsS0FBSyxHQUFHLEtBQUs7Y0FDMUMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssR0FBR291QixzREFBWSxDQUFDc0YsT0FBTztjQUFDLE9BQUF3SCxTQUFBLENBQUE5ZCxNQUFBO1lBQUE7Y0FLMUQsSUFBSSxDQUFDLElBQUksQ0FBQzhTLHVCQUF1QixDQUFDUiwyQkFBMkIsQ0FBQzF2QixLQUFLLEVBQUU7Z0JBQ25FcXZCLFlBQVksQ0FBQ29GLFNBQVMsR0FBR3ZULFdBQVc7Y0FDdEM7Y0FFTThaLFdBQVcsR0FBRzNMLFlBQVksQ0FBQzhKLElBQUksQ0FBQyxDQUFDO2NBQUEsTUFFbkM2QixXQUFXLEtBQUtwMUIsU0FBUztnQkFBQXMxQixTQUFBLENBQUFuZSxJQUFBO2dCQUFBO2NBQUE7Y0FDM0IsSUFBSSxDQUFDaVQsZUFBZSxDQUFDUyxTQUFTLENBQUN6d0IsS0FBSyxHQUFHLEtBQUs7Y0FDNUMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ1csVUFBVSxDQUFDM3dCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ2d3QixlQUFlLENBQUNtQixPQUFPLENBQUNueEIsS0FBSyxHQUFHLEtBQUs7Y0FDMUMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3J4QixLQUFLLEdBQUcsSUFBSTtjQUN6QyxJQUFJLENBQUNnd0IsZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUN5RixPQUFPO2NBQUMsT0FBQXFILFNBQUEsQ0FBQTlkLE1BQUE7WUFBQTtjQUFBLE9BQUE4ZCxTQUFBLENBQUE5ZCxNQUFBLFdBS25ENGQsV0FBVyxDQUFDM2YsSUFBSSxDQUFDLFlBQU07Z0JBQzVCMGYsTUFBSSxDQUFDL0ssZUFBZSxDQUFDUyxTQUFTLENBQUN6d0IsS0FBSyxHQUFHLEtBQUs7Z0JBQzVDKzZCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ1csVUFBVSxDQUFDM3dCLEtBQUssR0FBRyxLQUFLO2dCQUM3Qys2QixNQUFJLENBQUMvSyxlQUFlLENBQUNtQixPQUFPLENBQUNueEIsS0FBSyxHQUFHLEtBQUs7Z0JBQzFDKzZCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3J4QixLQUFLLEdBQUcsSUFBSTtnQkFDekMrNkIsTUFBSSxDQUFDL0ssZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUN5RixPQUFPO2NBQ3pELENBQUMsQ0FBQyxTQUFNLENBQUMsVUFBQXhwQixDQUFDLEVBQUk7Z0JBQ1osSUFBTTh3QixhQUFhLEdBQUcsQ0FBQyxDQUFDamEsV0FBVyxDQUFDSyxTQUFTLENBQUMsQ0FBQyxDQUFDNlosTUFBTSxDQUFDLFVBQUEzWixLQUFLLEVBQUk7a0JBQzlELE9BQU9BLEtBQUssQ0FBQzlGLElBQUksS0FBSyxPQUFPO2dCQUMvQixDQUFDLENBQUMsQ0FBQzFSLE1BQU07Z0JBQ1QsSUFBTW94QixzQ0FBc0MsR0FBRyxDQUFDdnpCLDZDQUFHLENBQUN5bEIsbUNBQW1DO2dCQUV2RixJQUFJOE4sc0NBQXNDLElBQUloTSxZQUFZLENBQUMwRyxLQUFLLElBQUksQ0FBQ29GLGFBQWEsRUFBRTtrQkFDbEY5TCxZQUFZLENBQUNvRixTQUFTLEdBQUcsSUFBSTtrQkFDN0JzRyxNQUFJLENBQUMvSyxlQUFlLENBQUNTLFNBQVMsQ0FBQ3p3QixLQUFLLEdBQUcsS0FBSztrQkFDNUMrNkIsTUFBSSxDQUFDL0ssZUFBZSxDQUFDVyxVQUFVLENBQUMzd0IsS0FBSyxHQUFHLElBQUk7a0JBQzVDKzZCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ21CLE9BQU8sQ0FBQ254QixLQUFLLEdBQUcsS0FBSztrQkFDMUMrNkIsTUFBSSxDQUFDL0ssZUFBZSxDQUFDcUIsT0FBTyxDQUFDcnhCLEtBQUssR0FBRyxLQUFLO2tCQUMxQys2QixNQUFJLENBQUMvSyxlQUFlLENBQUNPLEtBQUssQ0FBQ3Z3QixLQUFLLEdBQUdvdUIsc0RBQVksQ0FBQ29MLE1BQU07a0JBRXRELElBQUk2QixzQ0FBc0MsRUFBRTtvQkFDMUNOLE1BQUksQ0FBQzN4QixPQUFPLENBQUNDLElBQUksQ0FBQyxtRUFBbUUsRUFBRTB4QixNQUFJLENBQUN4eUIsUUFBUSxFQUFFOEIsQ0FBQyxDQUFDO29CQUV4RztrQkFDRjtrQkFFQSxJQUFJOHdCLGFBQWEsRUFBRTtvQkFDakJKLE1BQUksQ0FBQzN4QixPQUFPLENBQUNDLElBQUksQ0FBQyx5REFBeUQsRUFBRTB4QixNQUFJLENBQUN4eUIsUUFBUSxFQUFFOEIsQ0FBQyxDQUFDO29CQUU5RjtrQkFDRjtrQkFFQTB3QixNQUFJLENBQUMzeEIsT0FBTyxDQUFDQyxJQUFJLENBQUMsK0RBQStELEVBQUUweEIsTUFBSSxDQUFDeHlCLFFBQVEsRUFBRThCLENBQUMsQ0FBQztrQkFFcEc7Z0JBQ0Y7Z0JBRUFnbEIsWUFBWSxDQUFDMEcsS0FBSyxHQUFHLElBQUk7Z0JBRXpCLE9BQU8xRyxZQUFZLENBQUM4SixJQUFJLENBQUMsQ0FBQyxDQUN2QjlkLElBQUksQ0FBQyxZQUFNO2tCQUNWMGYsTUFBSSxDQUFDM3hCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZFQUE2RSxFQUFFMHhCLE1BQUksQ0FBQ3h5QixRQUFRLENBQUM7a0JBRS9Hd3lCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ1MsU0FBUyxDQUFDendCLEtBQUssR0FBRyxJQUFJO2tCQUMzQys2QixNQUFJLENBQUMvSyxlQUFlLENBQUNXLFVBQVUsQ0FBQzN3QixLQUFLLEdBQUcsS0FBSztrQkFDN0MrNkIsTUFBSSxDQUFDL0ssZUFBZSxDQUFDbUIsT0FBTyxDQUFDbnhCLEtBQUssR0FBRyxLQUFLO2tCQUMxQys2QixNQUFJLENBQUMvSyxlQUFlLENBQUNxQixPQUFPLENBQUNyeEIsS0FBSyxHQUFHLElBQUk7a0JBQ3pDKzZCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ08sS0FBSyxDQUFDdndCLEtBQUssR0FBR291QixzREFBWSxDQUFDeUYsT0FBTztnQkFDekQsQ0FBQyxDQUFDLFNBQU0sQ0FBQyxVQUFBeHBCLENBQUMsRUFBSTtrQkFDWmdsQixZQUFZLENBQUMwRyxLQUFLLEdBQUcsS0FBSztrQkFFMUJnRixNQUFJLENBQUMzeEIsT0FBTyxDQUFDQyxJQUFJLENBQUMseURBQXlELEVBQUUweEIsTUFBSSxDQUFDeHlCLFFBQVEsRUFBRThCLENBQUMsQ0FBQztrQkFFOUZnbEIsWUFBWSxDQUFDb0YsU0FBUyxHQUFHLElBQUk7a0JBQzdCc0csTUFBSSxDQUFDL0ssZUFBZSxDQUFDUyxTQUFTLENBQUN6d0IsS0FBSyxHQUFHLEtBQUs7a0JBQzVDKzZCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ1csVUFBVSxDQUFDM3dCLEtBQUssR0FBRyxJQUFJO2tCQUM1Qys2QixNQUFJLENBQUMvSyxlQUFlLENBQUNtQixPQUFPLENBQUNueEIsS0FBSyxHQUFHLEtBQUs7a0JBQzFDKzZCLE1BQUksQ0FBQy9LLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3J4QixLQUFLLEdBQUcsS0FBSztrQkFDMUMrNkIsTUFBSSxDQUFDL0ssZUFBZSxDQUFDTyxLQUFLLENBQUN2d0IsS0FBSyxHQUFHb3VCLHNEQUFZLENBQUNvTCxNQUFNO2dCQUN4RCxDQUFDLENBQUM7Y0FDTixDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQTBCLFNBQUEsQ0FBQTVkLElBQUE7VUFBQTtRQUFBLEdBQUF3ZCxRQUFBO01BQUEsQ0FDSDtNQUFBLFNBMUZhbEYsNkJBQTZCQSxDQUFBak8sR0FBQTtRQUFBLE9BQUFrVCw4QkFBQSxDQUFBcmQsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBN0JzakIsNkJBQTZCO0lBQUE7RUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7QUM3N0I3QztBQUNBO0FBQ0E7QUFGQSxJQUlLeEgsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFBLE9BQVpBLFlBQVk7QUFBQSxFQUFaQSxZQUFZO0FBcUJqQiwrREFBZUEsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekIzQjtBQUNBO0FBQ0E7O0FBSW9FO0FBQzNDO0FBR3lCO0FBQUEsSUFZN0JrTixRQUFRO0VBcUIzQixTQUFBQSxTQUFBLEVBQXNCO0lBQUFoOEIsaUZBQUEsT0FBQWc4QixRQUFBO0lBQ3BCLE1BQU0sSUFBSTkyQixLQUFLLENBQUMseURBQXlELENBQUM7RUFDNUU7RUFBQyxPQUFBM0UsOEVBQUEsQ0FBQXk3QixRQUFBO0lBQUF4N0IsR0FBQTtJQUFBRSxLQUFBLEVBdEJELFNBQU91N0IsYUFBYUEsQ0FBQzNiLE9BQTZCLEVBQVc7TUFDM0QsSUFBSSxDQUFDOVgsNENBQUcsQ0FBQzB6QixXQUFXLENBQUN4N0IsS0FBSyxFQUFFO1FBQzFCLE1BQU0sSUFBSXdFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztNQUN2QztNQUVBLElBQU1pM0IsY0FBOEIsR0FBRztRQUNyQ2xNLFNBQVMsRUFBRTNQLE9BQU8sQ0FBQzJQLFNBQVM7UUFDNUJJLDRCQUE0QixFQUFFL1AsT0FBTyxDQUFDK1AsNEJBQTRCO1FBQ2xFQyw0QkFBNEIsRUFBRWhRLE9BQU8sQ0FBQ2dRLDRCQUE0QjtRQUNsRUMsc0JBQXNCLEVBQUVqUSxPQUFPLENBQUNpUSxzQkFBc0I7UUFDdERDLHNCQUFzQixFQUFFbFEsT0FBTyxDQUFDa1E7TUFDbEMsQ0FBQztNQUVELE9BQU8sSUFBSVYsZ0RBQU8sQ0FBQ3hQLE9BQU8sQ0FBQ3lQLFlBQVksRUFBRXpQLE9BQU8sQ0FBQ2pXLEtBQUssRUFBRTh4QixjQUFjLENBQUM7SUFDekU7RUFBQztJQUFBMzdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0Q7TUFDN0QsT0FBT3VFLHNFQUFpQixDQUFDbzJCLHdDQUF3QztJQUNuRTtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pDSDtBQUNBO0FBQ0E7O0FBRXVDO0FBQ2E7QUFDTjtBQUlyQjtBQUNvQztBQUNOO0FBR3ZELElBQU1nQixnQkFBZ0IsR0FBRyxDQUFDO0FBQUMsSUFNTmxOLGNBQWM7RUE0QmpDLFNBQUFBLGVBQVk1TyxPQUErQixFQUFFO0lBQUEsSUFBQStiLGtCQUFBO0lBQUFyOEIsaUZBQUEsT0FBQWt2QixjQUFBO0lBQUFqdkIsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFDM0MsSUFBSSxDQUFDeTFCLFdBQVcsR0FBRyxJQUFJLzFCLDREQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUN5ekIsa0JBQWtCLEdBQUcsSUFBSXp6Qiw0REFBYyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDbzBCLG1CQUFtQixHQUFHLElBQUlwMEIsNERBQWMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyswQixxQkFBcUIsR0FBRyxJQUFJeDBCLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQzZ2QixZQUFZLEdBQUcsSUFBSW53QixtREFBTyxDQUEwQixJQUFJLENBQUM7SUFDOUQsSUFBSSxDQUFDcXhCLEtBQUssR0FBRyxJQUFJcnhCLG1EQUFPLENBQWVrdkIsOERBQVksQ0FBQ3NHLFlBQVksQ0FBQztJQUNqRSxJQUFJLENBQUNqRSxTQUFTLEdBQUcsSUFBSXZ4QixtREFBTyxDQUFVLEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUN5eEIsVUFBVSxHQUFHLElBQUl6eEIsbURBQU8sQ0FBVSxLQUFLLENBQUM7SUFDN0MsSUFBSSxDQUFDNnhCLFVBQVUsR0FBRyxJQUFJN3hCLG1EQUFPLENBQVUsSUFBSSxDQUFDO0lBQzVDLElBQUksQ0FBQyt4QixNQUFNLEdBQUcsSUFBSS94QixtREFBTyxDQUFVLElBQUksQ0FBQztJQUN4QyxJQUFJLENBQUNpeUIsT0FBTyxHQUFHLElBQUlqeUIsbURBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDbXlCLE9BQU8sR0FBRyxJQUFJbnlCLG1EQUFPLENBQVUsS0FBSyxDQUFDO0lBQzFDLElBQUksQ0FBQ3F5QixPQUFPLEdBQUcsSUFBSXJ5QixtREFBTyxDQUFVLEtBQUssQ0FBQztJQUMxQyxJQUFJLENBQUN1eUIsT0FBTyxHQUFHLElBQUl2eUIsbURBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDcXdCLFNBQVMsR0FBRyxJQUFJcndCLG1EQUFPLEVBQUF5OEIsa0JBQUEsR0FBYy9iLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFMlAsU0FBUyxjQUFBb00sa0JBQUEsY0FBQUEsa0JBQUEsR0FBSUQsZ0JBQWdCLENBQUM7SUFDakYsSUFBSSxDQUFDOUosR0FBRyxHQUFHLElBQUkxeUIsbURBQU8sQ0FBMEIwRyxTQUFTLENBQUM7SUFDMUQsSUFBSSxDQUFDa3NCLFlBQVksR0FBRyxJQUFJNXlCLG1EQUFPLENBQWdCLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUM4eUIsVUFBVSxHQUFHLElBQUk5eUIsbURBQU8sQ0FBWWl2Qix3REFBUyxDQUFDNEcsS0FBSyxDQUFDO0lBQ3pELElBQUksQ0FBQzdDLFlBQVksR0FBRyxJQUFJaHpCLG1EQUFPLENBQVMsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQ2t6QixRQUFRLEdBQUcsSUFBSWx6QixtREFBTyxDQUFrQixJQUFJLENBQUM7SUFDbEQsSUFBSSxDQUFDb3pCLE1BQU0sR0FBRyxJQUFJcHpCLG1EQUFPLENBQWlCLElBQUksQ0FBQztJQUMvQyxJQUFJLENBQUMrakIsYUFBYSxHQUFHLElBQUkvakIsbURBQU8sQ0FBOEIsSUFBSSxDQUFDO0lBQ25FLElBQUksQ0FBQ28wQixjQUFjLEdBQUcsSUFBSTtJQUMxQixJQUFJLENBQUNzSSxpQkFBaUIsR0FBRyxJQUFJO0lBQzdCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsSUFBSTtJQUM3QixJQUFJLENBQUNqSSx3QkFBd0IsR0FBRyxDQUFDO0VBQ25DO0VBQUMsT0FBQS96Qiw4RUFBQSxDQUFBMnVCLGNBQUE7SUFBQTF1QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVCO01BQ3JCLElBQU11eUIsTUFBTSxHQUFHLElBQUksQ0FBQ0EsTUFBTSxDQUFDdHlCLEtBQUs7TUFFaEMsSUFBSSxDQUFDc3lCLE1BQU0sRUFBRTtRQUNYLE9BQU8sR0FBRztNQUNaO01BRUEsT0FBT0EsTUFBTSxDQUFDL3BCLFFBQVE7SUFDeEI7RUFBQztJQUFBekksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTg3QixXQUFXQSxDQUFDMWQsTUFBdUIsRUFBUTtNQUN6QyxRQUFRQSxNQUFNO1FBQ1osS0FBSyxJQUFJO1VBQ1A7UUFDRixLQUFLLGNBQWM7UUFDbkIsS0FBSyxnQkFBZ0I7UUFDckIsS0FBSyxhQUFhO1VBQ2hCLElBQUksQ0FBQzJTLFVBQVUsQ0FBQy93QixLQUFLLEdBQUcsS0FBSztVQUM3QixJQUFJLENBQUNreUIsWUFBWSxDQUFDbHlCLEtBQUssR0FBRyxDQUFDO1VBQzNCLElBQUksQ0FBQ3F4QixPQUFPLENBQUNyeEIsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDdXhCLE9BQU8sQ0FBQ3Z4QixLQUFLLEdBQUcsSUFBSTtVQUN6QixJQUFJLENBQUN5eEIsT0FBTyxDQUFDenhCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQ3N5QixNQUFNLENBQUN0eUIsS0FBSyxHQUFHLElBQUk7VUFFeEI7UUFDRixLQUFLLFdBQVc7UUFDaEIsS0FBSyxXQUFXO1VBQ2QsSUFBSSxDQUFDa3lCLFlBQVksQ0FBQ2x5QixLQUFLLEdBQUcsQ0FBQztVQUMzQixJQUFJLENBQUNxeEIsT0FBTyxDQUFDcnhCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQ3V4QixPQUFPLENBQUN2eEIsS0FBSyxHQUFHLElBQUk7VUFDekIsSUFBSSxDQUFDeXhCLE9BQU8sQ0FBQ3p4QixLQUFLLEdBQUcsS0FBSztVQUMxQixJQUFJLENBQUNzeUIsTUFBTSxDQUFDdHlCLEtBQUssR0FBRyxJQUFJO1VBRXhCO1FBQ0Y7VUFDRSxJQUFJLENBQUNreUIsWUFBWSxDQUFDbHlCLEtBQUssRUFBRTtVQUN6QixJQUFJLENBQUNxeEIsT0FBTyxDQUFDcnhCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQ3V4QixPQUFPLENBQUN2eEIsS0FBSyxHQUFHLElBQUk7VUFDekIsSUFBSSxDQUFDeXhCLE9BQU8sQ0FBQ3p4QixLQUFLLEdBQUcsS0FBSztVQUMxQixJQUFJLENBQUNzeUIsTUFBTSxDQUFDdHlCLEtBQUssR0FBRyxJQUFJO1VBRXhCO01BQ0o7SUFDRjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErN0IsNkNBQTZDQSxDQUFBLEVBQVM7TUFDcEQsSUFBSSxJQUFJLENBQUMxTSxZQUFZLENBQUNydkIsS0FBSyxJQUFJLElBQUksQ0FBQ3F2QixZQUFZLENBQUNydkIsS0FBSyxDQUFDdXpCLE9BQU8sRUFBRTtRQUM5RCxJQUFJLENBQUNsRSxZQUFZLENBQUNydkIsS0FBSyxDQUFDdXpCLE9BQU8sQ0FBQzFaLFNBQVMsR0FBRy9SLDRDQUFHLENBQUN5UyxlQUFlO1FBQy9ELElBQUksQ0FBQzhVLFlBQVksQ0FBQ3J2QixLQUFLLENBQUN1ekIsT0FBTyxDQUFDaHJCLFFBQVEsR0FBRyxJQUFJLENBQUNBLFFBQVE7TUFDMUQ7SUFDRjtFQUFDO0lBQUF6SSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZzhCLGlDQUFpQ0EsQ0FBQzVkLE1BQXVCLEVBQWdCO01BQ3ZFLFFBQVFBLE1BQU07UUFDWixLQUFLLElBQUk7VUFDUCxPQUFPZ1EsOERBQVksQ0FBQ3dKLFFBQVE7UUFDOUIsS0FBSyxXQUFXO1FBQ2hCLEtBQUssV0FBVztVQUNkLE9BQU94Siw4REFBWSxDQUFDZ0wsT0FBTztRQUM3QixLQUFLLGdCQUFnQjtVQUNuQixPQUFPaEwsOERBQVksQ0FBQ2tMLGFBQWE7UUFDbkMsS0FBSyxhQUFhO1VBQ2hCLE9BQU9sTCw4REFBWSxDQUFDbUwsVUFBVTtRQUNoQyxLQUFLLGNBQWM7VUFDakIsT0FBT25MLDhEQUFZLENBQUN5SixZQUFZO1FBQ2xDLEtBQUssVUFBVTtRQUNmLEtBQUssY0FBYztRQUNuQixLQUFLLFNBQVM7VUFDWixPQUFPekosOERBQVksQ0FBQytKLFVBQVU7UUFDaEMsS0FBSyxlQUFlO1VBQ2xCLE9BQU8vSiw4REFBWSxDQUFDMkosa0JBQWtCO1FBQ3hDLEtBQUsseUJBQXlCO1VBQzVCLE9BQU8zSiw4REFBWSxDQUFDc0wsMkJBQTJCO1FBQ2pELEtBQUssUUFBUTtVQUNYLE9BQU90TCw4REFBWSxDQUFDNXBCLEtBQUs7UUFDM0I7VUFDRXVPLG1FQUFpQixDQUFDcUwsTUFBTSxDQUFDO01BQzdCO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUpIO0FBQ0E7QUFDQTs7QUFFdUM7QUFBQSxJQUdsQjBRLDZCQUE2QixnQkFBQWp2Qiw4RUFBQSxDQU9oRCxTQUFBaXZCLDhCQUFBLEVBQWM7RUFBQXh2QixpRkFBQSxPQUFBd3ZCLDZCQUFBO0VBQUF2dkIsaUZBQUE7RUFBQUEsaUZBQUE7RUFBQUEsaUZBQUE7RUFBQUEsaUZBQUE7RUFBQUEsaUZBQUE7RUFDWixJQUFJLENBQUNpN0IscUJBQXFCLEdBQUcsSUFBSXQ3QixtREFBTyxDQUFVLEtBQUssQ0FBQztFQUN4RCxJQUFJLENBQUN1N0IsdUJBQXVCLEdBQUcsSUFBSXY3QixtREFBTyxDQUFVLEtBQUssQ0FBQztFQUMxRCxJQUFJLENBQUM4ekIsU0FBUyxHQUFHLElBQUk5ekIsbURBQU8sQ0FBVSxLQUFLLENBQUM7RUFDNUMsSUFBSSxDQUFDZzBCLDZCQUE2QixHQUFHLElBQUloMEIsbURBQU8sQ0FBdUMsSUFBSSxDQUFDO0VBQzVGLElBQUksQ0FBQ2swQiw4QkFBOEIsR0FBRyxJQUFJbDBCLG1EQUFPLENBQXdDLElBQUksQ0FBQztBQUNoRyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJIO0FBQ0E7QUFDQTs7QUFFdUM7QUFBQSxJQUdsQjB2QixxQkFBcUIsZ0JBQUEvdUIsOEVBQUEsQ0FLeEMsU0FBQSt1QixzQkFBQSxFQUFjO0VBQUF0dkIsaUZBQUEsT0FBQXN2QixxQkFBQTtFQUFBcnZCLGlGQUFBO0VBQUFBLGlGQUFBO0VBQUFBLGlGQUFBO0VBQ1osSUFBSSxDQUFDMmhCLFdBQVcsR0FBRyxJQUFJaGlCLG1EQUFPLENBQXFCLElBQUksQ0FBQztFQUN4RCxJQUFJLENBQUM2ZixjQUFjLEdBQUcsSUFBSTdmLG1EQUFPLENBQXlCLElBQUksQ0FBQztFQUMvRCxJQUFJLENBQUNrN0IsK0JBQStCLEdBQUcsQ0FBQztBQUMxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEJIO0FBQ0E7QUFDQTs7QUFFdUM7QUFBQSxJQUVsQnZMLFlBQVksZ0JBQUFodkIsOEVBQUEsQ0FJL0IsU0FBQWd2QixhQUFBLEVBQWM7RUFBQXZ2QixpRkFBQSxPQUFBdXZCLFlBQUE7RUFBQXR2QixpRkFBQTtFQUFBQSxpRkFBQTtFQUNaLElBQUksQ0FBQ2kyQixVQUFVLEdBQUcsSUFBSXQyQixtREFBTyxDQUFVLEtBQUssQ0FBQztFQUM3QyxJQUFJLENBQUNnM0IsVUFBVSxHQUFHLEtBQUs7QUFDekIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2JIO0FBQ0E7QUFDQTs7QUFFdUM7QUFBQSxJQWFsQnZILHNCQUFzQixnQkFBQTl1Qiw4RUFBQSxDQVF6QyxTQUFBOHVCLHVCQUFZL08sT0FBc0MsRUFBRTtFQUFBdGdCLGlGQUFBLE9BQUFxdkIsc0JBQUE7RUFBQXB2QixpRkFBQTtFQUFBQSxpRkFBQTtFQUFBQSxpRkFBQTtFQUFBQSxpRkFBQTtFQUFBQSxpRkFBQTtFQUFBQSxpRkFBQTtFQUNsRCxJQUFJLENBQUNrd0Isb0JBQW9CLEdBQUcsSUFBSXZ3QixtREFBTyxDQUFVMGdCLE9BQU8sQ0FBQzZQLG9CQUFvQixDQUFDO0VBQzlFLElBQUksQ0FBQ0MsMkJBQTJCLEdBQUcsSUFBSXh3QixtREFBTyxDQUFVMGdCLE9BQU8sQ0FBQzhQLDJCQUEyQixDQUFDO0VBQzVGLElBQUksQ0FBQ0MsNEJBQTRCLEdBQUcvUCxPQUFPLENBQUMrUCw0QkFBNEI7RUFDeEUsSUFBSSxDQUFDQyw0QkFBNEIsR0FBR2hRLE9BQU8sQ0FBQ2dRLDRCQUE0QjtFQUN4RSxJQUFJLENBQUNDLHNCQUFzQixHQUFHalEsT0FBTyxDQUFDaVEsc0JBQXNCO0VBQzVELElBQUksQ0FBQ0Msc0JBQXNCLEdBQUdsUSxPQUFPLENBQUNrUSxzQkFBc0I7QUFDOUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hDSDtBQUNBO0FBQ0E7O0FBRXVDO0FBQUEsSUFHbEJ2QixZQUFZLGdCQUFBMXVCLDhFQUFBLENBSS9CLFNBQUEwdUIsYUFBWTVrQixLQUF1QixFQUFFO0VBQUFySyxpRkFBQSxPQUFBaXZCLFlBQUE7RUFBQWh2QixpRkFBQTtFQUFBQSxpRkFBQTtFQUNuQyxJQUFJLENBQUNvSyxLQUFLLEdBQUcsSUFBSXpLLG1EQUFPLENBQW1CeUssS0FBSyxDQUFDO0VBQ2pELElBQUksQ0FBQ2tuQixhQUFhLEdBQUcsSUFBSTN4QixtREFBTyxDQUFVLEtBQUssQ0FBQztBQUNsRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkSDtBQUNBO0FBQ0E7QUFGQSxJQUlxQis4QixlQUFlO0VBSWxDLFNBQUFBLGdCQUFZaHFCLElBQWdCLEVBQUU7SUFBQTNTLGlGQUFBLE9BQUEyOEIsZUFBQTtJQUFBMThCLGlGQUFBO0lBQUFBLGlGQUFBO0lBQzVCLElBQUksQ0FBQzI4QixLQUFLLEdBQUdqcUIsSUFBSTtJQUNqQixJQUFJLENBQUNrcUIsVUFBVSxHQUFHLENBQUM7RUFDckI7RUFBQyxPQUFBdDhCLDhFQUFBLENBQUFvOEIsZUFBQTtJQUFBbjhCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9vOEIsUUFBUUEsQ0FBQ0MsVUFBa0IsRUFBVTtNQUMxQyxJQUFJLElBQUksQ0FBQ0YsVUFBVSxHQUFHRSxVQUFVLEdBQUcsSUFBSSxDQUFDSCxLQUFLLENBQUNqeUIsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4RCxNQUFNLElBQUl6RixLQUFLLGlCQUFBNUIsTUFBQSxDQUFpQnk1QixVQUFVLHFCQUFBejVCLE1BQUEsQ0FBa0IsSUFBSSxDQUFDMDVCLGdCQUFnQixDQUFDLENBQUMsK0JBQTRCLENBQUM7TUFDbEg7TUFFQSxJQUFJdDhCLEtBQUssR0FBRyxDQUFDO01BQ2IsSUFBSXU4QixhQUFhLEdBQUdGLFVBQVU7TUFFOUIsT0FBT0UsYUFBYSxHQUFHLENBQUMsRUFBRTtRQUN4QixJQUFNQyxVQUFVLEdBQUdoc0IsSUFBSSxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDMHJCLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBTU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDTixVQUFVLEdBQUcsQ0FBQztRQUM3QyxJQUFNTyxtQkFBbUIsR0FBRyxDQUFDLEdBQUdELGlCQUFpQjtRQUNqRCxJQUFNSixXQUFVLEdBQUc3ckIsSUFBSSxDQUFDbXNCLEdBQUcsQ0FBQ0osYUFBYSxFQUFFRyxtQkFBbUIsQ0FBQztRQUMvRDtRQUNBLElBQU1FLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSVAsV0FBVSxJQUFJLENBQUM7UUFDbEM7UUFDQSxJQUFNUSxTQUFTLEdBQUksSUFBSSxDQUFDWCxLQUFLLENBQUNNLFVBQVUsQ0FBQyxJQUFLRSxtQkFBbUIsR0FBR0wsV0FBWTtRQUNoRjtRQUNBLElBQU1TLElBQUksR0FBR0QsU0FBUyxHQUFHRCxJQUFJOztRQUU3QjtRQUNBNThCLEtBQUssR0FBSUEsS0FBSyxJQUFJcThCLFdBQVUsR0FBSVMsSUFBSTtRQUVwQ1AsYUFBYSxJQUFJRixXQUFVO1FBQzNCLElBQUksQ0FBQ0YsVUFBVSxJQUFJRSxXQUFVO01BQy9CO01BRUEsT0FBT3I4QixLQUFLO0lBQ2Q7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPKzhCLFFBQVFBLENBQUNDLFVBQWtCLEVBQVE7TUFDeEMsSUFBSSxJQUFJLENBQUNiLFVBQVUsR0FBR2EsVUFBVSxHQUFHLElBQUksQ0FBQ2QsS0FBSyxDQUFDanlCLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEQsTUFBTSxJQUFJekYsS0FBSyxpQkFBQTVCLE1BQUEsQ0FBaUJvNkIsVUFBVSxxQkFBQXA2QixNQUFBLENBQWtCLElBQUksQ0FBQzA1QixnQkFBZ0IsQ0FBQyxDQUFDLCtCQUE0QixDQUFDO01BQ2xIO01BRUEsSUFBSSxDQUFDSCxVQUFVLElBQUlhLFVBQVU7SUFDL0I7RUFBQztJQUFBbDlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9zOEIsZ0JBQWdCQSxDQUFBLEVBQVc7TUFDaEMsT0FBUSxJQUFJLENBQUNKLEtBQUssQ0FBQ2p5QixNQUFNLEdBQUcsQ0FBQyxHQUFJLElBQUksQ0FBQ2t5QixVQUFVO0lBQ2xEO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREg7QUFDQTtBQUNBOztBQUdnRTtBQUdzQjtBQUFBLElBT2pFZSxhQUFhO0VBSWhDLFNBQUFBLGNBQVlDLGNBQThCLEVBQUU7SUFBQTc5QixpRkFBQSxPQUFBNDlCLGFBQUE7SUFBQTM5QixpRkFBQTtJQUFBQSxpRkFBQSx1QkFGSSxJQUFJTiw0REFBYyxDQUFDLENBQUM7SUFHbEUsSUFBSSxDQUFDbStCLGVBQWUsR0FBR0QsY0FBYztFQUN2QztFQUFDLE9BQUF0OUIsOEVBQUEsQ0FBQXE5QixhQUFBO0lBQUFwOUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3E5QixrQkFBa0JBLENBQUNDLFdBQXdCLEVBQUV0VSxPQUEyRCxFQUFjO01BQzNILE9BQU8sSUFBSSxDQUFDb1UsZUFBZSxDQUFDN3RCLFNBQVMsQ0FBVTB0QiwwRkFBdUIsQ0FBQ00sT0FBTyxFQUFFLFVBQUFDLFlBQVksRUFBSTtRQUM5RixJQUFJQSxZQUFZLENBQUN2ckIsSUFBSSxDQUFDaEwsSUFBSSxLQUFLcTJCLFdBQVcsRUFBRTtVQUMxQ3RVLE9BQU8sQ0FBQ3dVLFlBQVksQ0FBQztRQUN2QjtNQUNGLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQTE5QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPeTlCLHlCQUF5QkEsQ0FBQ0MsY0FBOEIsRUFBRTFVLE9BQThELEVBQWM7TUFDM0ksT0FBTyxJQUFJLENBQUNvVSxlQUFlLENBQUM3dEIsU0FBUyxDQUFhMHRCLDBGQUF1QixDQUFDVSxVQUFVLEVBQUUsVUFBQUMsZUFBZSxFQUFJO1FBQ3ZHLElBQUlBLGVBQWUsQ0FBQzNyQixJQUFJLENBQUNoTCxJQUFJLEtBQUt5MkIsY0FBYyxFQUFFO1VBQ2hEMVUsT0FBTyxDQUFDNFUsZUFBZSxDQUFDO1FBQzFCO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBOTlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU82OUIsa0JBQWtCQSxDQUFDQyxPQUF1QyxFQUFFQyxXQUFtQixFQUFFL1UsT0FBcUYsRUFBYztNQUN6TCxJQUFJLENBQUNvVSxlQUFlLENBQUNZLE9BQU8sQ0FBU2YsMEZBQXVCLENBQUNnQixtQkFBbUIsRUFBRTtRQUNoRkgsT0FBTyxFQUFQQSxPQUFPO1FBQ1A3ckIsSUFBSSxFQUFFOHJCO01BQ1IsQ0FBQyxDQUFDO01BRUYsT0FBTyxJQUFJLENBQUNYLGVBQWUsQ0FBQzd0QixTQUFTLENBQW9DMHRCLDBGQUF1QixDQUFDaUIsT0FBTyxFQUFFLFVBQUFDLFlBQVksRUFBSTtRQUN4SCxJQUFJQSxZQUFZLENBQUNsc0IsSUFBSSxDQUFDVSxJQUFJLEtBQUtvckIsV0FBVyxFQUFFO1VBQzFDL1UsT0FBTyxDQUFDbVYsWUFBWSxDQUFDO1FBQ3ZCO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBcitCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9HLE9BQU9BLENBQUEsRUFBUztNQUNyQixJQUFJLENBQUNDLFlBQVksQ0FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDN0I7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7QUN0REg7QUFDQTtBQUNBO0FBRkEsSUFJS2krQixXQUFXLDBCQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBQSxPQUFYQSxXQUFXO0FBQUEsRUFBWEEsV0FBVztBQW1DaEIsK0RBQWVBLFdBQVc7Ozs7Ozs7Ozs7O0FDdkMxQjtBQUNBO0FBQ0E7QUFGQSxJQUlLQyxjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEs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LElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQUMsQ0FBQztBQUFBbGlDLGlGQUFBLENBTHZSbzZDLHlCQUF5QixrQ0FNVztFQUNyRG1ELElBQUksRUFBRSxJQUFJcmIsVUFBVSxDQUFDLENBQ25CLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3BDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUN4SyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDNUQ7RUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFBRTtFQUN4THNiLEdBQUcsRUFBRSxJQUFJdGIsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDelN1YixHQUFHLEVBQUUsSUFBSXZiLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcE0sQ0FBQztBQUFBbGlDLGlGQUFBLENBZGtCbzZDLHlCQUF5QixrQ0FlVztFQUNyRG1ELElBQUksRUFBRSxJQUFJcmIsVUFBVSxDQUFDLENBQ25CLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3BDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQzFHc2IsR0FBRyxFQUFFLElBQUl0YixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUs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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixlQUFlO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFD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QUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUiw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxxQ0FBcUMsNEJBQTRCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLDBCQUEwQixlQUFlO0FBQ3RFOztBQUVPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqb0JBO0FBQ0E7QUFDQTs7QUFFeUI7QUFDUztBQUNRO0FBSzVCO0FBR2QsK0RBQWU7RUFDYnI3QyxHQUFHLEVBQUhBLDRDQUFHO0VBQ0h3ekIsUUFBUSxFQUFSQSxpREFBUTtFQUNSbE4sWUFBWSxFQUFaQSxxREFBWUE7QUFDZCxDQUFDLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9QbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvTnVtYmVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1VpbnQ4QXJyYXlzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdGF0ZUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vQml0c3RyZWFtUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0VHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L1NlaVBheWxvYWRUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL1BpY3R1cmVUaW1pbmdQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9WYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvQml0c3RyZWFtRGVjb2RlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL1BoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9lbmNvZGluZy8yMDIzL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2V2ZW50L0V2ZW50UHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2ZyYW1lVGltaW5nL0gyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luay50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy93b3JrZXItbG9hZGVyL2Rpc3QvcnVudGltZS9pbmxpbmUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5cbmNvbnN0IHZpc2liaWxpdHlDaGFuZ2VFdmVudCA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgcHVibGljIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4gdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gIUdsb2JhbFNjb3BlLnZhbHVlLmRvY3VtZW50SXNIaWRkZW47XG4gICAgY29uc3QgdXNlRXZlbnRDYXB0dXJlUGhhc2UgPSBmYWxzZTtcblxuICAgIEdsb2JhbFNjb3BlLnZhbHVlLmFkZERvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS52YWx1ZS5yZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZUV2ZW50LCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB1c2VFdmVudENhcHR1cmVQaGFzZSkpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGUgPSAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWQgPSAoL0FuZHJvaWQvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzTW9iaWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG4vLyBUaGUgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZpbGUgaXMgdXNlZCBpbiB0aGUgc2lsZW50IGJ1aWxkXG4vLyB0byBjb25zdHJhaW4gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlcy5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIge1xuICBzdGF0aWMgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5xdWV1ZU1pY3JvdGFzayh0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbi5iaW5kKHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCh0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbi5iaW5kKHRoaXMpLCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGltZzogSFRNTEltYWdlRWxlbWVudCB8IG51bGwgPSBHbG9iYWxTY29wZS52YWx1ZS5kb2N1bWVudENyZWF0ZUVsZW1lbnQ8SFRNTEltYWdlRWxlbWVudD4oJ2ltZycpO1xuXG4gICAgaW1nLnNyYyA9IEdsb2JhbFNjb3BlLnZhbHVlLlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxMGUrNyldKSk7IC8vIDEwME1iIG9yIGxlc3Mgb3IgbW9yZSBkZXBlbmRpbmcgb24gYXMgeW91IHdpc2ggdG8gZm9yY2UvaW52b2tlIEdDIGN5Y2xlIHJ1blxuICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcblxuICAgICAgaW1nID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkOiBib29sZWFuID0gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPiA9IG5ldyBTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmRvd25saW5rID8/IEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmRvd25saW5rTWF4ID8/IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUgPz8gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8udHlwZSA/PyAnVW5rbm93bic7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8ucnR0ID8/IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcblxuICAgIEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcikpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcblxuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4gfCBudWxsKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFRyYW5zY2VpdmVyc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgdHlwZW9mIEdsb2JhbFNjb3BlLnZhbHVlPy5kb2N1bWVudENyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBTY3JpcHRUcmFuc2Zvcm0gIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkXG4gICAgICAmJiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpO1xuICB9XG5cbiAgc3RhdGljIGdldCBlcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnU2FmYXJpJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElHbG9iYWxTY29wZSBmcm9tICcuL0lHbG9iYWxTY29wZSc7XG5pbXBvcnQgSURvY3VtZW50IGZyb20gJy4vSURvY3VtZW50JztcbmltcG9ydCBJTG9jYXRpb24gZnJvbSAnLi9JTG9jYXRpb24nO1xuaW1wb3J0IElOZXR3b3JrSW5mb3JtYXRpb24gZnJvbSAnLi9JTmV0d29ya0luZm9ybWF0aW9uJztcbmltcG9ydCBJTmF2aWdhdG9yIGZyb20gJy4vSU5hdmlnYXRvcic7XG5pbXBvcnQgSVdpbmRvdyBmcm9tICcuL0lXaW5kb3cnO1xuaW1wb3J0IElQcm92aWRlZEdsb2JhbFNjb3BlIGZyb20gJy4vSVByb3ZpZGVkR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5cbnR5cGUgQnJvd3Nlckdsb2JhbFNjb3BlID0gSVByb3ZpZGVkR2xvYmFsU2NvcGU7XG5cbmNvbnN0IGJyb3dzZXJHbG9iYWxTY29wZTogQnJvd3Nlckdsb2JhbFNjb3BlID0ge1xuICBkb2N1bWVudCxcbiAgbG9jYXRpb24sXG4gIG5hdmlnYXRvcixcbiAgd2luZG93XG59O1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsU2NvcGUgaW1wbGVtZW50cyBJR2xvYmFsU2NvcGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5zdGFuY2UgPSBuZXcgU3ViamVjdDxJR2xvYmFsU2NvcGU+KG5ldyBHbG9iYWxTY29wZShicm93c2VyR2xvYmFsU2NvcGUpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5zdGFuY2U6IFJlYWRPbmx5U3ViamVjdDxJR2xvYmFsU2NvcGU+ID0gbmV3IFJlYWRPbmx5U3ViamVjdChHbG9iYWxTY29wZS5faW5zdGFuY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogSURvY3VtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhdGlvbjogSUxvY2F0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0b3I6IElOYXZpZ2F0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpbmRvdzogSVdpbmRvdztcblxuICBjb25zdHJ1Y3RvcihnbG9iYWxTY29wZTogQnJvd3Nlckdsb2JhbFNjb3BlKSB7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBnbG9iYWxTY29wZS5kb2N1bWVudDtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGdsb2JhbFNjb3BlLmxvY2F0aW9uO1xuICAgIHRoaXMuX25hdmlnYXRvciA9IGdsb2JhbFNjb3BlLm5hdmlnYXRvcjtcbiAgICB0aGlzLl93aW5kb3cgPSBnbG9iYWxTY29wZS53aW5kb3c7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCB0byBtYWludGFpbiBBUEkgY29uc2lzdGVuY3kgd2l0aCBQcm92aWRlZEdsb2JhbFNjb3BlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHB1YmxpYyBzdGF0aWMgc2V0SW5zdGFuY2UocHJvdmlkZWRHbG9iYWxTY29wZTogSVByb3ZpZGVkR2xvYmFsU2NvcGUpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHRoZSBHbG9iYWxTY29wZScpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBSZWFkT25seVN1YmplY3Q8SUdsb2JhbFNjb3BlPiB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLl9yZWFkT25seUluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzdWJzY3JpYmUoY2FsbGJhY2s6ICh2YWx1ZTogSUdsb2JhbFNjb3BlIHwgbnVsbCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUuX3JlYWRPbmx5SW5zdGFuY2Uuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGdldCBGb3JtRGF0YSgpOiB0eXBlb2YgRm9ybURhdGEge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuRm9ybURhdGE7XG4gIH1cblxuICBnZXQgTWVkaWFTdHJlYW0oKTogdHlwZW9mIE1lZGlhU3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93Lk1lZGlhU3RyZWFtO1xuICB9XG5cbiAgZ2V0IE1lZGlhU3RyZWFtVHJhY2soKTogdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2sge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuTWVkaWFTdHJlYW1UcmFjaztcbiAgfVxuXG4gIGdldCBSVENQZWVyQ29ubmVjdGlvbigpOiB0eXBlb2YgUlRDUGVlckNvbm5lY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuUlRDUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKCk6IHR5cGVvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuUlRDU2Vzc2lvbkRlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IFJUQ0ljZUNhbmRpZGF0ZSgpOiB0eXBlb2YgUlRDSWNlQ2FuZGlkYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlJUQ0ljZUNhbmRpZGF0ZTtcbiAgfVxuXG4gIGdldCBVUkwoKTogdHlwZW9mIFVSTCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5VUkw7XG4gIH1cblxuICBnZXQgVVJMU2VhcmNoUGFyYW1zKCk6IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuVVJMU2VhcmNoUGFyYW1zO1xuICB9XG5cbiAgZ2V0IGFkZERvY3VtZW50RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgYWRkV2luZG93RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBjbGVhckludGVydmFsKCk6IChpZD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5jbGVhckludGVydmFsLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBjbGVhclRpbWVvdXQoKTogKGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmNsZWFyVGltZW91dC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRDcmVhdGVFbGVtZW50KCk6IDxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHRhZzogc3RyaW5nKSA9PiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudEhhc0ZvY3VzKCk6ICgpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5oYXNGb2N1cy5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudElzSGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX2RvY3VtZW50LmhpZGRlbjtcbiAgfVxuXG4gIGdldCBkb2N1bWVudFF1ZXJ5U2VsZWN0b3IoKTogPEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudD4odGFnOiBzdHJpbmcpID0+IEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3Rvci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBmZXRjaCgpOiAoaW5wdXQ6IHN0cmluZyB8IFVSTCB8IFJlcXVlc3QsIGluaXQ/OiBSZXF1ZXN0SW5pdCkgPT4gUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuZmV0Y2guYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uSG9zdG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWU7XG4gIH1cblxuICBnZXQgbG9jYXRpb25TZWFyY2goKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24uc2VhcmNoO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRvckNvbm5lY3Rpb24oKTogSU5ldHdvcmtJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRvci5jb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRvcklzT25MaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0b3Iub25MaW5lO1xuICB9XG5cbiAgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgdGhpcy5fd2luZG93WydfX3BhZ2VMb2FkVGltZSddO1xuICB9XG5cbiAgZ2V0IHF1ZXVlTWljcm90YXNrKCk6IChtaWNyb3Rhc2s6ICgpID0+IHZvaWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cucXVldWVNaWNyb3Rhc2suYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgcmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBzZXRJbnRlcnZhbCgpOiAoaGFuZGxlcjogc3RyaW5nIHwgRnVuY3Rpb24sIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgc2V0VGltZW91dCgpOiAoaGFuZGxlcjogc3RyaW5nIHwgRnVuY3Rpb24sIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5zZXRUaW1lb3V0LmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTY29wZS5nZXRJbnN0YW5jZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuLy8gQXMgZmxvYXQgaW4gRUNNQVNjcmlwdCB1c2UgNjQtYml0IGZvcm1hdCBpdCBjYW5ub3QgaGF2ZS9oYW5kbGUgbW9yZSB0aGFuIDE1IHN5bWJvbHMgYWZ0ZXIgZG90LlxuY29uc3QgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90ID0gMTU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE51bWJlcnMge1xuICBzdGF0aWMgY291bnROdW1iZXJMZW5ndGgodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgPSAwO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICBudW1iZXIgKj0gLTE7XG4gICAgICBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcnMuY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKG51bWJlcikgKyBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlICsgKG51bWJlciAhPT0gTWF0aC5mbG9vcihudW1iZXIpID8gTnVtYmVycy5jb3VudERpZ2l0c0FmdGVyRGVjaW1hbChudW1iZXIpICsgMSA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZml4Um91bmRpbmcodmFsdWU6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHBvd2VyKSAvIHBvd2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBkaWdpdHNCZWZvcmVEZWNpbWFsID0gMTtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICB3aGlsZSAobnVtYmVyID49IDEwKSB7XG4gICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDtcbiAgICAgIGRpZ2l0c0JlZm9yZURlY2ltYWwrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnaXRzQmVmb3JlRGVjaW1hbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgbW9kaWZpZWRWYWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpO1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICB3aGlsZSAobW9kaWZpZWRWYWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSAmJiBjb3VudCA8IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCkge1xuICAgICAgY291bnQrKztcbiAgICAgIG1vZGlmaWVkVmFsdWUgPSBOdW1iZXJzLmZpeFJvdW5kaW5nKG9yaWdpbmFsVmFsdWUsIGNvdW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5ncyB7XG4gIHN0YXRpYyByYW5kb20obGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbTEzQ2hhcmFjdGVycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCAxNSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb3BzOiBudW1iZXIgPSBNYXRoLmNlaWwobGVuZ3RoIC8gMTMpO1xuXG4gICAgcmV0dXJuIG5ldyBBcnJheShsb29wcykuZmlsbChyYW5kb20xM0NoYXJhY3RlcnMpLnJlZHVjZSgoc3RyaW5nLCBmdW5jKSA9PiB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgZnVuYygpO1xuICAgIH0sICcnKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmdzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVaW50OEFycmF5cyB7XG4gIHB1YmxpYyBzdGF0aWMgaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UodGFyZ2V0Qnl0ZVNlcXVlbmNlOiBVaW50OEFycmF5LCBkYXRhOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRhcmdldEJ5dGVTZXF1ZW5jZS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBpZiAodGFyZ2V0Qnl0ZVNlcXVlbmNlW2lkeF0gIT09IGRhdGFbb2Zmc2V0ICsgaWR4XSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQodGFyZ2V0Qnl0ZVNlcXVlbmNlOiBVaW50OEFycmF5LCBkYXRhOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQgPSAtMSk6IG51bWJlciB7XG4gICAgZm9yIChsZXQgY3VycmVudEluZGV4ID0gb2Zmc2V0OyBjdXJyZW50SW5kZXggPD0gZGF0YS5ieXRlTGVuZ3RoOyBjdXJyZW50SW5kZXgrKykge1xuICAgICAgaWYgKFVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKHRhcmdldEJ5dGVTZXF1ZW5jZSwgZGF0YSwgY3VycmVudEluZGV4KSkge1xuICAgICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5KGRhdGE6IFVpbnQ4QXJyYXksIHV1aWRCeXRlTGVuZ3RoID0gMTYpOiBzdHJpbmcge1xuICAgIGNvbnN0IHV1aWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB1dWlkQnl0ZUxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGNvbnN0IGJ5dGVIZXggPSBkYXRhW2lkeF0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICAgIHV1aWQucHVzaChieXRlSGV4KTtcblxuICAgICAgaWYgKGlkeCA9PT0gMyB8fCBpZHggPT09IDUgfHwgaWR4ID09PSA3IHx8IGlkeCA9PT0gOSkge1xuICAgICAgICB1dWlkLnB1c2goJy0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXVpZC5qb2luKCcnKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVaW50OEFycmF5cyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKHg6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgWyR7eH1dLiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkYCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2VydFVucmVhY2hhYmxlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpfSBbJHtjYXRlZ29yeX1dIFske0xvZ2dpbmdMZXZlbFtsb2dMZXZlbF19XSAke21lc3NhZ2V9YDtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsTWVzc2FnZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGZ1bGxNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvcjogc3RyaW5nLCBjdXJyZW50VmFsdWU6IHN0cmluZyB8IEVycm9yLCBpbmRleDogbnVtYmVyLCBhcnJheTogc3RyaW5nW10pID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLm1lc3NhZ2UpICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZTogb2JqZWN0W10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoXywgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpIGFzIExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKSBhcyBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1cmwgbXVzdCBiZSBhIHN0cmluZyBpbnN0ZWFkIHJlY2VpdmVkIFske3R5cGVvZiB1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljc0ZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5jb25zdCBtYXhCdWZmZXJlZFJlY29yZHMgPSAyMDQ4O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignTWV0cmljc1NlcnZpY2UnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZhaWx1cmVDb3VudCA9IDA7XG4gIHByaXZhdGUgX2RvbWFpbiA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuZ2V0TG9jYXRpb25Ib3N0bmFtZUZyb21HbG9iYWxTY29wZSgpLnRoZW4obG9jYXRpb25Ib3N0bmFtZSA9PiB7XG4gICAgICB0aGlzLl9kb21haW4gPSBsb2NhdGlvbkhvc3RuYW1lID8/ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYXRpb25Ib3N0bmFtZUZyb21HbG9iYWxTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KHJlc29sdmUgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gR2xvYmFsU2NvcGUuc3Vic2NyaWJlKGdsb2JhbFNjb3BlID0+IHtcbiAgICAgICAgaWYgKGdsb2JhbFNjb3BlKSB7XG4gICAgICAgICAgcmVzb2x2ZShnbG9iYWxTY29wZS5sb2NhdGlvbkhvc3RuYW1lKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24uZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBtZXRyaWNzTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nIHx8ICFHbG9iYWxTY29wZS52YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5lbnVtIE1ldHJpY3NUeXBlIHtcbiAgVGltZVRvRmlyc3RGcmFtZSxcbiAgQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgU3RhbGxlZCxcbiAgQnVmZmVyaW5nLFxuICBTZXR1cENvbXBsZXRlZCxcbiAgU2V0dXBGYWlsZWQsXG4gIFJvdW5kVHJpcFRpbWUsXG4gIERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICBOZXR3b3JrVHlwZSxcbiAgUmVzb2x1dGlvbkNoYW5nZWQsXG4gIEFwcGxpY2F0aW9uRm9yZWdyb3VuZCxcbiAgQXBwbGljYXRpb25CYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJpY3NUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfSB8IG51bGw7XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScsIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IGZhbHNlKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24gJiYgIWVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkID8ge2VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc30gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbilcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lOiBzdHJpbmcpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nID0gJ3Vua25vd24nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmcgPSAndW5rbm93bic7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCAmJiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uPy5zZHApIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtOiB7aWQ6IHN0cmluZ30pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtICh0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wIHx8IDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy52aWRlbz8uZnJhbWVzRGVjb2RlZCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy52aWRlbz8uZnJhbWVzRGVjb2RlZCkge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjIHx8ICd1bmtub3duJztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgfHwgJ3Vua25vd24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgvKD86XnxbXFxyXFxuXSltPS8pO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBydG1hcCA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpPy5zcGxpdCgnICcpWzNdIHx8ICcnO1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7cnRtYXB9YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmU/LnNwbGl0KCcgJylbMV0gfHwgJyc7XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24/LmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIHx8IG51bGw7XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIHx8IG51bGw7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24/LmNvbm5lY3Rpb25TdGF0ZSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24/LmljZUNvbm5lY3Rpb25TdGF0ZSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0VHJhbnNjZWl2ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRUcmFuc2NlaXZlcnMgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFJlY2VpdmVycygpOiBSVENSdHBSZWNlaXZlcltdIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcjxUIGV4dGVuZHMga2V5b2YgUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcD4odHlwZTogVCwgbGlzdGVuZXI6ICh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1BlZXJDb25uZWN0aW9uRXZlbnRNYXBbVF0pID0+IHVua25vd24sIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBSVENQZWVyQ29ubmVjdGlvbkV2ZW50TWFwPih0eXBlOiBULCBsaXN0ZW5lcjogKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFtUXSkgPT4gdW5rbm93biwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRyYW5zY2VpdmVycygpOiBSVENSdHBUcmFuc2NlaXZlcltdIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5jbG9zZSgpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPihyZXNvbHZlUGVlckNvbm5lY3Rpb25Qcm9taXNlID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS5zdWJzY3JpYmUoZ2xvYmFsU2NvcGUgPT4ge1xuICAgICAgICBpZiAoIWdsb2JhbFNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZVBlZXJDb25uZWN0aW9uUHJvbWlzZShuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAodmFsdWU6IFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBUW10sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6ICgodmFsdWU6IFQpID0+IHZvaWQpW107XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAodmFsdWU6IFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KHZhbHVlOiBUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9JR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtHbG9iYWxTY29wZX0gZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IHtTaGFrYVBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL0lTaGFrYVBsYXllcic7XG5pbXBvcnQge0hsc1BsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9JV2ViUGxheWVyJztcbmltcG9ydCBJUHJvdmlkZWRHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9JUHJvdmlkZWRHbG9iYWxTY29wZSc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCkudmFsdWU/LnBhZ2VMb2FkVGltZSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86ICh2YWx1ZTogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAodmFsdWU6IChwbGF5ZXI6IFNoYWthUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAodmFsdWU6IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlcjogKHZhbHVlOiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXI6ICh2YWx1ZTogKHBsYXllcjogU2hha2FQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXI6ICh2YWx1ZTogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB8IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0O1xuICB9XG5cbiAgc3RhdGljIGdldCBza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6ICh2YWx1ZTogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKHZhbHVlOiAocGxheWVyOiBTaGFrYVBsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKHZhbHVlOiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSA9IFNESy5wYWdlTG9hZFRpbWU7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpIGFzIFRlbGVtZXRyeUxldmVsVHlwZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0Jyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcycpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgY29uc3QgZ2xvYmFsU2NvcGUgPSBHbG9iYWxTY29wZS5nZXRJbnN0YW5jZSgpLnZhbHVlO1xuICAgICAgY29uc3QgdXJpID0gbmV3IGdsb2JhbFNjb3BlLlVSTChiYXNlVVJJVmFsdWUpO1xuXG4gICAgICB1cmkucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgb25Mb2FkKGdsb2JhbFNjb3BlOiBJR2xvYmFsU2NvcGUgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NESyBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2xvYmFsU2NvcGUuYWRkV2luZG93RXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICAgICAgU0RLLmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIFNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuICAgIFNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG4gICAgU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlOiBJSW5pdE9wdGlvbnMgJiB7Z2xvYmFsU2NvcGU/OiBJUHJvdmlkZWRHbG9iYWxTY29wZX0gPSBvcHRpb25zO1xuXG4gICAgaWYgKG9wdGlvbnNXaXRoT3B0aW9uYWxnbG9iYWxTY29wZS5nbG9iYWxTY29wZSkge1xuICAgICAgR2xvYmFsU2NvcGUuc2V0SW5zdGFuY2Uob3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlLmdsb2JhbFNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5HbG9iYWxTY29wZS5zdWJzY3JpYmUoU0RLLm9uTG9hZC5iaW5kKFNESykpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBFbmNvZGVkU3RyZWFtU2luaywge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IFN0cmVhbVRyYWNrVHJhbnNmb3JtLCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwge1N0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24sIFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbn0gZnJvbSAnLi4vZnJhbWVUaW1pbmcvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbSB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IFJlYWRPbmx5U3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogUmVhZE9ubHlTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge3RhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnfTtcbiAgICBjb25zdCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8uYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24gfCBudWxsPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD4odGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtIHwgbnVsbD4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gbmV3IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0KCk7XG4gICAgdGhpcy5jb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKGVkZ2VUb2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4odGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUuYWRkV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZykge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5jb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKGVkZ2VUb2tlbik7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBnZXQgaXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQ7XG4gIH1cblxuICBnZXQgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgZ2V0IHJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbigpOiBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG5cbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+KCd2aWRlbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggaW5zZXJ0YWJsZS1zdHJlYW1zIGFuZCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBhcmUgZW5hYmxlZCwgb25seSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBjYWxsYmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIHNpbmsgZnVuY3Rpb24gZm91bmQsIG9ubHkgdXNlIG9uZSB0eXBlIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIShGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLkVycm9yIHx8IHN0YXRlID09PSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBpbml0aWFsaXppbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50ICYmIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKHRva2VuOiBFZGdlVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSA9IHRva2VuLmNhcGFiaWxpdGllcy5maW5kKGNhcGFiaWxpdHkgPT4gY2FwYWJpbGl0eS5zdGFydHNXaXRoKCdmcmFtZS10aW1pbmctaW5mb3JtYXRpb249JykpO1xuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNhYmxpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGFzIG5vIGNhcGFiaWxpdHkgd2FzIGZvdW5kJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzQ2hhbm5lbEZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNhYmxpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGFzIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGl0IFslc10nLCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eS5zcGxpdCgnPScpWzFdXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChvcHRpb24gPT4gb3B0aW9uLnRyaW0oKSlcbiAgICAgIC5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgICAgY2FzZSAndGltZWNvZGUnOlxuICAgICAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGltZXN0YW1wcyc6XG4gICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnSWdub3JpbmcgdW5rbm93biBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gb3B0aW9uIFslc10nLCBvcHRpb24pO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGNvbmZpZ3VyYXRpb24gWyh0aW1lY29kZSBbJXNdLCB0aW1lc3RhbXBzIFslc10pXScsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIEluaXRpYWxpemluZyA9IDAsXG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyA9IDIsXG4gIFBhdXNlZCA9IDMsXG4gIFBsYXlpbmcgPSA0LFxuICBSZWNvdmVyaW5nID0gNSxcbiAgUmVjb25uZWN0aW5nID0gNixcbiAgU3RhbmRCeSA9IDcsXG4gIFN0b3BwZWQgPSA4LFxuICBVbmF1dGhvcml6ZWQgPSA5LFxuICBHZW9SZXN0cmljdGVkID0gMTAsXG4gIEdlb0Jsb2NrZWQgPSAxMSxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlID0gMTIsXG4gIENvbmZpZ3VyYXRpb25FcnJvciA9IDEzLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IgPSAxNCxcbiAgQ29ubmVjdGlvbkVycm9yID0gMTUsXG4gIENsaWVudFN0YXJ0RXJyb3IgPSAxNixcbiAgRXJyb3IgPSAxN1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50IHwgbnVsbD47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQgfCB1bmRlZmluZWQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtIHwgbnVsbD47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPjtcbiAgdmlkZW9UZWxlbWV0cnk6IFZpZGVvVGVsZW1ldHJ5IHwgbnVsbDtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWMgfCBudWxsO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYyB8IG51bGw7XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFubmVsQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMudmlkZW9UZWxlbWV0cnkgPSBudWxsO1xuICAgIHRoaXMucnRjQXVkaW9TdGF0aXN0aWMgPSBudWxsO1xuICAgIHRoaXMucnRjVmlkZW9TdGF0aXN0aWMgPSBudWxsO1xuICAgIHRoaXMuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiwgUmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuLi9mcmFtZVRpbWluZy9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQge1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvdWxkRXh0cmFjdFRpbWVjb2RlOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBpc0VuYWJsZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogU3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2hvdWxkRXh0cmFjdFRpbWVjb2RlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0VuYWJsZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgU3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPihudWxsKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCB7XG4gIHJlYWRvbmx5IGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRzdHJlYW1SZWFkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9iaXRPZmZzZXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVaW50OEFycmF5KSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5fYml0T2Zmc2V0ID0gMDtcbiAgfVxuXG4gIHB1YmxpYyByZWFkQml0cyhiaXRzVG9SZWFkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9iaXRPZmZzZXQgKyBiaXRzVG9SZWFkID4gdGhpcy5fZGF0YS5sZW5ndGggKiA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkIFske2JpdHNUb1JlYWR9XSBiaXRzIC0gb25seSBbJHt0aGlzLmdldFJlbWFpbmluZ0JpdHMoKX1dIGJpdHMgcmVtYWluaW5nIGluIHN0cmVhbWApO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgbGV0IGJpdHNSZW1haW5pbmcgPSBiaXRzVG9SZWFkO1xuXG4gICAgd2hpbGUgKGJpdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICBjb25zdCBieXRlT2Zmc2V0ID0gTWF0aC5mbG9vcih0aGlzLl9iaXRPZmZzZXQgLyA4KTtcbiAgICAgIGNvbnN0IGJpdFBvc2l0aW9uSW5CeXRlID0gdGhpcy5fYml0T2Zmc2V0ICUgODtcbiAgICAgIGNvbnN0IGJpdHNBdmFpbGFibGVJbkJ5dGUgPSA4IC0gYml0UG9zaXRpb25JbkJ5dGU7XG4gICAgICBjb25zdCBiaXRzVG9SZWFkID0gTWF0aC5taW4oYml0c1JlbWFpbmluZywgYml0c0F2YWlsYWJsZUluQnl0ZSk7XG4gICAgICAvLyBDcmVhdGUgYSBtYXNrIGZvciB0aGUgYml0cyB3ZSB3YW50IHRvIHJlYWRcbiAgICAgIGNvbnN0IG1hc2sgPSAoMSA8PCBiaXRzVG9SZWFkKSAtIDE7XG4gICAgICAvLyBTaGlmdCByaWdodCB0byBnZXQgcmlkIG9mIGxvd2VyIGJpdHMgd2UgZG9uJ3Qgd2FudFxuICAgICAgY29uc3QgYnl0ZVZhbHVlID0gKHRoaXMuX2RhdGFbYnl0ZU9mZnNldF0gPj4gKGJpdHNBdmFpbGFibGVJbkJ5dGUgLSBiaXRzVG9SZWFkKSk7XG4gICAgICAvLyBNYXNrIHRvIGtlZXAgb25seSB0aGUgYml0cyB3ZSB3YW50XG4gICAgICBjb25zdCBiaXRzID0gYnl0ZVZhbHVlICYgbWFzaztcblxuICAgICAgLy8gQWRkIHRoZXNlIGJpdHMgdG8gb3VyIHJlc3VsdFxuICAgICAgdmFsdWUgPSAodmFsdWUgPDwgYml0c1RvUmVhZCkgfCBiaXRzO1xuXG4gICAgICBiaXRzUmVtYWluaW5nIC09IGJpdHNUb1JlYWQ7XG4gICAgICB0aGlzLl9iaXRPZmZzZXQgKz0gYml0c1RvUmVhZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2tpcEJpdHMoYml0c1RvU2tpcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2JpdE9mZnNldCArIGJpdHNUb1NraXAgPiB0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNraXAgWyR7Yml0c1RvU2tpcH1dIGJpdHMgLSBvbmx5IFske3RoaXMuZ2V0UmVtYWluaW5nQml0cygpfV0gYml0cyByZW1haW5pbmcgaW4gc3RyZWFtYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYml0T2Zmc2V0ICs9IGJpdHNUb1NraXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVtYWluaW5nQml0cygpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5fZGF0YS5sZW5ndGggKiA4KSAtIHRoaXMuX2JpdE9mZnNldDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQsIHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50fSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudHMvRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi9uYWxVbml0L05hbFVuaXQnO1xuaW1wb3J0IFNlaVBheWxvYWQgZnJvbSAnLi9uYWxVbml0L1NlaVBheWxvYWQnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4vbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi9uYWxVbml0L1NlaVBheWxvYWRUeXBlJztcbmltcG9ydCBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQgZnJvbSAnLi4vLi4vRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NEJpdHN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb05hbFVuaXQobmFsVW5pdFR5cGU6IE5hbFVuaXRUeXBlLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxOYWxVbml0PikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8TmFsVW5pdD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuTmFsVW5pdCwgbmFsVW5pdEV2ZW50ID0+IHtcbiAgICAgIGlmIChuYWxVbml0RXZlbnQuZGF0YS50eXBlID09PSBuYWxVbml0VHlwZSkge1xuICAgICAgICBoYW5kbGVyKG5hbFVuaXRFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9TZWlQYXlsb2FkVHlwZShzZWlQYXlsb2FkVHlwZTogU2VpUGF5bG9hZFR5cGUsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFNlaVBheWxvYWQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxTZWlQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5TZWlQYXlsb2FkLCBzZWlQYXlsb2FkRXZlbnQgPT4ge1xuICAgICAgaWYgKHNlaVBheWxvYWRFdmVudC5kYXRhLnR5cGUgPT09IHNlaVBheWxvYWRUeXBlKSB7XG4gICAgICAgIGhhbmRsZXIoc2VpUGF5bG9hZEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb1BheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkVXVpZDogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxzdHJpbmc+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWRTdWJzY3JpcHRpb24sIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkVXVpZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHBheWxvYWRFdmVudCA9PiB7XG4gICAgICBpZiAocGF5bG9hZEV2ZW50LmRhdGEudXVpZCA9PT0gcGF5bG9hZFV1aWQpIHtcbiAgICAgICAgaGFuZGxlcihwYXlsb2FkRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gTmFsVW5pdFR5cGUge1xuICBVbnNwZWNpZmllZCA9IDAsXG4gIFNsaWNlTGF5ZXJOb25JZHJEYXRhID0gMSxcbiAgU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyID0gMixcbiAgU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyID0gMyxcbiAgU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyID0gNCxcbiAgU2xpY2VMYXllcklkckRhdGEgPSA1LFxuICBTdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uID0gNixcbiAgU2VxdWVuY2VQYXJhbWV0ZXJTZXQgPSA3LFxuICBQaWN0dXJlUGFyYW1ldGVyU2V0ID0gOCxcbiAgQWNjZXNzVW5pdERlbGltaXRlciA9IDksXG4gIEVuZE9mU2VxdWVuY2UgPSAxMCxcbiAgRW5kT2ZTdHJlYW0gPSAxMSxcbiAgRmlsbGVyRGF0YSA9IDEyLFxuICBTZXF1ZW5jZVBhcmFtdGVyU2V0RXh0ZW5zaW9uID0gMTMsXG4gIFByZWZpeE5hbFVuaXQgPSAxNCxcbiAgU3Vic2V0U2VxdWVuY2VQYXJhbXRlclNldCA9IDE1LFxuICBEZXB0aFBhcmFtdGVyU2V0ID0gMTYsXG4gIFJlc2VydmVkMTcgPSAxNyxcbiAgUmVzZXJ2ZWQxOCA9IDE4LFxuICBTbGljZUxheWVyQXV4aWxpYXJ5ID0gMTksXG4gIFNsaWNlRXh0ZW5zaW9uID0gMjAsXG4gIFNsaWNlRXh0ZW5zaW9uRGVwdGhWaWV3Q29tcG9uZW50ID0gMjEsXG4gIFJlc2VydmVkMjIgPSAyMixcbiAgUmVzZXJ2ZXJkMjMgPSAyMyxcbiAgVW5zcGVjaWZpZWQyNCA9IDI0LFxuICBVbnNwZWNpZmllZDI1ID0gMjUsXG4gIFVuc3BlY2lmaWVkMjYgPSAyNixcbiAgVW5zcGVjaWZpZWQyNyA9IDI3LFxuICBVbnNwZWNpZmllZDI4ID0gMjgsXG4gIFVuc3BlY2lmaWVkMjkgPSAyOSxcbiAgVW5zcGVjaWZpZWQzMCA9IDMwLFxuICBVbnNwZWNpZmllZDMxID0gMzFcbn1cblxuZXhwb3J0IGRlZmF1bHQgTmFsVW5pdFR5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gU2VpUGF5bG9hZFR5cGUge1xuICBCdWZmZXJpbmdQZXJpb2QgPSAwLFxuICBQaWN0dXJlVGltaW5nID0gMSxcbiAgUGFuU2NhblJlY3QgPSAyLFxuICBGaWxsZXJQYXlsb2FkID0gMyxcbiAgVXNlckRhdGFSZWdpc3RlcmVkID0gNCxcbiAgVXNlckRhdGFVbnJlZ2lzdGVyZWQgPSA1LFxuICBSZWNvdmVyeVBvaW50ID0gNixcbiAgRGVjUmVmUGljTWFya2luZ1JlcGVpdGlvbiA9IDcsXG4gIFNwYXJlUGljID0gOCxcbiAgU2NlbmVJbmZvID0gOSxcbiAgU3ViU2VxSW5mbyA9IDEwLFxuICBTdWJTZXFMYXllckNoYXJhY3RlcmlzdGljcyA9IDExLFxuICBTdWJTZXFDaGFyYWN0ZXJpc3RpY3MgPSAxMixcbiAgRnVsbEZyYW1lRnJlZXplID0gMTMsXG4gIEZ1bGxGcmFtZUZyZWV6ZVJlbGVhc2UgPSAxNCxcbiAgRnVsbEZyYW1lU25hcHNob3QgPSAxNSxcbiAgUHJvZ3Jlc3NpdmVSZWZpbmVtZW50U2VnbWVudFN0YXJ0ID0gMTYsXG4gIFByb2dyZXNzaXZlUmVmaW5lbWVudFNlZ21lbnRFbmQgPSAxNyxcbiAgTW90aW9uQ29uc3RyYWluZWRTbGljZUdyb3VwU2V0ID0gMTgsXG4gIEZpbG1HcmFpbkNoYXJhY3RlcmlzdGljID0gMTksXG4gIERlYmxvY2tpbmdGaWx0ZXJEaXNwbGF5UmVmZXJlbmNlID0gMjAsXG4gIFN0ZXJlb1ZpZGVvSW5mbyA9IDIxLFxuICBQb3N0RmlsdGVySGludCA9IDIyLFxuICBUb25lTWFwcGluZ0luZm8gPSAyMyxcbiAgU2NhbGFiaWxpdHlJbmZvID0gMjQsXG4gIFN1YlBpY1NjYWxhYmxlTGF5ZXIgPSAyNSxcbiAgTm9uUmVxdWlyZWRMYXllclJlcCA9IDI2LFxuICBQYXJpb3JpdHlMYXllckluZm8gPSAyNyxcbiAgTGF5ZXJzTm90UHJlc2VudCA9IDI4LFxuICBMYXllckRlcGVuZGVuY3lDaGFuZ2UgPSAyOSxcbiAgU2NhbGFibGVOZXN0aW5nID0gMzAsXG4gIEJhc2VMYXllclRlbXBvcmFsSHJkID0gMzEsXG4gIFF1YWxpdHlMYXllckludGVncml0eUNoZWNrID0gMzIsXG4gIFJlZHVuZGFudFBpY1Byb3BlcnR5ID0gMzMsXG4gIFRsMERlcFJlcEluZGV4ID0gMzQsXG4gIFRsU3dpdGNoaW5nUG9pbnQgPSAzNSxcbiAgUGFyYWxsZWxEZWNvZGluZ0luZm8gPSAzNixcbiAgTXZjU2NhbGFibGVOZXN0aW5nID0gMzcsXG4gIFZpZXdTY2FsYWJpbGl0eUluZm8gPSAzOCxcbiAgTXVsdGl2aWV3U2NlbmVJbmZvID0gMzksXG4gIE11bHRpdmlld0FjcXVpc2l0aW9uSW5mbyA9IDQwLFxuICBOb25SZXF1aXJlZFZpZXdDb21wb25lbnQgPSA0MSxcbiAgVmlld0RlcGVuZGVuY3lDaGFuZ2UgPSA0MixcbiAgT3BlcmF0aW9uUG9pbnRzTm90UHJlc2VudCA9IDQzLFxuICBCYXNlVmlld1RlbXBvcmFsSGRyID0gNDQsXG4gIEZyYW1lUGFja2luZ0FycmFuZ2VtZW50ID0gNDUsXG4gIE11bHRpdmlld1ZpZXdQb3NpdGlvbiA9IDQ2LFxuICBEaXNwbGF5T3JpZW50YXRpb24gPSA0NyxcbiAgTXZjZFNjYWxhYmxlTmVzdGluZyA9IDQ4LFxuICBNdmNkVmlld1NjYWxhYmlsaXR5SW5mbyA9IDQ5LFxuICBEZXB0aFJlcHJlc2VudGF0aW9uSW5mbyA9IDUwLFxuICBUaHJlZURpbWVuc2lvbmFsUmVmZXJlbmNlRGlzcGxheXNJbmZvID0gNTEsXG4gIERlcHRoVGltaW5nID0gNTIsXG4gIERlcHRoU2FtcGxpbmdJbmZvID0gNTMsXG4gIENvbnN0cmFpbmVkRGVwdGhQYXJhbWV0ZXJTZXRJZGVudGlmaWVyID0gNTQsXG4gIEdyZWVuTWV0YWRhdGEgPSA1NSxcbiAgTWFzdGVyaW5nRGlzcGxheUNvbG91clZvbHVtZXYgPSA1NixcbiAgQ29sb3VyUmVtYXBwaW5nSW5mbyA9IDU3LFxuICBDb250ZW50TGlnaHRMZXZlbEluZm8gPSA1OCxcbiAgQWx0ZXJuYXRpdmVUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IDU5LFxuICBBbWJpZW50Vmlld2luZ0Vudmlyb25tZW50ID0gNjAsXG4gIENvbnRlbnRDb2xvdXJWb2x1bWUgPSA2MSxcbiAgRXF1aXJlY3Rhbmd1bGFyUHJvamVjdGlvbiA9IDYyLFxuICBDdWJlbWFwUHJvamVjdGlvbiA9IDYzLFxuICBTcGhlcmVSb3RhdGlvbiA9IDY0LFxuICBSZWdpb253aXNlUGFja2luZyA9IDY1LFxuICBPbW5pVmlld3BvcnQgPSA2NixcbiAgQWx0ZXJuYXRpdmVEZXB0aEluZm8gPSA2NyxcbiAgU2VpTWFuaWZlc3QgPSA2OCxcbiAgU2VpUHJlZml4SW5kaWNhdGlvbiA9IDY5LFxuICBBbm5vdGF0ZWRSZWdpb25zID0gNzAsXG4gIFNodXR0ZXJJbnRlcnZhbEluZm8gPSA3MVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWlQYXlsb2FkVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBVaW50OEFycmF5cyBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL1VpbnQ4QXJyYXlzJztcbmltcG9ydCBOYWxVbml0IGZyb20gJy4uL25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgTmFsVW5pdFR5cGUgZnJvbSAnLi4vbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuLi9uYWxVbml0L1NlaVBheWxvYWQnO1xuaW1wb3J0IFNlaVBheWxvYWRUeXBlIGZyb20gJy4uL25hbFVuaXQvU2VpUGF5bG9hZFR5cGUnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQsIHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHR9IGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi9ldmVudC9ldmVudHMvRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCBmcm9tICcuLi8uLi8uLi9FbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQnO1xuaW1wb3J0IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGZyb20gJy4vdmNsL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcbmltcG9ydCBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMgZnJvbSAnLi9FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMnO1xuXG50eXBlIEV4dHJhY3RlZERhdGEgPSB7XG4gIGFubmV4QlN0YXJ0Q29kZUxlbmd0aDogMyB8IDQ7XG4gIG5hbFVuaXQ6IE5hbFVuaXQ7XG4gIHNlaVBheWxvYWRzPzogU2VpUGF5bG9hZFtdO1xufTtcblxudHlwZSBFeHRyYWN0ZWROYWxVbml0ID0ge1xuICBuYWxVbml0RGF0YTogVWludDhBcnJheTtcbiAgc2VpUGF5bG9hZHM/OiBTZWlQYXlsb2FkW107XG59O1xuXG50eXBlIEV4dHJhY3RlZFNlaVBheWxvYWQgPSB7XG4gIHBheWxvYWRUeXBlOiBTZWlQYXlsb2FkVHlwZTtcbiAgcGF5bG9hZDogVWludDhBcnJheTtcbiAgZW5kSW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXJDb25maWd1cmF0aW9uID0ge1xuICB0cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgYW5uZXhCM0J5dGVTdGFydENvZGUgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGFubmV4QjRCeXRlU3RhcnRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlaVBheWxvYWQzQnl0ZUVuZENvZGUgPSBuZXcgVWludDhBcnJheShbMHg4MCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VpUGF5bG9hZDRCeXRlRW5kQ29kZSA9IG5ldyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmNsRXh0cmFjdGlvblN0cmF0ZWd5OiBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyLCB2Y2xFeHRyYWN0aW9uU3RyYXRlZ3k6IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5KSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl92Y2xFeHRyYWN0aW9uU3RyYXRlZ3kgPSB2Y2xFeHRyYWN0aW9uU3RyYXRlZ3k7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPFVpbnQ4QXJyYXk+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuY29kZWRWaWRlb1N0cmVhbUNodW5rLCB0aGlzLnBhcnNlRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsoe2NvbnRleHQsIGRhdGE6IGNodW5rfTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgY3VycmVudEluZGV4ICs9IHRoaXMuaGFuZGxlRXh0cmFjdGVkRGF0YShjb250ZXh0LCB0aGlzLmV4dHJhY3ROYWxVbml0QXRPZmZzZXQoY2h1bmssIGN1cnJlbnRJbmRleCkpO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5RW5kT2ZDaHVuayhjb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXh0cmFjdGVkRGF0YShjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHthbm5leEJTdGFydENvZGVMZW5ndGgsIG5hbFVuaXQsIHNlaVBheWxvYWRzfTogRXh0cmFjdGVkRGF0YSk6IG51bWJlciB7XG4gICAgdGhpcy5wdWJsaXNoTmFsVW5pdChjb250ZXh0LCBuYWxVbml0KTtcbiAgICBzZWlQYXlsb2Fkcz8uZm9yRWFjaChzZWlQYXlsb2FkID0+IHRoaXMuaGFuZGxlU2VpUGF5bG9hZChjb250ZXh0LCBzZWlQYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmFsVW5pdC5kYXRhLmJ5dGVMZW5ndGggKyBhbm5leEJTdGFydENvZGVMZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlaVBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBzZWlQYXlsb2FkOiBTZWlQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoU2VpUGF5bG9hZChjb250ZXh0LCBzZWlQYXlsb2FkKTtcblxuICAgIHN3aXRjaCAoc2VpUGF5bG9hZC50eXBlKSB7XG4gICAgICBjYXNlIFNlaVBheWxvYWRUeXBlLlVzZXJEYXRhVW5yZWdpc3RlcmVkOlxuICAgICAgICB0aGlzLmhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZChjb250ZXh0LCBzZWlQYXlsb2FkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXlsb2FkVXVpZCA9IFVpbnQ4QXJyYXlzLmdldFV1aWRTdHJpbmdGcm9tVWludDhBcnJheShzZWlQYXlsb2FkLmRhdGEuc3ViYXJyYXkoMCwgMTYpKTtcbiAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHNlaVBheWxvYWQuZGF0YS5zdWJhcnJheSgxNik7XG5cbiAgICB0aGlzLnB1Ymxpc2hQYXlsb2FkKGNvbnRleHQsIHtcbiAgICAgIHV1aWQ6IHBheWxvYWRVdWlkLFxuICAgICAgZGF0YTogcGF5bG9hZERhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaE5hbFVuaXQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBuYWxVbml0OiBOYWxVbml0KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxOYWxVbml0PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5OYWxVbml0LCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogbmFsVW5pdFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoU2VpUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPFNlaVBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlNlaVBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBzZWlQYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgcGF5bG9hZDogRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUVuZE9mQ2h1bmsoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxudWxsPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmRPZkNodW5rLCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TmFsVW5pdEF0T2Zmc2V0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZERhdGEge1xuICAgIGNvbnN0IGFubmV4QlN0YXJ0Q29kZUxlbmd0aCA9IGNodW5rW29mZnNldCArIDJdID09PSAweDAxID8gMyA6IDQ7XG4gICAgY29uc3QgbmFsVW5pdEhlYWRlckluZGV4ID0gb2Zmc2V0ICsgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoO1xuICAgIGNvbnN0IG5hbFVuaXRUeXBlID0gY2h1bmtbbmFsVW5pdEhlYWRlckluZGV4XSAmIDB4MWY7XG4gICAgbGV0IGV4dHJhY3RlZERhdGE7XG5cbiAgICBzd2l0Y2ggKG5hbFVuaXRUeXBlKSB7XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlTGF5ZXJOb25JZHJEYXRhOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZURhdGFQYXJ0aXRpb25BTGF5ZXI6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlRGF0YVBhcnRpdGlvbkJMYXllcjpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZUxheWVySWRyRGF0YTpcbiAgICAgICAgZXh0cmFjdGVkRGF0YSA9IHRoaXMuX3ZjbEV4dHJhY3Rpb25TdHJhdGVneS5leHRyYWN0VmNsTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uOlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0U2VpTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZXh0cmFjdGVkRGF0YSA9IHRoaXMuZXh0cmFjdE5vblZjbE5hbFVuaXQoY2h1bmssIG5hbFVuaXRIZWFkZXJJbmRleCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFubmV4QlN0YXJ0Q29kZUxlbmd0aCxcbiAgICAgIG5hbFVuaXQ6IHtcbiAgICAgICAgdHlwZTogbmFsVW5pdFR5cGUsXG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZERhdGEubmFsVW5pdERhdGFcbiAgICAgIH0sXG4gICAgICBzZWlQYXlsb2FkczogZXh0cmFjdGVkRGF0YS5zZWlQYXlsb2Fkc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RTZWlOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBvZmZzZXQgKyAxO1xuICAgIGNvbnN0IHNlaVBheWxvYWRzOiBTZWlQYXlsb2FkW10gPSBbXTtcblxuICAgIHdoaWxlIChcbiAgICAgICFVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLl9zZWlQYXlsb2FkNEJ5dGVFbmRDb2RlLCBjaHVuaywgY3VycmVudEluZGV4KVxuICAgICAgJiYgIVVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuX3NlaVBheWxvYWQzQnl0ZUVuZENvZGUsIGNodW5rLCBjdXJyZW50SW5kZXgpXG4gICAgICAmJiBjdXJyZW50SW5kZXggPCBjaHVuay5ieXRlTGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zdCBleHRyYWN0ZWRTZWlQYXlsb2FkID0gdGhpcy5leHRyYWN0U2VpUGF5bG9hZChjaHVuaywgY3VycmVudEluZGV4KTtcblxuICAgICAgc2VpUGF5bG9hZHMucHVzaCh7XG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZFNlaVBheWxvYWQucGF5bG9hZCxcbiAgICAgICAgdHlwZTogZXh0cmFjdGVkU2VpUGF5bG9hZC5wYXlsb2FkVHlwZVxuICAgICAgfSk7XG4gICAgICBjdXJyZW50SW5kZXggPSBleHRyYWN0ZWRTZWlQYXlsb2FkLmVuZEluZGV4O1xuICAgIH1cblxuICAgIGN1cnJlbnRJbmRleCsrO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIGN1cnJlbnRJbmRleCksXG4gICAgICBzZWlQYXlsb2Fkc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3ROb25WY2xOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGNvbnN0IG5leHRBbm5leEJTdGFydENvZGVJbmRleCA9IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuZmluZEFubmV4QlN0YXJ0SW5kZXhGcm9tT2Zmc2V0KGNodW5rLCBvZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuXG4gICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0LCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXgpfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlaVBheWxvYWQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkU2VpUGF5bG9hZCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldDtcbiAgICBsZXQgZmZDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoY2h1bmtbY3VycmVudEluZGV4XSA9PT0gMHhmZikge1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICBmZkNvdW50Kys7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZFR5cGUgPSBmZkNvdW50ICogMjU1ICsgY2h1bmtbY3VycmVudEluZGV4XTtcblxuICAgIGN1cnJlbnRJbmRleCsrO1xuICAgIGZmQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGNodW5rW2N1cnJlbnRJbmRleF0gPT09IDB4ZmYpIHtcbiAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgZmZDb3VudCsrO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWRTaXplID0gZmZDb3VudCAqIDI1NSArIGNodW5rW2N1cnJlbnRJbmRleF07XG5cbiAgICBjdXJyZW50SW5kZXgrKztcblxuICAgIGNvbnN0IGVuZEluZGV4ID0gY3VycmVudEluZGV4ICsgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLmdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhjaHVuaywgY3VycmVudEluZGV4LCBwYXlsb2FkU2l6ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF5bG9hZFR5cGUsXG4gICAgICBwYXlsb2FkOiBjaHVuay5zdWJhcnJheShjdXJyZW50SW5kZXgsIGVuZEluZGV4KSxcbiAgICAgIGVuZEluZGV4XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZmluZEFubmV4QlN0YXJ0SW5kZXhGcm9tT2Zmc2V0KGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbmRleDQgPSBVaW50OEFycmF5cy5maW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0KEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUsIGRhdGEsIG9mZnNldCwgcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQpO1xuXG4gICAgaWYgKGluZGV4NCAhPT0gcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQpIHtcbiAgICAgIHJldHVybiBpbmRleDQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFVpbnQ4QXJyYXlzLmZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZSwgZGF0YSwgb2Zmc2V0LCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIHtcbiAgcHVibGljIHN0YXRpYyBnZXRPZmZzZXRXaXRoRXhwYW5kZWRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoYnVmZmVyOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbnVtYmVyT2ZOb25FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGxlYWRpbmdaZXJvQnl0ZXMgPSAwO1xuICAgIGxldCBudW1iZXJPZkJ5dGVzVmlzaXRlZCA9IDA7XG4gICAgbGV0IG51bWJlck9mQnl0ZXNUb1NlZWsgPSBudW1iZXJPZk5vbkVtdWxhdGlvblByZXZlbnRpb25CeXRlcztcblxuICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyssIG51bWJlck9mQnl0ZXNWaXNpdGVkKyspIHtcbiAgICAgIGlmIChudW1iZXJPZkJ5dGVzVG9TZWVrID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAobGVhZGluZ1plcm9CeXRlcyA9PT0gMiAmJiBidWZmZXJbaV0gPT09IDB4MDMpIHtcbiAgICAgICAgbGVhZGluZ1plcm9CeXRlcyA9IDA7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWZmZXJbaV0gPT09IDB4MDApIHtcbiAgICAgICAgbGVhZGluZ1plcm9CeXRlcysrO1xuICAgICAgfSBlbHNlIGlmIChsZWFkaW5nWmVyb0J5dGVzID4gMCkge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzID0gMDtcbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZCeXRlc1RvU2Vlay0tO1xuICAgIH1cblxuICAgIHJldHVybiBudW1iZXJPZkJ5dGVzVmlzaXRlZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGJ1ZmZlcjogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICBsZXQgb3V0T2Zmc2V0ID0gMDtcbiAgICBsZXQgZWJzcE9mZnNldCA9IDA7XG5cbiAgICBmb3IgKGxldCBwcmV2ZW50aW9uQnl0ZUlkeCA9IDI7IHByZXZlbnRpb25CeXRlSWR4IDwgYnVmZmVyLmJ5dGVMZW5ndGg7IHByZXZlbnRpb25CeXRlSWR4KyspIHtcbiAgICAgIGlmIChidWZmZXJbcHJldmVudGlvbkJ5dGVJZHhdID09PSAweDAzICYmIGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeCAtIDFdID09PSAweDAwICYmIGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeCAtIDJdID09PSAweDAwKSB7XG4gICAgICAgIG91dHB1dC5zZXQoYnVmZmVyLnN1YmFycmF5KGVic3BPZmZzZXQsIHByZXZlbnRpb25CeXRlSWR4KSwgb3V0T2Zmc2V0KTtcbiAgICAgICAgb3V0T2Zmc2V0ICs9IHByZXZlbnRpb25CeXRlSWR4IC0gZWJzcE9mZnNldDtcbiAgICAgICAgZWJzcE9mZnNldCA9IHByZXZlbnRpb25CeXRlSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWJzcE9mZnNldCA8IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICBvdXRwdXQuc2V0KGJ1ZmZlci5zdWJhcnJheShlYnNwT2Zmc2V0KSwgb3V0T2Zmc2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJpdHN0cmVhbVJlYWRlciBmcm9tICcuLi8uLi8uLi9CaXRzdHJlYW1SZWFkZXInO1xuaW1wb3J0IEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyBmcm9tICcuL0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyc7XG5cbmVudW0gUGljU3RydWN0IHtcbiAgUHJvZ3Jlc3NpdmVGcmFtZSA9IDAsXG4gIFRvcEZpZWxkID0gMSxcbiAgQm90dG9tRmllbGQgPSAyLFxuICBUb3BGaWVsZEJvdHRvbUZpZWxkID0gMyxcbiAgQm90dG9tRmllbGRUb3BGaWVsZCA9IDQsXG4gIFRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkID0gNSxcbiAgQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQgPSA2LFxuICBGcmFtZURvdWJsaW5nID0gNyxcbiAgRnJhbWVUcmlwbGluZyA9IDhcbn1cblxuZXhwb3J0IHR5cGUgUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcgPSB7XG4gIHBpY1N0cnVjdFByZXNlbnRGbGFnOiBib29sZWFuO1xufSAmIChcbiAge1xuICAgIGNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnOiB0cnVlO1xuICAgIGNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMTogbnVtYmVyO1xuICAgIGRwYk91dHB1dERlbGF5TGVuZ3RoTWludXMxOiBudW1iZXI7XG4gIH1cbiAgfCB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IGZhbHNlO1xuICB9XG4pO1xuXG5leHBvcnQgdHlwZSBDbG9ja1RpbWVzdGFtcCA9IHtcbiAgY3RUeXBlOiBudW1iZXI7XG4gIG51aXRGaWVsZEJhc2VkRmxhZzogYm9vbGVhbjtcbiAgY291bnRpbmdUeXBlOiBudW1iZXI7XG4gIGZ1bGxUaW1lc3RhbXBGbGFnOiBib29sZWFuO1xuICBkaXNjb250aW51aXR5RmxhZzogYm9vbGVhbjtcbiAgY250RHJvcHBlZEZsYWc6IGJvb2xlYW47XG4gIG5GcmFtZXM6IG51bWJlcjtcbiAgc2Vjb25kcz86IG51bWJlcjtcbiAgbWludXRlcz86IG51bWJlcjtcbiAgaG91cnM/OiBudW1iZXI7XG4gIHRpbWVPZmZzZXQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBQaWN0dXJlVGltaW5nID0ge1xuICBwaWNTdHJ1Y3Q6IHVuZGVmaW5lZCB8IHtcbiAgICBudW1DbG9ja1RTOiBudW1iZXI7XG4gICAgY2xvY2tUaW1lc3RhbXBzOiBBcnJheTx7XG4gICAgICBjbG9ja1RpbWVzdGFtcEZsYWc6IGZhbHNlO1xuICAgIH0gfCB7XG4gICAgICBjbG9ja1RpbWVzdGFtcEZsYWc6IHRydWU7XG4gICAgICBjbG9ja1RpbWVzdGFtcDogQ2xvY2tUaW1lc3RhbXA7XG4gICAgfT47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaWN0dXJlVGltaW5nUGFyc2VyIHtcbiAgcHVibGljIHBhcnNlKGRhdGE6IFVpbnQ4QXJyYXksIGNvbmZpZzogUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcpOiBQaWN0dXJlVGltaW5nIHtcbiAgICBjb25zdCBiaXRzdHJlYW1SZWFkZXIgPSBuZXcgQml0c3RyZWFtUmVhZGVyKEVtdWxhdGlvblByZXZlbnRpb25CeXRlcy5yZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoZGF0YSkpO1xuICAgIGNvbnN0IHBpY3R1cmVUaW1pbmc6IFBpY3R1cmVUaW1pbmcgPSB7cGljU3RydWN0OiB1bmRlZmluZWR9O1xuXG4gICAgaWYgKGNvbmZpZy5jcGJEcGJEZWxheXNQcmVzZW50RmxhZykge1xuICAgICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBDUEIgYW5kIERQQiBkZWxheXMgYXQgdGhlIG1vbWVudFxuICAgICAgYml0c3RyZWFtUmVhZGVyLnNraXBCaXRzKGNvbmZpZy5jcGJSZW1vdmFsRGVsYXlMZW5ndGhNaW51czEgKyAxKTtcbiAgICAgIGJpdHN0cmVhbVJlYWRlci5za2lwQml0cyhjb25maWcuZHBiT3V0cHV0RGVsYXlMZW5ndGhNaW51czEgKyAxKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnBpY1N0cnVjdFByZXNlbnRGbGFnKSB7XG4gICAgICBjb25zdCBudW1DbG9ja1RTID0gdGhpcy5jb252ZXJ0UGljU3RydWN0VG9OdW1DbG9ja1RTKGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg0KSk7XG5cbiAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0ID0ge1xuICAgICAgICBudW1DbG9ja1RTLFxuICAgICAgICBjbG9ja1RpbWVzdGFtcHM6IFtdXG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY3R1cmVUaW1pbmcucGljU3RydWN0Lm51bUNsb2NrVFM7IGkrKykge1xuICAgICAgICBjb25zdCBjbG9ja1RpbWVzdGFtcEZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgaWYgKGNsb2NrVGltZXN0YW1wRmxhZykge1xuICAgICAgICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wOiBDbG9ja1RpbWVzdGFtcCA9IHtcbiAgICAgICAgICAgIGN0VHlwZTogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDIpLFxuICAgICAgICAgICAgbnVpdEZpZWxkQmFzZWRGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBjb3VudGluZ1R5cGU6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KSxcbiAgICAgICAgICAgIGZ1bGxUaW1lc3RhbXBGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBkaXNjb250aW51aXR5RmxhZzogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxLFxuICAgICAgICAgICAgY250RHJvcHBlZEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIG5GcmFtZXM6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg4KVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoY2xvY2tUaW1lc3RhbXAuZnVsbFRpbWVzdGFtcEZsYWcpIHtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLnNlY29uZHMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5taW51dGVzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuaG91cnMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICBpZiAoc2Vjb25kc0ZsYWcpIHtcbiAgICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg2KTtcblxuICAgICAgICAgICAgICBjb25zdCBtaW51dGVzRmxhZyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMTtcblxuICAgICAgICAgICAgICBpZiAobWludXRlc0ZsYWcpIHtcbiAgICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5taW51dGVzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaG91cnNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzRmxhZykge1xuICAgICAgICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuaG91cnMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvY2tUaW1lc3RhbXAudGltZU9mZnNldCA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygyNCk7XG5cbiAgICAgICAgICBwaWN0dXJlVGltaW5nLnBpY1N0cnVjdC5jbG9ja1RpbWVzdGFtcHMucHVzaCh7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcEZsYWcsXG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0LmNsb2NrVGltZXN0YW1wcy5wdXNoKHtjbG9ja1RpbWVzdGFtcEZsYWc6IGZhbHNlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGljdHVyZVRpbWluZztcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBpY1N0cnVjdFRvTnVtQ2xvY2tUUyhwaWNTdHJ1Y3Q6IG51bWJlcik6IG51bWJlciB7XG4gICAgc3dpdGNoIChwaWNTdHJ1Y3QpIHtcbiAgICAgIGNhc2UgUGljU3RydWN0LlByb2dyZXNzaXZlRnJhbWU6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Ub3BGaWVsZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkQm90dG9tRmllbGQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Cb3R0b21GaWVsZFRvcEZpZWxkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuRnJhbWVEb3VibGluZzpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Ub3BGaWVsZEJvdHRvbUZpZWxkVG9wRmllbGRSZXBlYXRlZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkVG9wRmllbGRCb3R0b21GaWVsZFJlcGVhdGVkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuRnJhbWVUcmlwbGluZzpcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFVpbnQ4QXJyYXlzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvVWludDhBcnJheXMnO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3ksIHtFeHRyYWN0ZWROYWxVbml0fSBmcm9tICcuL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aCA9IDMyO1xuXG4gIHB1YmxpYyBleHRyYWN0VmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCA9IG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCArIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5Ll90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDtcblxuICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLCBjaHVuaywgbmV4dFBvdGVudGlhbDRCeXRlU3RhcnRDb2RlSW5kZXgpKSB7XG4gICAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGgsIG5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4KX07XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXggPSBvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGggKyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneS5fdHJ1bmNhdGVkVmNsTmFsVW5pdEJ5dGVMZW5ndGg7XG5cbiAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZSwgY2h1bmssIG5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4KSkge1xuICAgICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoLCBuZXh0UG90ZW50aWFsM0J5dGVTdGFydENvZGVJbmRleCl9O1xuICAgIH1cblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCl9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIGZyb20gJy4uL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LCB7RXh0cmFjdGVkTmFsVW5pdH0gZnJvbSAnLi9JVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kge1xuICBwdWJsaWMgZXh0cmFjdFZjbE5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgY29uc3QgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4ID0gQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5maW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoY2h1bmssIG9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG5cbiAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIG5leHRBbm5leEJTdGFydENvZGVJbmRleCl9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBFdmVudFB1Ymxpc2hlciBmcm9tICcuLi8uLi9ldmVudC9FdmVudFB1Ymxpc2hlcic7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9WYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5pbXBvcnQgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS92Y2wvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMgZnJvbSAnLi4vZW5jb2RpbmcvMjAyMy9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJztcbmltcG9ydCBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5pbXBvcnQgUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9QaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHN0cmVhbURlY29kZXJzIHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIge1xuICAgIGNvbnN0IGRlY29kZXJFdmVudFB1Ymxpc2hlciA9IG5ldyBFdmVudFB1Ymxpc2hlcigpO1xuICAgIGNvbnN0IGJpdHN0cmVhbSA9IG5ldyBIMjY0Qml0c3RyZWFtKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBuZXcgVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3koKSk7XG5cbiAgICByZXR1cm4gbmV3IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBiaXRzdHJlYW0sIHBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk6IFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIHtcbiAgICBjb25zdCBkZWNvZGVyRXZlbnRQdWJsaXNoZXIgPSBuZXcgRXZlbnRQdWJsaXNoZXIoKTtcbiAgICBjb25zdCBiaXRzdHJlYW0gPSBuZXcgSDI2NEJpdHN0cmVhbShkZWNvZGVyRXZlbnRQdWJsaXNoZXIpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgbmV3IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5KCkpO1xuICAgIGNvbnN0IGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBuZXcgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbSwgcGFyc2VyKTtcbiAgICBjb25zdCBlbmNvZGluZyA9IG5ldyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG5cbiAgICByZXR1cm4gbmV3IFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyKGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIsIGVuY29kaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCaXRzdHJlYW1EZWNvZGVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBJQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0lCaXRzdHJlYW1EZWNvZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBpbXBsZW1lbnRzIElCaXRzdHJlYW1EZWNvZGVyPEgyNjRCaXRzdHJlYW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9iaXRzdHJlYW06IEgyNjRCaXRzdHJlYW07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcnNlcjogQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyLCBiaXRzdHJlYW06IEgyNjRCaXRzdHJlYW0sIHBhcnNlcjogQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fYml0c3RyZWFtID0gYml0c3RyZWFtO1xuICAgIHRoaXMuX3BhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fcGFyc2VyKTtcbiAgfVxuXG4gIGdldCBiaXRzdHJlYW0oKTogSDI2NEJpdHN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHN0cmVhbTtcbiAgfVxuXG4gIHB1YmxpYyBkZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bms6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxVaW50OEFycmF5Pik6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIGVuY29kZWRNZWRpYVN0cmVhbUNodW5rKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IEgyNjRCaXRzdHJlYW0gZnJvbSAnLi4vY29kZWMvaDI2NC9IMjY0Qml0c3RyZWFtJztcbmltcG9ydCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzIGZyb20gJy4uL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyc7XG5pbXBvcnQgSXNvQm1mZlNlZ21lbnQgZnJvbSAnLi4vY29udGFpbmVyL2lzb2JtZmYvc2VnbWVudC9Jc29CbWZmU2VnbWVudCc7XG5pbXBvcnQgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuaW1wb3J0IElCaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSUJpdHN0cmVhbURlY29kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciBpbXBsZW1lbnRzIElCaXRzdHJlYW1EZWNvZGVyPEgyNjRCaXRzdHJlYW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5jb2Rpbmc6IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcblxuICBjb25zdHJ1Y3RvcihoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLCBlbmNvZGluZzogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMykge1xuICAgIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyO1xuICAgIHRoaXMuX2VuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcik7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2VuY29kaW5nKTtcbiAgfVxuXG4gIGdldCBiaXRzdHJlYW0oKTogSDI2NEJpdHN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIuYml0c3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuazogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci5kZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmspO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvRW1iZWRkZWREYXRhKG9uRGVjb2RlZE1lZGlhQ2h1bms6IChlbWJlZGRlZERhdGFFdmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PElzb0JtZmZTZWdtZW50PikgPT4gdm9pZCwgdHJhY2tJZD86IHN0cmluZyk6IERpc3Bvc2FibGUge1xuICAgIGlmICh0cmFja0lkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmcuc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEoZGVjb2RlZE1lZGlhQ2h1bmtFdmVudCA9PiB7XG4gICAgICAgIGlmIChkZWNvZGVkTWVkaWFDaHVua0V2ZW50LnRyYWNrSWQgPT09IHRyYWNrSWQpIHtcbiAgICAgICAgICBvbkRlY29kZWRNZWRpYUNodW5rKGRlY29kZWRNZWRpYUNodW5rRXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmcuc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEob25EZWNvZGVkTWVkaWFDaHVuayk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4uLy4uL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgTmFsVW5pdCBmcm9tICcuLi8uLi9jb2RlYy9oMjY0L25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgSXNvQm1mZlNlZ21lbnQgZnJvbSAnLi4vLi4vY29udGFpbmVyL2lzb2JtZmYvc2VnbWVudC9Jc29CbWZmU2VnbWVudCc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5cbmNvbnN0IG5vb3AgPSAoKTogdm9pZCA9PiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoID0gMzI7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkID0gJzUxMWUyMmJkLTM0YzAtNGNlZS1iNmMzLTNjNGQ0MDc2MjJjNyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwZWN0ZWRQYXlsb2FkVXVpZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZDogTWFwPHN0cmluZywgKHRyYWNrSWQ6IHN0cmluZykgPT4gdm9pZD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kOiBEaXNwb3NhYmxlID0gbmV3IERpc3Bvc2FibGUodGhpcy5lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmJpbmQodGhpcykpO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCk7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9QYXlsb2FkRXZlbnRzKCkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cygpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb05hbFVuaXRFdmVudHMoKSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEoaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8SXNvQm1mZlNlZ21lbnQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZC5kaXNwb3NlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgKHtjb250ZXh0LCBkYXRhOiBwYXlsb2FkfSkgPT4ge1xuICAgICAgc3dpdGNoIChwYXlsb2FkLnV1aWQpIHtcbiAgICAgICAgY2FzZSBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkOlxuICAgICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ0luaXRpYWxpemF0aW9uJyxcbiAgICAgICAgICAgICAgZGF0YTogcGF5bG9hZC5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQ6XG4gICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0eXBlOiAnTWVkaWEnLFxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLmNsZWFyKCk7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmRPZkNodW5rRXZlbnRzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxzdHJpbmc+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWRTdWJzY3JpcHRpb24sICh7ZGF0YTogcGF5bG9hZFV1aWR9KSA9PiB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChwYXlsb2FkVXVpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIHRoaXMuYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIHRoaXMuaGFuZGxlTmFsVW5pdEV2ZW50LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYWxVbml0RXZlbnQoe2NvbnRleHQsIGRhdGE6IG5hbFVuaXR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8TmFsVW5pdD4pOiB2b2lkIHtcbiAgICBpZiAobmFsVW5pdC50eXBlID4gTmFsVW5pdFR5cGUuU2xpY2VMYXllcklkckRhdGEgfHwgbmFsVW5pdC5kYXRhLmJ5dGVMZW5ndGggPCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnB1Ymxpc2hWY2xFbWJlZGRlZFBheWxvYWQoY29udGV4dCwge1xuICAgICAgdXVpZDogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCxcbiAgICAgIGRhdGE6IHRoaXMuZXh0cmFjdFZjbEVtYmVkZGVkRGF0YShuYWxVbml0KVxuICAgIH0pO1xuICAgIHRoaXMuZGlzYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQoY29udGV4dC50cmFja0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFZjbEVtYmVkZGVkRGF0YShuYWxVbml0OiBOYWxVbml0KTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIG5hbFVuaXQuZGF0YS5zdWJhcnJheShQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgcGF5bG9hZDogRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKHtjb250ZXh0fTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLnNldChjb250ZXh0LnRyYWNrSWQsIHRoaXMubG9nV2FybmluZ1ZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmJpbmQodGhpcywgY29udGV4dCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCh0cmFja0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuc2V0KHRyYWNrSWQsIG5vb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gWyVzXSBObyBWQ0wgZW1iZWRkZWQgZGF0YSBmb3VuZCBpbiBhbiBlbmNvZGVkIHZpZGVvIHN0cmVhbSBjaHVuayBmcm9tIHRyYWNrIHdpdGggaWQgWyVzXScsIGNvbnRleHQuc3RyZWFtSWQsIGNvbnRleHQuY29udGV4dElkLCBjb250ZXh0LnRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuZE9mQ2h1bmtFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxudWxsPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmRPZkNodW5rLCB0aGlzLmhhbmRsZUVuZE9mRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVuZE9mRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsoe2NvbnRleHR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8bnVsbD4pOiB2b2lkIHtcbiAgICBjb25zdCBlbmRPZkNodW5rRXZlbnRIYW5kbGVyID0gdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLmdldChjb250ZXh0LnRyYWNrSWQpIGFzICgpID0+IHZvaWQ7XG5cbiAgICBlbmRPZkNodW5rRXZlbnRIYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgdGhpcy5oYW5kbGVQYXlsb2FkRXZlbnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBheWxvYWRFdmVudCh7Y29udGV4dCwgZGF0YTogcGF5bG9hZH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KSB7XG4gICAgaWYgKCF0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmhhcyhwYXlsb2FkLnV1aWQpKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCh0aGlzLmxvZ1dhcm5pbmdVbmV4cGVjdGVkUGF5bG9hZFV1aWRSZWNlaXZlZE9uY2UuYmluZCh0aGlzLCBjb250ZXh0LCBwYXlsb2FkLnV1aWQpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ1dhcm5pbmdVbmV4cGVjdGVkUGF5bG9hZFV1aWRSZWNlaXZlZE9uY2UoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkVXVpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gWyVzXSBbJXNdIFJlY2VpdmVkIHVuZXhwZWN0ZWQgcGF5bG9hZCB3aXRoIHV1aWQgWyVzXScsIGNvbnRleHQuc3RyZWFtSWQsIGNvbnRleHQuY29udGV4dElkLCBjb250ZXh0LnRyYWNrSWQsIHBheWxvYWRVdWlkKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChwYXlsb2FkVXVpZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YX0gZnJvbSAnLi9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBTZXQ8KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPikgPT4gdm9pZD4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIHN1YnNjcmliZTxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGxpc3RlbmVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmFkZChsaXN0ZW5lciBhcyA8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX2xpc3RlbmVycy5kZWxldGUobGlzdGVuZXIgYXMgPEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4oZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKSk7XG4gIH1cblxuICBwdWJsaWMgZW1pdDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YX0gZnJvbSAnLi9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9FdmVudEVtaXR0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudFB1Ymxpc2hlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50RW1pdHRlcnM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEV2ZW50RW1pdHRlcj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnM6IFNldDw8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgcHVibGljIG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVyKG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcjogKGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycy5hZGQob25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZSgoKSA9PiB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmRlbGV0ZShvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmU8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLl9ldmVudEVtaXR0ZXJzLmdldChldmVudFR5cGUpIHx8IHRoaXMuY3JlYXRlRW1pdHRlcihldmVudFR5cGUpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVMaXN0ZW5lciA9IGVtaXR0ZXIuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVMaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZGlzcG9zYWJsZUxpc3RlbmVyO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2g8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KTogdm9pZCB7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuX2V2ZW50RW1pdHRlcnMuZ2V0KGV2ZW50VHlwZSk7XG5cbiAgICBpZiAoIWVtaXR0ZXIpIHtcbiAgICAgIHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoZXZlbnRUeXBlLCBldmVudCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZW1pdHRlci5lbWl0PEV2ZW50RGF0YT4oZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50RW1pdHRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVtaXR0ZXIoZXZlbnRUeXBlOiBzdHJpbmcgfCBudW1iZXIpOiBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLl9ldmVudEVtaXR0ZXJzLnNldChldmVudFR5cGUsIGVtaXR0ZXIpO1xuXG4gICAgcmV0dXJuIGVtaXR0ZXI7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQge1xuICBFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayA9IDAsXG4gIE5hbFVuaXQsXG4gIFNlaVBheWxvYWQsXG4gIFBheWxvYWQsXG4gIFBheWxvYWRTdWJzY3JpcHRpb24sXG4gIEVuZE9mQ2h1bmtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RW5kUG9pbnQ+KHJlc29sdmVFbmRQb2ludFByb21pc2UgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnN1YnNjcmliZShnbG9iYWxTY29wZSA9PiB7XG4gICAgICAgIGlmICghZ2xvYmFsU2NvcGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgZ2xvYmFsU2NvcGUuVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAgICAgLnRoZW4ocmVzb2x2ZUVuZFBvaW50UHJvbWlzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKHVybCBpbiBEaXNjb3ZlcnkuX2NhY2hlKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmk6IFVSTCk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKHVybCBpbiBEaXNjb3ZlcnkuX2NhY2hlKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PiBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVTdWNjZXNzUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZUluaXQge1xuICBzdGF0dXM6ICdvayc7XG4gIHN0cmVhbTogSVN0cmVhbTtcbiAgbGFnOiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlRmFpbHVyZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZm9yYmlkZGVuLXRhZycgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiAnb2snO1xuICBzdHJlYW06IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hGYWlsdXJlUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6ICdub3QtZm91bmQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCcgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KSlcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0IHwgbnVsbCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVTdWNjZXNzUmVzcG9uc2VJbml0IHwgSVN1YnNjcmliZUZhaWx1cmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgfCBudWxsLCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2VJbml0IHwgSVB1Ymxpc2hGYWlsdXJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbT8uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3R5cGUnLCAnaHR0cCcpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDY6XG4gICAgICAgIHJldHVybiAnbWlzc2luZy1jaGFubmVsLW9yLXJvb20taWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgc3RyZWFtOiB7XG4gICAgICAgIHRlbmFuY3ksXG4gICAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgICB9LFxuICAgICAgbGFnOiBkYXRhLmxhZ1xuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIHN0cmVhbToge1xuICAgICAgICB0ZW5hbmN5LFxuICAgICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IFNlaVBheWxvYWQgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZFR5cGUnO1xuaW1wb3J0IFBpY3R1cmVUaW1pbmdQYXJzZXIsIHtQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZ30gZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL1BpY3R1cmVUaW1pbmdQYXJzZXInO1xuaW1wb3J0IEJpdHN0cmVhbURlY29kZXJzIGZyb20gJy4uL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvQml0c3RyZWFtRGVjb2RlcnMnO1xuaW1wb3J0IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9IMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQgZnJvbSAnLi4vZGVjb2RlL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0RlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuL0ZyYW1lVGltaW5nSW5mb3JtYXRpb24nO1xuXG50eXBlIEZyYW1lVGltaW5nID0ge1xuICBtaWQ6IHN0cmluZztcbiAgdHJhY2tJZDogc3RyaW5nO1xuICByZWNlaXZlVGltZXN0YW1wOiBEYXRlO1xuICBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbj86IERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfRlJBTUVfVElNSU5HX0VOVFJJRVMgPSA2MCAqIDMwOyAvLyAzMHMgKiA2MGZwcyA9IDE4MDAgZW50cmllc1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9iaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyID0gQml0c3RyZWFtRGVjb2RlcnMuY3JlYXRlSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcDogTWFwPHN0cmluZywgRnJhbWVUaW1pbmc+ID0gbmV3IE1hcCgpO1xuICAvLyBXb3JrcyB3aXRoIG11bHRpLWJpdHJhdGUgc3RyZWFtcyBhcyB3ZSBhcmUgaW4gY29udHJvbCBvZiBob3cgd2UgZ2VuZXJhdGUgdGhlIHBpY3R1cmUgdGltaW5nIFNFSSBwYXlsb2Fkc1xuICAvLyBNaWdodCBub3QgYWx3YXlzIHdvcmsgd2l0aCBzaW5nbGUtYml0cmF0ZSBzdHJlYW1zIHdoZW4gdGhlIGNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnIGlzIHRydWVcbiAgLy8gVE9ETyAoTkgpOiBNb25pdG9yIFNQUyB0byBkeW5hbWljYWxseSBzZXQgdGhlc2UgZmxhZ3NcbiAgcHJpdmF0ZSByZWFkb25seSBfcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZzogUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcgPSB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IGZhbHNlLFxuICAgIHBpY1N0cnVjdFByZXNlbnRGbGFnOiB0cnVlXG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BpY3R1cmVUaW1pbmdQYXJzZXI6IFBpY3R1cmVUaW1pbmdQYXJzZXIgPSBuZXcgUGljdHVyZVRpbWluZ1BhcnNlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnREaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBsYXliYWNrU3RhdGU6ICdwbGF5aW5nJyB8ICdwYXVzZWQnIHwgJ3N0YWxsZWQnIHwgJ2VuZGVkJyB8ICdlcnJvcicgfCAnd2FpdGluZycgPSAnd2FpdGluZyc7XG4gIHByaXZhdGUgX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQpIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtRGVjb2Rlcik7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmNsZWFyKCkpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMpO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5zZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzKHZpZGVvRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSkge1xuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2JpdHN0cmVhbURlY29kZXIuYml0c3RyZWFtLnN1YnNjcmliZVRvU2VpUGF5bG9hZFR5cGUoU2VpUGF5bG9hZFR5cGUuUGljdHVyZVRpbWluZywgdGhpcy5vblBpY3R1cmVUaW1pbmdFeHRyYWN0ZWQuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzRnJhbWUoc3RyZWFtSWQ6IHN0cmluZywgbWlkOiBzdHJpbmcsIHRyYWNrSWQ6IHN0cmluZywgZnJhbWU6IFJUQ0VuY29kZWRWaWRlb0ZyYW1lKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVUaW1pbmcgPSB7XG4gICAgICBtaWQsXG4gICAgICB0cmFja0lkLFxuICAgICAgcmVjZWl2ZVRpbWVzdGFtcDogbmV3IERhdGUoKVxuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUZyYW1lVGltaW5nc0V4Y2VlZGluZ01heENhcGFjaXR5KCk7XG5cbiAgICBjb25zdCBydHBUaW1lc3RhbXAgPSBmcmFtZS50aW1lc3RhbXAudG9TdHJpbmcoMTApO1xuXG4gICAgaWYgKHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmhhcyhydHBUaW1lc3RhbXApKSB7XG4gICAgICAvLyBUT0RPIChOSCk6IEFkZCBhIHRocm90dGxlZCBsb2cgaW5kaWNhdGluZyB0aGF0IGEgZnJhbWUgdGltaW5nIHdhcyBvdmVyd3JpdHRlblxuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLnNldChydHBUaW1lc3RhbXAsIGZyYW1lVGltaW5nKTtcblxuICAgIC8vIFRPRE8gKE5IKTogVGhhdCBzaG91bGQgYmUgZG9uZSB3aXRoaW4gYSBXb3JrZXJcbiAgICAvLyBOb3QgcG9zc2libGUgeWV0IGJlY2F1c2UgaXQgd29uJ3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBzaW5rIGFuZCB0cmFuc2Zvcm0gcGlwZWxpbmUgKHdlIGNhbm5vdCBkeW5hbWljYWxseSBpbmplY3QgY29kZSBpbiBhIHdvcmtlcilcbiAgICAvLyBXZSBuZWVkIHRvIHJlZmluZSB0aGUgYXJjaGl0ZWN0dXJlIHRvIG1ha2UgaXQgcG9zc2libGVcbiAgICB0aGlzLl9iaXRzdHJlYW1EZWNvZGVyLmRlY29kZSh7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHN0cmVhbUlkLFxuICAgICAgICB0cmFja0lkLFxuICAgICAgICBjb250ZXh0SWQ6IHJ0cFRpbWVzdGFtcFxuICAgICAgfSxcbiAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KGZyYW1lLmRhdGEpXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBpY3R1cmVUaW1pbmdFeHRyYWN0ZWQoe2NvbnRleHQ6IHtjb250ZXh0SWQ6IHJ0cFRpbWVzdGFtcCwgdHJhY2tJZH0sIGRhdGE6IHNlaVBheWxvYWR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8U2VpUGF5bG9hZD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwaWN0dXJlVGltaW5nID0gdGhpcy5fcGljdHVyZVRpbWluZ1BhcnNlci5wYXJzZShzZWlQYXlsb2FkLmRhdGEsIHRoaXMuX3BpY3R1cmluZ1RpbWluZ1BhcnNpbmdDb25maWcpO1xuICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wID0gcGljdHVyZVRpbWluZy5waWNTdHJ1Y3Q/LmNsb2NrVGltZXN0YW1wcy5maW5kKGkgPT4gaS5jbG9ja1RpbWVzdGFtcEZsYWcgPT09IHRydWUpPy5jbG9ja1RpbWVzdGFtcDtcblxuICAgIGlmICghY2xvY2tUaW1lc3RhbXApIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gY2xvY2sgdGltZXN0YW1wIHdhcyBmb3VuZFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVUaW1pbmcgPSB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5nZXQocnRwVGltZXN0YW1wKTtcblxuICAgIGlmICghZnJhbWVUaW1pbmcpIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gZnJhbWUgdGltaW5nIHdhcyBmb3VuZFxuICAgICAgLy8gRXhwZWN0ZWQgaWYgdGhlIGNpcmN1bGFyIGZyYW1lIHRpbWluZ3MgYnVmZmVyIGlzIGZ1bGwgYW5kIGEgZnJhbWUgaGFzIGJlZW4gZHJvcHBlZFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0ge1xuICAgICAgbWlkOiBmcmFtZVRpbWluZy5taWQsXG4gICAgICB0cmFja0lkLFxuICAgICAga2luZDogJ3ZpZGVvJyxcbiAgICAgIGNvZGVjOiAnSDI2NCcsXG4gICAgICB0aW1lY29kZToge1xuICAgICAgICBob3VyczogY2xvY2tUaW1lc3RhbXAuaG91cnMgPz8gbnVsbCxcbiAgICAgICAgbWludXRlczogY2xvY2tUaW1lc3RhbXAubWludXRlcyA/PyBudWxsLFxuICAgICAgICBzZWNvbmRzOiBjbG9ja1RpbWVzdGFtcC5zZWNvbmRzID8/IG51bGwsXG4gICAgICAgIGZyYW1lczogY2xvY2tUaW1lc3RhbXAubkZyYW1lcyxcbiAgICAgICAgaXNGcmFtZURyb3A6IGNsb2NrVGltZXN0YW1wLmNvdW50aW5nVHlwZSA+IDFcbiAgICAgIH0sXG4gICAgICBzb3VyY2VUaW1lc3RhbXA6IG51bGwsXG4gICAgICBpbmdlc3RUaW1lc3RhbXA6IG51bGwsXG4gICAgICBlbmNvZGVUaW1lc3RhbXA6IG51bGwsXG4gICAgICB0cmFuc2NvZGVUaW1lc3RhbXA6IG51bGwsXG4gICAgICByZWNlaXZlVGltZXN0YW1wOiBuZXcgRGF0ZShmcmFtZVRpbWluZy5yZWNlaXZlVGltZXN0YW1wKSxcbiAgICAgIHBsYXliYWNrU3RhdGU6IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlXG4gICAgfTtcblxuICAgIGZyYW1lVGltaW5nLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbi52YWx1ZSA9IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB2aWRlb0ZyYW1lQ2FsbGJhY2sobm93OiBET01IaWdoUmVzVGltZVN0YW1wLCBtZXRhZGF0YTogVmlkZW9GcmFtZUNhbGxiYWNrTWV0YWRhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZS1yZWdpc3RlciB0aGUgY2FsbGJhY2sgdG8gZW5zdXJlIGl0J3MgY2FsbGVkIGFnYWluXG4gICAgdGhpcy5hcm1WaWRlb0ZyYW1lQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IHJ0cFRpbWVzdGFtcCA9IG1ldGFkYXRhLnJ0cFRpbWVzdGFtcDtcblxuICAgIGlmICghcnRwVGltZXN0YW1wKSB7XG4gICAgICAvLyBUT0RPIChOSCk6IEFkZCBhIHRocm90dGxlZCBsb2cgaW5kaWNhdGluZyB0aGF0IG5vIFJUUCB0aW1lc3RhbXAgd2FzIGZvdW5kXG4gICAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgaXQncyBudWxsYWJsZSwgYnV0IHdlIGFsd2F5cyBoYXZlIGl0IGluIGEgV2ViUlRDIGNvbnRleHRcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcHNUb0RlbGV0ZTogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3RpbWVzdGFtcCwgZnJhbWVUaW1pbmddIG9mIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wKSB7XG4gICAgICBpZiAocGFyc2VJbnQodGltZXN0YW1wLCAxMCkgPiBydHBUaW1lc3RhbXApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9PT0gJ3BsYXlpbmcnKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbi52YWx1ZSA9IHtcbiAgICAgICAgICAuLi5mcmFtZVRpbWluZy5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiEsXG4gICAgICAgICAgcmVuZGVyVGltZXN0YW1wOiBuZXcgRGF0ZShwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgbm93KSxcbiAgICAgICAgICBwbGF5YmFja1N0YXRlOiAncGxheWluZydcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGltZXN0YW1wc1RvRGVsZXRlLnB1c2godGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRpbWVzdGFtcCBvZiB0aW1lc3RhbXBzVG9EZWxldGUpIHtcbiAgICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmRlbGV0ZSh0aW1lc3RhbXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudHNUb0RlbGV0ZSA9IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLnNpemUgLSAoSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLk1BWF9GUkFNRV9USU1JTkdfRU5UUklFUyAtIDEpO1xuXG4gICAgaWYgKGVsZW1lbnRzVG9EZWxldGUgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAua2V5cygpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRGVsZXRlOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleVRvRGVsZXRlID0gaXRlcmF0b3IubmV4dCgpLnZhbHVlO1xuXG4gICAgICB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5kZWxldGUoa2V5VG9EZWxldGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9uUGxheWluZyA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3BsYXlpbmcnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBvblBsYXlpbmcpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIG9uUGxheWluZykpKTtcblxuICAgIGNvbnN0IG9uUGF1c2UgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdwYXVzZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIG9uUGF1c2UpKSk7XG5cbiAgICBjb25zdCBvblN0YWxsZWQgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdzdGFsbGVkJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgb25TdGFsbGVkKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBvblN0YWxsZWQpKSk7XG5cbiAgICBjb25zdCBvbldhaXRpbmcgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICd3YWl0aW5nJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3YWl0aW5nJywgb25XYWl0aW5nKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dhaXRpbmcnLCBvbldhaXRpbmcpKSk7XG5cbiAgICBjb25zdCBvbkVuZGVkID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAnZW5kZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgb25FbmRlZCk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmRlZCcsIG9uRW5kZWQpKSk7XG5cbiAgICBjb25zdCBvbkVycm9yID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAnZXJyb3InO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpKSk7XG5cbiAgICB0aGlzLmFybVZpZGVvRnJhbWVDYWxsYmFjaygpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU/LmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayh0aGlzLl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFybVZpZGVvRnJhbWVDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZT8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayh0aGlzLnZpZGVvRnJhbWVDYWxsYmFjay5iaW5kKHRoaXMpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi4vLi4vcnRjL1NkcFBhcnNlcic7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBFbmRQb2ludCwge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IEgyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlciBmcm9tICcuLi9mcmFtZVRpbWluZy9IMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXInO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCA9IGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcsIGxpc3Rlbk9uU3RyZWFtU2V0dXA6IFN0cmVhbVNldHVwTGlzdGVuZXIsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50OiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWVcbiAgICAgIHx8IHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZVxuICAgICAgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWU7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKSxcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCdyZWN2b25seScsIHJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IHtzdGF0dXN9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IHVuZGVmaW5lZCA7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGZhaWxlZCB3aXRoIHN0YXR1cyBbJXNdJyxcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSA9IHJlc3BvbnNlO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24gYXMgUlRDQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ6IHVuZGVmaW5lZCB8IG51bWJlcjtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlPy5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAoR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlIGFzIG5ldmVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpKSk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGU6IFJUQ1BlZXJDb25uZWN0aW9uRXZlbnRNYXBbJ3RyYWNrJyB8ICdhZGRzdHJlYW0nXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCdzdHJlYW1zJyBpbiBlKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCkpKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlIGFzIEVuZFBvaW50O1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZW5kUG9pbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiBhcyBSVENTZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXF1aXJlc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyAmJiBwZWVyQ29ubmVjdGlvbj8uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uPy5zZHApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIocGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJzID0gcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qge2Rpc3Bvc2FibGVzLCBlbmNvZGVkVmlkZW9GcmFtZX0gPSBJbnNlcnRhYmxlU3RyZWFtcy5jb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUobWVkaWFTdHJlYW0sIHJlY2VpdmVycywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmssIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWMsIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmF1ZGlvQ29kZWMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnXG4gICAgICAgICAgICAgICAgICAmJiAodGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlIHx8IHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlc0ZyYW1lVGltaW5nSW5mb3JtYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyID0gbmV3IEgyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcih0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIpO1xuXG4gICAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbS5nZXRWaWRlb1RyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBCb3RoIGFyZSBleHBlY3RlZCB0byBiZSBwcmVzZW50LCBidXQgdGhlIHR5cGUgc3lzdGVtIG1ha2VzIHRoZW0gbnVsbGFibGUsIHNvIHdlIGhhdmUgdG8gYXNzZXJ0IHRoZSBwcmVzZW5jZVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzLmZpbHRlcihyZWNlaXZlciA9PiByZWNlaXZlci50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXRmb3JtIHN1cHBvcnRpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIHNob3VsZCBhbHNvIHN1cHBvcnQgZ2V0VHJhbnNjZWl2ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlkID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRUcmFuc2NlaXZlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuZmlsdGVyKHRyYW5zY2VpdmVyID0+IHRyYW5zY2VpdmVyLnJlY2VpdmVyID09PSByZWNlaXZlcilbMF0/Lm1pZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNlaXZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gU2tpcHBpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGZvciB0cmFjayBbJXNdIGJlY2F1c2Ugbm8gcmVjZWl2ZXIgd2FzIGZvdW5kJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHRyYWNrLmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmICghbWlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBTa2lwcGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRyYWNrIFslc10gYmVjYXVzZSBubyBtaWQgd2FzIGZvdW5kJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHRyYWNrLmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChlbmNvZGVkVmlkZW9GcmFtZS5zdWJzY3JpYmUoZW5jb2RlZFZpZGVvRnJhbWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWRWaWRlb0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLnByb2Nlc3NGcmFtZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgbWlkLCBlbmNvZGVkVmlkZW9GcmFtZS50cmFjay5pZCwgZW5jb2RlZFZpZGVvRnJhbWUuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7dHJhbnNmb3JtZWRTdHJlYW0sIGRpc3Bvc2FibGVzfSA9IEluc2VydGFibGVTdHJlYW1zLmNvbmZpZ3VyZUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbSA9IHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZT8ucm91bmRUcmlwVGltZSA/IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0IDogMCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbiA9IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLnJ0Y1N0YXRpc3RpYy5zdWJzY3JpYmUoc3RhdGlzdGljcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcy52YWx1ZSA9IHN0YXRpc3RpY3M7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRpc3RpY3MpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmICF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvVHJhY2tGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MuYXVkaW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvVHJhY2tGYWlsZWQgJiYgR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLk9mZmxpbmU7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBydGNDb25uZWN0aW9uTW9uaXRvci5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHRyYWNrIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLk9mZmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPyBDaGFubmVsU3RhdGUuUGxheWluZyA6IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBzdGF0ZSByZXN0b3JlZCB0byBbJXNdIGFmdGVyIHJlY29ubmVjdGluZycsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uKTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ29uLWRlbWFuZCcpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBPbi1EZW1hbmQgU3RyZWFtIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdUaGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgTGl2ZSBTdHJlYW0gcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVhbFRpbWVTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIElFbmNvZGVkU3RyZWFtU2luazxUIGV4dGVuZHMgUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4ge1xuICAgICh0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgY2h1bms6IFQpOiBib29sZWFuIHwgUHJvbWlzZUxpa2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuY29kZWRTdHJlYW1TaW5rIHtcbiAgc3RhdGljIHZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbms8VCBleHRlbmRzIFJUQ0VuY29kZWRBdWRpb0ZyYW1lIHwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+KG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbms8VD4pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMi4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kZWRTdHJlYW1TaW5rIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwge1N1cnJvZ2F0ZUZyYW1lVHlwZSwgU2tpcEZyYW1lfSBmcm9tICcuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXInO1xuaW1wb3J0IFdvcmtlclRyYW5zZm9ybVN0cmVhbSwge0ZvcmNlSW52YWxpZEZyYW1lUG9zdE1lc3NhZ2V9IGZyb20gJy4vVHJhbnNmb3JtU3RyZWFtLndvcmtlcic7XG5cbnR5cGUgTWVkaWFTdHJlYW1UcmFja0tpbmQgPSAndmlkZW8nIHwgJ2F1ZGlvJztcblxuZXhwb3J0IGludGVyZmFjZSBJUlRDRW5jb2RlZEZyYW1lPFQgZXh0ZW5kcyBSVENFbmNvZGVkVmlkZW9GcmFtZSB8IFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB7XG4gIHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrO1xuICBjaHVuazogVDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICBzdGF0aWMgY29uZmlndXJlRW5jb2RlZFN0cmVhbVBpcGVsaW5lKFxuICAgIHN0cmVhbTogTWVkaWFTdHJlYW0sXG4gICAgcmVjZWl2ZXJzOiBSVENSdHBSZWNlaXZlcltdLFxuICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQsIC8vIENhbiBiZSB1bmRlZmluZWQgd2hlbiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIHNpbmtcbiAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkLCAvLyBDYW4gYmUgdW5kZWZpbmVkIHdoZW4gdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgYSBzaW5rXG4gICAgdmlkZW9Db2RlYzogc3RyaW5nLFxuICAgIGF1ZGlvQ29kZWM6IHN0cmluZ1xuICApOiB7XG4gICAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICAgIGVuY29kZWRWaWRlb0ZyYW1lOiBTdWJqZWN0PElSVENFbmNvZGVkRnJhbWU8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgbnVsbD47XG4gICAgZW5jb2RlZEF1ZGlvRnJhbWU6IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCBudWxsPjtcbiAgfSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgY29uc3QgZW5jb2RlZFZpZGVvRnJhbWUgPSBuZXcgU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IGVuY29kZWRBdWRpb0ZyYW1lID0gbmV3IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCBudWxsPihudWxsKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzLmZpbHRlcihyZWNlaXZlID0+IHJlY2VpdmUudHJhY2sgPT09IHRyYWNrKVswXTtcbiAgICAgIGNvbnN0IGtpbmQ6IE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gdHJhY2sua2luZCBhcyBNZWRpYVN0cmVhbVRyYWNrS2luZDtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGNvbnN0IG11c3RTaW5rID0gISFlbmNvZGVkVmlkZW9TdHJlYW1TaW5rO1xuXG4gICAgICAgICAgLy8gRmlyZWZveCBhbmQgU2FmYXJpXG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKTtcblxuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jKGV2ZW50OiBNZXNzYWdlRXZlbnQ8Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZTxSVENFbmNvZGVkVmlkZW9GcmFtZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGVuY29kZWRWaWRlb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICAgIGNodW5rOiBldmVudC5kYXRhLmNodW5rXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKG11c3RTaW5rICYmICFhd2FpdCBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgY29kZWM6IHZpZGVvQ29kZWMsXG4gICAgICAgICAgICAgIG11c3RTaW5rXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hyb21pdW0gKENocm9tZSwgRWRnZSwgT3BlcmEsIC4uLilcbiAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8UlRDRW5jb2RlZFZpZGVvRnJhbWUsIFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiA9IGFzeW5jKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICBlbmNvZGVkVmlkZW9GcmFtZS52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgIGNodW5rXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobXVzdFNpbmspIHtcbiAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKHRyYWNrLCBjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3Vycm9nYXRlOiBTdXJyb2dhdGVGcmFtZVR5cGU7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSh2aWRlb0NvZGVjKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlID09PSBTa2lwRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gc3Vycm9nYXRlIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKHZpZGVvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zISgpO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBjb25zdCBtdXN0U2luayA9ICEhZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcblxuICAgICAgICAgIC8vIEZpcmVmb3ggYW5kIFNhZmFyaVxuICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gV29ya2VyVHJhbnNmb3JtU3RyZWFtKCk7XG5cbiAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyhldmVudDogTWVzc2FnZUV2ZW50PEZvcmNlSW52YWxpZEZyYW1lUG9zdE1lc3NhZ2U8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+PikgPT4ge1xuICAgICAgICAgICAgICBlbmNvZGVkQXVkaW9GcmFtZS52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgICBjaHVuazogZXZlbnQuZGF0YS5jaHVua1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChtdXN0U2luayAmJiAhYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgIGtpbmQ6IHRyYWNrLmtpbmQsXG4gICAgICAgICAgICAgIGNvZGVjOiBhdWRpb0NvZGVjLFxuICAgICAgICAgICAgICBtdXN0U2lua1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICBhdWRpb1B1bXBlci5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuXG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaHJvbWl1bSAoQ2hyb21lLCBFZGdlLCBPcGVyYSwgLi4uKVxuICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkQXVkaW9GcmFtZSwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIGVuY29kZWRBdWRpb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChtdXN0U2luaykge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKGF1ZGlvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zISgpO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3Bvc2FibGVzLFxuICAgICAgZW5jb2RlZFZpZGVvRnJhbWUsXG4gICAgICBlbmNvZGVkQXVkaW9GcmFtZVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY29uZmlndXJlSW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZCwgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQpOiB7dHJhbnNmb3JtZWRTdHJlYW06IE1lZGlhU3RyZWFtOyBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3R9IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgaWYgKHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxWaWRlb0ZyYW1lLCBWaWRlb0ZyYW1lPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB2aWRlb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1WaWRlb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogdmlkZW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgaWYgKGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxBdWRpb0RhdGEsIEF1ZGlvRGF0YT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgYXVkaW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtQXVkaW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogYXVkaW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IGF1ZGlvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbSxcbiAgICAgIGRpc3Bvc2FibGVzXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgZXh0ZW5kcyBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYWNrVHJhbnNmb3JtIHtcbiAgc3RhdGljIHZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybTxUIGV4dGVuZHMgQXVkaW9EYXRhIHwgVmlkZW9GcmFtZT4obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybTxUPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAzLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgY29uc3QgU2tpcEZyYW1lID0gU3ltYm9sKCk7XG5cbmV4cG9ydCB0eXBlIFN1cnJvZ2F0ZUZyYW1lVHlwZSA9IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHwgdHlwZW9mIFNraXBGcmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc1NhZmFyaSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZUNocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWRDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc0FuZHJvaWQ7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zaW5nbGVaZXJvQnl0ZSA9IG5ldyBVaW50OEFycmF5KFsweDAwXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMgPSB7T1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKX07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LCAvLyBQaWN0dXJlIHBhcmFtdGVyIHNldFxuICAgICAgLyogKi8gMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLCAvLyBTbGljZSBsYXllcjogaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4MiwgMHg0OSwgMHg4MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg3NiwgMHgzOCwgMHgyNCwgMHgxYywgMHgxOSwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMSwgMHhiZiwgMHhkZCwgMHg3NywgMHhmZiwgMHg0MCwgMHg3ZiwgMHhiMSwgMHgwMF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSksIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweDMxLCAweDAzLCAweDAwLCAweGU0LCAweGUwLCAweGE4LCAweDliLCAweDM3LCAweGFmLCAweDEwLCAweDRmLCAweDRmLCAweGIxLCAweDBhLCAweDJmLCAweGU0LCAweDkyLCAweGMwLCAweDFmLCAweGU3LCAweDRmLCAweDQ2LCAweGZmLCAweGVlLCAweDUxLCAweGMxLCAweDVkLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NCA9IHtcbiAgICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4NDIsIDB4YzAsIDB4MGQsIDB4ZGEsIDB4MTgsIDB4ZGUsIDB4MjIsIDB4MjIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDMsIDB4YzgsIDB4ZjEsIDB4NDIsIDB4YWEsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MGYsIDB4YzgsIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4NWYsIC4uLm5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDUsIC4uLm5ldyBVaW50OEFycmF5KDMpLmZpbGwoMHhmZiksIDB4MGYsIDB4NDUsIDB4MDAsIDB4MDEsIDB4NTcsIDB4OWYsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzhdKSwgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXG4gICAgUEZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHhhNCwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFNFSVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCA9IDEwNDE4O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0ID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc01vYmlsZUNocm9tZSB8fCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc1NhZmFyaTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ09QVVMnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMuT1BVUy5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpOiBBcnJheUJ1ZmZlciB7XG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgY29uc3Qgc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXI7XG4gICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgaWYgKHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQpIHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTogQXJyYXlCdWZmZXIge1xuICAgIGNvbnN0IGJpdE1hc2sxID0gMHgwZTtcbiAgICBjb25zdCBiaXRNYXNrMiA9IDB4MDE7XG4gICAgY29uc3QgYml0U2hpZnRSaWdodEJ5MSA9IDE7XG4gICAgY29uc3QgYml0U2hpZnRMZWZ0Qnk3ID0gNztcbiAgICBjb25zdCBieXRlMSA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2sxKSA+PiBiaXRTaGlmdFJpZ2h0QnkxKTtcbiAgICBjb25zdCBieXRlMiA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2syKSA8PCBiaXRTaGlmdExlZnRCeTcpO1xuICAgIGNvbnN0IGNvcHlPZkR1bW15UEZyYW1lcyA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LlBGcmFtZS5zbGljZSgpO1xuICAgIGNvbnN0IGJ1ZmZlckluZGV4ID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4O1xuXG4gICAgY29weU9mRHVtbXlQRnJhbWVzW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcbiAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcbiAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICByZXR1cm4gY29weU9mRHVtbXlQRnJhbWVzLmJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5kZWNsYXJlIGNvbnN0IF9fQlVJTERfVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19CVUlMRF9WRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF9wYWdlTG9hZFRpbWU6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzZXQgcGFnZUxvYWRUaW1lKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTnVtYmVycyBmcm9tICcuLi9sYW5nL051bWJlcnMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kb21haW4gPSAnJztcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5nZXRMb2NhdGlvbkhvc3RuYW1lRnJvbUdsb2JhbFNjb3BlKCkudGhlbihsb2NhdGlvbkhvc3RuYW1lID0+IHtcbiAgICAgIHRoaXMuX2RvbWFpbiA9IGxvY2F0aW9uSG9zdG5hbWU7XG4gICAgfSk7XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgcnVudGltZSA9ICh0aW1lc3RhbXAudmFsdWVPZigpIC0gdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5wYWdlTG9hZFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIHJ1bnRpbWVcbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYXRpb25Ib3N0bmFtZUZyb21HbG9iYWxTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KHJlc29sdmUgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gR2xvYmFsU2NvcGUuc3Vic2NyaWJlKGdsb2JhbFNjb3BlID0+IHtcbiAgICAgICAgaWYgKGdsb2JhbFNjb3BlKSB7XG4gICAgICAgICAgcmVzb2x2ZShnbG9iYWxTY29wZS5sb2NhdGlvbkhvc3RuYW1lKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24uZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcgfHwgIUdsb2JhbFNjb3BlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldEl0ZW1TaXplID0gKGl0ZW06IG51bWJlciB8IHN0cmluZykgPT4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gTnVtYmVycy5jb3VudE51bWJlckxlbmd0aChpdGVtKSA6IGl0ZW0ubGVuZ3RoO1xuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBnZXRJdGVtU2l6ZShpdGVtKSA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2Vzc2lvblRlbGVtZXRyeSBGYWlsZWQ6IE5vIGFwcGxpY2F0aW9uIG1vbml0b3IgaW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I/LmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIGlmICghdGltZVNpbmNlTGFzdENoYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG50eXBlIENvbnRpbnVhdGlvbkV2ZW50ID0gSFRNTFZpZGVvRWxlbWVudEV2ZW50TWFwWydwbGF5JyB8ICdwbGF5aW5nJyB8ICdwcm9ncmVzcycgfCAndGltZXVwZGF0ZSddO1xuY29uc3Qgbm9vcCA9ICgpOiB2b2lkID0+IHVuZGVmaW5lZDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50OiBDb250aW51YXRpb25FdmVudCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZSA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IG51bGwpO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGUgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiBudWxsKTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50OiBDb250aW51YXRpb25FdmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudDogQ29udGludWF0aW9uRXZlbnQsIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiXG5pbXBvcnQgd29ya2VyIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy93b3JrZXItbG9hZGVyL2Rpc3QvcnVudGltZS9pbmxpbmUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gV29ya2VyX2ZuKCkge1xuICByZXR1cm4gd29ya2VyKFwiLyoqKioqKi8gKGZ1bmN0aW9uKCkgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0XFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKioqKiovIFxcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHtcXG5cXG4vKioqLyBcXFwiLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50c1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gQnJvd3NlckRldGVjdG9yOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2sgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuXFxuXFxuXFxudmFyIF9Ccm93c2VyRGV0ZWN0b3IsIF9uYXZpZ2F0b3IsIF9uYXZpZ2F0b3IyO1xcbi8qKlxcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICovXFxudmFyIEJyb3dzZXJEZXRlY3RvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBCcm93c2VyRGV0ZWN0b3IoKSB7XFxuICAgICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKSh0aGlzLCBCcm93c2VyRGV0ZWN0b3IpO1xcbiAgfVxcbiAgcmV0dXJuICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIG51bGwsIFt7XFxuICAgIGtleTogXFxcImJyb3dzZXJOYW1lQW5kVmVyc2lvblxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJicm93c2VyTmFtZVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJicm93c2VyTWFqb3JWZXJzaW9uXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNBbmRyb2lkXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNBbmRyb2lkO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNjlcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzBcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzFcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzJcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzRcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzVcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzZcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQ2hyb21lNzdcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzTW9iaWxlXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzTW9iaWxlKCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzTW9iaWxlO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCkge1xcbiAgICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xcbiAgICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XFxuICAgICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJOYW1lXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlQnJvd3Nlck5hbWUoKSB7XFxuICAgICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgIH1cXG4gICAgICB2YXIgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcXG4gICAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpIHtcXG4gICAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgICB9XFxuICAgICAgdmFyIGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XFxuICAgICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xcbiAgICAgICAgcmV0dXJuIDA7XFxuICAgICAgfVxcbiAgICAgIHZhciBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcXG4gICAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpIHtcXG4gICAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgIH1cXG4gICAgICB2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcXG4gICAgICB2YXIgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xcbiAgICAgIGlmIChtc2llID4gMCkge1xcbiAgICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXFxuICAgICAgICByZXR1cm4gXFxcIklFL1xcXCIuY29uY2F0KHBhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCkpO1xcbiAgICAgIH1cXG4gICAgICB2YXIgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xcbiAgICAgIGlmICh0cmlkZW50ID4gMCkge1xcbiAgICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXFxuICAgICAgICB2YXIgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcXG4gICAgICAgIHJldHVybiBcXFwiSUUvXFxcIi5jb25jYXQocGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiAnJztcXG4gICAgfVxcbiAgfV0pO1xcbn0oKTtcXG5fQnJvd3NlckRldGVjdG9yID0gQnJvd3NlckRldGVjdG9yO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXhcXFwiLCAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFxcXC8pKFtcXFxcZC5hcHJlXSspL2cpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2Jyb3dzZXJOYW1lXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCkpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck1ham9yVmVyc2lvblxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCkpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNNb2JpbGVcXFwiLCAvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pLnRlc3QoKF9uYXZpZ2F0b3IgPSBuYXZpZ2F0b3IpID09PSBudWxsIHx8IF9uYXZpZ2F0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9uYXZpZ2F0b3IudXNlckFnZW50KSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0FuZHJvaWRcXFwiLCAvQW5kcm9pZC9pLnRlc3QoKF9uYXZpZ2F0b3IyID0gbmF2aWdhdG9yKSA9PT0gbnVsbCB8fCBfbmF2aWdhdG9yMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hdmlnYXRvcjIudXNlckFnZW50KSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTY5XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MFxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzFcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcyXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NFxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzVcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc2XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3N1xcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpKTtcXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFNraXBGcmFtZTogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIFNraXBGcmFtZTsgfSxcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXI7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheSAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eSAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3IgKi8gXFxcIi4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHNcXFwiKTtcXG5cXG5cXG5cXG5cXG52YXIgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXI7XFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG5cXG5cXG52YXIgU2tpcEZyYW1lID0gU3ltYm9sKCk7XFxudmFyIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xcbiAgZnVuY3Rpb24gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcigpIHtcXG4gICAgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKHRoaXMsIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIpO1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xcbiAgfVxcbiAgcmV0dXJuICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBudWxsLCBbe1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ09QVVMnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCkge1xcbiAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlY1xcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKGNvZGVjKSB7XFxuICAgICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XFxuICAgICAgICBjYXNlICdIMjY0JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XFxuICAgICAgICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xcbiAgICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LklGcmFtZS5idWZmZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOCc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOSc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoY29kZWMpIHtcXG4gICAgICBpZiAoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XFxuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XFxuICAgICAgICAgIHJldHVybiBTa2lwRnJhbWU7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlY1xcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKGNvZGVjKSB7XFxuICAgICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XFxuICAgICAgICBjYXNlICdIMjY0JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XFxuICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XFxuICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBjYXNlICdWUDgnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBjYXNlICdWUDknOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjKSB7XFxuICAgICAgaWYgKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JyAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XFxuICAgICAgICB2YXIgc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXI7XFxuICAgICAgICB2YXIgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XFxuICAgICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xcbiAgICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xcbiAgICAgICAgfVxcbiAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKSB7XFxuICAgICAgdmFyIGJpdE1hc2sxID0gMHgwZTtcXG4gICAgICB2YXIgYml0TWFzazIgPSAweDAxO1xcbiAgICAgIHZhciBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcXG4gICAgICB2YXIgYml0U2hpZnRMZWZ0Qnk3ID0gNztcXG4gICAgICB2YXIgYnl0ZTEgPSAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2sxKSA+PiBiaXRTaGlmdFJpZ2h0QnkxO1xcbiAgICAgIHZhciBieXRlMiA9IChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5NztcXG4gICAgICB2YXIgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XFxuICAgICAgdmFyIGJ1ZmZlckluZGV4ID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4O1xcbiAgICAgIGNvcHlPZkR1bW15UEZyYW1lc1tidWZmZXJJbmRleF0gfD0gYnl0ZTE7XFxuICAgICAgY29weU9mRHVtbXlQRnJhbWVzW2J1ZmZlckluZGV4ICsgMV0gfD0gYnl0ZTI7XFxuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xcbiAgICAgIHJldHVybiBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9pc1NhZmFyaVxcXCIsIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2lzTW9iaWxlQ2hyb21lXFxcIiwgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uaXNNb2JpbGUoKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfaXNBbmRyb2lkQ2hyb21lXFxcIiwgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uaXNBbmRyb2lkKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zaW5nbGVaZXJvQnl0ZVxcXCIsIG5ldyBVaW50OEFycmF5KFsweDAwXSkpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlY1xcXCIsIHtcXG4gIE9QVVM6IG5ldyBVaW50OEFycmF5KFsweDY4LCAweDA3LCAweGQ5LCAweGFiLCAweGJjLCAweDc5LCAweDg3LCAweGFiLCAweDhlLCAweDRhLCAweDE0LCAweGYzLCAweGE3LCAweDFjLCAweGYyLCAweDlhLCAweDdhLCAweDQ1LCAweGE3LCAweDJkLCAweDQ0LCAweDI1LCAweDc0LCAweDRjLCAweGFkLCAweDE2LCAweGIzLCAweDBlLCAweDUxLCAweDU3LCAweGVhLCAweGU3LCAweGFkLCAweDJhLCAweDM4LCAweGNlLCAweDMzXSlcXG59KTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWNcXFwiLCB7XFxuICBIMjY0OiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCxcXG4gIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHhmNCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg5YiwgMHgyYiwgMHhmMSwgMHhmMSwgMHhmOCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwNywgMHg4OSwgMHgxMiwgMHhjYixcXG4gIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4YzQsIDB4NDgsIDB4NDQsXFxuICAvLyBQaWN0dXJlIHBhcmFtdGVyIHNldFxcbiAgLyogKi9cXG4gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODIsIDB4MDAsIDB4M2YsIDB4NzAsIDB4MjMsIDB4ODYsIDB4ZTYsIDB4ZDEsIDB4ODAsIDB4MDksIDB4YWYsIDB4MGEsIDB4NDEsIDB4NjYsIDB4NmIsIDB4NTQsIDB4NDYsIDB4ZmIsIDB4NzEsIDB4ZDksIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZjldKSxcXG4gIC8vIFNsaWNlIGxheWVyOiBpZHIgZGF0YVxcbiAgVlA4OiBuZXcgVWludDhBcnJheShbMHhiMCwgMHgwMiwgMHgwMCwgMHg5ZCwgMHgwMSwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg2YiwgMHgwMCwgMHgyNywgMHgxYywgMHgyNCwgMHgwYywgMHgyYywgMHgyYywgMHg0NCwgMHhjYywgMHgyNCwgMHg0MSwgMHhhOCwgMHgwMCwgMHgxMywgMHhhNywgMHhhMywgMHg3YSwgMHg1MCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxcbiAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4MiwgMHg0OSwgMHg4MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg3NiwgMHgzOCwgMHgyNCwgMHgxYywgMHgxOSwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMSwgMHhiZiwgMHhkZCwgMHg3NywgMHhmZiwgMHg0MCwgMHg3ZiwgMHhiMSwgMHgwMF0pXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjXFxcIiwge1xcbiAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsXFxuICAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSxcXG4gIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcXG4gIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcXG4gIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODYsIDB4MDAsIDB4NDAsIDB4OTIsIDB4OWMsIDB4MjQsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDBdKVxcbn0pO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15ODJ4ODJIMjY0XFxcIiwge1xcbiAgSUZyYW1lOiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSxcXG4gIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MGYsIDB4YzgsXFxuICAvLyBQaWN0dXJlIHBhcmFtZXRlciBzZXRcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDNdLmNvbmNhdCgoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZikpLCBbMHg1Zl0sICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShuZXcgVWludDhBcnJheSgxMDI5NSkuZmlsbCgweGZmKSksIFsweDgwLFxcbiAgLy8gU3VwcGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIChTRUkpXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDg0LCAweDA1XSwgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDMpLmZpbGwoMHhmZikpLCBbMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pKSxcXG4gIC8vIFNsaWNlIGxheWVyOiBJZHIgZGF0YVxcbiAgUEZyYW1lOiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwM10uY29uY2F0KCgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShuZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSksIFsweGE0XSwgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDEwMzY0KS5maWxsKDB4ZmYpKSwgWzB4ODAsXFxuICAvLyBTRUlcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4MjAsIDB4MTUsIDB4ZjAsIDB4NGJdKSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxcbn0pO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleFxcXCIsIDEwNDE4KTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXRcXFwiLCAxKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyXFxcIiwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc1NhZmFyaSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclxcXCIsIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQpO1xcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfYXJyYXlMaWtlVG9BcnJheTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcXG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcXG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xcbiAgcmV0dXJuIG47XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2FycmF5V2l0aG91dEhvbGVzOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FycmF5TGlrZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiAoMCxfYXJyYXlMaWtlVG9BcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHIpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9jbGFzc0NhbGxDaGVjazsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XFxuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9jcmVhdGVDbGFzczsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9Qcm9wZXJ0eUtleV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b1Byb3BlcnR5S2V5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzXFxcIik7XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xcbiAgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7XFxuICAgIHZhciBvID0gclt0XTtcXG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcXFwidmFsdWVcXFwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCAoMCxfdG9Qcm9wZXJ0eUtleV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG8ua2V5KSwgbyk7XFxuICB9XFxufVxcbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7XFxuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcXFwicHJvdG90eXBlXFxcIiwge1xcbiAgICB3cml0YWJsZTogITFcXG4gIH0pLCBlO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9kZWZpbmVQcm9wZXJ0eTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9Qcm9wZXJ0eUtleV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b1Byb3BlcnR5S2V5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzXFxcIik7XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcXG4gIHJldHVybiAociA9ICgwLF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xcbiAgICB2YWx1ZTogdCxcXG4gICAgZW51bWVyYWJsZTogITAsXFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXFxuICAgIHdyaXRhYmxlOiAhMFxcbiAgfSkgOiBlW3JdID0gdCwgZTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2l0ZXJhYmxlVG9BcnJheTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xcbiAgaWYgKFxcXCJ1bmRlZmluZWRcXFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1xcXCJAQGl0ZXJhdG9yXFxcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9ub25JdGVyYWJsZVNwcmVhZDsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlxcXCIpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF90b0NvbnN1bWFibGVBcnJheTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXJyYXlXaXRob3V0SG9sZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXJyYXlXaXRob3V0SG9sZXMuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaXRlcmFibGVUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbm9uSXRlcmFibGVTcHJlYWRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vbm9uSXRlcmFibGVTcHJlYWQuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzXFxcIik7XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcXG4gIHJldHVybiAoMCxfYXJyYXlXaXRob3V0SG9sZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfaXRlcmFibGVUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXFxcImRlZmF1bHRcXFwiXSkocikgfHwgKDAsX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkocikgfHwgKDAsX25vbkl0ZXJhYmxlU3ByZWFkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoKTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyB0b1ByaW1pdGl2ZTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHlwZW9mX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3R5cGVvZi5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzXFxcIik7XFxuXFxuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xcbiAgaWYgKFxcXCJvYmplY3RcXFwiICE9ICgwLF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKSh0KSB8fCAhdCkgcmV0dXJuIHQ7XFxuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcXG4gIGlmICh2b2lkIDAgIT09IGUpIHtcXG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcXFwiZGVmYXVsdFxcXCIpO1xcbiAgICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKGkpKSByZXR1cm4gaTtcXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cXFwiKTtcXG4gIH1cXG4gIHJldHVybiAoXFxcInN0cmluZ1xcXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gdG9Qcm9wZXJ0eUtleTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHlwZW9mX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3R5cGVvZi5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1ByaW1pdGl2ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b1ByaW1pdGl2ZS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanNcXFwiKTtcXG5cXG5cXG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcXG4gIHZhciBpID0gKDAsX3RvUHJpbWl0aXZlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXFxcImRlZmF1bHRcXFwiXSkodCwgXFxcInN0cmluZ1xcXCIpO1xcbiAgcmV0dXJuIFxcXCJzeW1ib2xcXFwiID09ICgwLF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShpKSA/IGkgOiBpICsgXFxcIlxcXCI7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF90eXBlb2Y7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcXG4gIFxcXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlxcXCI7XFxuXFxuICByZXR1cm4gX3R5cGVvZiA9IFxcXCJmdW5jdGlvblxcXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcXFwic3ltYm9sXFxcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvO1xcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XFxuICAgIHJldHVybiBvICYmIFxcXCJmdW5jdGlvblxcXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG87XFxuICB9LCBfdHlwZW9mKG8pO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheTsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXJyYXlMaWtlVG9BcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheUxpa2VUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzXFxcIik7XFxuXFxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcXG4gIGlmIChyKSB7XFxuICAgIGlmIChcXFwic3RyaW5nXFxcIiA9PSB0eXBlb2YgcikgcmV0dXJuICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkociwgYSk7XFxuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XFxuICAgIHJldHVybiBcXFwiT2JqZWN0XFxcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXFxcIk1hcFxcXCIgPT09IHQgfHwgXFxcIlNldFxcXCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXFxcIkFyZ3VtZW50c1xcXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyAoMCxfYXJyYXlMaWtlVG9BcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHIsIGEpIDogdm9pZCAwO1xcbiAgfVxcbn1cXG5cXG5cXG4vKioqLyB9KVxcblxcbi8qKioqKiovIFxcdH0pO1xcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcXG4vKioqKioqLyBcXHRcXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqLyBcXHRcXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcXG4vKioqKioqLyBcXHRcXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcXG4vKioqKioqLyBcXHRcXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcXG4vKioqKioqLyBcXHRcXHRcXHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxcbi8qKioqKiovIFxcdFxcdFxcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXFxuLyoqKioqKi8gXFx0XFx0XFx0ZXhwb3J0czoge31cXG4vKioqKioqLyBcXHRcXHR9O1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqLyBcXHRcXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKioqKiovIFxcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xcbi8qKioqKiovIFxcdCFmdW5jdGlvbigpIHtcXG4vKioqKioqLyBcXHRcXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xcbi8qKioqKiovIFxcdFxcdFxcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHRcXHR9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqLyBcXHR9KCk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xcbi8qKioqKiovIFxcdCFmdW5jdGlvbigpIHtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9XFxuLyoqKioqKi8gXFx0fSgpO1xcbi8qKioqKiovIFxcdFxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P3J1bGVTZXRbMV0ucnVsZXNbMV0udXNlIS4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyLnRzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyICovIFxcXCIuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50c1xcXCIpO1xcblxcblxcblxcbi8qKlxcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICovXFxuXFxuXFxudmFyIHdvcmtlciA9IHNlbGY7XFxud29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lID0gZXZlbnQuZGF0YS5mb3JjZUludmFsaWRGcmFtZTtcXG59O1xcbmlmIChzZWxmLlJUQ1RyYW5zZm9ybUV2ZW50KSB7XFxuICBzZWxmLm9ucnRjdHJhbnNmb3JtID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIHZhciB0cmFuc2Zvcm1lciA9IGV2ZW50LnRyYW5zZm9ybWVyO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMgPSB0cmFuc2Zvcm1lci5vcHRpb25zLmNvZGVjO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHJhbnNmb3JtRnVuY3Rpb24gPSB0cmFuc2Zvcm1lci5vcHRpb25zLmtpbmQgPT09ICd2aWRlbycgPyBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udmlkZW9UcmFuc2Zvcm1GdW5jdGlvbiA6IFdvcmtlclRyYW5zZm9ybVN0cmVhbS5hdWRpb1RyYW5zZm9ybUZ1bmN0aW9uO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0ubXVzdFNpbmsgPSB0cmFuc2Zvcm1lci5vcHRpb25zLm11c3RTaW5rO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xcbiAgICAgIHRyYW5zZm9ybTogV29ya2VyVHJhbnNmb3JtU3RyZWFtLnRyYW5zZm9ybUZ1bmN0aW9uXFxuICAgIH0pO1xcbiAgICB2YXIgc291cmNlID0gdHJhbnNmb3JtZXIucmVhZGFibGU7XFxuICAgIHZhciBzaW5rID0gdHJhbnNmb3JtZXIud3JpdGFibGU7XFxuICAgIHNvdXJjZS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pLnBpcGVUbyhzaW5rKTtcXG4gIH07XFxufVxcbnZhciBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xcbiAgZnVuY3Rpb24gV29ya2VyVHJhbnNmb3JtU3RyZWFtKCkge1xcbiAgICAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkodGhpcywgV29ya2VyVHJhbnNmb3JtU3RyZWFtKTtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXJUcmFuc2Zvcm1TdHJlYW0gaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xcbiAgfVxcbiAgcmV0dXJuICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIG51bGwsIFt7XFxuICAgIGtleTogXFxcInZpZGVvVHJhbnNmb3JtRnVuY3Rpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmlkZW9UcmFuc2Zvcm1GdW5jdGlvbihjaHVuaywgY29udHJvbGxlcikge1xcbiAgICAgIHBvc3RNZXNzYWdlKHtcXG4gICAgICAgIGNodW5rOiB7XFxuICAgICAgICAgIHR5cGU6IGNodW5rLnR5cGUsXFxuICAgICAgICAgIHRpbWVzdGFtcDogY2h1bmsudGltZXN0YW1wLFxcbiAgICAgICAgICBkYXRhOiBjaHVuay5kYXRhXFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luaykge1xcbiAgICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSkge1xcbiAgICAgICAgICB2YXIgc3Vycm9nYXRlO1xcbiAgICAgICAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XFxuICAgICAgICAgICAgc3Vycm9nYXRlID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoc3Vycm9nYXRlID09PSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fLlNraXBGcmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBjaHVuay5kYXRhID0gc3Vycm9nYXRlIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcXG4gICAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJhdWRpb1RyYW5zZm9ybUZ1bmN0aW9uXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGF1ZGlvVHJhbnNmb3JtRnVuY3Rpb24oY2h1bmssIGNvbnRyb2xsZXIpIHtcXG4gICAgICBwb3N0TWVzc2FnZSh7XFxuICAgICAgICBjaHVuazoge1xcbiAgICAgICAgICB0aW1lc3RhbXA6IGNodW5rLnRpbWVzdGFtcCxcXG4gICAgICAgICAgZGF0YTogY2h1bmsuZGF0YVxcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICAgIGlmIChXb3JrZXJUcmFuc2Zvcm1TdHJlYW0ubXVzdFNpbmspIHtcXG4gICAgICAgIGlmIChXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUpIHtcXG4gICAgICAgICAgV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lID0gZmFsc2U7XFxuICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYykgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcXG4gICAgfVxcbiAgfV0pO1xcbn0oKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwiY29kZWNcXFwiLCB2b2lkIDApO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJ0cmFuc2Zvcm1GdW5jdGlvblxcXCIsIHZvaWQgMCk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgXFxcIm11c3RTaW5rXFxcIiwgdm9pZCAwKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwiZm9yY2VJbnZhbGlkRnJhbWVcXFwiLCB2b2lkIDApO1xcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfX1dFQlBBQ0tfREVGQVVMVF9FWFBPUlRfXyA9IChudWxsKTtcXG4vKioqKioqLyB9KSgpXFxuO1xcblwiLCBcIldvcmtlclwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmLCBuby11c2UtYmVmb3JlLWRlZmluZSwgbmV3LWNhcCAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGVudCwgd29ya2VyQ29uc3RydWN0b3IsIHdvcmtlck9wdGlvbnMsIHVybCkge1xuICB2YXIgZ2xvYmFsU2NvcGUgPSBzZWxmIHx8IHdpbmRvdztcblxuICB0cnkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgYmxvYjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gTmV3IEFQSVxuICAgICAgICBibG9iID0gbmV3IGdsb2JhbFNjb3BlLkJsb2IoW2NvbnRlbnRdKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gQmxvYkJ1aWxkZXIgPSBEZXByZWNhdGVkLCBidXQgd2lkZWx5IGltcGxlbWVudGVkXG4gICAgICAgIHZhciBCbG9iQnVpbGRlciA9IGdsb2JhbFNjb3BlLkJsb2JCdWlsZGVyIHx8IGdsb2JhbFNjb3BlLldlYktpdEJsb2JCdWlsZGVyIHx8IGdsb2JhbFNjb3BlLk1vekJsb2JCdWlsZGVyIHx8IGdsb2JhbFNjb3BlLk1TQmxvYkJ1aWxkZXI7XG4gICAgICAgIGJsb2IgPSBuZXcgQmxvYkJ1aWxkZXIoKTtcbiAgICAgICAgYmxvYi5hcHBlbmQoY29udGVudCk7XG4gICAgICAgIGJsb2IgPSBibG9iLmdldEJsb2IoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFVSTCA9IGdsb2JhbFNjb3BlLlVSTCB8fCBnbG9iYWxTY29wZS53ZWJraXRVUkw7XG4gICAgICB2YXIgb2JqZWN0VVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIHZhciB3b3JrZXIgPSBuZXcgZ2xvYmFsU2NvcGVbd29ya2VyQ29uc3RydWN0b3JdKG9iamVjdFVSTCwgd29ya2VyT3B0aW9ucyk7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVSTCk7XG4gICAgICByZXR1cm4gd29ya2VyO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBuZXcgZ2xvYmFsU2NvcGVbd29ya2VyQ29uc3RydWN0b3JdKFwiZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0LFwiLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQoY29udGVudCkpLCB3b3JrZXJPcHRpb25zKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIXVybCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJJbmxpbmUgd29ya2VyIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0odXJsLCB3b3JrZXJPcHRpb25zKTtcbiAgfVxufTsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBlO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciB0LFxuICAgIGUgPSB7fSxcbiAgICByID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBuID0gci5oYXNPd25Qcm9wZXJ0eSxcbiAgICBvID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGEgPSBpLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGMgPSBpLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gT2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTtcbiAgdiAmJiB2ICE9PSByICYmIG4uY2FsbCh2LCBhKSAmJiAocCA9IHYpO1xuICB2YXIgZyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTtcbiAgICByZXR1cm4gci5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrci5zbGljZSgxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0LCBlKSB7XG4gICAgICBmb3IgKHZhciByID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IHIgPj0gMDsgLS1yKSB7XG4gICAgICAgIHZhciBvID0gdGhpcy50cnlFbnRyaWVzW3JdO1xuICAgICAgICBpZiAoby50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIG4uY2FsbChvLCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgby5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGkgPSBvO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpICYmIChcImJyZWFrXCIgPT09IHQgfHwgXCJjb250aW51ZVwiID09PSB0KSAmJiBpLnRyeUxvYyA8PSBlICYmIGUgPD0gaS5maW5hbGx5TG9jICYmIChpID0gbnVsbCk7XG4gICAgICB2YXIgYSA9IGkgPyBpLmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiBhLnR5cGUgPSB0LCBhLmFyZyA9IGUsIGkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gaS5maW5hbGx5TG9jLCB5KSA6IHRoaXMuY29tcGxldGUoYSk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodCwgZSkge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHQudHlwZSA/IHRoaXMubmV4dCA9IHQuYXJnIDogXCJyZXR1cm5cIiA9PT0gdC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gdC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSB0LnR5cGUgJiYgZSAmJiAodGhpcy5uZXh0ID0gZSksIHk7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci5maW5hbGx5TG9jID09PSB0KSByZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sIHIuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KHIpLCB5O1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIudHJ5TG9jID09PSB0KSB7XG4gICAgICAgICAgdmFyIG4gPSByLmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbi50eXBlKSB7XG4gICAgICAgICAgICB2YXIgbyA9IG4uYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xuICByZXR1cm4gbjtcbn1cbmV4cG9ydCB7IF9hcnJheUxpa2VUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7XG59XG5leHBvcnQgeyBfYXJyYXlXaXRoSG9sZXMgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyKTtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhvdXRIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAobiwgdCwgZSwgciwgbywgYSwgYykge1xuICB0cnkge1xuICAgIHZhciBpID0gblthXShjKSxcbiAgICAgIHUgPSBpLnZhbHVlO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcmV0dXJuIHZvaWQgZShuKTtcbiAgfVxuICBpLmRvbmUgPyB0KHUpIDogUHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4ociwgbyk7XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQgPSB0aGlzLFxuICAgICAgZSA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIsIG8pIHtcbiAgICAgIHZhciBhID0gbi5hcHBseSh0LCBlKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCBuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIG4pO1xuICAgICAgfVxuICAgICAgX25leHQodm9pZCAwKTtcbiAgICB9KTtcbiAgfTtcbn1cbmV4cG9ydCB7IF9hc3luY1RvR2VuZXJhdG9yIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5leHBvcnQgeyBfY2xhc3NDYWxsQ2hlY2sgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHtcbiAgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7XG4gICAgdmFyIG8gPSByW3RdO1xuICAgIG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCB0b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7XG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGU7XG59XG5leHBvcnQgeyBfY3JlYXRlQ2xhc3MgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5leHBvcnQgeyBfZ2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHtcbiAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXCJAQGl0ZXJhdG9yXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTtcbn1cbmV4cG9ydCB7IF9pdGVyYWJsZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn1cbmV4cG9ydCB7IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5leHBvcnQgeyBfbm9uSXRlcmFibGVTcHJlYWQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxuZXhwb3J0IHsgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbmV4cG9ydCB7IF9zbGljZWRUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheShyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuZXhwb3J0IHsgX3RvQ29uc3VtYWJsZUFycmF5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxuZXhwb3J0IHsgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcblx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZTsgfTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbnZhciBnID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKSB8fFxuICB7fVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZyAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZyAmJlxuICAgICdCbG9iJyBpbiBnICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXJzIGNvbnN0cnVjdG9yOiBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kJyArIGhlYWRlci5sZW5ndGgpXG4gICAgICB9XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5fbm9Cb2R5KSByZXR1cm5cbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICB2YXIgbWF0Y2ggPSAvY2hhcnNldD0oW0EtWmEtejAtOV8tXSspLy5leGVjKGJsb2IudHlwZSlcbiAgdmFyIGVuY29kaW5nID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICd1dGYtOCdcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fbm9Cb2R5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgYXMgQXJyYXlCdWZmZXInKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydDT05ORUNUJywgJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BBVENIJywgJ1BPU1QnLCAnUFVUJywgJ1RSQUNFJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWwgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoJ0Fib3J0Q29udHJvbGxlcicgaW4gZykge1xuICAgICAgdmFyIGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICByZXR1cm4gY3RybC5zaWduYWw7XG4gICAgfVxuICB9KCkpO1xuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSZXNwb25zZSAnICsgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgaWYgKHRoaXMuc3RhdHVzIDwgMjAwIHx8IHRoaXMuc3RhdHVzID4gNTk5KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdSZXNwb25zZSc6IFRoZSBzdGF0dXMgcHJvdmlkZWQgKDApIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsyMDAsIDU5OV0uXCIpXG4gIH1cbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMjAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLm9rID0gZmFsc2VcbiAgcmVzcG9uc2Uuc3RhdHVzID0gMFxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGcuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNoZWNrIGlmIHNwZWNpZmljYWxseSBmb3Igd2hlbiBhIHVzZXIgZmV0Y2hlcyBhIGZpbGUgbG9jYWxseSBmcm9tIHRoZSBmaWxlIHN5c3RlbVxuICAgICAgLy8gT25seSBpZiB0aGUgc3RhdHVzIGlzIG91dCBvZiBhIG5vcm1hbCByYW5nZVxuICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoJ2ZpbGU6Ly8nKSA9PT0gMCAmJiAoeGhyLnN0YXR1cyA8IDIwMCB8fCB4aHIuc3RhdHVzID4gNTk5KSkge1xuICAgICAgICBvcHRpb25zLnN0YXR1cyA9IDIwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgdGltZWQgb3V0JykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGcubG9jYXRpb24uaHJlZiA/IGcubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXJcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycyB8fCAoZy5IZWFkZXJzICYmIGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIGcuSGVhZGVycykpKSB7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAobmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnLmZldGNoKSB7XG4gIGcuZmV0Y2ggPSBmZXRjaFxuICBnLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGcuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZy5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07Il0sIm5hbWVzIjpbIkdsb2JhbFNjb3BlIiwiRGlzcG9zYWJsZSIsIkRpc3Bvc2FibGVMaXN0IiwiU3ViamVjdCIsIlJlYWRPbmx5U3ViamVjdCIsInZpc2liaWxpdHlDaGFuZ2VFdmVudCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJpbml0aWFsaXplIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudElzSGlkZGVuIiwidXNlRXZlbnRDYXB0dXJlUGhhc2UiLCJhZGREb2N1bWVudEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJyZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIiLCJkZWZhdWx0IiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQW5kcm9pZCIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9pc01vYmlsZSIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfQnJvd3NlckRldGVjdG9yIiwidGVzdCIsIl9uYXZpZ2F0b3IiLCJfbmF2aWdhdG9yMiIsImluY2x1ZGVzIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIlBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImRlZmF1bHRUZWxlbWV0cnlMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUiLCJkZWZhdWx0TG9nZ2luZ0xldmVsIiwiZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsImlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJiaW5kIiwic2V0VGltZW91dCIsImltZyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJ1bmRlZmluZWQiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9yZWYiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmEiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmEyIiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hMyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiX3JlZjIiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE0IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hNSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTYiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE3IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hOCIsInJ0dCIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTkiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmExMCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJNZXRyaWNzVHlwZSIsIk1ldHJpY1R5cGUiLCJEdXJhdGlvbnMiLCJTREsiLCJMb2dnZXJGYWN0b3J5IiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsImdldExvZ2dlciIsIm1ldHJpY3NTZXJ2aWNlIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJTZXR1cENvbXBsZXRlZCIsImZhaWwiLCJTZXR1cEZhaWxlZCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsImdldE5hbWUiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwidG9Jc29TdHJpbmciLCJFZGdlVG9rZW4iLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiaXNDaHJvbWU3NCIsImlzQ2hyb21lNzUiLCJpc0Nocm9tZTc2IiwiaXNDaHJvbWU3NyIsImFkZFRyYW5jZWl2ZXJEaXNhYmxlZCIsImlzQ2hyb21lNjkiLCJpc0Nocm9tZTcwIiwiaXNDaHJvbWU3MSIsImlzQ2hyb21lNzIiLCJicm93c2VyTmFtZSIsImJyb3dzZXJNYWpvclZlcnNpb24iLCJfR2xvYmFsU2NvcGUkdmFsdWUiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJSVENSdHBTY3JpcHRUcmFuc2Zvcm0iLCJIVE1MVmlkZW9FbGVtZW50IiwicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayIsImlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZCIsImlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIiwiaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQiLCJQYXJhbWV0ZXJzIiwiX2Rpc2NvdmVyeVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiX19QQVJBTUVURVJTX18iLCJkaXNjb3ZlcnkiLCJpbnRlbnRpb25zIiwiYnJvd3Nlckdsb2JhbFNjb3BlIiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsIndpbmRvdyIsImdsb2JhbFNjb3BlIiwiX2RvY3VtZW50IiwiX2xvY2F0aW9uIiwiX3dpbmRvdyIsIkZvcm1EYXRhIiwiTWVkaWFTdHJlYW0iLCJNZWRpYVN0cmVhbVRyYWNrIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJSVENJY2VDYW5kaWRhdGUiLCJVUkxTZWFyY2hQYXJhbXMiLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiY3JlYXRlRWxlbWVudCIsImhhc0ZvY3VzIiwiaGlkZGVuIiwicXVlcnlTZWxlY3RvciIsImZldGNoIiwiaG9zdG5hbWUiLCJzZWFyY2giLCJjb25uZWN0aW9uIiwib25MaW5lIiwic2V0SW50ZXJ2YWwiLCJzZXRJbnN0YW5jZSIsInByb3ZpZGVkR2xvYmFsU2NvcGUiLCJnZXRJbnN0YW5jZSIsIl9yZWFkT25seUluc3RhbmNlIiwic3Vic2NyaWJlIiwiY2FsbGJhY2siLCJfR2xvYmFsU2NvcGUiLCJfaW5zdGFuY2UiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJjYWxsIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QiLCJOdW1iZXJzIiwiY291bnROdW1iZXJMZW5ndGgiLCJpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlIiwibnVtYmVyIiwiY291bnREaWdpdHNCZWZvcmVEZWNpbWFsIiwiTWF0aCIsImZsb29yIiwiY291bnREaWdpdHNBZnRlckRlY2ltYWwiLCJmaXhSb3VuZGluZyIsInByZWNpc2lvbiIsInBvd2VyIiwicG93Iiwicm91bmQiLCJkaWdpdHNCZWZvcmVEZWNpbWFsIiwib3JpZ2luYWxWYWx1ZSIsIm1vZGlmaWVkVmFsdWUiLCJjb3VudCIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiVWludDhBcnJheXMiLCJpc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSIsInRhcmdldEJ5dGVTZXF1ZW5jZSIsImRhdGEiLCJvZmZzZXQiLCJpZHgiLCJmaW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0IiwicmV0dXJuVmFsdWVXaGVuTm90Rm91bmQiLCJhcmd1bWVudHMiLCJjdXJyZW50SW5kZXgiLCJieXRlTGVuZ3RoIiwiZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5IiwidXVpZEJ5dGVMZW5ndGgiLCJ1dWlkIiwiYnl0ZUhleCIsInBhZFN0YXJ0Iiwiam9pbiIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkxvZ2dpbmdMZXZlbCIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiV2FybiIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwiX3RoaXMyIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsImVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlIiwic3RhY2siLCJhcmciLCJjYWNoZSIsIl8iLCJPYmplY3QiLCJhcmd1bWVudCIsInRvU3RyaW5nU3RyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwibG9nZ2luZ0xldmVsIiwiT2ZmIiwiQWxsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY3MiLCJfbWV0cmljcyIsImdldFRlbGVtZXRyeUxldmVsIiwiVGltZVRvRmlyc3RGcmFtZSIsIkVzc2VudGlhbCIsIkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJTdGFsbGVkIiwiQnVmZmVyaW5nIiwiUm91bmRUcmlwVGltZSIsIkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiTmV0d29ya1R5cGUiLCJSZXNvbHV0aW9uQ2hhbmdlZCIsIkFwcGxpY2F0aW9uRm9yZWdyb3VuZCIsIkFwcGxpY2F0aW9uQmFja2dyb3VuZCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NTZXJ2aWNlIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzRmFjdG9yeSIsImdldE1ldHJpY3NTZXJ2aWNlIiwiX3R5cGVvZiIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImdldFRlbGVtZXRyeVVybCIsImdldEVudmlyb25tZW50RnJvbVVybCIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWwiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsIkV4cG9uZW50aWFsQmFja29mZiIsIlZlcnNpb25NYW5hZ2VyIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJnZXRMb2NhdGlvbkhvc3RuYW1lRnJvbUdsb2JhbFNjb3BlIiwidGhlbiIsImxvY2F0aW9uSG9zdG5hbWUiLCJfZG9tYWluIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic3Vic2NyaXB0aW9uIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhcHBlbmQiLCJyZWNvcmRzIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwicmVzcG9uc2UiLCJpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSIsIl9mYWlsdXJlQ291bnQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50Iiwic3RhdHVzIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwiaXNQcmVjYWNoaW5nRW5hYmxlZCIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsImVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImNvbmZpZ3VyYXRpb24iLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJ2aWRlb1RyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsIm9wdGlvbnMiLCJhZGRUcmFuc2NlaXZlciIsInQwIiwidDEiLCJ0MiIsImNyZWF0ZU9mZmVyIiwidDMiLCJsb2NhbE9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJ0NCIsInQ1IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJpY2VTZXJ2ZXJzIiwiaSIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJTZHBQYXJzZXIiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbiIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjIiLCJnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsInBhcnNlZFNEUCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsImdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjciLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjQiLCJnZXRTdGF0c0xlZ2FjeSIsInJlc3VsdCIsIm5hbWVzIiwic3RhdCIsIl90aGlzMiRfcnRjU3RhdGlzdGljJCIsIl90aGlzMiRfcnRjU3RhdGlzdGljJDIiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJfc2RwU3BsaXRCeUxpbmVzJGZpbmQiLCJydG1hcCIsInNkcExpbmUiLCJ1c2VkQ29kZWNMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImNvbm5lY3Rpb25TdGF0ZSIsImljZUNvbm5lY3Rpb25TdGF0ZSIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjUiLCJnZXRDb25maWd1cmF0aW9uIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uNiIsInNldENvbmZpZ3VyYXRpb24iLCJfdGhpcyRfcGVlckNvbm5lY3Rpb243IiwiZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQiLCJnZXRUcmFuc2NlaXZlcnMiLCJfdGhpcyRfcGVlckNvbm5lY3Rpb244IiwiX2NyZWF0ZU9mZmVyIiwicHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQiLCJyZWplY3QiLCJfY3JlYXRlQW5zd2VyIiwiY3JlYXRlQW5zd2VyIiwiX3gyIiwiX3NldExvY2FsRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJfeDMiLCJfc2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfY2FsbGVlNCIsIl9kZXNjcmlwdGlvbiRzZHAiLCJoYXNDcnlwdG8iLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsImdldFNlbmRlcnMiLCJnZXRSZWNlaXZlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjkiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJyZXNvbHZlUGVlckNvbm5lY3Rpb25Qcm9taXNlIiwic3ViamVjdCIsIl9zdWJqZWN0IiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJsaXN0ZW5lcnMiLCJfY2FsbFN1cGVyIiwiX2luaGVyaXRzIiwiX2xpc3RlbmVycyIsIl92YWx1ZSIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsIkRpc2NvdmVyeVVyaSIsIl9HbG9iYWxTY29wZSRnZXRJbnN0YSIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwib25Mb2FkIiwiX2luaXRpYWxpemVkIiwiYWRkV2luZG93RXZlbnRMaXN0ZW5lciIsImluaXQiLCJvcHRpb25zV2l0aE9wdGlvbmFsZ2xvYmFsU2NvcGUiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsIl90aGlzJF9hcHBsaWNhdGlvbkFjdCIsIl9TREsiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsImVuZHNXaXRoIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJEaW1lbnNpb24iLCJDaGFubmVsU3RhdGUiLCJWaWRlb1RlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJUb2tlbkNvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIkVuY29kZWRTdHJlYW1TaW5rIiwiU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiU3RhdGVDb250ZXh0IiwiRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQiLCJTdHJlYW1GYWN0b3J5IiwiRGlzY292ZXJ5IiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwiY2hhbm5lbENvbnRleHRPcHRpb25zIiwidGFyZ2V0TGFnIiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsImhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsInZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJfdG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsIl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCIsImNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJfcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkIiwiaXNFbmFibGVkIiwiX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsIl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiU3RvcHBlZCIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQbGF5aW5nIiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsIktlZXAiLCJOb3JtYWwiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50IiwicmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJJbml0aWFsaXppbmciLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsImVtcHR5IiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJSZXNldCIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwicmVhc29uIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0yIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEiLCJfdmFsaWQyIiwiX3ZhbGlkYXRpb25SZXN1bHQyIiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhMiIsIl92YWxpZDMiLCJfdmFsaWRhdGlvblJlc3VsdDMiLCJoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayIsImhhc0VuY29kZWRTdHJlYW1TaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3RhcnRpbmciLCJVbmF1dGhvcml6ZWQiLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJDb25maWd1cmF0aW9uRXJyb3IiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwiaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsIlVuc3VwcG9ydGVkRmVhdHVyZSIsIlJlY292ZXJpbmciLCJjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJjcmVhdGUiLCJDbGllbnRTdGFydEVycm9yIiwiYXV0b21hdGljUmV0cnlPbkZhaWx1cmUiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX3Jlc3RhcnRBZnRlclN0b3AiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIl9wbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwbGF5IiwiU3RhbmRCeSIsIk9mZmxpbmUiLCJHZW9SZXN0cmljdGVkIiwiR2VvQmxvY2tlZCIsIlBhdXNlZCIsIlJlY29ubmVjdGluZyIsIlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0Iiwic2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiZGVzdHJveVN0cmVhbSIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfdGhpczciLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSIsImNhcGFiaWxpdHkiLCJzaG91bGRFeHRyYWN0VGltZWNvZGUiLCJzaG91bGRFeHRyYWN0VGltZXN0YW1wcyIsImlzQ2hhbm5lbEZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQiLCJvcHRpb24iLCJ0cmltIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczgiLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImluaXRpYWxpemVkIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiQml0c3RyZWFtUmVhZGVyIiwiX2RhdGEiLCJfYml0T2Zmc2V0IiwicmVhZEJpdHMiLCJiaXRzVG9SZWFkIiwiZ2V0UmVtYWluaW5nQml0cyIsImJpdHNSZW1haW5pbmciLCJieXRlT2Zmc2V0IiwiYml0UG9zaXRpb25JbkJ5dGUiLCJiaXRzQXZhaWxhYmxlSW5CeXRlIiwibWluIiwibWFzayIsImJ5dGVWYWx1ZSIsImJpdHMiLCJza2lwQml0cyIsImJpdHNUb1NraXAiLCJFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCIsIkgyNjRCaXRzdHJlYW0iLCJldmVudFB1Ymxpc2hlciIsIl9ldmVudFB1Ymxpc2hlciIsInN1YnNjcmliZVRvTmFsVW5pdCIsIm5hbFVuaXRUeXBlIiwiTmFsVW5pdCIsIm5hbFVuaXRFdmVudCIsInN1YnNjcmliZVRvU2VpUGF5bG9hZFR5cGUiLCJzZWlQYXlsb2FkVHlwZSIsIlNlaVBheWxvYWQiLCJzZWlQYXlsb2FkRXZlbnQiLCJzdWJzY3JpYmVUb1BheWxvYWQiLCJjb250ZXh0IiwicGF5bG9hZFV1aWQiLCJwdWJsaXNoIiwiUGF5bG9hZFN1YnNjcmlwdGlvbiIsIlBheWxvYWQiLCJwYXlsb2FkRXZlbnQiLCJOYWxVbml0VHlwZSIsIlNlaVBheWxvYWRUeXBlIiwiRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwiQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciIsInZjbEV4dHJhY3Rpb25TdHJhdGVneSIsIl92Y2xFeHRyYWN0aW9uU3RyYXRlZ3kiLCJzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzIiwiRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsiLCJwYXJzZUVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwiY2h1bmsiLCJoYW5kbGVFeHRyYWN0ZWREYXRhIiwiZXh0cmFjdE5hbFVuaXRBdE9mZnNldCIsIm5vdGlmeUVuZE9mQ2h1bmsiLCJhbm5leEJTdGFydENvZGVMZW5ndGgiLCJuYWxVbml0Iiwic2VpUGF5bG9hZHMiLCJwdWJsaXNoTmFsVW5pdCIsInNlaVBheWxvYWQiLCJoYW5kbGVTZWlQYXlsb2FkIiwicHVibGlzaFNlaVBheWxvYWQiLCJVc2VyRGF0YVVucmVnaXN0ZXJlZCIsImhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZCIsInN1YmFycmF5IiwicGF5bG9hZERhdGEiLCJwdWJsaXNoUGF5bG9hZCIsInBheWxvYWQiLCJFbmRPZkNodW5rIiwibmFsVW5pdEhlYWRlckluZGV4IiwiZXh0cmFjdGVkRGF0YSIsIlNsaWNlTGF5ZXJOb25JZHJEYXRhIiwiU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyIiwiU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyIiwiU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyIiwiU2xpY2VMYXllcklkckRhdGEiLCJleHRyYWN0VmNsTmFsVW5pdCIsIlN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb24iLCJleHRyYWN0U2VpTmFsVW5pdCIsImV4dHJhY3ROb25WY2xOYWxVbml0IiwibmFsVW5pdERhdGEiLCJfc2VpUGF5bG9hZDRCeXRlRW5kQ29kZSIsIl9zZWlQYXlsb2FkM0J5dGVFbmRDb2RlIiwiZXh0cmFjdGVkU2VpUGF5bG9hZCIsImV4dHJhY3RTZWlQYXlsb2FkIiwicGF5bG9hZFR5cGUiLCJlbmRJbmRleCIsIm5leHRBbm5leEJTdGFydENvZGVJbmRleCIsImZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldCIsImZmQ291bnQiLCJwYXlsb2FkU2l6ZSIsImdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsImluZGV4NCIsImFubmV4QjRCeXRlU3RhcnRDb2RlIiwiYW5uZXhCM0J5dGVTdGFydENvZGUiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwibnVtYmVyT2ZOb25FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMiLCJsZWFkaW5nWmVyb0J5dGVzIiwibnVtYmVyT2ZCeXRlc1Zpc2l0ZWQiLCJudW1iZXJPZkJ5dGVzVG9TZWVrIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwib3V0cHV0Iiwib3V0T2Zmc2V0IiwiZWJzcE9mZnNldCIsInByZXZlbnRpb25CeXRlSWR4IiwiUGljU3RydWN0IiwiUGljdHVyZVRpbWluZ1BhcnNlciIsImNvbmZpZyIsImJpdHN0cmVhbVJlYWRlciIsInBpY3R1cmVUaW1pbmciLCJwaWNTdHJ1Y3QiLCJjcGJEcGJEZWxheXNQcmVzZW50RmxhZyIsImNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMSIsImRwYk91dHB1dERlbGF5TGVuZ3RoTWludXMxIiwicGljU3RydWN0UHJlc2VudEZsYWciLCJudW1DbG9ja1RTIiwiY29udmVydFBpY1N0cnVjdFRvTnVtQ2xvY2tUUyIsImNsb2NrVGltZXN0YW1wcyIsImNsb2NrVGltZXN0YW1wRmxhZyIsImNsb2NrVGltZXN0YW1wIiwiY3RUeXBlIiwibnVpdEZpZWxkQmFzZWRGbGFnIiwiY291bnRpbmdUeXBlIiwiZnVsbFRpbWVzdGFtcEZsYWciLCJkaXNjb250aW51aXR5RmxhZyIsImNudERyb3BwZWRGbGFnIiwibkZyYW1lcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJzZWNvbmRzRmxhZyIsIm1pbnV0ZXNGbGFnIiwiaG91cnNGbGFnIiwidGltZU9mZnNldCIsIlByb2dyZXNzaXZlRnJhbWUiLCJUb3BGaWVsZCIsIkJvdHRvbUZpZWxkIiwiVG9wRmllbGRCb3R0b21GaWVsZCIsIkJvdHRvbUZpZWxkVG9wRmllbGQiLCJGcmFtZURvdWJsaW5nIiwiVG9wRmllbGRCb3R0b21GaWVsZFRvcEZpZWxkUmVwZWF0ZWQiLCJCb3R0b21GaWVsZFRvcEZpZWxkQm90dG9tRmllbGRSZXBlYXRlZCIsIkZyYW1lVHJpcGxpbmciLCJQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSIsIm5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4IiwiX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoIiwibmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXgiLCJWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSIsIkV2ZW50UHVibGlzaGVyIiwiUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyIsIkgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciIsIkJpdHN0cmVhbURlY29kZXJzIiwiY3JlYXRlSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsImRlY29kZXJFdmVudFB1Ymxpc2hlciIsImJpdHN0cmVhbSIsInBhcnNlciIsImNyZWF0ZVBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsImVuY29kaW5nIiwiX2JpdHN0cmVhbSIsIl9wYXJzZXIiLCJkZWNvZGUiLCJlbmNvZGVkTWVkaWFTdHJlYW1DaHVuayIsIl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiX2VuY29kaW5nIiwic3Vic2NyaWJlVG9FbWJlZGRlZERhdGEiLCJvbkRlY29kZWRNZWRpYUNodW5rIiwidHJhY2tJZCIsImRlY29kZWRNZWRpYUNodW5rRXZlbnQiLCJub29wIiwiU2V0IiwiTWFwIiwiZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCIsIl9leHBlY3RlZFBheWxvYWRVdWlkIiwiX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQiLCJfcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCIsInN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cyIsInN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cyIsInN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cyIsIl9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kIiwiX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZCIsImNsZWFyIiwic3Vic2NyaWJlVG9FbmRPZkNodW5rRXZlbnRzIiwiYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQiLCJoYW5kbGVOYWxVbml0RXZlbnQiLCJfcmVmMyIsIl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgiLCJwdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkIiwiZXh0cmFjdFZjbEVtYmVkZGVkRGF0YSIsImRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kIiwiX3JlZjQiLCJsb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQiLCJjb250ZXh0SWQiLCJoYW5kbGVFbmRPZkVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwiX3JlZjUiLCJlbmRPZkNodW5rRXZlbnRIYW5kbGVyIiwiaGFuZGxlUGF5bG9hZEV2ZW50IiwiX3JlZjYiLCJoYXMiLCJsb2dXYXJuaW5nVW5leHBlY3RlZFBheWxvYWRVdWlkUmVjZWl2ZWRPbmNlIiwiRXZlbnRFbWl0dGVyIiwiZW1pdCIsImV2ZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImVyciIsImYiLCJvbkV2ZW50V2l0aE5vU3Vic2NyaWJlciIsIm9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlciIsIl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzIiwiZXZlbnRUeXBlIiwiZW1pdHRlciIsIl9ldmVudEVtaXR0ZXJzIiwiY3JlYXRlRW1pdHRlciIsImRpc3Bvc2FibGVMaXN0ZW5lciIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiRm9yY2UiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwicmVzb2x2ZUVuZFBvaW50UHJvbWlzZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJFbmRQb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsInJhY2UiLCJvayIsInRleHQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJidWlsZERpc2NvdmVyeVVybCIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImRpc2NvdmVyeVBhcmFtZXRlcnMiLCJzZWFyY2hQYXJhbXMiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIiLCJjaGFubmVsQ29udGV4dCIsImZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IiwiX2JpdHN0cmVhbURlY29kZXIiLCJfZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAiLCJfdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMiLCJzZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnMiLCJQaWN0dXJlVGltaW5nIiwib25QaWN0dXJlVGltaW5nRXh0cmFjdGVkIiwicHJvY2Vzc0ZyYW1lIiwibWlkIiwiZnJhbWUiLCJmcmFtZVRpbWluZyIsInJlY2VpdmVUaW1lc3RhbXAiLCJyZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSIsInJ0cFRpbWVzdGFtcCIsIl9waWN0dXJlVGltaW5nJHBpY1N0ciIsIl9waWN0dXJlVGltaW5nJHBpY1N0cjIiLCJfY2xvY2tUaW1lc3RhbXAkaG91cnMiLCJfY2xvY2tUaW1lc3RhbXAkbWludXQiLCJfY2xvY2tUaW1lc3RhbXAkc2Vjb24iLCJfcmVmJGNvbnRleHQiLCJfcGljdHVyZVRpbWluZ1BhcnNlciIsIl9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnIiwidGltZWNvZGUiLCJmcmFtZXMiLCJpc0ZyYW1lRHJvcCIsInNvdXJjZVRpbWVzdGFtcCIsImluZ2VzdFRpbWVzdGFtcCIsImVuY29kZVRpbWVzdGFtcCIsInRyYW5zY29kZVRpbWVzdGFtcCIsInBsYXliYWNrU3RhdGUiLCJfY3VycmVudFBsYXliYWNrU3RhdGUiLCJ2aWRlb0ZyYW1lQ2FsbGJhY2siLCJtZXRhZGF0YSIsImFybVZpZGVvRnJhbWVDYWxsYmFjayIsInRpbWVzdGFtcHNUb0RlbGV0ZSIsIl9zdGVwJHZhbHVlIiwiX3NsaWNlZFRvQXJyYXkiLCJfb2JqZWN0U3ByZWFkIiwicmVuZGVyVGltZXN0YW1wIiwicGVyZm9ybWFuY2UiLCJ0aW1lT3JpZ2luIiwiX2kiLCJfdGltZXN0YW1wc1RvRGVsZXRlIiwiZWxlbWVudHNUb0RlbGV0ZSIsInNpemUiLCJNQVhfRlJBTUVfVElNSU5HX0VOVFJJRVMiLCJpdGVyYXRvciIsImtleXMiLCJrZXlUb0RlbGV0ZSIsIm9uUGxheWluZyIsIm9uUGF1c2UiLCJvblN0YWxsZWQiLCJvbldhaXRpbmciLCJvbkVuZGVkIiwib25FcnJvciIsIl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkIiwiX3RoaXMyJF9jaGFubmVsQ29udGV4IiwiY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrIiwiX3RoaXMkX2NoYW5uZWxDb250ZXh0IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCIsImRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQiLCJSZWFsVGltZVN0cmVhbSIsInBlZXJDb25uZWN0aW9uQ29udGV4dCIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJyZXF1aXJlc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImFsbCIsIl9yZWYzJCIsImNsaWVudE9mZmVyRGlzYWJsZWQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsInJldHJ5Q2FsbGJhY2siLCJuYXZpZ2F0b3JJc09uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwib25UcmFja0Rpc2FibGVkIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsIl9wZWVyQ29ubmVjdGlvbiRjdXJyZSIsIl90aGlzJF9jaGFubmVsQ29udGV4dDIiLCJwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiIsInJlY2VpdmVycyIsIl9JbnNlcnRhYmxlU3RyZWFtcyRjbyIsImNvbmZpZ3VyZUVuY29kZWRTdHJlYW1QaXBlbGluZSIsImVuY29kZWRWaWRlb0ZyYW1lIiwicmVxdWlyZXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwidG9VcHBlckNhc2UiLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlciIsImdldFZpZGVvVHJhY2tzIiwiX3BlZXJDb25uZWN0aW9uJGdldFRyIiwicmVjZWl2ZXIiLCJzdXBwb3J0c0dldFRyYW5zY2VpdmVycyIsInRyYW5zY2VpdmVyIiwiX0luc2VydGFibGVTdHJlYW1zJGNvMiIsImNvbmZpZ3VyZUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbiIsInRyYW5zZm9ybWVkU3RyZWFtIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbiIsInJ0Y1N0YXRpc3RpYyIsInN0YXRpc3RpY3MiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwibWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsImF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9wZWVyQ29ubmVjdGlvbiRjdXJyZTIiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsIlJlYWxUaW1lU3RyZWFtRmFjdG9yeSIsInRva2VuQ2FwYWJpbGl0aWVzIiwibW9kZSIsIlN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJTa2lwRnJhbWUiLCJXb3JrZXJUcmFuc2Zvcm1TdHJlYW0iLCJlbmNvZGVkQXVkaW9GcmFtZSIsInJlY2VpdmUiLCJtdXN0U2luayIsIndvcmtlciIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiZm9yY2VJbnZhbGlkRnJhbWUiLCJ0cmFuc2Zvcm0iLCJ0ZXJtaW5hdGUiLCJlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJjb250cm9sbGVyIiwic3Vycm9nYXRlIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lIiwiZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyIsImdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMiLCJlbnF1ZXVlIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJyZWNlaXZlclN0cmVhbXMiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwiYXVkaW9QdW1wZXIiLCJBdWRpbyIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhIiwiZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyIsImluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsInZpZGVvVHJhY2siLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJyZW1vdmVUcmFjayIsImF1ZGlvVHJhY2siLCJTeW1ib2wiLCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjIiwiT1BVUyIsIl9zaW5nbGVaZXJvQnl0ZSIsIl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIiLCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0IiwiX2R1bW15ODJ4ODJIMjY0IiwiSUZyYW1lIiwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyIsIkgyNjQiLCJWUDgiLCJWUDkiLCJfaXNBbmRyb2lkQ2hyb21lIiwiZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlciIsIl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMiLCJzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyIiwiYml0TWFzazEiLCJiaXRNYXNrMiIsImJpdFNoaWZ0UmlnaHRCeTEiLCJiaXRTaGlmdExlZnRCeTciLCJieXRlMSIsImJ5dGUyIiwiY29weU9mRHVtbXlQRnJhbWVzIiwiUEZyYW1lIiwiYnVmZmVySW5kZXgiLCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4IiwiX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJpc0FuZHJvaWQiLCJfaXNNb2JpbGVDaHJvbWUiLCJfaXNTYWZhcmkiLCJfX0JVSUxEX1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIlRlbGVtZXRyeVNlcnZpY2UiLCJfdGVsZW1ldHJ5U2VydmljZSIsInZhbHVlT2YiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0SXRlbVNpemUiLCJnZXRMb2dTaXplIiwic3VtIiwiZHVyYXRpb24iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwibWlsbGlzZWNvbmRzIiwicGFydHMiLCJTdHJpbmciLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtYXgiLCJvdGhlciIsImFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX25ldHdvcmtNb25pdG9yIiwiaXNGb3JlZ3JvdW5kIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RyZWFtSWQiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlcmVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJlbmQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==
13057
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUZBLElBSUtDLGNBQWMsMEJBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBQSxPQUFkQSxjQUFjO0FBQUEsRUFBZEEsY0FBYztBQTJFbkIsK0RBQWVBLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0U3QjtBQUNBO0FBQ0E7O0FBR21FO0FBQ047QUFFWjtBQUVNO0FBR2tDO0FBR3ZCO0FBQUEsSUF1QjdDRSxzQkFBc0I7RUFTekMsU0FBQUEsdUJBQVlwQixjQUE4QixFQUFFcUIscUJBQW9ELEVBQUU7SUFBQS8vQixpRkFBQSxPQUFBOC9CLHNCQUFBO0lBQUE3L0IsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUEsdUJBRmxELElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUdsRSxJQUFJLENBQUNnL0IsZUFBZSxHQUFHRCxjQUFjO0lBQ3JDLElBQUksQ0FBQ3NCLHNCQUFzQixHQUFHRCxxQkFBcUI7SUFDbkQsSUFBSSxDQUFDai9CLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQzYrQix3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7RUFDeEU7RUFBQyxPQUFBMS9CLDhFQUFBLENBQUF1L0Isc0JBQUE7SUFBQXQvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPRyxPQUFPQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXUvQix3Q0FBd0NBLENBQUEsRUFBZTtNQUM3RCxPQUFPLElBQUksQ0FBQ3RCLGVBQWUsQ0FBQ3p1QixTQUFTLENBQWFzdUIsMEZBQXVCLENBQUMwQix1QkFBdUIsRUFBRSxJQUFJLENBQUNDLDRCQUE0QixDQUFDMTZCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsSjtFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFReS9CLDRCQUE0QkEsQ0FBQXA1QixJQUFBLEVBQXFFO01BQUEsSUFBbkVzNEIsT0FBTyxHQUFBdDRCLElBQUEsQ0FBUHM0QixPQUFPO1FBQVFlLEtBQUssR0FBQXI1QixJQUFBLENBQVg2TCxJQUFJO01BQ2pELElBQUlNLFlBQVksR0FBRyxDQUFDO01BRXBCLE9BQU9BLFlBQVksR0FBR2t0QixLQUFLLENBQUNqdEIsVUFBVSxFQUFFO1FBQ3RDRCxZQUFZLElBQUksSUFBSSxDQUFDbXRCLG1CQUFtQixDQUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQ2lCLHNCQUFzQixDQUFDRixLQUFLLEVBQUVsdEIsWUFBWSxDQUFDLENBQUM7TUFDckc7TUFFQSxJQUFJLENBQUNxdEIsZ0JBQWdCLENBQUNsQixPQUFPLENBQUM7SUFDaEM7RUFBQztJQUFBNytCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVEyL0IsbUJBQW1CQSxDQUFDaEIsT0FBdUMsRUFBQS8zQixLQUFBLEVBQXdFO01BQUEsSUFBQXZHLEtBQUE7TUFBQSxJQUFyRXkvQixxQkFBcUIsR0FBQWw1QixLQUFBLENBQXJCazVCLHFCQUFxQjtRQUFFQyxPQUFPLEdBQUFuNUIsS0FBQSxDQUFQbTVCLE9BQU87UUFBRUMsV0FBVyxHQUFBcDVCLEtBQUEsQ0FBWG81QixXQUFXO01BQy9HLElBQUksQ0FBQ0MsY0FBYyxDQUFDdEIsT0FBTyxFQUFFb0IsT0FBTyxDQUFDO01BQ3JDQyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRS92QixPQUFPLENBQUMsVUFBQWl3QixVQUFVO1FBQUEsT0FBSTcvQixLQUFJLENBQUM4L0IsZ0JBQWdCLENBQUN4QixPQUFPLEVBQUV1QixVQUFVLENBQUM7TUFBQSxFQUFDO01BRTlFLE9BQU9ILE9BQU8sQ0FBQzd0QixJQUFJLENBQUNPLFVBQVUsR0FBR3F0QixxQkFBcUI7SUFDeEQ7RUFBQztJQUFBaGdDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFtZ0MsZ0JBQWdCQSxDQUFDeEIsT0FBdUMsRUFBRXVCLFVBQXNCLEVBQVE7TUFDOUYsSUFBSSxDQUFDRSxpQkFBaUIsQ0FBQ3pCLE9BQU8sRUFBRXVCLFVBQVUsQ0FBQztNQUUzQyxRQUFRQSxVQUFVLENBQUNqNUIsSUFBSTtRQUNyQixLQUFLaTRCLCtEQUFjLENBQUNtQixvQkFBb0I7VUFDdEMsSUFBSSxDQUFDQyxvQ0FBb0MsQ0FBQzNCLE9BQU8sRUFBRXVCLFVBQVUsQ0FBQztVQUU5RDtRQUVGO01BQ0Y7SUFDRjtFQUFDO0lBQUFwZ0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXNnQyxvQ0FBb0NBLENBQUMzQixPQUF1QyxFQUFFdUIsVUFBc0IsRUFBUTtNQUNsSCxJQUFNdEIsV0FBVyxHQUFHN3NCLHlEQUFXLENBQUNXLDJCQUEyQixDQUFDd3RCLFVBQVUsQ0FBQ2h1QixJQUFJLENBQUNxdUIsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztNQUM1RixJQUFNQyxXQUFXLEdBQUdOLFVBQVUsQ0FBQ2h1QixJQUFJLENBQUNxdUIsUUFBUSxDQUFDLEVBQUUsQ0FBQztNQUVoRCxJQUFJLENBQUNFLGNBQWMsQ0FBQzlCLE9BQU8sRUFBRTtRQUMzQi9yQixJQUFJLEVBQUVnc0IsV0FBVztRQUNqQjFzQixJQUFJLEVBQUVzdUI7TUFDUixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUExZ0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWlnQyxjQUFjQSxDQUFDdEIsT0FBdUMsRUFBRW9CLE9BQWdCLEVBQVE7TUFDdEYsSUFBSSxDQUFDOUIsZUFBZSxDQUFDWSxPQUFPLENBQVVmLDBGQUF1QixDQUFDTSxPQUFPLEVBQUU7UUFDckVPLE9BQU8sRUFBUEEsT0FBTztRQUNQenNCLElBQUksRUFBRTZ0QjtNQUNSLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQWpnQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRb2dDLGlCQUFpQkEsQ0FBQ3pCLE9BQXVDLEVBQUV1QixVQUFzQixFQUFRO01BQy9GLElBQUksQ0FBQ2pDLGVBQWUsQ0FBQ1ksT0FBTyxDQUFhZiwwRkFBdUIsQ0FBQ1UsVUFBVSxFQUFFO1FBQzNFRyxPQUFPLEVBQVBBLE9BQU87UUFDUHpzQixJQUFJLEVBQUVndUI7TUFDUixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFwZ0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXlnQyxjQUFjQSxDQUFDOUIsT0FBdUMsRUFBRStCLE9BQTBDLEVBQVE7TUFDaEgsSUFBSSxDQUFDekMsZUFBZSxDQUFDWSxPQUFPLENBQW9DZiwwRkFBdUIsQ0FBQ2lCLE9BQU8sRUFBRTtRQUMvRkosT0FBTyxFQUFQQSxPQUFPO1FBQ1B6c0IsSUFBSSxFQUFFd3VCO01BQ1IsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBNWdDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE2L0IsZ0JBQWdCQSxDQUFDbEIsT0FBdUMsRUFBUTtNQUN0RSxJQUFJLENBQUNWLGVBQWUsQ0FBQ1ksT0FBTyxDQUFPZiwwRkFBdUIsQ0FBQzZDLFVBQVUsRUFBRTtRQUNyRWhDLE9BQU8sRUFBUEEsT0FBTztRQUNQenNCLElBQUksRUFBRTtNQUNSLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQXBTLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE0L0Isc0JBQXNCQSxDQUFDRixLQUFpQixFQUFFdnRCLE1BQWMsRUFBaUI7TUFDL0UsSUFBTTJ0QixxQkFBcUIsR0FBR0osS0FBSyxDQUFDdnRCLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUM7TUFDaEUsSUFBTXl1QixrQkFBa0IsR0FBR3p1QixNQUFNLEdBQUcydEIscUJBQXFCO01BQ3pELElBQU0zQixXQUFXLEdBQUd1QixLQUFLLENBQUNrQixrQkFBa0IsQ0FBQyxHQUFHLElBQUk7TUFDcEQsSUFBSUMsYUFBYTtNQUVqQixRQUFRMUMsV0FBVztRQUNqQixLQUFLYyw0REFBVyxDQUFDNkIsb0JBQW9CO1FBQ3JDLEtBQUs3Qiw0REFBVyxDQUFDOEIsd0JBQXdCO1FBQ3pDLEtBQUs5Qiw0REFBVyxDQUFDK0Isd0JBQXdCO1FBQ3pDLEtBQUsvQiw0REFBVyxDQUFDZ0Msd0JBQXdCO1FBQ3pDLEtBQUtoQyw0REFBVyxDQUFDaUMsaUJBQWlCO1VBQ2hDTCxhQUFhLEdBQUcsSUFBSSxDQUFDdkIsc0JBQXNCLENBQUM2QixpQkFBaUIsQ0FBQ3pCLEtBQUssRUFBRWtCLGtCQUFrQixDQUFDO1VBRXhGO1FBRUYsS0FBSzNCLDREQUFXLENBQUNtQyxrQ0FBa0M7VUFDakRQLGFBQWEsR0FBRyxJQUFJLENBQUNRLGlCQUFpQixDQUFDM0IsS0FBSyxFQUFFa0Isa0JBQWtCLENBQUM7VUFFakU7UUFFRjtVQUNFQyxhQUFhLEdBQUcsSUFBSSxDQUFDUyxvQkFBb0IsQ0FBQzVCLEtBQUssRUFBRWtCLGtCQUFrQixDQUFDO1VBRXBFO01BQ0o7TUFFQSxPQUFPO1FBQ0xkLHFCQUFxQixFQUFyQkEscUJBQXFCO1FBQ3JCQyxPQUFPLEVBQUU7VUFDUDk0QixJQUFJLEVBQUVrM0IsV0FBVztVQUNqQmpzQixJQUFJLEVBQUUydUIsYUFBYSxDQUFDVTtRQUN0QixDQUFDO1FBQ0R2QixXQUFXLEVBQUVhLGFBQWEsQ0FBQ2I7TUFDN0IsQ0FBQztJQUNIO0VBQUM7SUFBQWxnQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRcWhDLGlCQUFpQkEsQ0FBQzNCLEtBQWlCLEVBQUV2dEIsTUFBYyxFQUFvQjtNQUM3RSxJQUFJSyxZQUFZLEdBQUdMLE1BQU0sR0FBRyxDQUFDO01BQzdCLElBQU02dEIsV0FBeUIsR0FBRyxFQUFFO01BRXBDLE9BQ0UsQ0FBQ2p1Qix5REFBVyxDQUFDQyxnQ0FBZ0MsQ0FBQ290QixzQkFBc0IsQ0FBQ29DLHVCQUF1QixFQUFFOUIsS0FBSyxFQUFFbHRCLFlBQVksQ0FBQyxJQUMvRyxDQUFDVCx5REFBVyxDQUFDQyxnQ0FBZ0MsQ0FBQ290QixzQkFBc0IsQ0FBQ3FDLHVCQUF1QixFQUFFL0IsS0FBSyxFQUFFbHRCLFlBQVksQ0FBQyxJQUNsSEEsWUFBWSxHQUFHa3RCLEtBQUssQ0FBQ2p0QixVQUFVLEVBQ2xDO1FBQ0EsSUFBTWl2QixtQkFBbUIsR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDakMsS0FBSyxFQUFFbHRCLFlBQVksQ0FBQztRQUV2RXd0QixXQUFXLENBQUMvMkIsSUFBSSxDQUFDO1VBQ2ZpSixJQUFJLEVBQUV3dkIsbUJBQW1CLENBQUNoQixPQUFPO1VBQ2pDejVCLElBQUksRUFBRXk2QixtQkFBbUIsQ0FBQ0U7UUFDNUIsQ0FBQyxDQUFDO1FBQ0ZwdkIsWUFBWSxHQUFHa3ZCLG1CQUFtQixDQUFDRyxRQUFRO01BQzdDO01BRUFydkIsWUFBWSxFQUFFO01BRWQsT0FBTztRQUNMK3VCLFdBQVcsRUFBRTdCLEtBQUssQ0FBQ2EsUUFBUSxDQUFDcHVCLE1BQU0sRUFBRUssWUFBWSxDQUFDO1FBQ2pEd3RCLFdBQVcsRUFBWEE7TUFDRixDQUFDO0lBQ0g7RUFBQztJQUFBbGdDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFzaEMsb0JBQW9CQSxDQUFDNUIsS0FBaUIsRUFBRXZ0QixNQUFjLEVBQW9CO01BQ2hGLElBQU0ydkIsd0JBQXdCLEdBQUcxQyxzQkFBc0IsQ0FBQzJDLDhCQUE4QixDQUFDckMsS0FBSyxFQUFFdnRCLE1BQU0sRUFBRXV0QixLQUFLLENBQUNqdEIsVUFBVSxDQUFDO01BRXZILE9BQU87UUFBQzh1QixXQUFXLEVBQUU3QixLQUFLLENBQUNhLFFBQVEsQ0FBQ3B1QixNQUFNLEVBQUUydkIsd0JBQXdCO01BQUMsQ0FBQztJQUN4RTtFQUFDO0lBQUFoaUMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJoQyxpQkFBaUJBLENBQUNqQyxLQUFpQixFQUFFdnRCLE1BQWMsRUFBdUI7TUFDaEYsSUFBSUssWUFBWSxHQUFHTCxNQUFNO01BQ3pCLElBQUk2dkIsT0FBTyxHQUFHLENBQUM7TUFFZixPQUFPdEMsS0FBSyxDQUFDbHRCLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNuQ0EsWUFBWSxFQUFFO1FBQ2R3dkIsT0FBTyxFQUFFO01BQ1g7TUFFQSxJQUFNSixXQUFXLEdBQUdJLE9BQU8sR0FBRyxHQUFHLEdBQUd0QyxLQUFLLENBQUNsdEIsWUFBWSxDQUFDO01BRXZEQSxZQUFZLEVBQUU7TUFDZHd2QixPQUFPLEdBQUcsQ0FBQztNQUVYLE9BQU90QyxLQUFLLENBQUNsdEIsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ25DQSxZQUFZLEVBQUU7UUFDZHd2QixPQUFPLEVBQUU7TUFDWDtNQUVBLElBQU1DLFdBQVcsR0FBR0QsT0FBTyxHQUFHLEdBQUcsR0FBR3RDLEtBQUssQ0FBQ2x0QixZQUFZLENBQUM7TUFFdkRBLFlBQVksRUFBRTtNQUVkLElBQU1xdkIsUUFBUSxHQUFHcnZCLFlBQVksR0FBRzJzQixpRUFBd0IsQ0FBQytDLDZDQUE2QyxDQUFDeEMsS0FBSyxFQUFFbHRCLFlBQVksRUFBRXl2QixXQUFXLENBQUM7TUFFeEksT0FBTztRQUNMTCxXQUFXLEVBQVhBLFdBQVc7UUFDWGxCLE9BQU8sRUFBRWhCLEtBQUssQ0FBQ2EsUUFBUSxDQUFDL3RCLFlBQVksRUFBRXF2QixRQUFRLENBQUM7UUFDL0NBLFFBQVEsRUFBUkE7TUFDRixDQUFDO0lBQ0g7RUFBQztJQUFBL2hDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWMraEMsOEJBQThCQSxDQUFDN3ZCLElBQWdCLEVBQUVDLE1BQWMsRUFBRUcsdUJBQStCLEVBQVU7TUFDdEgsSUFBTTZ2QixNQUFNLEdBQUdwd0IseURBQVcsQ0FBQ00scUNBQXFDLENBQUMrc0Isc0JBQXNCLENBQUNnRCxvQkFBb0IsRUFBRWx3QixJQUFJLEVBQUVDLE1BQU0sRUFBRUcsdUJBQXVCLENBQUM7TUFFcEosSUFBSTZ2QixNQUFNLEtBQUs3dkIsdUJBQXVCLEVBQUU7UUFDdEMsT0FBTzZ2QixNQUFNO01BQ2Y7TUFFQSxPQUFPcHdCLHlEQUFXLENBQUNNLHFDQUFxQyxDQUFDK3NCLHNCQUFzQixDQUFDaUQsb0JBQW9CLEVBQUVud0IsSUFBSSxFQUFFQyxNQUFNLEVBQUVHLHVCQUF1QixDQUFDO0lBQzlJO0VBQUM7QUFBQTtBQUFBL1MsaUZBQUEsQ0F4TWtCNi9CLHNCQUFzQiwwQkFDSyxJQUFJa0QsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUFBL2lDLGlGQUFBLENBRDdENi9CLHNCQUFzQiwwQkFFSyxJQUFJa0QsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFBQS9pQyxpRkFBQSxDQUZuRTYvQixzQkFBc0IsNkJBR1MsSUFBSWtELFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQUEvaUMsaUZBQUEsQ0FIdkU2L0Isc0JBQXNCLDZCQUlTLElBQUlrRCxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ2xHO0FBQ0E7QUFDQTtBQUZBLElBSXFCbkQsd0JBQXdCO0VBaUQzQyxTQUFBQSx5QkFBQSxFQUFzQjtJQUFBNy9CLGlGQUFBLE9BQUE2L0Isd0JBQUE7SUFDcEIsTUFBTSxJQUFJMzZCLEtBQUssQ0FBQyx5RUFBeUUsQ0FBQztFQUM1RjtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBcy9CLHdCQUFBO0lBQUFyL0IsR0FBQTtJQUFBRSxLQUFBLEVBbERELFNBQWNraUMsNkNBQTZDQSxDQUFDSyxNQUFrQixFQUFFcHdCLE1BQWMsRUFBRXF3QixtQ0FBMkMsRUFBVTtNQUNuSixJQUFJQyxnQkFBZ0IsR0FBRyxDQUFDO01BQ3hCLElBQUlDLG9CQUFvQixHQUFHLENBQUM7TUFDNUIsSUFBSUMsbUJBQW1CLEdBQUdILG1DQUFtQztNQUU3RCxLQUFLLElBQUkvZ0IsQ0FBQyxHQUFHdFAsTUFBTSxFQUFFc1AsQ0FBQyxHQUFHOGdCLE1BQU0sQ0FBQ3Q0QixNQUFNLEVBQUV3WCxDQUFDLEVBQUUsRUFBRWloQixvQkFBb0IsRUFBRSxFQUFFO1FBQ25FLElBQUlDLG1CQUFtQixLQUFLLENBQUMsRUFBRTtVQUM3QjtRQUNGO1FBRUEsSUFBSUYsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJRixNQUFNLENBQUM5Z0IsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1VBQ2hEZ2hCLGdCQUFnQixHQUFHLENBQUM7VUFFcEI7UUFDRjtRQUVBLElBQUlGLE1BQU0sQ0FBQzlnQixDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7VUFDdEJnaEIsZ0JBQWdCLEVBQUU7UUFDcEIsQ0FBQyxNQUFNLElBQUlBLGdCQUFnQixHQUFHLENBQUMsRUFBRTtVQUMvQkEsZ0JBQWdCLEdBQUcsQ0FBQztRQUN0QjtRQUVBRSxtQkFBbUIsRUFBRTtNQUN2QjtNQUVBLE9BQU9ELG9CQUFvQjtJQUM3QjtFQUFDO0lBQUE1aUMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBYzRpQyw4QkFBOEJBLENBQUNMLE1BQWtCLEVBQWM7TUFDM0UsSUFBTU0sTUFBTSxHQUFHLElBQUlQLFVBQVUsQ0FBQ0MsTUFBTSxDQUFDOXZCLFVBQVUsQ0FBQztNQUNoRCxJQUFJcXdCLFNBQVMsR0FBRyxDQUFDO01BQ2pCLElBQUlDLFVBQVUsR0FBRyxDQUFDO01BRWxCLEtBQUssSUFBSUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFQSxpQkFBaUIsR0FBR1QsTUFBTSxDQUFDOXZCLFVBQVUsRUFBRXV3QixpQkFBaUIsRUFBRSxFQUFFO1FBQzFGLElBQUlULE1BQU0sQ0FBQ1MsaUJBQWlCLENBQUMsS0FBSyxJQUFJLElBQUlULE1BQU0sQ0FBQ1MsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJVCxNQUFNLENBQUNTLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUMxSEgsTUFBTSxDQUFDeHBCLEdBQUcsQ0FBQ2twQixNQUFNLENBQUNoQyxRQUFRLENBQUN3QyxVQUFVLEVBQUVDLGlCQUFpQixDQUFDLEVBQUVGLFNBQVMsQ0FBQztVQUNyRUEsU0FBUyxJQUFJRSxpQkFBaUIsR0FBR0QsVUFBVTtVQUMzQ0EsVUFBVSxHQUFHQyxpQkFBaUIsR0FBRyxDQUFDO1FBQ3BDO01BQ0Y7TUFFQSxJQUFJRCxVQUFVLEdBQUdSLE1BQU0sQ0FBQzl2QixVQUFVLEVBQUU7UUFDbENvd0IsTUFBTSxDQUFDeHBCLEdBQUcsQ0FBQ2twQixNQUFNLENBQUNoQyxRQUFRLENBQUN3QyxVQUFVLENBQUMsRUFBRUQsU0FBUyxDQUFDO01BQ3BEO01BRUEsT0FBT0QsTUFBTTtJQUNmO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkRIO0FBQ0E7QUFDQTs7QUFFdUQ7QUFDVztBQUFBLElBRTdESSxTQUFTLDBCQUFUQSxTQUFTO0VBQVRBLFNBQVMsQ0FBVEEsU0FBUztFQUFUQSxTQUFTLENBQVRBLFNBQVM7RUFBVEEsU0FBUyxDQUFUQSxTQUFTO0VBQVRBLFNBQVMsQ0FBVEEsU0FBUztFQUFUQSxTQUFTLENBQVRBLFNBQVM7RUFBVEEsU0FBUyxDQUFUQSxTQUFTO0VBQVRBLFNBQVMsQ0FBVEEsU0FBUztFQUFUQSxTQUFTLENBQVRBLFNBQVM7RUFBVEEsU0FBUyxDQUFUQSxTQUFTO0VBQUEsT0FBVEEsU0FBUztBQUFBLEVBQVRBLFNBQVM7QUFBQSxJQW1ET0MsbUJBQW1CO0VBQUEsU0FBQUEsb0JBQUE7SUFBQTVqQyxpRkFBQSxPQUFBNGpDLG1CQUFBO0VBQUE7RUFBQSxPQUFBcmpDLDhFQUFBLENBQUFxakMsbUJBQUE7SUFBQXBqQyxHQUFBO0lBQUFFLEtBQUEsRUFDdEMsU0FBT29LLEtBQUtBLENBQUM4SCxJQUFnQixFQUFFaXhCLE1BQWtDLEVBQWlCO01BQ2hGLElBQU1DLGVBQWUsR0FBRyxJQUFJdEcsd0RBQWUsQ0FBQ3FDLGlFQUF3QixDQUFDeUQsOEJBQThCLENBQUMxd0IsSUFBSSxDQUFDLENBQUM7TUFDMUcsSUFBTW14QixhQUE0QixHQUFHO1FBQUNDLFNBQVMsRUFBRTE5QjtNQUFTLENBQUM7TUFFM0QsSUFBSXU5QixNQUFNLENBQUNJLHVCQUF1QixFQUFFO1FBQ2xDO1FBQ0FILGVBQWUsQ0FBQ3hGLFFBQVEsQ0FBQ3VGLE1BQU0sQ0FBQ0ssMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFSixlQUFlLENBQUN4RixRQUFRLENBQUN1RixNQUFNLENBQUNNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztNQUNqRTtNQUVBLElBQUlOLE1BQU0sQ0FBQ08sb0JBQW9CLEVBQUU7UUFDL0IsSUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0MsNEJBQTRCLENBQUNSLGVBQWUsQ0FBQ25HLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRm9HLGFBQWEsQ0FBQ0MsU0FBUyxHQUFHO1VBQ3hCSyxVQUFVLEVBQVZBLFVBQVU7VUFDVkUsZUFBZSxFQUFFO1FBQ25CLENBQUM7UUFFRCxLQUFLLElBQUlwaUIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNGhCLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDSyxVQUFVLEVBQUVsaUIsQ0FBQyxFQUFFLEVBQUU7VUFDM0QsSUFBTXFpQixrQkFBa0IsR0FBR1YsZUFBZSxDQUFDbkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7VUFFNUQsSUFBSTZHLGtCQUFrQixFQUFFO1lBQ3RCLElBQU1DLGNBQThCLEdBQUc7Y0FDckNDLE1BQU0sRUFBRVosZUFBZSxDQUFDbkcsUUFBUSxDQUFDLENBQUMsQ0FBQztjQUNuQ2dILGtCQUFrQixFQUFFYixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztjQUNyRGlILFlBQVksRUFBRWQsZUFBZSxDQUFDbkcsUUFBUSxDQUFDLENBQUMsQ0FBQztjQUN6Q2tILGlCQUFpQixFQUFFZixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztjQUNwRG1ILGlCQUFpQixFQUFFaEIsZUFBZSxDQUFDbkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Y0FDcERvSCxjQUFjLEVBQUVqQixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztjQUNqRHFILE9BQU8sRUFBRWxCLGVBQWUsQ0FBQ25HLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFFRCxJQUFJOEcsY0FBYyxDQUFDSSxpQkFBaUIsRUFBRTtjQUNwQ0osY0FBYyxDQUFDUSxPQUFPLEdBQUduQixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDO2NBQ3BEOEcsY0FBYyxDQUFDUyxPQUFPLEdBQUdwQixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDO2NBQ3BEOEcsY0FBYyxDQUFDVSxLQUFLLEdBQUdyQixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUMsTUFBTTtjQUNMLElBQU15SCxXQUFXLEdBQUd0QixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztjQUVyRCxJQUFJeUgsV0FBVyxFQUFFO2dCQUNmWCxjQUFjLENBQUNRLE9BQU8sR0FBR25CLGVBQWUsQ0FBQ25HLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBRXBELElBQU0wSCxXQUFXLEdBQUd2QixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFckQsSUFBSTBILFdBQVcsRUFBRTtrQkFDZlosY0FBYyxDQUFDUyxPQUFPLEdBQUdwQixlQUFlLENBQUNuRyxRQUFRLENBQUMsQ0FBQyxDQUFDO2tCQUVwRCxJQUFNMkgsU0FBUyxHQUFHeEIsZUFBZSxDQUFDbkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7a0JBRW5ELElBQUkySCxTQUFTLEVBQUU7b0JBQ2JiLGNBQWMsQ0FBQ1UsS0FBSyxHQUFHckIsZUFBZSxDQUFDbkcsUUFBUSxDQUFDLENBQUMsQ0FBQztrQkFDcEQ7Z0JBQ0Y7Y0FDRjtZQUNGO1lBRUE4RyxjQUFjLENBQUNjLFVBQVUsR0FBR3pCLGVBQWUsQ0FBQ25HLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFeERvRyxhQUFhLENBQUNDLFNBQVMsQ0FBQ08sZUFBZSxDQUFDNTZCLElBQUksQ0FBQztjQUMzQzY2QixrQkFBa0IsRUFBbEJBLGtCQUFrQjtjQUNsQkMsY0FBYyxFQUFkQTtZQUNGLENBQUMsQ0FBQztVQUNKLENBQUMsTUFBTTtZQUNMVixhQUFhLENBQUNDLFNBQVMsQ0FBQ08sZUFBZSxDQUFDNTZCLElBQUksQ0FBQztjQUFDNjZCLGtCQUFrQixFQUFFO1lBQUssQ0FBQyxDQUFDO1VBQzNFO1FBQ0Y7TUFDRjtNQUVBLE9BQU9ULGFBQWE7SUFDdEI7RUFBQztJQUFBdmpDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE0akMsNEJBQTRCQSxDQUFDTixTQUFpQixFQUFVO01BQzlELFFBQVFBLFNBQVM7UUFDZixLQUFLTCxTQUFTLENBQUM2QixnQkFBZ0I7UUFDL0IsS0FBSzdCLFNBQVMsQ0FBQzhCLFFBQVE7UUFDdkIsS0FBSzlCLFNBQVMsQ0FBQytCLFdBQVc7VUFDeEIsT0FBTyxDQUFDO1FBQ1YsS0FBSy9CLFNBQVMsQ0FBQ2dDLG1CQUFtQjtRQUNsQyxLQUFLaEMsU0FBUyxDQUFDaUMsbUJBQW1CO1FBQ2xDLEtBQUtqQyxTQUFTLENBQUNrQyxhQUFhO1VBQzFCLE9BQU8sQ0FBQztRQUNWLEtBQUtsQyxTQUFTLENBQUNtQyxtQ0FBbUM7UUFDbEQsS0FBS25DLFNBQVMsQ0FBQ29DLHNDQUFzQztRQUNyRCxLQUFLcEMsU0FBUyxDQUFDcUMsYUFBYTtVQUMxQixPQUFPLENBQUM7UUFDVjtVQUNFLE9BQU8sQ0FBQztNQUNaO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25KSDtBQUNBO0FBQ0E7O0FBRWdFO0FBQ0Q7QUFBQSxJQUcxQ0MscURBQXFEO0VBQUEsU0FBQUEsc0RBQUE7SUFBQWptQyxpRkFBQSxPQUFBaW1DLHFEQUFBO0VBQUE7RUFBQSxPQUFBMWxDLDhFQUFBLENBQUEwbEMscURBQUE7SUFBQXpsQyxHQUFBO0lBQUFFLEtBQUEsRUFHeEUsU0FBT21oQyxpQkFBaUJBLENBQUN6QixLQUFpQixFQUFFdnRCLE1BQWMsRUFBb0I7TUFDNUUsSUFBTXF6QixnQ0FBZ0MsR0FBR3J6QixNQUFNLEdBQUdpdEIsK0RBQXNCLENBQUNnRCxvQkFBb0IsQ0FBQzN2QixVQUFVLEdBQUc4eUIscURBQXFELENBQUNFLDhCQUE4QjtNQUUvTCxJQUFJMXpCLHlEQUFXLENBQUNDLGdDQUFnQyxDQUFDb3RCLCtEQUFzQixDQUFDZ0Qsb0JBQW9CLEVBQUUxQyxLQUFLLEVBQUU4RixnQ0FBZ0MsQ0FBQyxFQUFFO1FBQ3RJLE9BQU87VUFBQ2pFLFdBQVcsRUFBRTdCLEtBQUssQ0FBQ2EsUUFBUSxDQUFDcHVCLE1BQU0sR0FBR2l0QiwrREFBc0IsQ0FBQ2dELG9CQUFvQixDQUFDM3ZCLFVBQVUsRUFBRSt5QixnQ0FBZ0M7UUFBQyxDQUFDO01BQ3pJO01BRUEsSUFBTUUsZ0NBQWdDLEdBQUd2ekIsTUFBTSxHQUFHaXRCLCtEQUFzQixDQUFDaUQsb0JBQW9CLENBQUM1dkIsVUFBVSxHQUFHOHlCLHFEQUFxRCxDQUFDRSw4QkFBOEI7TUFFL0wsSUFBSTF6Qix5REFBVyxDQUFDQyxnQ0FBZ0MsQ0FBQ290QiwrREFBc0IsQ0FBQ2lELG9CQUFvQixFQUFFM0MsS0FBSyxFQUFFZ0csZ0NBQWdDLENBQUMsRUFBRTtRQUN0SSxPQUFPO1VBQUNuRSxXQUFXLEVBQUU3QixLQUFLLENBQUNhLFFBQVEsQ0FBQ3B1QixNQUFNLEdBQUdpdEIsK0RBQXNCLENBQUNpRCxvQkFBb0IsQ0FBQzV2QixVQUFVLEVBQUVpekIsZ0NBQWdDO1FBQUMsQ0FBQztNQUN6STtNQUVBLE9BQU87UUFBQ25FLFdBQVcsRUFBRTdCLEtBQUssQ0FBQ2EsUUFBUSxDQUFDcHVCLE1BQU07TUFBQyxDQUFDO0lBQzlDO0VBQUM7QUFBQTtBQUFBNVMsaUZBQUEsQ0FqQmtCZ21DLHFEQUFxRCxvQ0FDZixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1Q3RDtBQUNBO0FBQ0E7O0FBRStEO0FBQUEsSUFHMUNJLG1DQUFtQztFQUFBLFNBQUFBLG9DQUFBO0lBQUFybUMsaUZBQUEsT0FBQXFtQyxtQ0FBQTtFQUFBO0VBQUEsT0FBQTlsQyw4RUFBQSxDQUFBOGxDLG1DQUFBO0lBQUE3bEMsR0FBQTtJQUFBRSxLQUFBLEVBQ3RELFNBQU9taEMsaUJBQWlCQSxDQUFDekIsS0FBaUIsRUFBRXZ0QixNQUFjLEVBQW9CO01BQzVFLElBQU0ydkIsd0JBQXdCLEdBQUcxQywrREFBc0IsQ0FBQzJDLDhCQUE4QixDQUFDckMsS0FBSyxFQUFFdnRCLE1BQU0sRUFBRXV0QixLQUFLLENBQUNqdEIsVUFBVSxDQUFDO01BRXZILE9BQU87UUFBQzh1QixXQUFXLEVBQUU3QixLQUFLLENBQUNhLFFBQVEsQ0FBQ3B1QixNQUFNLEVBQUUydkIsd0JBQXdCO01BQUMsQ0FBQztJQUN4RTtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1pIO0FBQ0E7QUFDQTs7QUFFd0Q7QUFDQTtBQUN3QjtBQUM4QjtBQUNvQztBQUMvRDtBQUNmO0FBQ2tEO0FBQUEsSUFFakdrRSxpQkFBaUI7RUFtQnBDLFNBQUFBLGtCQUFBLEVBQXNCO0lBQUExbUMsaUZBQUEsT0FBQTBtQyxpQkFBQTtJQUNwQixNQUFNLElBQUl4aEMsS0FBSyxDQUFDLGtFQUFrRSxDQUFDO0VBQ3JGO0VBQUMsT0FBQTNFLDhFQUFBLENBQUFtbUMsaUJBQUE7SUFBQWxtQyxHQUFBO0lBQUFFLEtBQUEsRUFwQkQsU0FBY2ltQywrQkFBK0JBLENBQUEsRUFBOEI7TUFDekUsSUFBTUMscUJBQXFCLEdBQUcsSUFBSU4sNkRBQWMsQ0FBQyxDQUFDO01BQ2xELElBQU1PLFNBQVMsR0FBRyxJQUFJcEksaUVBQWEsQ0FBQ21JLHFCQUFxQixDQUFDO01BQzFELElBQU1FLE1BQU0sR0FBRyxJQUFJaEgsZ0ZBQXNCLENBQUM4RyxxQkFBcUIsRUFBRSxJQUFJUCxpR0FBbUMsQ0FBQyxDQUFDLENBQUM7TUFFM0csT0FBTyxJQUFJRyxrRUFBeUIsQ0FBQ0kscUJBQXFCLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxDQUFDO0lBQ2hGO0VBQUM7SUFBQXRtQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFjcW1DLHdEQUF3REEsQ0FBQSxFQUF1RDtNQUMzSCxJQUFNSCxxQkFBcUIsR0FBRyxJQUFJTiw2REFBYyxDQUFDLENBQUM7TUFDbEQsSUFBTU8sU0FBUyxHQUFHLElBQUlwSSxpRUFBYSxDQUFDbUkscUJBQXFCLENBQUM7TUFDMUQsSUFBTUUsTUFBTSxHQUFHLElBQUloSCxnRkFBc0IsQ0FBQzhHLHFCQUFxQixFQUFFLElBQUlYLG1IQUFxRCxDQUFDLENBQUMsQ0FBQztNQUM3SCxJQUFNZSx5QkFBeUIsR0FBRyxJQUFJUixrRUFBeUIsQ0FBQ0kscUJBQXFCLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxDQUFDO01BQ3pHLElBQU1HLFFBQVEsR0FBRyxJQUFJVixnRkFBeUIsQ0FBQ0sscUJBQXFCLENBQUM7TUFFckUsT0FBTyxJQUFJSCwyRkFBa0QsQ0FBQ08seUJBQXlCLEVBQUVDLFFBQVEsQ0FBQztJQUNwRztFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUJIO0FBQ0E7QUFDQTs7QUFFNkQ7QUFHc0I7QUFBQSxJQUs5RFQseUJBQXlCO0VBTTVDLFNBQUFBLDBCQUFZOUgsY0FBOEIsRUFBRW1JLFNBQXdCLEVBQUVDLE1BQThCLEVBQUU7SUFBQTltQyxpRkFBQSxPQUFBd21DLHlCQUFBO0lBQUF2bUMsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUEsdUJBRnRELElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUdsRSxJQUFJLENBQUNnL0IsZUFBZSxHQUFHRCxjQUFjO0lBQ3JDLElBQUksQ0FBQ3dJLFVBQVUsR0FBR0wsU0FBUztJQUMzQixJQUFJLENBQUNNLE9BQU8sR0FBR0wsTUFBTTtJQUNyQixJQUFJLENBQUNobUMsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDOGxDLFVBQVUsQ0FBQztJQUN0QyxJQUFJLENBQUNwbUMsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDK2xDLE9BQU8sQ0FBQztFQUNyQztFQUFDLE9BQUE1bUMsOEVBQUEsQ0FBQWltQyx5QkFBQTtJQUFBaG1DLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0I7TUFDN0IsT0FBTyxJQUFJLENBQUN5bUMsVUFBVTtJQUN4QjtFQUFDO0lBQUExbUMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzBtQyxNQUFNQSxDQUFDQyx1QkFBNkQsRUFBUTtNQUNqRixJQUFJLENBQUMxSSxlQUFlLENBQUNZLE9BQU8sQ0FBYWYsMEZBQXVCLENBQUMwQix1QkFBdUIsRUFBRW1ILHVCQUF1QixDQUFDO0lBQ3BIO0VBQUM7SUFBQTdtQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPRyxPQUFPQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDSDtBQUNBO0FBQ0E7O0FBRzZEO0FBQUEsSUFReEM0bEMsa0RBQWtEO0VBS3JFLFNBQUFBLG1EQUFZTyx5QkFBb0QsRUFBRUMsUUFBbUMsRUFBRTtJQUFBam5DLGlGQUFBLE9BQUF5bUMsa0RBQUE7SUFBQXhtQyxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQTtJQUNyRyxJQUFJLENBQUNxbkMsMEJBQTBCLEdBQUdOLHlCQUF5QjtJQUMzRCxJQUFJLENBQUNPLFNBQVMsR0FBR04sUUFBUTtJQUN6QixJQUFJLENBQUNubUMsWUFBWSxHQUFHLElBQUluQiw0REFBYyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDbUIsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDa21DLDBCQUEwQixDQUFDO0lBQ3RELElBQUksQ0FBQ3htQyxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUNtbUMsU0FBUyxDQUFDO0VBQ3ZDO0VBQUMsT0FBQWhuQyw4RUFBQSxDQUFBa21DLGtEQUFBO0lBQUFqbUMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUErQjtNQUM3QixPQUFPLElBQUksQ0FBQzZtQywwQkFBMEIsQ0FBQ1QsU0FBUztJQUNsRDtFQUFDO0lBQUFybUMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzBtQyxNQUFNQSxDQUFDQyx1QkFBNkQsRUFBUTtNQUNqRixJQUFJLENBQUNDLDBCQUEwQixDQUFDRixNQUFNLENBQUNDLHVCQUF1QixDQUFDO0lBQ2pFO0VBQUM7SUFBQTdtQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPRyxPQUFPQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzhtQyx1QkFBdUJBLENBQUNDLG1CQUEwRixFQUFFQyxPQUFnQixFQUFjO01BQ3ZKLElBQUlBLE9BQU8sRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDSCxTQUFTLENBQUNDLHVCQUF1QixDQUFDLFVBQUFHLHNCQUFzQixFQUFJO1VBQ3RFLElBQUlBLHNCQUFzQixDQUFDRCxPQUFPLEtBQUtBLE9BQU8sRUFBRTtZQUM5Q0QsbUJBQW1CLENBQUNFLHNCQUFzQixDQUFDO1VBQzdDO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7TUFFQSxPQUFPLElBQUksQ0FBQ0osU0FBUyxDQUFDQyx1QkFBdUIsQ0FBQ0MsbUJBQW1CLENBQUM7SUFDcEU7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoREg7QUFDQTtBQUNBOztBQUVpRTtBQUVEO0FBQ1I7QUFDUTtBQUNEO0FBTXVCO0FBRXRGLElBQU1HLElBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFBO0VBQUEsT0FBZXRoQyxTQUFTO0FBQUE7QUFBQyxJQUVkaWdDLHlCQUF5QjtFQVc1QyxTQUFBQSwwQkFBWTdILGNBQThCLEVBQUU7SUFBQTErQixpRkFBQSxPQUFBdW1DLHlCQUFBO0lBQUF0bUMsaUZBQUEsa0JBUFJ3SSw2REFBYSxDQUFDRyxTQUFTLENBQUMsMkJBQTJCLENBQUM7SUFBQTNJLGlGQUFBO0lBQUFBLGlGQUFBLCtCQUVuQyxJQUFJNG5DLEdBQUcsQ0FBQyxDQUFDO0lBQUE1bkMsaUZBQUEsdUNBQzBCLElBQUk2bkMsR0FBRyxDQUFDLENBQUM7SUFBQTduQyxpRkFBQSx1QkFDakQsSUFBSU4sNERBQWMsQ0FBQyxDQUFDO0lBQUFNLGlGQUFBLHVEQUNRLElBQUlQLHdEQUFVLENBQUMsSUFBSSxDQUFDcW9DLDJDQUEyQyxDQUFDdGlDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUdySixJQUFJLENBQUNrNUIsZUFBZSxHQUFHRCxjQUFjO0lBQ3JDLElBQUksQ0FBQ3NKLG9CQUFvQixDQUFDNW1DLEdBQUcsQ0FBQ21sQyx5QkFBeUIsQ0FBQzBCLDBCQUEwQixDQUFDO0lBQ25GLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUM1bUMsR0FBRyxDQUFDbWxDLHlCQUF5QixDQUFDMkIsZ0NBQWdDLENBQUM7SUFDekYsSUFBSSxDQUFDcG5DLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQyttQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDcm5DLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQ2duQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDdG5DLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQ2luQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7RUFDeEQ7RUFBQyxPQUFBOW5DLDhFQUFBLENBQUFnbUMseUJBQUE7SUFBQS9sQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPOG1DLHVCQUF1QkEsQ0FBQ2pkLE9BQWtFLEVBQWM7TUFDN0csSUFBSSxDQUFDK2QsNENBQTRDLENBQUN6bkMsT0FBTyxDQUFDLENBQUM7TUFFM0QsT0FBTyxJQUFJLENBQUM4OUIsZUFBZSxDQUFDenVCLFNBQVMsQ0FBb0NzdUIsMEZBQXVCLENBQUNpQixPQUFPLEVBQUUsVUFBQTE0QixJQUFBLEVBQThCO1FBQUEsSUFBNUJzNEIsT0FBTyxHQUFBdDRCLElBQUEsQ0FBUHM0QixPQUFPO1VBQVErQixPQUFPLEdBQUFyNkIsSUFBQSxDQUFiNkwsSUFBSTtRQUN2SCxRQUFRd3VCLE9BQU8sQ0FBQzl0QixJQUFJO1VBQ2xCLEtBQUtpekIseUJBQXlCLENBQUMyQixnQ0FBZ0M7WUFDN0QzZCxPQUFPLENBQUM7Y0FDTjhVLE9BQU8sRUFBUEEsT0FBTztjQUNQenNCLElBQUksRUFBRTtnQkFDSmpMLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCaUwsSUFBSSxFQUFFd3VCLE9BQU8sQ0FBQ3h1QjtjQUNoQjtZQUNGLENBQUMsQ0FBQztZQUVGO1VBRUYsS0FBSzJ6Qix5QkFBeUIsQ0FBQzBCLDBCQUEwQjtZQUN2RDFkLE9BQU8sQ0FBQztjQUNOOFUsT0FBTyxFQUFQQSxPQUFPO2NBQ1B6c0IsSUFBSSxFQUFFO2dCQUNKakwsSUFBSSxFQUFFLE9BQU87Z0JBQ2JpTCxJQUFJLEVBQUV3dUIsT0FBTyxDQUFDeHVCO2NBQ2hCO1lBQ0YsQ0FBQyxDQUFDO1lBRUY7VUFFRjtRQUNGO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBcFMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT0csT0FBT0EsQ0FBQSxFQUFTO01BQ3JCLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztNQUMzQixJQUFJLENBQUMwbkMsNEJBQTRCLENBQUNDLEtBQUssQ0FBQyxDQUFDO01BQ3pDLElBQUksQ0FBQ1Isb0JBQW9CLENBQUNRLEtBQUssQ0FBQyxDQUFDO0lBQ25DO0VBQUM7SUFBQWhvQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRcW5DLDJDQUEyQ0EsQ0FBQSxFQUFTO01BQzFELElBQUksQ0FBQ2puQyxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUM2K0Isd0NBQXdDLENBQUMsQ0FBQyxDQUFDO01BQ3RFLElBQUksQ0FBQ24vQixZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUNxbkMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0lBQzNEO0VBQUM7SUFBQWpvQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRMG5DLG9DQUFvQ0EsQ0FBQSxFQUFlO01BQUEsSUFBQXJuQyxLQUFBO01BQ3pELE9BQU8sSUFBSSxDQUFDNDlCLGVBQWUsQ0FBQ3p1QixTQUFTLENBQVNzdUIsMEZBQXVCLENBQUNnQixtQkFBbUIsRUFBRSxVQUFBbDRCLEtBQUE7UUFBQSxJQUFRZzRCLFdBQVcsR0FBQWg0QixLQUFBLENBQWpCc0wsSUFBSTtRQUFBLE9BQW1CN1IsS0FBSSxDQUFDaW5DLG9CQUFvQixDQUFDNW1DLEdBQUcsQ0FBQ2srQixXQUFXLENBQUM7TUFBQSxFQUFDO0lBQ2pLO0VBQUM7SUFBQTkrQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRdS9CLHdDQUF3Q0EsQ0FBQSxFQUFlO01BQzdELE9BQU8sSUFBSSxDQUFDdEIsZUFBZSxDQUFDenVCLFNBQVMsQ0FBYXN1QiwwRkFBdUIsQ0FBQzBCLHVCQUF1QixFQUFFLElBQUksQ0FBQ3dJLGdDQUFnQyxDQUFDampDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0SjtFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRMm5DLHdCQUF3QkEsQ0FBQSxFQUFlO01BQzdDLE9BQU8sSUFBSSxDQUFDMUosZUFBZSxDQUFDenVCLFNBQVMsQ0FBVXN1QiwwRkFBdUIsQ0FBQ00sT0FBTyxFQUFFLElBQUksQ0FBQzZKLGtCQUFrQixDQUFDbGpDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNySDtFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRaW9DLGtCQUFrQkEsQ0FBQUMsS0FBQSxFQUFvRTtNQUFBLElBQWxFdkosT0FBTyxHQUFBdUosS0FBQSxDQUFQdkosT0FBTztRQUFRb0IsT0FBTyxHQUFBbUksS0FBQSxDQUFiaDJCLElBQUk7TUFDdkMsSUFBSTZ0QixPQUFPLENBQUM5NEIsSUFBSSxHQUFHZzRCLHVFQUFXLENBQUNpQyxpQkFBaUIsSUFBSW5CLE9BQU8sQ0FBQzd0QixJQUFJLENBQUNPLFVBQVUsR0FBR296Qix5QkFBeUIsQ0FBQ3NDLGtDQUFrQyxFQUFFO1FBQzFJO01BQ0Y7TUFFQSxJQUFJLENBQUNDLHlCQUF5QixDQUFDekosT0FBTyxFQUFFO1FBQ3RDL3JCLElBQUksRUFBRWl6Qix5QkFBeUIsQ0FBQzBCLDBCQUEwQjtRQUMxRHIxQixJQUFJLEVBQUUsSUFBSSxDQUFDbTJCLHNCQUFzQixDQUFDdEksT0FBTztNQUMzQyxDQUFDLENBQUM7TUFDRixJQUFJLENBQUN1SSxtQ0FBbUMsQ0FBQzNKLE9BQU8sQ0FBQ3FJLE9BQU8sQ0FBQztJQUMzRDtFQUFDO0lBQUFsbkMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXFvQyxzQkFBc0JBLENBQUN0SSxPQUFnQixFQUFjO01BQzNELE9BQU9BLE9BQU8sQ0FBQzd0QixJQUFJLENBQUNxdUIsUUFBUSxDQUFDc0YseUJBQXlCLENBQUNzQyxrQ0FBa0MsQ0FBQztJQUM1RjtFQUFDO0lBQUFyb0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUW9vQyx5QkFBeUJBLENBQUN6SixPQUF1QyxFQUFFK0IsT0FBMEMsRUFBUTtNQUMzSCxJQUFJLENBQUN6QyxlQUFlLENBQUNZLE9BQU8sQ0FBb0NmLDBGQUF1QixDQUFDaUIsT0FBTyxFQUFFO1FBQy9GSixPQUFPLEVBQVBBLE9BQU87UUFDUHpzQixJQUFJLEVBQUV3dUI7TUFDUixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUE1Z0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWdvQyxnQ0FBZ0NBLENBQUFPLEtBQUEsRUFBd0Q7TUFBQSxJQUF0RDVKLE9BQU8sR0FBQTRKLEtBQUEsQ0FBUDVKLE9BQU87TUFDL0MsSUFBSSxDQUFDa0osNEJBQTRCLENBQUN4dUIsR0FBRyxDQUFDc2xCLE9BQU8sQ0FBQ3FJLE9BQU8sRUFBRSxJQUFJLENBQUN3QixpQ0FBaUMsQ0FBQ3pqQyxJQUFJLENBQUMsSUFBSSxFQUFFNDVCLE9BQU8sQ0FBQyxDQUFDO0lBQ3BIO0VBQUM7SUFBQTcrQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRc29DLG1DQUFtQ0EsQ0FBQ3RCLE9BQWUsRUFBUTtNQUNqRSxJQUFJLENBQUNhLDRCQUE0QixDQUFDeHVCLEdBQUcsQ0FBQzJ0QixPQUFPLEVBQUVFLElBQUksQ0FBQztJQUN0RDtFQUFDO0lBQUFwbkMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXdvQyxpQ0FBaUNBLENBQUM3SixPQUF1QyxFQUFRO01BQ3ZGLElBQUksQ0FBQ3YxQixPQUFPLENBQUNnTSxJQUFJLENBQUMsK0ZBQStGLEVBQUV1cEIsT0FBTyxDQUFDcDJCLFFBQVEsRUFBRW8yQixPQUFPLENBQUM4SixTQUFTLEVBQUU5SixPQUFPLENBQUNxSSxPQUFPLENBQUM7SUFDMUs7RUFBQztJQUFBbG5DLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVErbkMsMkJBQTJCQSxDQUFBLEVBQWU7TUFDaEQsT0FBTyxJQUFJLENBQUM5SixlQUFlLENBQUN6dUIsU0FBUyxDQUFPc3VCLDBGQUF1QixDQUFDNkMsVUFBVSxFQUFFLElBQUksQ0FBQytILGtDQUFrQyxDQUFDM2pDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNySTtFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRMG9DLGtDQUFrQ0EsQ0FBQUMsS0FBQSxFQUFrRDtNQUFBLElBQWhEaEssT0FBTyxHQUFBZ0ssS0FBQSxDQUFQaEssT0FBTztNQUNqRCxJQUFNaUssc0JBQXNCLEdBQUcsSUFBSSxDQUFDZiw0QkFBNEIsQ0FBQzluQyxHQUFHLENBQUM0K0IsT0FBTyxDQUFDcUksT0FBTyxDQUFlO01BRW5HNEIsc0JBQXNCLENBQUMsQ0FBQztJQUMxQjtFQUFDO0lBQUE5b0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXluQyx3QkFBd0JBLENBQUEsRUFBZTtNQUM3QyxPQUFPLElBQUksQ0FBQ3hKLGVBQWUsQ0FBQ3p1QixTQUFTLENBQW9Dc3VCLDBGQUF1QixDQUFDaUIsT0FBTyxFQUFFLElBQUksQ0FBQzhKLGtCQUFrQixDQUFDOWpDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvSTtFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRNm9DLGtCQUFrQkEsQ0FBQUMsS0FBQSxFQUF3RjtNQUFBLElBQXRGbkssT0FBTyxHQUFBbUssS0FBQSxDQUFQbkssT0FBTztRQUFRK0IsT0FBTyxHQUFBb0ksS0FBQSxDQUFiNTJCLElBQUk7TUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQ28xQixvQkFBb0IsQ0FBQ3lCLEdBQUcsQ0FBQ3JJLE9BQU8sQ0FBQzl0QixJQUFJLENBQUMsRUFBRTtRQUNoRCxJQUFNcUosT0FBTyxHQUFHbGQsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2dGLFVBQVUsQ0FBQyxJQUFJLENBQUNna0MsMkNBQTJDLENBQUNqa0MsSUFBSSxDQUFDLElBQUksRUFBRTQ1QixPQUFPLEVBQUUrQixPQUFPLENBQUM5dEIsSUFBSSxDQUFDLENBQUM7TUFDbEk7SUFDRjtFQUFDO0lBQUE5UyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRZ3BDLDJDQUEyQ0EsQ0FBQ3JLLE9BQXVDLEVBQUVDLFdBQW1CLEVBQUU7TUFDaEgsSUFBSSxDQUFDeDFCLE9BQU8sQ0FBQ2dNLElBQUksQ0FBQywyREFBMkQsRUFBRXVwQixPQUFPLENBQUNwMkIsUUFBUSxFQUFFbzJCLE9BQU8sQ0FBQzhKLFNBQVMsRUFBRTlKLE9BQU8sQ0FBQ3FJLE9BQU8sRUFBRXBJLFdBQVcsQ0FBQztNQUNqSixJQUFJLENBQUMwSSxvQkFBb0IsQ0FBQzVtQyxHQUFHLENBQUNrK0IsV0FBVyxDQUFDO0lBQzVDO0VBQUM7QUFBQTtBQUFBci9CLGlGQUFBLENBcklrQnNtQyx5QkFBeUIsd0NBQ2lCLEVBQUU7QUFBQXRtQyxpRkFBQSxDQUQ1Q3NtQyx5QkFBeUIsZ0NBRVMsc0NBQXNDO0FBQUF0bUMsaUZBQUEsQ0FGeEVzbUMseUJBQXlCLHNDQUdlLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCbkc7QUFDQTtBQUNBOztBQUdrRDtBQUFBLElBRTdCb0QsWUFBWTtFQUFBLFNBQUFBLGFBQUE7SUFBQTNwQyxpRkFBQSxPQUFBMnBDLFlBQUE7SUFBQTFwQyxpRkFBQSxxQkFDNEUsSUFBSTRuQyxHQUFHLENBQUMsQ0FBQztFQUFBO0VBQUEsT0FBQXRuQyw4RUFBQSxDQUFBb3BDLFlBQUE7SUFBQW5wQyxHQUFBO0lBQUFFLEtBQUEsRUFFcEgsU0FBT3dQLFNBQVNBLENBQWdEakksUUFBOEQsRUFBYztNQUFBLElBQUFsSCxLQUFBO01BQzFJLElBQUksQ0FBQ3VxQixVQUFVLENBQUNscUIsR0FBRyxDQUFDNkcsUUFBK0csQ0FBQztNQUVwSSxPQUFPLElBQUl2SSx3REFBVSxDQUFDO1FBQUEsT0FBTXFCLEtBQUksQ0FBQ3VxQixVQUFVLFVBQU8sQ0FBQ3JqQixRQUErRyxDQUFDO01BQUEsRUFBQztJQUN0SztFQUFDO0lBQUF6SCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPa3BDLElBQUlBLENBQWdEQyxLQUEwQyxFQUFRO01BQUEsSUFBQUMsU0FBQSxHQUFBQywwQkFBQSxDQUNwRixJQUFJLENBQUN6ZSxVQUFVO1FBQUEwZSxLQUFBO01BQUE7UUFBdEMsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUEsR0FBd0M7VUFBQSxJQUE3QmxpQyxRQUFRLEdBQUEraEMsS0FBQSxDQUFBdHBDLEtBQUE7VUFDakJ1SCxRQUFRLENBQUM0aEMsS0FBSyxDQUFDO1FBQ2pCO01BQUMsU0FBQU8sR0FBQTtRQUFBTixTQUFBLENBQUEvK0IsQ0FBQSxDQUFBcS9CLEdBQUE7TUFBQTtRQUFBTixTQUFBLENBQUFPLENBQUE7TUFBQTtJQUNIO0VBQUM7SUFBQTdwQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPRyxPQUFPQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDbzJCLGdCQUFnQixDQUFDLENBQUM7SUFDekI7RUFBQztJQUFBejJCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVF1MkIsZ0JBQWdCQSxDQUFBLEVBQVM7TUFDL0IsSUFBSSxDQUFDM0wsVUFBVSxDQUFDa2QsS0FBSyxDQUFDLENBQUM7SUFDekI7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Qkg7QUFDQTtBQUNBOztBQUdrRDtBQUNRO0FBQ2hCO0FBQUEsSUFFckJsQyxjQUFjO0VBQUEsU0FBQUEsZUFBQTtJQUFBdG1DLGlGQUFBLE9BQUFzbUMsY0FBQTtJQUFBcm1DLGlGQUFBLHlCQUNxQyxJQUFJNm5DLEdBQUcsQ0FBQyxDQUFDO0lBQUE3bkMsaUZBQUEsMkNBQzJHLElBQUk0bkMsR0FBRyxDQUFDLENBQUM7SUFBQTVuQyxpRkFBQSx1QkFDbkosSUFBSU4sNERBQWMsQ0FBQyxDQUFDO0VBQUE7RUFBQSxPQUFBWSw4RUFBQSxDQUFBK2xDLGNBQUE7SUFBQTlsQyxHQUFBO0lBQUFFLEtBQUEsRUFFcEUsU0FBTzRwQyx1QkFBdUJBLENBQUNDLDhCQUFxRyxFQUFjO01BQUEsSUFBQXhwQyxLQUFBO01BQ2hKLElBQUksQ0FBQ3lwQyxnQ0FBZ0MsQ0FBQ3BwQyxHQUFHLENBQUNtcEMsOEJBQThCLENBQUM7TUFFekUsT0FBTyxJQUFJN3FDLHdEQUFVLENBQUM7UUFBQSxPQUFNcUIsS0FBSSxDQUFDeXBDLGdDQUFnQyxVQUFPLENBQUNELDhCQUE4QixDQUFDO01BQUEsRUFBQztJQUMzRztFQUFDO0lBQUEvcEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3dQLFNBQVNBLENBQWdEdTZCLFNBQTBCLEVBQUVsZ0IsT0FBNkQsRUFBYztNQUNySyxJQUFNbWdCLE9BQU8sR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQ2xxQyxHQUFHLENBQUNncUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDRyxhQUFhLENBQUNILFNBQVMsQ0FBQztNQUNuRixJQUFNSSxrQkFBa0IsR0FBR0gsT0FBTyxDQUFDeDZCLFNBQVMsQ0FBQ3FhLE9BQU8sQ0FBQztNQUVyRCxJQUFJLENBQUN6cEIsWUFBWSxDQUFDTSxHQUFHLENBQUN5cEMsa0JBQWtCLENBQUM7TUFFekMsT0FBT0Esa0JBQWtCO0lBQzNCO0VBQUM7SUFBQXJxQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPNitCLE9BQU9BLENBQWdEa0wsU0FBMEIsRUFBRVosS0FBMEMsRUFBUTtNQUMxSSxJQUFNYSxPQUFPLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUNscUMsR0FBRyxDQUFDZ3FDLFNBQVMsQ0FBQztNQUVsRCxJQUFJLENBQUNDLE9BQU8sRUFBRTtRQUNaLElBQUksQ0FBQ0YsZ0NBQWdDLENBQUM3NUIsT0FBTyxDQUFDLFVBQUE0WixPQUFPO1VBQUEsT0FBSUEsT0FBTyxDQUFDa2dCLFNBQVMsRUFBRVosS0FBSyxDQUFDO1FBQUEsRUFBQztRQUVuRjtNQUNGO01BRUFhLE9BQU8sQ0FBQ2QsSUFBSSxDQUFZQyxLQUFLLENBQUM7SUFDaEM7RUFBQztJQUFBcnBDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9HLE9BQU9BLENBQUEsRUFBUztNQUNyQixJQUFJLENBQUNDLFlBQVksQ0FBQ0QsT0FBTyxDQUFDLENBQUM7TUFDM0IsSUFBSSxDQUFDbzJCLGdCQUFnQixDQUFDLENBQUM7SUFDekI7RUFBQztJQUFBejJCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVF1MkIsZ0JBQWdCQSxDQUFBLEVBQVM7TUFDL0IsSUFBSSxDQUFDMFQsY0FBYyxDQUFDbkMsS0FBSyxDQUFDLENBQUM7TUFDM0IsSUFBSSxDQUFDZ0MsZ0NBQWdDLENBQUNoQyxLQUFLLENBQUMsQ0FBQztJQUMvQztFQUFDO0lBQUFob0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWtxQyxhQUFhQSxDQUFDSCxTQUEwQixFQUFnQjtNQUM5RCxJQUFNQyxPQUFPLEdBQUcsSUFBSWYscURBQVksQ0FBQyxDQUFDO01BRWxDLElBQUksQ0FBQ2dCLGNBQWMsQ0FBQzV3QixHQUFHLENBQUMwd0IsU0FBUyxFQUFFQyxPQUFPLENBQUM7TUFFM0MsT0FBT0EsT0FBTztJQUNoQjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztBQ3pESDtBQUNBO0FBQ0E7O0FBRU8sSUFBS2xNLHVCQUF1QiwwQkFBdkJBLHVCQUF1QjtFQUF2QkEsdUJBQXVCLENBQXZCQSx1QkFBdUI7RUFBdkJBLHVCQUF1QixDQUF2QkEsdUJBQXVCO0VBQXZCQSx1QkFBdUIsQ0FBdkJBLHVCQUF1QjtFQUF2QkEsdUJBQXVCLENBQXZCQSx1QkFBdUI7RUFBdkJBLHVCQUF1QixDQUF2QkEsdUJBQXVCO0VBQXZCQSx1QkFBdUIsQ0FBdkJBLHVCQUF1QjtFQUFBLE9BQXZCQSx1QkFBdUI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUNKbkM7QUFDQTtBQUNBOztBQUVBLElBQU1zTSxtQkFBbUIsR0FBRyw2Q0FBNkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0p6RTtBQUNBO0FBQ0E7O0FBRStFO0FBQ2xCO0FBQUEsSUFFeENDLGtCQUFrQjtFQUFBLFNBQUFBLG1CQUFBO0lBQUEvcUMsaUZBQUEsT0FBQStxQyxrQkFBQTtFQUFBO0VBQUEsT0FBQXhxQyw4RUFBQSxDQUFBd3FDLGtCQUFBO0lBQUF2cUMsR0FBQTtJQUFBRSxLQUFBLEVBQ3JDLFNBQU9zcUMsbUNBQW1DQSxDQUFDQyxXQUF3QixFQUFtQjtNQUNwRixRQUFRQSxXQUFXO1FBQ2pCLEtBQUt4Yix3RUFBVyxDQUFDa0csTUFBTTtVQUNyQixPQUFPLFFBQVE7UUFDakIsS0FBS2xHLHdFQUFXLENBQUN5YixLQUFLO1VBQ3BCLE9BQU8sT0FBTztRQUNoQixLQUFLemIsd0VBQVcsQ0FBQ2tILEtBQUs7VUFDcEIsT0FBTyxPQUFPO1FBQ2hCO1VBQ0VqakIsbUVBQWlCLENBQUN1M0IsV0FBVyxDQUFDO01BQ2xDO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQkg7QUFDQTtBQUNBOztBQUVpRjtBQUNwQjtBQUFBLElBRXhDRSxtQkFBbUI7RUFBQSxTQUFBQSxvQkFBQTtJQUFBbnJDLGlGQUFBLE9BQUFtckMsbUJBQUE7RUFBQTtFQUFBLE9BQUE1cUMsOEVBQUEsQ0FBQTRxQyxtQkFBQTtJQUFBM3FDLEdBQUE7SUFBQUUsS0FBQSxFQUN0QyxTQUFPMHFDLHFDQUFxQ0EsQ0FBQ0MsWUFBMEIsRUFBb0I7TUFDekYsUUFBUUEsWUFBWTtRQUNsQixLQUFLN2IseUVBQVksQ0FBQ2tHLElBQUk7VUFDcEIsT0FBTyxNQUFNO1FBQ2YsS0FBS2xHLHlFQUFZLENBQUNtSCxLQUFLO1VBQ3JCLE9BQU8sT0FBTztRQUNoQjtVQUNFampCLG1FQUFpQixDQUFDMjNCLFlBQVksQ0FBQztNQUNuQztJQUNGO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQkg7QUFDQTtBQUNBOztBQUV3RDtBQUNOO0FBRXpCO0FBRXpCLElBQU1FLHNCQUFzQixHQUFHLEtBQUs7QUFBQyxJQUloQmhiLFNBQVM7RUFnRDVCLFNBQUFBLFVBQUEsRUFBc0I7SUFBQXZ3QixpRkFBQSxPQUFBdXdCLFNBQUE7SUFDcEIsTUFBTSxJQUFJcnJCLEtBQUssQ0FBQywwREFBMEQsQ0FBQztFQUM3RTtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBZ3dCLFNBQUE7SUFBQS92QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBOHFDLGlDQUFBLEdBQUF4dUIsbUZBQUEsY0FBQUMsc0VBQUEsQ0EvQ0QsU0FBQUUsUUFBQTtRQUFBLE9BQUFGLHNFQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBTyxNQUFBLFdBQ1MsSUFBSWxCLE9BQU8sQ0FBVyxVQUFBNHVCLHNCQUFzQixFQUFJO2dCQUNyRCxJQUFNOXVCLE9BQU8sR0FBR2xkLGdFQUFXLENBQUN5USxTQUFTLENBQUMsVUFBQTNCLFdBQVcsRUFBSTtrQkFDbkQsSUFBSSxDQUFDQSxXQUFXLEVBQUU7b0JBQ2hCO2tCQUNGO2tCQUVBLElBQU1qRCxHQUFHLEdBQUcsSUFBSWlELFdBQVcsQ0FBQ3pJLEdBQUcsQ0FBQzBDLDRDQUFHLENBQUN5bEIsWUFBWSxDQUFDdnRCLEtBQUssQ0FBQztrQkFFdkQsT0FBTzZ2QixTQUFTLENBQUNtYixrQ0FBa0MsQ0FBQ3BnQyxHQUFHLENBQUMsQ0FDckQwUSxJQUFJLENBQUN5dkIsc0JBQXNCLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQztjQUNKLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBanVCLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ0g7TUFBQSxTQWJZd3VCLGdDQUFnQ0EsQ0FBQTtRQUFBLE9BQUFILGlDQUFBLENBQUFydEIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBaEMwNEIsZ0NBQWdDO0lBQUE7RUFBQTtJQUFBbnJDLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFrckMsbUNBQUEsR0FBQTV1QixtRkFBQSxjQUFBQyxzRUFBQSxDQWU3QyxTQUFBb0IsU0FBZ0QvUyxHQUFRO1FBQUEsSUFBQTBPLEdBQUEsRUFBQTZ4QixnQkFBQSxFQUFBQyxXQUFBLEVBQUFudkIsT0FBQTtRQUFBLE9BQUFNLHNFQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUNoRDFELEdBQUcsR0FBRzFPLEdBQUcsQ0FBQ3NGLFFBQVEsQ0FBQyxDQUFDO2NBQUEsTUFFdEJvSixHQUFHLElBQUl1VyxTQUFTLENBQUN3YixNQUFNO2dCQUFBeHRCLFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWEsU0FBQSxDQUFBUixNQUFBLFdBQ2xCd1MsU0FBUyxDQUFDd2IsTUFBTSxDQUFDL3hCLEdBQUcsQ0FBQztZQUFBO2NBR3hCNnhCLGdCQUFnQixHQUFHLElBQUlQLHlEQUFnQixDQUFDaGdDLEdBQUcsQ0FBQztjQUM1Q3dnQyxXQUFXLEdBQUd2YixTQUFTLENBQUN3YixNQUFNLENBQUMveEIsR0FBRyxDQUFDLEdBQUc2eEIsZ0JBQWdCLENBQUNHLHVCQUF1QixDQUFDLENBQUM7Y0FDaEZydkIsT0FBTyxHQUFHNFQsU0FBUyxDQUFDd2IsTUFBTSxDQUFDL3hCLEdBQUcsQ0FBQyxDQUFDZ0MsSUFBSSxDQUFDLFlBQU07Z0JBQy9DLElBQU1XLE9BQU8sR0FBR2xkLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUMsWUFBTTtrQkFDakQsSUFBSTZxQixTQUFTLENBQUN3YixNQUFNLENBQUMveEIsR0FBRyxDQUFDLEtBQUs4eEIsV0FBVyxFQUFFO29CQUN6QyxPQUFPdmIsU0FBUyxDQUFDd2IsTUFBTSxDQUFDL3hCLEdBQUcsQ0FBQztrQkFDOUI7Z0JBQ0YsQ0FBQyxFQUFFdXhCLHNCQUFzQixDQUFDO2NBQzVCLENBQUMsQ0FBQyxTQUFNLENBQUMsWUFBTTtnQkFDYixPQUFPaGIsU0FBUyxDQUFDd2IsTUFBTSxDQUFDL3hCLEdBQUcsQ0FBQztjQUM5QixDQUFDLENBQUM7Y0FBQSxPQUFBdUUsU0FBQSxDQUFBUixNQUFBLFdBRUsrdEIsV0FBVztZQUFBO1lBQUE7Y0FBQSxPQUFBdnRCLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ25CO01BQUEsU0FwQllxdEIsa0NBQWtDQSxDQUFBeHRCLEVBQUE7UUFBQSxPQUFBMHRCLG1DQUFBLENBQUF6dEIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBbEN5NEIsa0NBQWtDO0lBQUE7RUFBQTtJQUFBbHJDLEdBQUE7SUFBQUUsS0FBQSxFQXNCL0MsU0FBT2k1QiwwQkFBMEJBLENBQUNydUIsR0FBUSxFQUFRO01BQ2hELElBQU0wTyxHQUFHLEdBQUcxTyxHQUFHLENBQUNzRixRQUFRLENBQUMsQ0FBQztNQUUxQixJQUFJb0osR0FBRyxJQUFJdVcsU0FBUyxDQUFDd2IsTUFBTSxFQUFFO1FBQzNCLE9BQU94YixTQUFTLENBQUN3YixNQUFNLENBQUMveEIsR0FBRyxDQUFDO01BQzlCO0lBQ0Y7RUFBQztBQUFBO0FBQUEvWixpRkFBQSxDQTlDa0Jzd0IsU0FBUyxZQUNhLENBQUMsQ0FBQztBQURmO0FBcUQ5QixJQUFNNVQsT0FBTyxHQUFHNFQsU0FBUyxDQUFDb2IsZ0NBQWdDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRTVEO0FBQ0E7QUFDQTs7QUFFd0Q7QUFFRDtBQUVHO0FBQ047QUFDVjtBQUNSO0FBQ1Q7QUFFekIsSUFBTU8sY0FBYyxHQUFHLEtBQUs7QUFBQyxJQUVSWixnQkFBZ0I7RUFLbkMsU0FBQUEsaUJBQVloZ0MsR0FBUSxFQUFFO0lBQUF0TCxpRkFBQSxPQUFBc3JDLGdCQUFBO0lBQUFyckMsaUZBQUEsa0JBSkt3SSw2REFBYSxDQUFDRyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQUEzSSxpRkFBQTtJQUFBQSxpRkFBQTtJQUs3RCxJQUFJLENBQUNxTCxHQUFHLEVBQUU7TUFDUixNQUFNLElBQUlwRyxLQUFLLENBQUMsd0JBQXdCLENBQUM7SUFDM0M7SUFFQSxJQUFJLENBQUMybkIsZUFBZSxHQUFHalMsK0RBQWMsQ0FBQ0MsaUJBQWlCLENBQUN2UCxHQUFHLENBQUNzRixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQ3U3QixJQUFJLEdBQUc3Z0MsR0FBRztFQUNqQjtFQUFDLE9BQUEvSyw4RUFBQSxDQUFBK3FDLGdCQUFBO0lBQUE5cUMsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTByQyx3QkFBQSxHQUFBcHZCLG1GQUFBLGNBQUFDLHNFQUFBLENBRUQsU0FBQUUsUUFBOEI3UixHQUFRLEVBQUUrZ0MsT0FBZTtRQUFBLElBQUFyeUIsR0FBQSxFQUFBMEUsUUFBQSxFQUFBNHRCLFFBQUEsRUFBQUMsU0FBQTtRQUFBLE9BQUF0dkIsc0VBQUEsVUFBQU0sU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FBQSxJQUNoRDJ1QixPQUFPO2dCQUFBN3VCLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDSixJQUFJeFksS0FBSyxDQUFDLDRCQUE0QixDQUFDO1lBQUE7Y0FHekM4VSxHQUFHLEdBQUcxTyxHQUFHLENBQUNzRixRQUFRLENBQUMsQ0FBQztjQUFBNE0sUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FDSGIsT0FBTyxDQUFDMnZCLElBQUksQ0FBQyxDQUNsQy9zQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDOE8sS0FBSyxDQUFDd0ssR0FBRyxFQUFFO2dCQUMzQjZELE1BQU0sRUFBRSxLQUFLO2dCQUNieEcsS0FBSyxFQUFFO2NBQ1QsQ0FBQyxDQUFDLEVBQ0YsSUFBSXdGLE9BQU8sQ0FBVyxVQUFDdkYsQ0FBQyxFQUFFeVIsTUFBTTtnQkFBQSxPQUFLdHBCLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUM7a0JBQUEsT0FBTXFqQixNQUFNLENBQUMsSUFBSTdqQixLQUFLLHlCQUFBNUIsTUFBQSxDQUF5QjBXLEdBQUcsTUFBRyxDQUFDLENBQUM7Z0JBQUEsR0FBRXF5QixPQUFPLENBQUM7Y0FBQSxFQUFDLENBQ3JJLENBQUM7WUFBQTtjQU5JM3RCLFFBQVEsR0FBQWxCLFFBQUEsQ0FBQVEsSUFBQTtjQUFBLElBUVRVLFFBQVEsQ0FBQyt0QixFQUFFO2dCQUFBanZCLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDUixJQUFJeFksS0FBSyxzQkFBQTVCLE1BQUEsQ0FBc0IwVyxHQUFHLFNBQUExVyxNQUFBLENBQU1vYixRQUFRLENBQUNLLE1BQU0sTUFBRyxDQUFDO1lBQUE7Y0FBQSxNQUcvREwsUUFBUSxDQUFDWixJQUFJLEtBQUssSUFBSTtnQkFBQU4sUUFBQSxDQUFBRSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNsQixJQUFJeFksS0FBSyxtQ0FBQTVCLE1BQUEsQ0FBbUMwVyxHQUFHLE1BQUcsQ0FBQztZQUFBO2NBQUF3RCxRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUdwQ2dCLFFBQVEsQ0FBQ2d1QixJQUFJLENBQUMsQ0FBQztZQUFBO2NBQWhDSixRQUFRLEdBQUE5dUIsUUFBQSxDQUFBUSxJQUFBO2NBQ1J1dUIsU0FBUyxHQUFHRCxRQUFRLENBQUN2cEMsS0FBSyxDQUFDLEdBQUcsQ0FBQztjQUFBLE9BQUF5YSxRQUFBLENBQUFPLE1BQUEsV0FFOUJ3dUIsU0FBUyxDQUFDdnBCLEdBQUcsQ0FBQyxVQUFBMlEsUUFBUTtnQkFBQSxPQUFJLElBQUlzWSxrREFBUSxDQUFDdFksUUFBUSxFQUFFMFksT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBN3VCLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ2xFO01BQUEsU0ExQkt3dkIsdUJBQXVCQSxDQUFBenVCLEVBQUEsRUFBQWdMLEdBQUE7UUFBQSxPQUFBa2pCLHdCQUFBLENBQUFqdUIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBdkIwNUIsdUJBQXVCO0lBQUE7RUFBQTtJQUFBbnNDLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFrc0Msd0JBQUEsR0FBQTV2QixtRkFBQSxjQUFBQyxzRUFBQSxDQTRCN0IsU0FBQW9CLFNBQUE7UUFBQSxJQUFBdGQsS0FBQTtRQUFBLElBQUFzckMsT0FBQTtVQUFBcnlCLEdBQUE7VUFBQXV5QixTQUFBO1VBQUFNLGNBQUE7VUFBQUMsbUNBQUE7VUFBQW5aLFFBQUE7VUFBQW9aLE1BQUEsR0FBQTk1QixTQUFBO1FBQUEsT0FBQWdLLHNFQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUE4QjJ1QixPQUFlLEdBQUFVLE1BQUEsQ0FBQXBpQyxNQUFBLFFBQUFvaUMsTUFBQSxRQUFBem1DLFNBQUEsR0FBQXltQyxNQUFBLE1BQUdiLGNBQWM7Y0FDdERseUIsR0FBRyxHQUFHNlIscURBQVksQ0FBQ21oQixpQkFBaUIsQ0FBQyxJQUFJLENBQUNiLElBQUksQ0FBQztjQUFBNXRCLFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BQzdCLElBQUksQ0FBQ2l2Qix1QkFBdUIsQ0FBQyxJQUFJbHRDLGdFQUFXLENBQUNpQixLQUFLLENBQUNvRixHQUFHLENBQUNrVSxHQUFHLENBQUMsRUFBRXF5QixPQUFPLENBQUM7WUFBQTtjQUF2RkUsU0FBUyxHQUFBaHVCLFNBQUEsQ0FBQVAsSUFBQTtjQUNYNnVCLGNBQWMsR0FBRyxDQUFDO2NBQ2hCQyxtQ0FBbUMsR0FBRyxTQUF0Q0EsbUNBQW1DQSxDQUFBO2dCQUFBLE9BQXdCLElBQUlqd0IsT0FBTyxDQUFDLFVBQUN2RixDQUFDLEVBQUV5UixNQUFNLEVBQUs7a0JBQzFGLElBQUk4akIsY0FBYyxJQUFJTixTQUFTLENBQUM1aEMsTUFBTSxFQUFFO29CQUN0Q29lLE1BQU0sa0JBQUF6bEIsTUFBQSxDQUFrQmlwQyxTQUFTLENBQUM1aEMsTUFBTSx3QkFBQXJILE1BQUEsQ0FBcUIwVyxHQUFHLDRDQUF5QyxDQUFDO2tCQUM1RztnQkFDRixDQUFDLENBQUM7Y0FBQTtjQUFBdUUsU0FBQSxDQUFBYixJQUFBO2NBQUEsT0FDcUJiLE9BQU8sQ0FBQzJ2QixJQUFJLENBQUNELFNBQVMsQ0FBQ3ZwQixHQUFHLENBQUMsVUFBQTJRLFFBQVE7Z0JBQUEsT0FBSUEsUUFBUSxDQUNuRXNaLElBQUksQ0FBQyxDQUFDLFNBQ0QsQ0FBQyxVQUFBbGlDLENBQUMsRUFBSTtrQkFDVmhLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ2dNLElBQUksQ0FBQywrQkFBK0IsRUFBRTZkLFFBQVEsRUFBRTVvQixDQUFDLENBQUM7a0JBRS9EOGhDLGNBQWMsRUFBRTtrQkFFaEIsT0FBT0MsbUNBQW1DLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLENBQ0Q5d0IsSUFBSSxDQUFDLFVBQUFreEIsSUFBSSxFQUFJO2tCQUNaLElBQU0vc0MsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2tCQUV0QlksS0FBSSxDQUFDK0ksT0FBTyxDQUFDQyxJQUFJLENBQUMsMENBQTBDLEVBQUU0cEIsUUFBUSxDQUFDL2lCLFFBQVEsQ0FBQyxDQUFDLEVBQUVzOEIsSUFBSSxDQUFDO2tCQUN4Rm5zQyxLQUFJLENBQUM4ckIsZUFBZSxDQUFDbGpCLElBQUksQ0FBQztvQkFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUNrUixhQUFhO29CQUNyQzNQLE9BQU8sRUFBRSxDQUFDekosR0FBRyxHQUFHcUksNkNBQUcsQ0FBQ0csWUFBWSxJQUFJLElBQUk7b0JBQ3hDakksS0FBSyxFQUFFO3NCQUFDbUosTUFBTSxFQUFFcWpDLElBQUksSUFBSTtvQkFBQyxDQUFDO29CQUMxQjd3QixRQUFRLEVBQUVzWCxRQUFRLENBQUMvaUIsUUFBUSxDQUFDLENBQUM7b0JBQzdCMEwsSUFBSSxFQUFFO2tCQUNSLENBQUMsQ0FBQztrQkFFRixPQUFPcVgsUUFBUTtnQkFDakIsQ0FBQyxDQUFDO2NBQUEsRUFBQyxDQUFDO1lBQUE7Y0F0QkFBLFFBQVEsR0FBQXBWLFNBQUEsQ0FBQVAsSUFBQTtjQUFBLE9BQUFPLFNBQUEsQ0FBQVIsTUFBQSxXQXdCUDRWLFFBQVE7WUFBQTtZQUFBO2NBQUEsT0FBQXBWLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ2hCO01BQUEsU0FsQ0sydEIsdUJBQXVCQSxDQUFBO1FBQUEsT0FBQVksd0JBQUEsQ0FBQXp1QixLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUF2Qis0Qix1QkFBdUI7SUFBQTtFQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUQvQjtBQUNBO0FBQ0E7O0FBRXdEO0FBQ2pCO0FBQ2dCO0FBQ0Q7QUFDTjtBQUFBLElBRTNCbmdCLFlBQVk7RUF1Qi9CLFNBQUFBLGFBQUEsRUFBc0I7SUFBQTdyQixpRkFBQSxPQUFBNnJCLFlBQUE7SUFDcEIsTUFBTSxJQUFJM21CLEtBQUssQ0FBQyw2REFBNkQsQ0FBQztFQUNoRjtFQUFDLE9BQUEzRSw4RUFBQSxDQUFBc3JCLFlBQUE7SUFBQXJyQixHQUFBO0lBQUFDLEdBQUEsRUF0QkQsU0FBQUEsSUFBQSxFQUFrQztNQUNoQyxPQUFPb3JCLFlBQVksQ0FBQ3NoQixhQUFhO0lBQ25DO0VBQUM7SUFBQTNzQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPc3NDLGlCQUFpQkEsQ0FBQzFoQyxHQUFRLEVBQVU7TUFDekMsSUFBTTBPLEdBQUcsR0FBRyxJQUFJdmEsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ29GLEdBQUcsQ0FBQ3dGLEdBQUcsQ0FBQ3NGLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDckQsSUFBTThMLFVBQVUsR0FBR2hCLCtEQUFjLENBQUNnQixVQUFVO01BQzVDLElBQU14TyxVQUFVLEdBQUdOLCtEQUFVLENBQUN3L0IsbUJBQW1CLENBQUNsL0IsVUFBVTtNQUU1RDhMLEdBQUcsQ0FBQ3F6QixZQUFZLENBQUN0ekIsR0FBRyxDQUFDLFNBQVMsRUFBRTJDLFVBQVUsQ0FBQztNQUMzQzFDLEdBQUcsQ0FBQ3F6QixZQUFZLENBQUN0ekIsR0FBRyxDQUFDLFlBQVksRUFBRTdMLFVBQVUsQ0FBQztNQUM5QzhMLEdBQUcsQ0FBQ3F6QixZQUFZLENBQUN0ekIsR0FBRyxDQUFDLEdBQUcsS0FBQXpXLE1BQUEsQ0FBS3BELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO01BRTFDLElBQUk2WixHQUFHLENBQUNFLFFBQVEsS0FBSyxHQUFHLEVBQUU7UUFDeEJGLEdBQUcsQ0FBQ0UsUUFBUSxHQUFHLGtCQUFrQjtNQUNuQztNQUVBLE9BQU9GLEdBQUcsQ0FBQ3BKLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZCO0VBQUM7QUFBQTtBQUFBM1EsaUZBQUEsQ0FyQmtCNHJCLFlBQVksbUJBQzBCLElBQUlqc0IsbURBQU8sQ0FBU2tyQywwREFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNYbkc7QUFDQTtBQUNBOztBQUV3RDtBQUVEO0FBQ0k7QUFXSjtBQUNEO0FBRUE7QUFDRTtBQVN4RCxJQUFNd0MsVUFBVSxHQUFHLENBQUM7QUFBQyxJQXdFQXJCLFFBQVE7RUFNM0IsU0FBQUEsU0FBWTNnQyxHQUFXLEVBQUUrZ0MsT0FBZSxFQUFFO0lBQUFyc0MsaUZBQUEsT0FBQWlzQyxRQUFBO0lBQUFoc0MsaUZBQUEsa0JBTE53SSw2REFBYSxDQUFDRyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQUEzSSxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQSx5QkFHdEMsQ0FBQztJQUdoQyxJQUFJLENBQUNrc0MsSUFBSSxHQUFHN2dDLEdBQUc7SUFDZixJQUFJLENBQUNpaUMsUUFBUSxHQUFHbEIsT0FBTztJQUV2QixJQUFJLENBQUNBLE9BQU8sRUFBRTtNQUNaLE1BQU0sSUFBSW5uQyxLQUFLLCtCQUErQixDQUFDO0lBQ2pEO0VBQ0Y7RUFBQyxPQUFBM0UsOEVBQUEsQ0FBQTByQyxRQUFBO0lBQUF6ckMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QjtNQUMxQixPQUFPLElBQUksQ0FBQytzQyxjQUFjO0lBQzVCO0VBQUM7SUFBQWh0QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBa1EsUUFBUUEsQ0FBQSxFQUFXO01BQ2pCLHVCQUFBdE4sTUFBQSxDQUF1QixJQUFJLENBQUM2b0MsSUFBSTtJQUNsQztFQUFDO0lBQUEzckMsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQStzQyxLQUFBLEdBQUF6d0IsbUZBQUEsY0FBQUMsc0VBQUEsQ0FFRCxTQUFBRSxRQUFBO1FBQUEsSUFBQXBjLEtBQUE7UUFBQSxJQUFBaVosR0FBQSxFQUFBOGIsS0FBQSxFQUFBcFgsUUFBQSxFQUFBZ3ZCLFFBQUE7UUFBQSxPQUFBendCLHNFQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQ1ExRCxHQUFHLEdBQUcsSUFBSSxDQUFDMnpCLFlBQVksQ0FBQyxDQUFDO2NBQ3pCN1gsS0FBSyxHQUFHNTFCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXFkLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BQ0RiLE9BQU8sQ0FBQzJ2QixJQUFJLENBQUMsQ0FDbEMvc0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzhPLEtBQUssQ0FBQ3dLLEdBQUcsRUFBRTtnQkFDM0I2RCxNQUFNLEVBQUUsS0FBSztnQkFDYnhHLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUl3RixPQUFPLENBQVcsVUFBQ3ZGLENBQUMsRUFBRXlSLE1BQU07Z0JBQUEsT0FDOUJ0cEIsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2dGLFVBQVUsQ0FBQztrQkFBQSxPQUFNcWpCLE1BQU0sQ0FBQyxJQUFJN2pCLEtBQUssb0JBQUE1QixNQUFBLENBQW9CMFcsR0FBRyxNQUFHLENBQUMsQ0FBQztnQkFBQSxHQUFFalosS0FBSSxDQUFDd3NDLFFBQVEsQ0FBQztjQUFBLEVBQUMsQ0FDbkcsQ0FBQztZQUFBO2NBUEk3dUIsUUFBUSxHQUFBbEIsUUFBQSxDQUFBUSxJQUFBO2NBUVIwdkIsUUFBUSxHQUFHeHRDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQSxJQUV0QnVlLFFBQVEsQ0FBQyt0QixFQUFFO2dCQUFBanZCLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDUixJQUFJeFksS0FBSyxpQkFBQTVCLE1BQUEsQ0FBaUIwVyxHQUFHLFNBQUExVyxNQUFBLENBQU1vYixRQUFRLENBQUNLLE1BQU0sTUFBRyxDQUFDO1lBQUE7Y0FHOUQsSUFBSSxDQUFDeXVCLGNBQWMsR0FBR0UsUUFBUSxHQUFHNVgsS0FBSztjQUFDLE9BQUF0WSxRQUFBLENBQUFPLE1BQUEsV0FFaEMsSUFBSSxDQUFDeXZCLGNBQWM7WUFBQTtZQUFBO2NBQUEsT0FBQWh3QixRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQUMzQjtNQUFBLFNBcEJLOHZCLElBQUlBLENBQUE7UUFBQSxPQUFBUSxLQUFBLENBQUF0dkIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBSmc2QixJQUFJO0lBQUE7RUFBQTtJQUFBenNDLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFrdEMsVUFBQSxHQUFBNXdCLG1GQUFBLGNBQUFDLHNFQUFBLENBc0JWLFNBQUFvQixTQUFnQmhVLEtBQXVCLEVBQUV3akMsdUJBQXlELEVBQUVwYSxZQUFvQjtRQUFBLElBQUFoZCxNQUFBO1FBQUEsSUFBQTZELE9BQUEsRUFBQU4sR0FBQSxFQUFBcUQsUUFBQSxFQUFBeXdCLGFBQUEsRUFBQUMsYUFBQSxFQUFBQyxnQkFBQSxFQUFBbFksS0FBQSxFQUFBbVksWUFBQSxFQUFBNUIsT0FBQSxFQUFBdHRCLE1BQUEsRUFBQTJ1QixRQUFBLEVBQUFRLGlCQUFBO1FBQUEsT0FBQWp4QixzRUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFkLElBQUEsR0FBQWMsU0FBQSxDQUFBYixJQUFBO1lBQUE7Y0FDaEhwRCxPQUFPLEdBQUduUSxnRUFBYyxDQUFDQyxVQUFVLENBQUNDLEtBQUssQ0FBQyxDQUFDaVEsT0FBTztjQUFBLElBRW5EQSxPQUFPO2dCQUFBaUUsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FDVixJQUFJLENBQUM1VCxPQUFPLENBQUNTLEtBQUssQ0FBQyw0QkFBNEIsRUFBRUYsS0FBSyxDQUFDO2NBQUMsT0FBQWtVLFNBQUEsQ0FBQVIsTUFBQSxXQUVqRDtnQkFBQ2dCLE1BQU0sRUFBRTtjQUFjLENBQUM7WUFBQTtjQUczQi9FLEdBQUcsR0FBRyxJQUFJLENBQUNtMEIsUUFBUSxDQUFDLENBQUM3ekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDMUosUUFBUSxDQUFDLENBQUM7Y0FDaEV5TSxRQUFRLEdBQUcsSUFBSTVkLGdFQUFXLENBQUNpQixLQUFLLENBQUNpTyxRQUFRLENBQUMsQ0FBQztjQUMzQ20vQixhQUFhLEdBQUdweUIsK0RBQWMsQ0FBQ2dCLFVBQVU7Y0FFL0MsSUFBSStXLFlBQVksS0FBSyxDQUFDLElBQUlvYSx1QkFBdUIsRUFBRTtnQkFDM0NFLGFBQXlDLEdBQUc7a0JBQ2hEVCxVQUFVLEVBQVZBLFVBQVU7a0JBQ1ZRLGFBQWEsRUFBYkEsYUFBYTtrQkFDYk0sV0FBVyxFQUFFL2pDLEtBQUs7a0JBQ2xCb3BCLFlBQVksRUFBWkEsWUFBWTtrQkFDWjRhLGlCQUFpQixFQUFFLElBQUksQ0FBQ2IsY0FBYztrQkFDdEMzakIsb0JBQW9CLEVBQUU7b0JBQ3BCeWpCLFVBQVUsRUFBVkEsVUFBVTtvQkFDVmdCLGtCQUFrQixFQUFFO3NCQUNsQjNtQyxJQUFJLEVBQUVrbUMsdUJBQXVCLENBQUNsbUMsSUFBSTtzQkFDbEMyYixHQUFHLEVBQUV1cUIsdUJBQXVCLENBQUN2cUI7b0JBQy9CO2tCQUNGLENBQUM7a0JBQ0RpckIsdUJBQXVCLEVBQUU7b0JBQUNqQixVQUFVLEVBQVZBO2tCQUFVO2dCQUN0QyxDQUFDO2dCQUVEandCLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRTlTLElBQUksQ0FBQ2lNLFNBQVMsQ0FBQ2kzQixhQUFhLENBQUMsQ0FBQztjQUM1RCxDQUFDLE1BQU07Z0JBQ0NDLGdCQUErQyxHQUFHO2tCQUN0RFYsVUFBVSxFQUFWQSxVQUFVO2tCQUNWUSxhQUFhLEVBQWJBLGFBQWE7a0JBQ2JNLFdBQVcsRUFBRS9qQyxLQUFLO2tCQUNsQm9wQixZQUFZLEVBQVpBLFlBQVk7a0JBQ1o0YSxpQkFBaUIsRUFBRSxJQUFJLENBQUNiLGNBQWM7a0JBQ3RDZ0Isc0JBQXNCLEVBQUU7b0JBQUNsQixVQUFVLEVBQVZBO2tCQUFVO2dCQUNyQyxDQUFDO2dCQUVEandCLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRTlTLElBQUksQ0FBQ2lNLFNBQVMsQ0FBQ2szQixnQkFBZ0IsQ0FBQyxDQUFDO2NBQy9EO2NBRU1sWSxLQUFLLEdBQUc1MUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBb2UsU0FBQSxDQUFBZCxJQUFBO2NBSWxCNHVCLE9BQXNCLEdBQUcsSUFBSTtjQUFBOXRCLFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BRVpiLE9BQU8sQ0FBQzJ2QixJQUFJLENBQUMsQ0FDaEMvc0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzhPLEtBQUssQ0FBQ3dLLEdBQUcsRUFBRTtnQkFDM0I2RCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVDtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlSLE9BQU8sQ0FBVyxVQUFBQyxPQUFPO2dCQUFBLE9BQzNCdXZCLE9BQU8sR0FBRzVzQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07a0JBQzNDK1EsTUFBSSxDQUFDM00sT0FBTyxDQUFDUyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSXJGLEtBQUsseUJBQUE1QixNQUFBLENBQXlCMFcsR0FBRyxNQUFHLENBQUMsQ0FBQztrQkFDcEY4QyxPQUFPLENBQUM7b0JBQUNpQyxNQUFNLEVBQUU7a0JBQUcsQ0FBYSxDQUFDO2dCQUNwQyxDQUFDLEVBQUV0SSxNQUFJLENBQUM4MkIsUUFBUSxDQUFDO2NBQUEsRUFBQyxDQUNyQixDQUFDLFdBQ1EsQ0FBQyxZQUFNO2dCQUNiLElBQUlsQixPQUFPLEVBQUU7a0JBQ1g1c0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ3lPLFlBQVksQ0FBQ2s5QixPQUFPLENBQUM7Z0JBQ3pDO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FmSjRCLFlBQVksR0FBQTF2QixTQUFBLENBQUFQLElBQUE7Y0FBQU8sU0FBQSxDQUFBYixJQUFBO2NBQUE7WUFBQTtjQUFBYSxTQUFBLENBQUFkLElBQUE7Y0FBQWMsU0FBQSxDQUFBd0MsRUFBQSxHQUFBeEMsU0FBQTtjQWlCWixJQUFJLENBQUN6VSxPQUFPLENBQUNTLEtBQUssQ0FBQyxxQkFBcUIsRUFBQWdVLFNBQUEsQ0FBQXdDLEVBQUcsQ0FBQztjQUFDLE9BQUF4QyxTQUFBLENBQUFSLE1BQUEsV0FFdEM7Z0JBQUNnQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXVCLEdBQUcsSUFBSSxDQUFDMHZCLDhCQUE4QixDQUFDUixZQUFZLENBQUM7Y0FBQSxNQUU3RWx2QixNQUFNLEtBQUssSUFBSTtnQkFBQVIsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBYSxTQUFBLENBQUFSLE1BQUEsV0FDVjtnQkFBQ2dCLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7Y0FHWDJ1QixRQUFRLEdBQUd4dEMsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBb2UsU0FBQSxDQUFBYixJQUFBO2NBQUEsT0FDSyxJQUFJLENBQUNneEIsc0NBQXNDLENBQUNwMEIsT0FBTyxFQUFFMnpCLFlBQVksQ0FBQztZQUFBO2NBQTVGQyxpQkFBaUIsR0FBQTN2QixTQUFBLENBQUFQLElBQUE7Y0FFdkIsSUFBSSxDQUFDbFUsT0FBTyxDQUFDeUwsS0FBSyxDQUFDLHdDQUF3QyxFQUFFMjRCLGlCQUFpQixFQUFFUixRQUFRLEdBQUc1WCxLQUFLLENBQUM7Y0FBQyxPQUFBdlgsU0FBQSxDQUFBUixNQUFBLFdBRTNGbXdCLGlCQUFpQjtZQUFBO1lBQUE7Y0FBQSxPQUFBM3ZCLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ3pCO01BQUEsU0FwRktuTyxTQUFTQSxDQUFBZ08sRUFBQSxFQUFBZ0wsR0FBQSxFQUFBSSxHQUFBO1FBQUEsT0FBQXNrQixVQUFBLENBQUF6dkIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBVC9DLFNBQVM7SUFBQTtFQUFBO0lBQUExUCxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBaXVDLFFBQUEsR0FBQTN4QixtRkFBQSxjQUFBQyxzRUFBQSxDQXNGZixTQUFBOEMsU0FBY3piLElBQVksRUFBRStGLEtBQXVCLEVBQUV3akMsdUJBQXlELEVBQUVwYSxZQUFvQjtRQUFBLElBQUF2SixNQUFBO1FBQUEsSUFBQTVQLE9BQUEsRUFBQU4sR0FBQSxFQUFBcUQsUUFBQSxFQUFBeXdCLGFBQUEsRUFBQUMsYUFBQSxFQUFBQyxnQkFBQSxFQUFBbFksS0FBQSxFQUFBbVksWUFBQSxFQUFBNUIsT0FBQSxFQUFBdHRCLE1BQUEsRUFBQTJ1QixRQUFBLEVBQUFRLGlCQUFBO1FBQUEsT0FBQWp4QixzRUFBQSxVQUFBbUQsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE1QyxJQUFBLEdBQUE0QyxTQUFBLENBQUEzQyxJQUFBO1lBQUE7Y0FDNUhwRCxPQUFPLEdBQUduUSxnRUFBYyxDQUFDQyxVQUFVLENBQUNDLEtBQUssQ0FBQyxDQUFDaVEsT0FBTztjQUFBLElBRW5EQSxPQUFPO2dCQUFBK0YsU0FBQSxDQUFBM0MsSUFBQTtnQkFBQTtjQUFBO2NBQ1YsSUFBSSxDQUFDNVQsT0FBTyxDQUFDUyxLQUFLLENBQUMsNEJBQTRCLEVBQUVGLEtBQUssQ0FBQztjQUFDLE9BQUFnVyxTQUFBLENBQUF0QyxNQUFBLFdBRWpEO2dCQUFDZ0IsTUFBTSxFQUFFO2NBQWMsQ0FBQztZQUFBO2NBRzNCL0UsR0FBRyxHQUFHLElBQUksQ0FBQ20wQixRQUFRLENBQUMsQ0FBQzd6QixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMxSixRQUFRLENBQUMsQ0FBQztjQUM5RHlNLFFBQVEsR0FBRyxJQUFJNWQsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2lPLFFBQVEsQ0FBQyxDQUFDO2NBQzNDbS9CLGFBQWEsR0FBR3B5QiwrREFBYyxDQUFDZ0IsVUFBVTtjQUUvQyxJQUFJK1csWUFBWSxLQUFLLENBQUMsSUFBSW9hLHVCQUF1QixFQUFFO2dCQUMzQ0UsYUFBdUMsR0FBRztrQkFDOUNULFVBQVUsRUFBVkEsVUFBVTtrQkFDVlEsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUUvakMsS0FBSztrQkFDbEJvcEIsWUFBWSxFQUFaQSxZQUFZO2tCQUNaNGEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDYixjQUFjO2tCQUN0Q2xwQyxJQUFJLEVBQUpBLElBQUk7a0JBQ0p1bEIsb0JBQW9CLEVBQUU7b0JBQ3BCeWpCLFVBQVUsRUFBVkEsVUFBVTtvQkFDVmdCLGtCQUFrQixFQUFFO3NCQUNsQjNtQyxJQUFJLEVBQUVrbUMsdUJBQXVCLENBQUNsbUMsSUFBSTtzQkFDbEMyYixHQUFHLEVBQUV1cUIsdUJBQXVCLENBQUN2cUI7b0JBQy9CO2tCQUNGLENBQUM7a0JBQ0RpckIsdUJBQXVCLEVBQUU7b0JBQ3ZCdGxDLFFBQVEsRUFBRSxFQUFFO29CQUNacWtDLFVBQVUsRUFBVkE7a0JBQ0Y7Z0JBQ0YsQ0FBQztnQkFFRGp3QixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUU5UyxJQUFJLENBQUNpTSxTQUFTLENBQUNpM0IsYUFBYSxDQUFDLENBQUM7Y0FDNUQsQ0FBQyxNQUFNO2dCQUNDQyxnQkFBNkMsR0FBRztrQkFDcERWLFVBQVUsRUFBVkEsVUFBVTtrQkFDVlEsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUUvakMsS0FBSztrQkFDbEJvcEIsWUFBWSxFQUFaQSxZQUFZO2tCQUNaNGEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDYixjQUFjO2tCQUN0Q2xwQyxJQUFJLEVBQUpBLElBQUk7a0JBQ0prcUMsc0JBQXNCLEVBQUU7b0JBQ3RCdmxDLFFBQVEsRUFBRSxFQUFFO29CQUNacWtDLFVBQVUsRUFBVkE7a0JBQ0Y7Z0JBQ0YsQ0FBQztnQkFFRGp3QixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUU5UyxJQUFJLENBQUNpTSxTQUFTLENBQUNrM0IsZ0JBQWdCLENBQUMsQ0FBQztjQUMvRDtjQUVNbFksS0FBSyxHQUFHNTFCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQWtnQixTQUFBLENBQUE1QyxJQUFBO2NBSWxCNHVCLE9BQXNCLEdBQUcsSUFBSTtjQUFBaHNCLFNBQUEsQ0FBQTNDLElBQUE7Y0FBQSxPQUVaYixPQUFPLENBQUMydkIsSUFBSSxDQUFDLENBQ2hDL3NDLGdFQUFXLENBQUNpQixLQUFLLENBQUM4TyxLQUFLLENBQUN3SyxHQUFHLEVBQUU7Z0JBQzNCNkQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQ7Y0FDUixDQUFDLENBQUMsRUFDRixJQUFJUixPQUFPLENBQVcsVUFBQUMsT0FBTztnQkFBQSxPQUMzQnV2QixPQUFPLEdBQUc1c0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2dGLFVBQVUsQ0FBQyxZQUFNO2tCQUMzQ3drQixNQUFJLENBQUNwZ0IsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSXJGLEtBQUssdUJBQUE1QixNQUFBLENBQXVCMFcsR0FBRyxNQUFHLENBQUMsQ0FBQztrQkFDaEY4QyxPQUFPLENBQUM7b0JBQUNpQyxNQUFNLEVBQUU7a0JBQUcsQ0FBYSxDQUFDO2dCQUNwQyxDQUFDLEVBQUVtTCxNQUFJLENBQUNxakIsUUFBUSxDQUFDO2NBQUEsRUFBQyxDQUNyQixDQUFDLFdBQ1EsQ0FBQyxZQUFNO2dCQUNiLElBQUlsQixPQUFPLEVBQUU7a0JBQ1g1c0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ3lPLFlBQVksQ0FBQ2s5QixPQUFPLENBQUM7Z0JBQ3pDO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FmSjRCLFlBQVksR0FBQTV0QixTQUFBLENBQUFyQyxJQUFBO2NBQUFxQyxTQUFBLENBQUEzQyxJQUFBO2NBQUE7WUFBQTtjQUFBMkMsU0FBQSxDQUFBNUMsSUFBQTtjQUFBNEMsU0FBQSxDQUFBVSxFQUFBLEdBQUFWLFNBQUE7Y0FpQlosSUFBSSxDQUFDdlcsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUJBQW1CLEVBQUE4VixTQUFBLENBQUFVLEVBQUcsQ0FBQztjQUFDLE9BQUFWLFNBQUEsQ0FBQXRDLE1BQUEsV0FFcEM7Z0JBQUNnQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXFCLEdBQUcsSUFBSSxDQUFDNnZCLDRCQUE0QixDQUFDWCxZQUFZLENBQUM7Y0FBQSxNQUV6RWx2QixNQUFNLEtBQUssSUFBSTtnQkFBQXNCLFNBQUEsQ0FBQTNDLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUEyQyxTQUFBLENBQUF0QyxNQUFBLFdBQ1Y7Z0JBQUNnQixNQUFNLEVBQU5BO2NBQU0sQ0FBQztZQUFBO2NBR1gydUIsUUFBUSxHQUFHeHRDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQWtnQixTQUFBLENBQUEzQyxJQUFBO2NBQUEsT0FDSyxJQUFJLENBQUNteEIsb0NBQW9DLENBQUN2MEIsT0FBTyxFQUFFMnpCLFlBQVksQ0FBQztZQUFBO2NBQTFGQyxpQkFBaUIsR0FBQTd0QixTQUFBLENBQUFyQyxJQUFBO2NBRXZCLElBQUksQ0FBQ2xVLE9BQU8sQ0FBQ3lMLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRTI0QixpQkFBaUIsRUFBRVIsUUFBUSxHQUFHNVgsS0FBSyxDQUFDO2NBQUMsT0FBQXpWLFNBQUEsQ0FBQXRDLE1BQUEsV0FFekZtd0IsaUJBQWlCO1lBQUE7WUFBQTtjQUFBLE9BQUE3dEIsU0FBQSxDQUFBcEMsSUFBQTtVQUFBO1FBQUEsR0FBQThCLFFBQUE7TUFBQSxDQUN6QjtNQUFBLFNBNUZLd2YsT0FBT0EsQ0FBQXpWLEdBQUEsRUFBQWdsQixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUFMLFFBQUEsQ0FBQXh3QixLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFQc3NCLE9BQU87SUFBQTtFQUFBO0lBQUEvK0IsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTZvQixxQkFBQSxHQUFBdk0sbUZBQUEsY0FBQUMsc0VBQUEsQ0E4RmIsU0FBQXVNLFNBQTJCcUssTUFBZSxFQUFFeWEsa0JBQTZDO1FBQUEsSUFBQWxrQixNQUFBO1FBQUEsSUFBQXBRLEdBQUEsRUFBQXFELFFBQUEsRUFBQVMsSUFBQSxFQUFBZ1ksS0FBQSxFQUFBbVksWUFBQSxFQUFBNUIsT0FBQSxFQUFBdHRCLE1BQUEsRUFBQTJ1QixRQUFBLEVBQUF1Qiw0QkFBQTtRQUFBLE9BQUFoeUIsc0VBQUEsVUFBQTBNLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBbk0sSUFBQSxHQUFBbU0sU0FBQSxDQUFBbE0sSUFBQTtZQUFBO2NBQ2pGMUQsR0FBRyxHQUFHLElBQUksQ0FBQ20wQixRQUFRLENBQUMsQ0FBQ3RhLE1BQU0sQ0FBQ3ZaLE9BQU8sRUFBRSxRQUFRLEVBQUV1WixNQUFNLENBQUM1cUIsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDMkgsUUFBUSxDQUFDLENBQUM7Y0FDcEd5TSxRQUFRLEdBQUcsSUFBSTVkLGdFQUFXLENBQUNpQixLQUFLLENBQUNpTyxRQUFRLENBQUMsQ0FBQztjQUMzQ21QLElBQWtDLEdBQUc7Z0JBQ3pDd3ZCLFVBQVUsRUFBVkEsVUFBVTtnQkFDVjRCLFlBQVksRUFBRXJiLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFcWIsWUFBWTtnQkFDbENaLGtCQUFrQixFQUFFO2tCQUNsQjNtQyxJQUFJLEVBQUUybUMsa0JBQWtCLENBQUMzbUMsSUFBSTtrQkFDN0IyYixHQUFHLEVBQUVnckIsa0JBQWtCLENBQUNockI7Z0JBQzFCO2NBQ0YsQ0FBQztjQUVEakcsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFOVMsSUFBSSxDQUFDaU0sU0FBUyxDQUFDZ0gsSUFBSSxDQUFDLENBQUM7Y0FFM0NnWSxLQUFLLEdBQUc1MUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBeXBCLFNBQUEsQ0FBQW5NLElBQUE7Y0FJbEI0dUIsT0FBc0IsR0FBRyxJQUFJO2NBQUF6aUIsU0FBQSxDQUFBbE0sSUFBQTtjQUFBLE9BRVpiLE9BQU8sQ0FBQzJ2QixJQUFJLENBQUMsQ0FDaEMvc0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzhPLEtBQUssQ0FBQ3dLLEdBQUcsRUFBRTtnQkFDM0I2RCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVDtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlSLE9BQU8sQ0FBVyxVQUFBQyxPQUFPO2dCQUFBLE9BQzNCdXZCLE9BQU8sR0FBRzVzQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07a0JBQzNDMGtCLE1BQUksQ0FBQ3RnQixPQUFPLENBQUNTLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJckYsS0FBSyxzQ0FBQTVCLE1BQUEsQ0FBc0MwVyxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUM5RzhDLE9BQU8sQ0FBQztvQkFBQ2lDLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRXFMLE1BQUksQ0FBQ21qQixRQUFRLENBQUM7Y0FBQSxFQUFDLENBQ3JCLENBQUMsV0FDUSxDQUFDLFlBQU07Z0JBQ2IsSUFBSWxCLE9BQU8sRUFBRTtrQkFDWDVzQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDeU8sWUFBWSxDQUFDazlCLE9BQU8sQ0FBQztnQkFDekM7Y0FDRixDQUFDLENBQUM7WUFBQTtjQWZKNEIsWUFBWSxHQUFBcmtCLFNBQUEsQ0FBQTVMLElBQUE7Y0FBQTRMLFNBQUEsQ0FBQWxNLElBQUE7Y0FBQTtZQUFBO2NBQUFrTSxTQUFBLENBQUFuTSxJQUFBO2NBQUFtTSxTQUFBLENBQUE3SSxFQUFBLEdBQUE2SSxTQUFBO2NBaUJaLElBQUksQ0FBQzlmLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLGtDQUFrQyxFQUFBcWYsU0FBQSxDQUFBN0ksRUFBRyxDQUFDO2NBQUMsT0FBQTZJLFNBQUEsQ0FBQTdMLE1BQUEsV0FFbkQ7Z0JBQUNnQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQWtDLEdBQUcsSUFBSSxDQUFDb3dCLHlDQUF5QyxDQUFDbEIsWUFBWSxDQUFDO2NBQUEsTUFFbkdsdkIsTUFBTSxLQUFLLElBQUk7Z0JBQUE2SyxTQUFBLENBQUFsTSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBa00sU0FBQSxDQUFBN0wsTUFBQSxXQUNWO2dCQUFDZ0IsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYMnVCLFFBQVEsR0FBR3h0QyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUF5cEIsU0FBQSxDQUFBbE0sSUFBQTtjQUFBLE9BQ2dCLElBQUksQ0FBQzB4QixpREFBaUQsQ0FBQ25CLFlBQVksQ0FBQztZQUFBO2NBQXpHZ0IsNEJBQTRCLEdBQUFybEIsU0FBQSxDQUFBNUwsSUFBQTtjQUVsQyxJQUFJLENBQUNsVSxPQUFPLENBQUN5TCxLQUFLLENBQUMscURBQXFELEVBQUUwNUIsNEJBQTRCLEVBQUV2QixRQUFRLEdBQUc1WCxLQUFLLENBQUM7Y0FBQyxPQUFBbE0sU0FBQSxDQUFBN0wsTUFBQSxXQUVuSGt4Qiw0QkFBNEI7WUFBQTtZQUFBO2NBQUEsT0FBQXJsQixTQUFBLENBQUEzTCxJQUFBO1VBQUE7UUFBQSxHQUFBdUwsUUFBQTtNQUFBLENBQ3BDO01BQUEsU0F0REtLLG9CQUFvQkEsQ0FBQXdsQixHQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBL2xCLHFCQUFBLENBQUFwTCxLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFwQjRXLG9CQUFvQjtJQUFBO0VBQUE7SUFBQXJwQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBNnVDLGFBQUEsR0FBQXZ5QixtRkFBQSxjQUFBQyxzRUFBQSxDQXdEMUIsU0FBQTZhLFNBQ0VqRSxNQUFlLEVBQ2Z5QixxQkFBNkIsRUFDN0JvQixzQkFBcUMsRUFDckMyVSxZQUEwQixFQUMxQkosV0FBd0I7UUFBQSxJQUFBbFQsTUFBQTtRQUFBLElBQUEvZCxHQUFBLEVBQUFxRCxRQUFBLEVBQUFTLElBQUEsRUFBQWdZLEtBQUEsRUFBQW1ZLFlBQUEsRUFBQTVCLE9BQUEsRUFBQXR0QixNQUFBLEVBQUEydUIsUUFBQTtRQUFBLE9BQUF6d0Isc0VBQUEsVUFBQWdjLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBemIsSUFBQSxHQUFBeWIsU0FBQSxDQUFBeGIsSUFBQTtZQUFBO2NBRWxCMUQsR0FBRyxHQUFHLElBQUksQ0FBQ20wQixRQUFRLENBQUMsQ0FBQ3RhLE1BQU0sQ0FBQ3ZaLE9BQU8sRUFBRSxRQUFRLEVBQUV1WixNQUFNLENBQUM1cUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMySCxRQUFRLENBQUMsQ0FBQztjQUN0RnlNLFFBQVEsR0FBRyxJQUFJNWQsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2lPLFFBQVEsQ0FBQyxDQUFDO2NBQzNDbVAsSUFBaUMsR0FBRztnQkFDeEN3dkIsVUFBVSxFQUFWQSxVQUFVO2dCQUNWNEIsWUFBWSxFQUFFcmIsTUFBTSxDQUFDcWIsWUFBWTtnQkFDakM1WixxQkFBcUIsRUFBckJBLHFCQUFxQjtnQkFDckJvQixzQkFBc0IsRUFBdEJBLHNCQUFzQjtnQkFDdEIyVSxZQUFZLEVBQUVGLDZEQUFtQixDQUFDQyxxQ0FBcUMsQ0FBQ0MsWUFBWSxDQUFDO2dCQUNyRkosV0FBVyxFQUFFRiw0REFBa0IsQ0FBQ0MsbUNBQW1DLENBQUNDLFdBQVc7Y0FDakYsQ0FBQztjQUVENXRCLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRTlTLElBQUksQ0FBQ2lNLFNBQVMsQ0FBQ2dILElBQUksQ0FBQyxDQUFDO2NBRTNDZ1ksS0FBSyxHQUFHNTFCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQSs0QixTQUFBLENBQUF6YixJQUFBO2NBSWxCNHVCLE9BQXNCLEdBQUcsSUFBSTtjQUFBblQsU0FBQSxDQUFBeGIsSUFBQTtjQUFBLE9BRVpiLE9BQU8sQ0FBQzJ2QixJQUFJLENBQUMsQ0FDaEMvc0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzhPLEtBQUssQ0FBQ3dLLEdBQUcsRUFBRTtnQkFDM0I2RCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVDtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlSLE9BQU8sQ0FBVyxVQUFBQyxPQUFPO2dCQUFBLE9BQzNCdXZCLE9BQU8sR0FBRzVzQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07a0JBQzNDcXlCLE1BQUksQ0FBQ2p1QixPQUFPLENBQUNTLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJckYsS0FBSyxpQ0FBQTVCLE1BQUEsQ0FBaUMwVyxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUMxRzhDLE9BQU8sQ0FBQztvQkFBQ2lDLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRWdaLE1BQUksQ0FBQ3dWLFFBQVEsQ0FBQztjQUFBLEVBQUMsQ0FDckIsQ0FBQyxXQUNRLENBQUMsWUFBTTtnQkFDYixJQUFJbEIsT0FBTyxFQUFFO2tCQUNYNXNDLGdFQUFXLENBQUNpQixLQUFLLENBQUN5TyxZQUFZLENBQUNrOUIsT0FBTyxDQUFDO2dCQUN6QztjQUNGLENBQUMsQ0FBQztZQUFBO2NBZko0QixZQUFZLEdBQUEvVSxTQUFBLENBQUFsYixJQUFBO2NBQUFrYixTQUFBLENBQUF4YixJQUFBO2NBQUE7WUFBQTtjQUFBd2IsU0FBQSxDQUFBemIsSUFBQTtjQUFBeWIsU0FBQSxDQUFBblksRUFBQSxHQUFBbVksU0FBQTtjQWlCWixJQUFJLENBQUNwdkIsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUNBQW1DLEVBQUEydUIsU0FBQSxDQUFBblksRUFBRyxDQUFDO2NBQUMsT0FBQW1ZLFNBQUEsQ0FBQW5iLE1BQUEsV0FFcEQ7Z0JBQUNnQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXdDLEdBQUcsSUFBSSxDQUFDeXdCLCtDQUErQyxDQUFDdkIsWUFBWSxDQUFDO2NBQzdHUCxRQUFRLEdBQUd4dEMsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUUzQixJQUFJLENBQUMySixPQUFPLENBQUNDLElBQUksQ0FBQyxnREFBZ0QsRUFBRWdWLE1BQU0sRUFBRTJ1QixRQUFRLEdBQUc1WCxLQUFLLENBQUM7Y0FBQyxPQUFBb0QsU0FBQSxDQUFBbmIsTUFBQSxXQUV2RjtnQkFBQ2dCLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFtYSxTQUFBLENBQUFqYixJQUFBO1VBQUE7UUFBQSxHQUFBNlosUUFBQTtNQUFBLENBQ2hCO01BQUEsU0F0REtyQyxZQUFZQSxDQUFBZ2EsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQU4sYUFBQSxDQUFBcHhCLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQVp3aUIsWUFBWTtJQUFBO0VBQUE7SUFBQWoxQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBb3ZDLGlCQUFBLEdBQUE5eUIsbUZBQUEsY0FBQUMsc0VBQUEsQ0F3RGxCLFNBQUFrZCxTQUF1QnRHLE1BQWUsRUFBRWtjLFVBQTZCLEVBQUVDLGtCQUEyQjtRQUFBLElBQUF6VSxNQUFBO1FBQUEsSUFBQTFhLE9BQUE7VUFBQTdHLEdBQUE7VUFBQXFELFFBQUE7VUFBQVMsSUFBQTtVQUFBZ1ksS0FBQTtVQUFBbVksWUFBQTtVQUFBNUIsT0FBQTtVQUFBdHRCLE1BQUE7VUFBQTJ1QixRQUFBO1VBQUF1Qyx3QkFBQTtVQUFBQyxNQUFBLEdBQUFqOUIsU0FBQTtRQUFBLE9BQUFnSyxzRUFBQSxVQUFBbWQsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE1YyxJQUFBLEdBQUE0YyxTQUFBLENBQUEzYyxJQUFBO1lBQUE7Y0FBRW1ELE9BQWlCLEdBQUFxdkIsTUFBQSxDQUFBdmxDLE1BQUEsUUFBQXVsQyxNQUFBLFFBQUE1cEMsU0FBQSxHQUFBNHBDLE1BQUEsTUFBRyxFQUFFO2NBQ2xIbDJCLEdBQUcsR0FBRyxJQUFJLENBQUNtMEIsUUFBUSxDQUFDLENBQUN0YSxNQUFNLENBQUN2WixPQUFPLEVBQUUsUUFBUSxFQUFFdVosTUFBTSxDQUFDNXFCLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQzJILFFBQVEsQ0FBQyxDQUFDO2NBQ2hHeU0sUUFBUSxHQUFHLElBQUk1ZCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDaU8sUUFBUSxDQUFDLENBQUM7Y0FDM0NtUCxJQUE4QixHQUFHO2dCQUNyQ3d2QixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Y0QixZQUFZLEVBQUVyYixNQUFNLENBQUNxYixZQUFZO2dCQUNqQ2EsVUFBVSxFQUFWQSxVQUFVO2dCQUNWQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtnQkFDbEJudkIsT0FBTyxFQUFQQTtjQUNGLENBQUM7Y0FFRHhELFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRTlTLElBQUksQ0FBQ2lNLFNBQVMsQ0FBQ2dILElBQUksQ0FBQyxDQUFDO2NBRTNDZ1ksS0FBSyxHQUFHNTFCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQWs2QixTQUFBLENBQUE1YyxJQUFBO2NBSWxCNHVCLE9BQXNCLEdBQUcsSUFBSTtjQUFBaFMsU0FBQSxDQUFBM2MsSUFBQTtjQUFBLE9BRVpiLE9BQU8sQ0FBQzJ2QixJQUFJLENBQUMsQ0FDaEMvc0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzhPLEtBQUssQ0FBQ3dLLEdBQUcsRUFBRTtnQkFDM0I2RCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVDtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlSLE9BQU8sQ0FBVyxVQUFBQyxPQUFPO2dCQUFBLE9BQzNCdXZCLE9BQU8sR0FBRzVzQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07a0JBQzNDNjFCLE1BQUksQ0FBQ3p4QixPQUFPLENBQUNTLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJckYsS0FBSyxrQ0FBQTVCLE1BQUEsQ0FBa0MwVyxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUN0RzhDLE9BQU8sQ0FBQztvQkFBQ2lDLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRXdjLE1BQUksQ0FBQ2dTLFFBQVEsQ0FBQztjQUFBLEVBQUMsQ0FDckIsQ0FBQyxXQUNRLENBQUMsWUFBTTtnQkFDYixJQUFJbEIsT0FBTyxFQUFFO2tCQUNYNXNDLGdFQUFXLENBQUNpQixLQUFLLENBQUN5TyxZQUFZLENBQUNrOUIsT0FBTyxDQUFDO2dCQUN6QztjQUNGLENBQUMsQ0FBQztZQUFBO2NBZko0QixZQUFZLEdBQUE1VCxTQUFBLENBQUFyYyxJQUFBO2NBQUFxYyxTQUFBLENBQUEzYyxJQUFBO2NBQUE7WUFBQTtjQUFBMmMsU0FBQSxDQUFBNWMsSUFBQTtjQUFBNGMsU0FBQSxDQUFBdFosRUFBQSxHQUFBc1osU0FBQTtjQWlCWixJQUFJLENBQUN2d0IsT0FBTyxDQUFDUyxLQUFLLENBQUMsOEJBQThCLEVBQUE4dkIsU0FBQSxDQUFBdFosRUFBRyxDQUFDO2NBQUMsT0FBQXNaLFNBQUEsQ0FBQXRjLE1BQUEsV0FFL0M7Z0JBQUNnQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQThCLEdBQUcsSUFBSSxDQUFDb3hCLHFDQUFxQyxDQUFDbEMsWUFBWSxDQUFDO2NBQUEsTUFFM0ZsdkIsTUFBTSxLQUFLLElBQUk7Z0JBQUFzYixTQUFBLENBQUEzYyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBMmMsU0FBQSxDQUFBdGMsTUFBQSxXQUNWO2dCQUFDZ0IsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYMnVCLFFBQVEsR0FBR3h0QyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFrNkIsU0FBQSxDQUFBM2MsSUFBQTtjQUFBLE9BQ1ksSUFBSSxDQUFDMHlCLDZDQUE2QyxDQUFDbkMsWUFBWSxDQUFDO1lBQUE7Y0FBakdnQyx3QkFBd0IsR0FBQTVWLFNBQUEsQ0FBQXJjLElBQUE7Y0FFOUIsSUFBSSxDQUFDbFUsT0FBTyxDQUFDQyxJQUFJLENBQUMsaURBQWlELEVBQUVrbUMsd0JBQXdCLEVBQUV2QyxRQUFRLEdBQUc1WCxLQUFLLENBQUM7Y0FBQyxPQUFBdUUsU0FBQSxDQUFBdGMsTUFBQSxXQUUxR2t5Qix3QkFBd0I7WUFBQTtZQUFBO2NBQUEsT0FBQTVWLFNBQUEsQ0FBQXBjLElBQUE7VUFBQTtRQUFBLEdBQUFrYyxRQUFBO01BQUEsQ0FDaEM7TUFBQSxTQXJES2tXLGdCQUFnQkEsQ0FBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBVixpQkFBQSxDQUFBM3hCLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQWhCbzlCLGdCQUFnQjtJQUFBO0VBQUE7SUFBQTd2QyxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBK3ZDLGNBQUEsR0FBQXp6QixtRkFBQSxjQUFBQyxzRUFBQSxDQXVEdEIsU0FBQXNkLFNBQW9CMUcsTUFBZSxFQUFFaUQsTUFBYztRQUFBLElBQUE4RSxNQUFBO1FBQUEsSUFBQTVoQixHQUFBLEVBQUFxRCxRQUFBLEVBQUFTLElBQUEsRUFBQWdZLEtBQUEsRUFBQW1ZLFlBQUEsRUFBQTVCLE9BQUEsRUFBQXR0QixNQUFBLEVBQUEydUIsUUFBQSxFQUFBZ0QscUJBQUE7UUFBQSxPQUFBenpCLHNFQUFBLFVBQUF1ZCxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWhkLElBQUEsR0FBQWdkLFNBQUEsQ0FBQS9jLElBQUE7WUFBQTtjQUMzQzFELEdBQUcsR0FBRyxJQUFJLENBQUNtMEIsUUFBUSxDQUFDLENBQUN0YSxNQUFNLENBQUN2WixPQUFPLEVBQUUsUUFBUSxFQUFFdVosTUFBTSxDQUFDNXFCLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDMkgsUUFBUSxDQUFDLENBQUM7Y0FDdEZ5TSxRQUFRLEdBQUcsSUFBSTVkLGdFQUFXLENBQUNpQixLQUFLLENBQUNpTyxRQUFRLENBQUMsQ0FBQztjQUMzQ21QLElBQTJCLEdBQUc7Z0JBQ2xDd3ZCLFVBQVUsRUFBVkEsVUFBVTtnQkFDVjRCLFlBQVksRUFBRXJiLE1BQU0sQ0FBQ3FiLFlBQVk7Z0JBQ2pDcFksTUFBTSxFQUFOQSxNQUFNO2dCQUNOalcsT0FBTyxFQUFFO2NBQ1gsQ0FBQztjQUVEeEQsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFOVMsSUFBSSxDQUFDaU0sU0FBUyxDQUFDZ0gsSUFBSSxDQUFDLENBQUM7Y0FFM0NnWSxLQUFLLEdBQUc1MUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBczZCLFNBQUEsQ0FBQWhkLElBQUE7Y0FJbEI0dUIsT0FBc0IsR0FBRyxJQUFJO2NBQUE1UixTQUFBLENBQUEvYyxJQUFBO2NBQUEsT0FFWmIsT0FBTyxDQUFDMnZCLElBQUksQ0FBQyxDQUNoQy9zQyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDOE8sS0FBSyxDQUFDd0ssR0FBRyxFQUFFO2dCQUMzQjZELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVULFFBQVE7Z0JBQ2RoRyxLQUFLLEVBQUU7Y0FDVCxDQUFDLENBQUMsRUFDRixJQUFJd0YsT0FBTyxDQUFXLFVBQUFDLE9BQU87Z0JBQUEsT0FDM0J1dkIsT0FBTyxHQUFHNXNDLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUMsWUFBTTtrQkFDM0NrMkIsTUFBSSxDQUFDOXhCLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHFCQUFxQixFQUFFLElBQUlyRixLQUFLLDZCQUFBNUIsTUFBQSxDQUE2QjBXLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQ3hGOEMsT0FBTyxDQUFDO29CQUFDaUMsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFNmMsTUFBSSxDQUFDMlIsUUFBUSxDQUFDO2NBQUEsRUFBQyxDQUNyQixDQUFDLFdBQ1EsQ0FBQyxZQUFNO2dCQUNiLElBQUlsQixPQUFPLEVBQUU7a0JBQ1g1c0MsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ3lPLFlBQVksQ0FBQ2s5QixPQUFPLENBQUM7Z0JBQ3pDO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FoQko0QixZQUFZLEdBQUF4VCxTQUFBLENBQUF6YyxJQUFBO2NBQUF5YyxTQUFBLENBQUEvYyxJQUFBO2NBQUE7WUFBQTtjQUFBK2MsU0FBQSxDQUFBaGQsSUFBQTtjQUFBZ2QsU0FBQSxDQUFBMVosRUFBQSxHQUFBMFosU0FBQTtjQWtCWixJQUFJLENBQUMzd0IsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUFrd0IsU0FBQSxDQUFBMVosRUFBRyxDQUFDO2NBQUMsT0FBQTBaLFNBQUEsQ0FBQTFjLE1BQUEsV0FFMUM7Z0JBQUNnQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQTJCLEdBQUcsSUFBSSxDQUFDNHhCLHFDQUFxQyxDQUFDMUMsWUFBWSxDQUFDO2NBQUEsTUFFeEZsdkIsTUFBTSxLQUFLLElBQUk7Z0JBQUEwYixTQUFBLENBQUEvYyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBK2MsU0FBQSxDQUFBMWMsTUFBQSxXQUNWO2dCQUFDZ0IsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYMnVCLFFBQVEsR0FBR3h0QyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFzNkIsU0FBQSxDQUFBL2MsSUFBQTtjQUFBLE9BQ1MsSUFBSSxDQUFDa3pCLDBDQUEwQyxDQUFDM0MsWUFBWSxDQUFDO1lBQUE7Y0FBM0Z5QyxxQkFBcUIsR0FBQWpXLFNBQUEsQ0FBQXpjLElBQUE7Y0FFM0IsSUFBSSxDQUFDbFUsT0FBTyxDQUFDQyxJQUFJLENBQUMsNkNBQTZDLEVBQUUybUMscUJBQXFCLEVBQUVoRCxRQUFRLEdBQUc1WCxLQUFLLENBQUM7Y0FBQyxPQUFBMkUsU0FBQSxDQUFBMWMsTUFBQSxXQUVuRzJ5QixxQkFBcUI7WUFBQTtZQUFBO2NBQUEsT0FBQWpXLFNBQUEsQ0FBQXhjLElBQUE7VUFBQTtRQUFBLEdBQUFzYyxRQUFBO01BQUEsQ0FDN0I7TUFBQSxTQXJES21CLGFBQWFBLENBQUFtVixJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBTCxjQUFBLENBQUF0eUIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBYnlvQixhQUFhO0lBQUE7RUFBQTtJQUFBbDdCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFxd0MsdUJBQUEsR0FBQS96QixtRkFBQSxjQUFBQyxzRUFBQSxDQXVEbkIsU0FBQW1lLFNBQTZCdkgsTUFBZSxFQUFFaUQsTUFBYztRQUFBLElBQUFqekIsVUFBQTtRQUFBLElBQUE4WSxPQUFBLEVBQUEzQyxHQUFBLEVBQUFxRCxRQUFBLEVBQUFTLElBQUE7UUFBQSxPQUFBYixzRUFBQSxVQUFBb2UsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE3ZCxJQUFBLEdBQUE2ZCxTQUFBLENBQUE1ZCxJQUFBO1lBQUE7Y0FDMUQsSUFBSSxHQUFBN1osVUFBQSxHQUFDdEIsU0FBUyxjQUFBc0IsVUFBQSxlQUFUQSxVQUFBLENBQVdtdEMsVUFBVSxHQUFFO2dCQUNwQnIwQixPQUFPLEdBQUcsSUFBSSxDQUFDK2UsYUFBYSxDQUFDN0gsTUFBTSxFQUFFaUQsTUFBTSxDQUFDO2NBQ3BEO2NBRU05YyxHQUFHLEdBQUcsSUFBSSxDQUFDbTBCLFFBQVEsQ0FBQyxDQUFDdGEsTUFBTSxDQUFDdlosT0FBTyxFQUFFLFFBQVEsRUFBRXVaLE1BQU0sQ0FBQzVxQixRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQzJILFFBQVEsQ0FBQyxDQUFDO2NBQ3RGeU0sUUFBUSxHQUFHLElBQUk1ZCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDaU8sUUFBUSxDQUFDLENBQUM7Y0FDM0NtUCxJQUEyQixHQUFHO2dCQUNsQ3d2QixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Y0QixZQUFZLEVBQUVyYixNQUFNLENBQUNxYixZQUFZO2dCQUNqQ3BZLE1BQU0sRUFBTkEsTUFBTTtnQkFDTmpXLE9BQU8sRUFBRTtjQUNYLENBQUM7Y0FFRHhELFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRTlTLElBQUksQ0FBQ2lNLFNBQVMsQ0FBQ2dILElBQUksQ0FBQyxDQUFDO2NBRWpEdmIsU0FBUyxDQUFDeXVDLFVBQVUsQ0FBQ2gzQixHQUFHLEVBQUVxRCxRQUFRLENBQUM7WUFBQztZQUFBO2NBQUEsT0FBQWllLFNBQUEsQ0FBQXJkLElBQUE7VUFBQTtRQUFBLEdBQUFtZCxRQUFBO01BQUEsQ0FDckM7TUFBQSxTQWpCS3hGLHNCQUFzQkEsQ0FBQXFiLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFILHVCQUFBLENBQUE1eUIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBdEIyaUIsc0JBQXNCO0lBQUE7RUFBQTtJQUFBcDFCLEdBQUE7SUFBQUUsS0FBQSxFQW1CNUIsU0FBUXl0QyxRQUFRQSxDQUFDZ0QsSUFBYyxFQUFPO01BQ3BDLElBQU03bEMsR0FBRyxHQUFHLElBQUk3TCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDb0YsR0FBRyxDQUFDLElBQUksQ0FBQ3FtQyxJQUFJLENBQUM7TUFDaEQsSUFBTWlGLFdBQVcsR0FBRzlsQyxHQUFHLENBQUM0TyxRQUFRLENBQUNuWCxLQUFLLENBQUMsR0FBRyxDQUFDO01BRTNDcXVDLFdBQVcsQ0FBQ3ptQyxNQUFNLEdBQUd5bUMsV0FBVyxDQUFDem1DLE1BQU0sR0FBRyxDQUFDO01BRTNDVyxHQUFHLENBQUM0TyxRQUFRLEdBQUdrM0IsV0FBVyxDQUFDOXRDLE1BQU0sQ0FBQTZhLEtBQUEsQ0FBbEJpekIsV0FBVyxFQUFBdnlCLG9GQUFBLENBQVdzeUIsSUFBSSxFQUFDLENBQUMxOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUVwRCxPQUFPbkksR0FBRztJQUNaO0VBQUM7SUFBQTlLLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFpdEMsWUFBWUEsQ0FBQSxFQUFXO01BQzdCLElBQU1yaUMsR0FBRyxHQUFHLElBQUk3TCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDb0YsR0FBRyxDQUFDLElBQUksQ0FBQ3FtQyxJQUFJLENBQUM7TUFDaEQsSUFBTXp2QixVQUFVLEdBQUdoQiwrREFBYyxDQUFDZ0IsVUFBVTtNQUM1QyxJQUFNeE8sVUFBVSxHQUFHTixnRUFBVSxDQUFDdy9CLG1CQUFtQixDQUFDbC9CLFVBQVU7TUFFNUQ1QyxHQUFHLENBQUMraEMsWUFBWSxDQUFDdHpCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO01BQ3BDek8sR0FBRyxDQUFDK2hDLFlBQVksQ0FBQ3R6QixHQUFHLENBQUMsU0FBUyxFQUFFMkMsVUFBVSxDQUFDO01BQzNDcFIsR0FBRyxDQUFDK2hDLFlBQVksQ0FBQ3R6QixHQUFHLENBQUMsWUFBWSxFQUFFN0wsVUFBVSxDQUFDO01BQzlDNUMsR0FBRyxDQUFDK2hDLFlBQVksQ0FBQ3R6QixHQUFHLENBQUMsR0FBRyxLQUFBelcsTUFBQSxDQUFLcEQsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxDQUFFLENBQUM7TUFFMUMsT0FBT21MLEdBQUcsQ0FBQ3NGLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZCO0VBQUM7SUFBQXBRLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFrdUMsNEJBQTRCQSxDQUFDbHdCLFFBQWtCLEVBQWlCO01BQ3RFLElBQUksQ0FBQ0EsUUFBUSxFQUFFO1FBQ2IsT0FBTyxRQUFRO01BQ2pCO01BRUEsUUFBUUEsUUFBUSxDQUFDSyxNQUFNO1FBQ3JCLEtBQUssR0FBRztVQUNOLE9BQU8sSUFBSTtRQUNiLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QixLQUFLLEdBQUc7VUFDTixPQUFPLGdCQUFnQjtRQUN6QixLQUFLLEdBQUc7VUFDTixPQUFPLGFBQWE7UUFDdEIsS0FBSyxHQUFHO1VBQ04sT0FBTyw0QkFBNEI7UUFDckMsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8seUJBQXlCO1FBQ2xDLEtBQUssR0FBRztVQUNOLE9BQU8sZUFBZTtRQUN4QixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBdmUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUSt0Qyw4QkFBOEJBLENBQUMvdkIsUUFBa0IsRUFBbUI7TUFDMUUsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNLLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sZ0JBQWdCO1FBQ3pCLEtBQUssR0FBRztVQUNOLE9BQU8sYUFBYTtRQUN0QixLQUFLLEdBQUc7VUFDTixPQUFPLFNBQVM7UUFDbEIsS0FBSyxHQUFHO1VBQ04sT0FBTyx5QkFBeUI7UUFDbEMsS0FBSyxHQUFHO1VBQ04sT0FBTyxlQUFlO1FBQ3hCLEtBQUssR0FBRztVQUNOLE9BQU8sVUFBVTtRQUNuQixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkI7VUFDRSxPQUFPLFFBQVE7TUFDbkI7SUFDRjtFQUFDO0lBQUF2ZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFReXVDLHlDQUF5Q0EsQ0FBQ3p3QixRQUFrQixFQUE4QjtNQUNoRyxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ0ssTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8sVUFBVTtRQUNuQixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkI7VUFDRSxPQUFPLFFBQVE7TUFDbkI7SUFDRjtFQUFDO0lBQUF2ZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFROHVDLCtDQUErQ0EsQ0FBQzl3QixRQUFrQixFQUFvQztNQUM1RyxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ0ssTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8sVUFBVTtRQUNuQixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkI7VUFDRSxPQUFPLFFBQVE7TUFDbkI7SUFDRjtFQUFDO0lBQUF2ZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFReXZDLHFDQUFxQ0EsQ0FBQ3p4QixRQUFrQixFQUEwQjtNQUN4RixJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ0ssTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8sVUFBVTtRQUNuQixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkI7VUFDRSxPQUFPLFFBQVE7TUFDbkI7SUFDRjtFQUFDO0lBQUF2ZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRaXdDLHFDQUFxQ0EsQ0FBQ2p5QixRQUFrQixFQUF1QjtNQUNyRixJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ0ssTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8sVUFBVTtRQUNuQixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkI7VUFDRSxPQUFPLFFBQVE7TUFDbkI7SUFDRjtFQUFDO0lBQUF2ZSxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBMndDLHVDQUFBLEdBQUFyMEIsbUZBQUEsY0FBQUMsc0VBQUEsQ0FFRCxTQUFBb2YsU0FBcUQvaEIsT0FBZSxFQUFFb0UsUUFBa0I7UUFBQSxJQUFBOUwsSUFBQSxFQUFBczdCLGlCQUFBO1FBQUEsT0FBQWp4QixzRUFBQSxVQUFBdWYsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoZixJQUFBLEdBQUFnZixTQUFBLENBQUEvZSxJQUFBO1lBQUE7Y0FBQStlLFNBQUEsQ0FBQS9lLElBQUE7Y0FBQSxPQUNuRWdCLFFBQVEsQ0FBQzR5QixJQUFJLENBQUMsQ0FBQztZQUFBO2NBQTVCMStCLElBQUksR0FBQTZwQixTQUFBLENBQUF6ZSxJQUFBO2NBQ0prd0IsaUJBQWdELEdBQUc7Z0JBQ3ZEbnZCLE1BQU0sRUFBRW5NLElBQUksQ0FBQ21NLE1BQU07Z0JBQ25COFUsTUFBTSxFQUFFO2tCQUNOdlosT0FBTyxFQUFQQSxPQUFPO2tCQUNQclIsUUFBUSxFQUFFMkosSUFBSSxDQUFDM0osUUFBUTtrQkFDdkJpbUMsWUFBWSxFQUFFdDhCLElBQUksQ0FBQ3M4QjtnQkFDckIsQ0FBQztnQkFDRC9iLEdBQUcsRUFBRXZnQixJQUFJLENBQUN1Z0I7Y0FDWixDQUFDO2NBRUQsSUFBSXZnQixJQUFJLEVBQUU7Z0JBQ1IsSUFBSUEsSUFBSSxDQUFDMitCLGdCQUFnQixFQUFFO2tCQUN6QnJELGlCQUFpQixDQUFDcUQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQywwQ0FBMEMsQ0FBQzUrQixJQUFJLENBQUMyK0IsZ0JBQWdCLENBQUM7Z0JBQzdHO2dCQUVBLElBQUkzK0IsSUFBSSxDQUFDcThCLDRCQUE0QixJQUFJcjhCLElBQUksQ0FBQ3E4Qiw0QkFBNEIsQ0FBQ1gsa0JBQWtCLEVBQUU7a0JBQzdGSixpQkFBaUIsQ0FBQ2UsNEJBQTRCLEdBQUc7b0JBQUNYLGtCQUFrQixFQUFFMTdCLElBQUksQ0FBQ3E4Qiw0QkFBNEIsQ0FBQ1g7a0JBQWtCLENBQUM7Z0JBQzdIO2dCQUVBLElBQUkxN0IsSUFBSSxDQUFDNitCLCtCQUErQixJQUFJNytCLElBQUksQ0FBQzYrQiwrQkFBK0IsQ0FBQ25ELGtCQUFrQixFQUFFO2tCQUNuR0osaUJBQWlCLENBQUN1RCwrQkFBK0IsR0FBRztvQkFBQ25ELGtCQUFrQixFQUFFMTdCLElBQUksQ0FBQzYrQiwrQkFBK0IsQ0FBQ25EO2tCQUFrQixDQUFDO2dCQUNuSTtnQkFFQSxJQUFJMTdCLElBQUksQ0FBQzgrQiw4QkFBOEIsSUFBSTkrQixJQUFJLENBQUM4K0IsOEJBQThCLENBQUNwRCxrQkFBa0IsRUFBRTtrQkFDakdKLGlCQUFpQixDQUFDd0QsOEJBQThCLEdBQUc7b0JBQUNwRCxrQkFBa0IsRUFBRTE3QixJQUFJLENBQUM4K0IsOEJBQThCLENBQUNwRDtrQkFBa0IsQ0FBQztnQkFDakk7Y0FDRjtjQUFDLE9BQUE3UixTQUFBLENBQUExZSxNQUFBLFdBRU1td0IsaUJBQWlCO1lBQUE7WUFBQTtjQUFBLE9BQUF6UixTQUFBLENBQUF4ZSxJQUFBO1VBQUE7UUFBQSxHQUFBb2UsUUFBQTtNQUFBLENBQ3pCO01BQUEsU0EvQmFxUyxzQ0FBc0NBLENBQUFpRCxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBUCx1Q0FBQSxDQUFBbHpCLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQXRDeTdCLHNDQUFzQztJQUFBO0VBQUE7SUFBQWx1QyxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBbXhDLHFDQUFBLEdBQUE3MEIsbUZBQUEsY0FBQUMsc0VBQUEsQ0FpQ3BELFNBQUE2MEIsVUFBbUR4M0IsT0FBZSxFQUFFb0UsUUFBa0I7UUFBQSxJQUFBOUwsSUFBQSxFQUFBbS9CLGVBQUE7UUFBQSxPQUFBOTBCLHNFQUFBLFVBQUErMEIsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF4MEIsSUFBQSxHQUFBdzBCLFVBQUEsQ0FBQXYwQixJQUFBO1lBQUE7Y0FBQXUwQixVQUFBLENBQUF2MEIsSUFBQTtjQUFBLE9BQ2pFZ0IsUUFBUSxDQUFDNHlCLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUIxK0IsSUFBSSxHQUFBcS9CLFVBQUEsQ0FBQWowQixJQUFBO2NBQ0orekIsZUFBNEMsR0FBRztnQkFDbkRoekIsTUFBTSxFQUFFbk0sSUFBSSxDQUFDbU0sTUFBTTtnQkFDbkI4VSxNQUFNLEVBQUU7a0JBQ052WixPQUFPLEVBQVBBLE9BQU87a0JBQ1ByUixRQUFRLEVBQUUySixJQUFJLENBQUMzSixRQUFRO2tCQUN2QmltQyxZQUFZLEVBQUV0OEIsSUFBSSxDQUFDczhCO2dCQUNyQjtjQUNGLENBQUM7Y0FFRCxJQUFJdDhCLElBQUksRUFBRTtnQkFDUixJQUFJQSxJQUFJLENBQUMyK0IsZ0JBQWdCLEVBQUU7a0JBQ3pCUSxlQUFlLENBQUNSLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsMENBQTBDLENBQUM1K0IsSUFBSSxDQUFDMitCLGdCQUFnQixDQUFDO2dCQUMzRztnQkFFQSxJQUFJMytCLElBQUksQ0FBQ3E4Qiw0QkFBNEIsSUFBSXI4QixJQUFJLENBQUNxOEIsNEJBQTRCLENBQUNYLGtCQUFrQixFQUFFO2tCQUM3RnlELGVBQWUsQ0FBQzlDLDRCQUE0QixHQUFHO29CQUFDWCxrQkFBa0IsRUFBRTE3QixJQUFJLENBQUNxOEIsNEJBQTRCLENBQUNYO2tCQUFrQixDQUFDO2dCQUMzSDtnQkFFQSxJQUFJMTdCLElBQUksQ0FBQzYrQiwrQkFBK0IsSUFBSTcrQixJQUFJLENBQUM2K0IsK0JBQStCLENBQUNuRCxrQkFBa0IsRUFBRTtrQkFDbkd5RCxlQUFlLENBQUNOLCtCQUErQixHQUFHO29CQUFDbkQsa0JBQWtCLEVBQUUxN0IsSUFBSSxDQUFDNitCLCtCQUErQixDQUFDbkQ7a0JBQWtCLENBQUM7Z0JBQ2pJO2dCQUVBLElBQUkxN0IsSUFBSSxDQUFDOCtCLDhCQUE4QixJQUFJOStCLElBQUksQ0FBQzgrQiw4QkFBOEIsQ0FBQ3BELGtCQUFrQixFQUFFO2tCQUNqR3lELGVBQWUsQ0FBQ0wsOEJBQThCLEdBQUc7b0JBQUNwRCxrQkFBa0IsRUFBRTE3QixJQUFJLENBQUM4K0IsOEJBQThCLENBQUNwRDtrQkFBa0IsQ0FBQztnQkFDL0g7Y0FDRjtjQUFDLE9BQUEyRCxVQUFBLENBQUFsMEIsTUFBQSxXQUVNZzBCLGVBQWU7WUFBQTtZQUFBO2NBQUEsT0FBQUUsVUFBQSxDQUFBaDBCLElBQUE7VUFBQTtRQUFBLEdBQUE2ekIsU0FBQTtNQUFBLENBQ3ZCO01BQUEsU0E5QmFqRCxvQ0FBb0NBLENBQUFxRCxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBTixxQ0FBQSxDQUFBMXpCLEtBQUEsT0FBQWxMLFNBQUE7TUFBQTtNQUFBLE9BQXBDNDdCLG9DQUFvQztJQUFBO0VBQUE7SUFBQXJ1QyxHQUFBO0lBQUFFLEtBQUEsRUFnQ2xELFNBQVE4d0MsMENBQTBDQSxDQUFDdHhCLGFBQStCLEVBQW9CO01BQ3BHLElBQU1xeEIsZ0JBQWtDLEdBQUc7UUFBQ3J2QixVQUFVLEVBQUU7TUFBRSxDQUFDO01BRTNELElBQUloQyxhQUFhLENBQUNreUIsWUFBWSxFQUFFO1FBQzlCYixnQkFBZ0IsQ0FBQ2EsWUFBWSxHQUFHbHlCLGFBQWEsQ0FBQ2t5QixZQUFZO01BQzVEO01BRUEsSUFBSSxPQUFPbHlCLGFBQWEsQ0FBQ215QixvQkFBb0IsS0FBSyxRQUFRLEVBQUU7UUFDMURkLGdCQUFnQixDQUFDYyxvQkFBb0IsR0FBR255QixhQUFhLENBQUNteUIsb0JBQW9CO01BQzVFO01BRUEsSUFBSW55QixhQUFhLENBQUNnQyxVQUFVLEVBQUU7UUFDNUIsSUFBTUEsVUFBMEIsR0FBRyxFQUFFO1FBRXJDLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHakMsYUFBYSxDQUFDZ0MsVUFBVSxDQUFDdlgsTUFBTSxFQUFFd1gsQ0FBQyxFQUFFLEVBQUU7VUFDeERELFVBQVUsQ0FBQ3ZZLElBQUksQ0FBQztZQUNkeVksSUFBSSxFQUFFbEMsYUFBYSxDQUFDZ0MsVUFBVSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0MsSUFBSTtZQUN0Q0MsUUFBUSxFQUFFbkMsYUFBYSxDQUFDZ0MsVUFBVSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0UsUUFBUTtZQUM5Q0MsVUFBVSxFQUFFcEMsYUFBYSxDQUFDZ0MsVUFBVSxDQUFDQyxDQUFDLENBQUMsQ0FBQ0c7VUFDMUMsQ0FBQyxDQUFDO1FBQ0o7UUFFQWl2QixnQkFBZ0IsQ0FBQ3J2QixVQUFVLEdBQUdBLFVBQVU7TUFDMUM7TUFFQSxJQUFJaEMsYUFBYSxDQUFDb3lCLGtCQUFrQixFQUFFO1FBQ3BDZixnQkFBZ0IsQ0FBQ2Usa0JBQWtCLEdBQUdweUIsYUFBYSxDQUFDb3lCLGtCQUFrQjtNQUN4RTtNQUVBLElBQUlweUIsYUFBYSxDQUFDcXlCLGFBQWEsRUFBRTtRQUMvQmhCLGdCQUFnQixDQUFDZ0IsYUFBYSxHQUFHcnlCLGFBQWEsQ0FBQ3F5QixhQUFhO01BQzlEO01BRUEsT0FBT2hCLGdCQUFnQjtJQUN6QjtFQUFDO0lBQUEvd0MsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTh4QyxrREFBQSxHQUFBeDFCLG1GQUFBLGNBQUFDLHNFQUFBLENBQ0QsU0FBQXcxQixVQUFnRS96QixRQUFrQjtRQUFBLElBQUE5TCxJQUFBLEVBQUFxOEIsNEJBQUE7UUFBQSxPQUFBaHlCLHNFQUFBLFVBQUF5MUIsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUFsMUIsSUFBQSxHQUFBazFCLFVBQUEsQ0FBQWoxQixJQUFBO1lBQUE7Y0FBQWkxQixVQUFBLENBQUFqMUIsSUFBQTtjQUFBLE9BQzdEZ0IsUUFBUSxDQUFDNHlCLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUIxK0IsSUFBSSxHQUFBKy9CLFVBQUEsQ0FBQTMwQixJQUFBO2NBQ0ppeEIsNEJBQStELEdBQUc7Z0JBQUNsd0IsTUFBTSxFQUFFbk0sSUFBSSxDQUFDbU07Y0FBTSxDQUFDO2NBRTdGLElBQUluTSxJQUFJLElBQUlBLElBQUksQ0FBQzA3QixrQkFBa0IsRUFBRTtnQkFDbkNXLDRCQUE0QixDQUFDWCxrQkFBa0IsR0FBRzE3QixJQUFJLENBQUMwN0Isa0JBQWtCO2NBQzNFO2NBQUMsT0FBQXFFLFVBQUEsQ0FBQTUwQixNQUFBLFdBRU1reEIsNEJBQTRCO1lBQUE7WUFBQTtjQUFBLE9BQUEwRCxVQUFBLENBQUExMEIsSUFBQTtVQUFBO1FBQUEsR0FBQXcwQixTQUFBO01BQUEsQ0FDcEM7TUFBQSxTQVRhckQsaURBQWlEQSxDQUFBd0QsSUFBQTtRQUFBLE9BQUFKLGtEQUFBLENBQUFyMEIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBakRtOEIsaURBQWlEO0lBQUE7RUFBQTtJQUFBNXVDLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFteUMsOENBQUEsR0FBQTcxQixtRkFBQSxjQUFBQyxzRUFBQSxDQVcvRCxTQUFBNjFCLFVBQTREcDBCLFFBQWtCO1FBQUEsSUFBQTlMLElBQUEsRUFBQXE5Qix3QkFBQTtRQUFBLE9BQUFoekIsc0VBQUEsVUFBQTgxQixXQUFBQyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQXYxQixJQUFBLEdBQUF1MUIsVUFBQSxDQUFBdDFCLElBQUE7WUFBQTtjQUFBczFCLFVBQUEsQ0FBQXQxQixJQUFBO2NBQUEsT0FDekRnQixRQUFRLENBQUM0eUIsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1QjErQixJQUFJLEdBQUFvZ0MsVUFBQSxDQUFBaDFCLElBQUE7Y0FDSml5Qix3QkFBdUQsR0FBRztnQkFDOURseEIsTUFBTSxFQUFFbk0sSUFBSSxDQUFDbU0sTUFBTTtnQkFDbkI4QixPQUFPLEVBQUU7Y0FDWCxDQUFDO2NBRUQsSUFBSWpPLElBQUksRUFBRTtnQkFDUixJQUFJQSxJQUFJLENBQUNpTyxPQUFPLEVBQUU7a0JBQ2hCb3ZCLHdCQUF3QixDQUFDcHZCLE9BQU8sR0FBR2pPLElBQUksQ0FBQ2lPLE9BQU87Z0JBQ2pEO2NBQ0Y7Y0FBQyxPQUFBbXlCLFVBQUEsQ0FBQWoxQixNQUFBLFdBRU1reUIsd0JBQXdCO1lBQUE7WUFBQTtjQUFBLE9BQUErQyxVQUFBLENBQUEvMEIsSUFBQTtVQUFBO1FBQUEsR0FBQTYwQixTQUFBO01BQUEsQ0FDaEM7TUFBQSxTQWRhMUMsNkNBQTZDQSxDQUFBNkMsSUFBQTtRQUFBLE9BQUFKLDhDQUFBLENBQUExMEIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBN0NtOUIsNkNBQTZDO0lBQUE7RUFBQTtJQUFBNXZDLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUF3eUMsMkNBQUEsR0FBQWwyQixtRkFBQSxjQUFBQyxzRUFBQSxDQWdCM0QsU0FBQWsyQixVQUF5RHowQixRQUFrQjtRQUFBLElBQUE5TCxJQUFBLEVBQUE4b0IsYUFBQTtRQUFBLE9BQUF6ZSxzRUFBQSxVQUFBbTJCLFdBQUFDLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBNTFCLElBQUEsR0FBQTQxQixVQUFBLENBQUEzMUIsSUFBQTtZQUFBO2NBQUEyMUIsVUFBQSxDQUFBMzFCLElBQUE7Y0FBQSxPQUN0RGdCLFFBQVEsQ0FBQzR5QixJQUFJLENBQUMsQ0FBQztZQUFBO2NBQTVCMStCLElBQUksR0FBQXlnQyxVQUFBLENBQUFyMUIsSUFBQTtjQUNKMGQsYUFBeUMsR0FBRztnQkFBQzNjLE1BQU0sRUFBRW5NLElBQUksQ0FBQ21NO2NBQU0sQ0FBQztjQUFBLE9BQUFzMEIsVUFBQSxDQUFBdDFCLE1BQUEsV0FFaEUyZCxhQUFhO1lBQUE7WUFBQTtjQUFBLE9BQUEyWCxVQUFBLENBQUFwMUIsSUFBQTtVQUFBO1FBQUEsR0FBQWsxQixTQUFBO01BQUEsQ0FDckI7TUFBQSxTQUxhdkMsMENBQTBDQSxDQUFBMEMsSUFBQTtRQUFBLE9BQUFKLDJDQUFBLENBQUEvMEIsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBMUMyOUIsMENBQTBDO0lBQUE7RUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoMkIxRDtBQUNBO0FBQ0E7O0FBRStDO0FBQ1E7QUFLNEI7QUFDc0M7QUFDMUM7QUFBQSxJQVkxRDJDLGlDQUFpQztFQXFCcEQsU0FBQUEsa0NBQW1CQyxjQUE4QixFQUFFQyw2QkFBNEQsRUFBRTtJQUFBLElBQUExeUMsS0FBQTtJQUFBZixpRkFBQSxPQUFBdXpDLGlDQUFBO0lBcEJyRDtJQUFBdHpDLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBLDRCQUlJeW1DLG9GQUFpQixDQUFDQywrQkFBK0IsQ0FBQyxDQUFDO0lBQUExbUMsaUZBQUEsc0NBQzFDLElBQUk2bkMsR0FBRyxDQUFDLENBQUM7SUFDbEY7SUFDQTtJQUNBO0lBQUE3bkMsaUZBQUEsd0NBQzZFO01BQzNFZ2tDLHVCQUF1QixFQUFFLEtBQUs7TUFDOUJHLG9CQUFvQixFQUFFO0lBQ3hCLENBQUM7SUFBQW5rQyxpRkFBQSwrQkFDNEQsSUFBSTJqQyw4RkFBbUIsQ0FBQyxDQUFDO0lBQUEzakMsaUZBQUEsbUNBQzFCLElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUFBTSxpRkFBQSxnQ0FDa0IsU0FBUztJQUFBQSxpRkFBQSxxQ0FDdkQsSUFBSTtJQUFBQSxpRkFBQSx1QkFDUixJQUFJTiw0REFBYyxDQUFDLENBQUM7SUFBQU0saUZBQUEsb0JBQ3ZDLEtBQUs7SUFHaEMsSUFBSSxDQUFDc3hCLGVBQWUsR0FBR2lpQixjQUFjO0lBQ3JDLElBQUksQ0FBQ3BmLDhCQUE4QixHQUFHcWYsNkJBQTZCO0lBRW5FLElBQUksQ0FBQzN5QyxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUNzeUMsaUJBQWlCLENBQUM7SUFDN0MsSUFBSSxDQUFDNXlDLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDO01BQUEsT0FBTXFCLEtBQUksQ0FBQzR5QywyQkFBMkIsQ0FBQ25MLEtBQUssQ0FBQyxDQUFDO0lBQUEsRUFBQyxDQUFDO0lBQ3JGLElBQUksQ0FBQzFuQyxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUN3eUMsd0JBQXdCLENBQUM7SUFFcEQsSUFBSSxJQUFJLENBQUNyaUIsZUFBZSxDQUFDWCxZQUFZLENBQUNsd0IsS0FBSyxFQUFFO01BQzNDLElBQUksQ0FBQ216Qyx3QkFBd0IsQ0FBQyxJQUFJLENBQUN0aUIsZUFBZSxDQUFDWCxZQUFZLENBQUNsd0IsS0FBSyxDQUFDO0lBQ3hFO0lBRUEsSUFBSSxDQUFDSSxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUNtd0IsZUFBZSxDQUFDWCxZQUFZLENBQUMxZ0IsU0FBUyxDQUFDLFVBQUEwZ0IsWUFBWSxFQUFJO01BQ2hGN3ZCLEtBQUksQ0FBQzZ5Qyx3QkFBd0IsQ0FBQy95QyxPQUFPLENBQUMsQ0FBQztNQUV2QyxJQUFJK3ZCLFlBQVksRUFBRTtRQUNoQjd2QixLQUFJLENBQUM4eUMsd0JBQXdCLENBQUNqakIsWUFBWSxDQUFDO01BQzdDO0lBQ0YsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksQ0FBQ3dELDhCQUE4QixDQUFDMkgscUJBQXFCLENBQUNyN0IsS0FBSyxFQUFFO01BQ25FLElBQUksQ0FBQ0ksWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDc3lDLGlCQUFpQixDQUFDN00sU0FBUyxDQUFDN0gseUJBQXlCLENBQUNZLDJGQUFjLENBQUNrVSxhQUFhLEVBQUUsSUFBSSxDQUFDQyx3QkFBd0IsQ0FBQ3R1QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzSjtFQUNGO0VBQUMsT0FBQWxGLDhFQUFBLENBQUFnekMsaUNBQUE7SUFBQS95QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPc3pDLFlBQVlBLENBQUMvcUMsUUFBZ0IsRUFBRWdyQyxHQUFXLEVBQUV2TSxPQUFlLEVBQUV3TSxLQUEyQixFQUFRO01BQ3JHLElBQUksSUFBSSxDQUFDM2pDLFNBQVMsRUFBRTtRQUNsQjtNQUNGO01BRUEsSUFBTTRqQyxXQUFXLEdBQUc7UUFDbEJGLEdBQUcsRUFBSEEsR0FBRztRQUNIdk0sT0FBTyxFQUFQQSxPQUFPO1FBQ1AwTSxnQkFBZ0IsRUFBRSxJQUFJbDBDLElBQUksQ0FBQztNQUM3QixDQUFDO01BRUQsSUFBSSxDQUFDbTBDLHNDQUFzQyxDQUFDLENBQUM7TUFFN0MsSUFBTUMsWUFBWSxHQUFHSixLQUFLLENBQUMxM0IsU0FBUyxDQUFDNUwsUUFBUSxDQUFDLEVBQUUsQ0FBQztNQUVqRCxJQUFJLElBQUksQ0FBQytpQywyQkFBMkIsQ0FBQ2xLLEdBQUcsQ0FBQzZLLFlBQVksQ0FBQyxFQUFFO1FBQ3REO01BQUE7TUFHRixJQUFJLENBQUNYLDJCQUEyQixDQUFDNTVCLEdBQUcsQ0FBQ3U2QixZQUFZLEVBQUVILFdBQVcsQ0FBQzs7TUFFL0Q7TUFDQTtNQUNBO01BQ0EsSUFBSSxDQUFDVCxpQkFBaUIsQ0FBQ3RNLE1BQU0sQ0FBQztRQUM1Qi9ILE9BQU8sRUFBRTtVQUNQcDJCLFFBQVEsRUFBUkEsUUFBUTtVQUNSeStCLE9BQU8sRUFBUEEsT0FBTztVQUNQeUIsU0FBUyxFQUFFbUw7UUFDYixDQUFDO1FBQ0QxaEMsSUFBSSxFQUFFLElBQUlvd0IsVUFBVSxDQUFDa1IsS0FBSyxDQUFDdGhDLElBQUk7TUFDakMsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBcFMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT0csT0FBT0EsQ0FBQSxFQUFTO01BQ3JCLElBQUksQ0FBQzBQLFNBQVMsR0FBRyxJQUFJO01BQ3JCLElBQUksQ0FBQ3pQLFlBQVksQ0FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDN0I7RUFBQztJQUFBTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRcXpDLHdCQUF3QkEsQ0FBQWh0QyxJQUFBLEVBQThHO01BQUEsSUFBQXd0QyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxxQkFBQTtNQUFBLElBQUFDLFlBQUEsR0FBQTd0QyxJQUFBLENBQTVHczRCLE9BQU87UUFBY2lWLFlBQVksR0FBQU0sWUFBQSxDQUF2QnpMLFNBQVM7UUFBZ0J6QixPQUFPLEdBQUFrTixZQUFBLENBQVBsTixPQUFPO1FBQVM5RyxVQUFVLEdBQUE3NUIsSUFBQSxDQUFoQjZMLElBQUk7TUFDakYsSUFBSSxJQUFJLENBQUNyQyxTQUFTLEVBQUU7UUFDbEI7TUFDRjtNQUVBLElBQU13ekIsYUFBYSxHQUFHLElBQUksQ0FBQzhRLG9CQUFvQixDQUFDL3BDLEtBQUssQ0FBQzgxQixVQUFVLENBQUNodUIsSUFBSSxFQUFFLElBQUksQ0FBQ2tpQyw2QkFBNkIsQ0FBQztNQUMxRyxJQUFNclEsY0FBYyxJQUFBOFAscUJBQUEsR0FBR3hRLGFBQWEsQ0FBQ0MsU0FBUyxjQUFBdVEscUJBQUEsd0JBQUFDLHNCQUFBLEdBQXZCRCxxQkFBQSxDQUF5QmhRLGVBQWUsQ0FBQ2hkLElBQUksQ0FBQyxVQUFBcEYsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ3FpQixrQkFBa0IsS0FBSyxJQUFJO01BQUEsRUFBQyxjQUFBZ1Esc0JBQUEsdUJBQWpGQSxzQkFBQSxDQUFtRi9QLGNBQWM7TUFFeEgsSUFBSSxDQUFDQSxjQUFjLEVBQUU7UUFDbkI7O1FBRUE7TUFDRjtNQUVBLElBQU0wUCxXQUFXLEdBQUcsSUFBSSxDQUFDUiwyQkFBMkIsQ0FBQ2x6QyxHQUFHLENBQUM2ekMsWUFBWSxDQUFDO01BRXRFLElBQUksQ0FBQ0gsV0FBVyxFQUFFO1FBQ2hCO1FBQ0E7O1FBRUE7TUFDRjtNQUVBLElBQU0xZiw2QkFBNEQsR0FBRztRQUNuRXdmLEdBQUcsRUFBRUUsV0FBVyxDQUFDRixHQUFHO1FBQ3BCdk0sT0FBTyxFQUFQQSxPQUFPO1FBQ1BwckIsSUFBSSxFQUFFLE9BQU87UUFDYnlJLEtBQUssRUFBRSxNQUFNO1FBQ2Jnd0IsUUFBUSxFQUFFO1VBQ1I1UCxLQUFLLEdBQUFzUCxxQkFBQSxHQUFFaFEsY0FBYyxDQUFDVSxLQUFLLGNBQUFzUCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUk7VUFDbkN2UCxPQUFPLEdBQUF3UCxxQkFBQSxHQUFFalEsY0FBYyxDQUFDUyxPQUFPLGNBQUF3UCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUk7VUFDdkN6UCxPQUFPLEdBQUEwUCxxQkFBQSxHQUFFbFEsY0FBYyxDQUFDUSxPQUFPLGNBQUEwUCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUk7VUFDdkNLLE1BQU0sRUFBRXZRLGNBQWMsQ0FBQ08sT0FBTztVQUM5QmlRLFdBQVcsRUFBRXhRLGNBQWMsQ0FBQ0csWUFBWSxHQUFHO1FBQzdDLENBQUM7UUFDRHNRLGVBQWUsRUFBRSxJQUFJO1FBQ3JCQyxlQUFlLEVBQUUsSUFBSTtRQUNyQkMsZUFBZSxFQUFFLElBQUk7UUFDckJDLGtCQUFrQixFQUFFLElBQUk7UUFDeEJqQixnQkFBZ0IsRUFBRSxJQUFJbDBDLElBQUksQ0FBQ2kwQyxXQUFXLENBQUNDLGdCQUFnQixDQUFDO1FBQ3hEa0IsYUFBYSxFQUFFLElBQUksQ0FBQ0M7TUFDdEIsQ0FBQztNQUVEcEIsV0FBVyxDQUFDMWYsNkJBQTZCLEdBQUdBLDZCQUE2QjtNQUV6RSxJQUFJLENBQUNMLDhCQUE4QixDQUFDSyw2QkFBNkIsQ0FBQy96QixLQUFLLEdBQUcrekIsNkJBQTZCO0lBQ3pHO0VBQUM7SUFBQWowQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRODBDLGtCQUFrQkEsQ0FBQ3IxQyxHQUF3QixFQUFFczFDLFFBQW9DLEVBQVE7TUFDL0YsSUFBSSxJQUFJLENBQUNsbEMsU0FBUyxFQUFFO1FBQ2xCO01BQ0Y7O01BRUE7TUFDQSxJQUFJLENBQUNtbEMscUJBQXFCLENBQUMsQ0FBQztNQUU1QixJQUFNcEIsWUFBWSxHQUFHbUIsUUFBUSxDQUFDbkIsWUFBWTtNQUUxQyxJQUFJLENBQUNBLFlBQVksRUFBRTtRQUNqQjtRQUNBOztRQUVBO01BQ0Y7TUFFQSxJQUFNcUIsa0JBQTRCLEdBQUcsRUFBRTtNQUFDLElBQUE3TCxTQUFBLEdBQUFDLDBCQUFBLENBRUQsSUFBSSxDQUFDNEosMkJBQTJCO1FBQUEzSixLQUFBO01BQUE7UUFBdkUsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUEsR0FBeUU7VUFBQSxJQUFBeUwsV0FBQSxHQUFBQyxnRkFBQSxDQUFBN0wsS0FBQSxDQUFBdHBDLEtBQUE7WUFBN0Q4YixVQUFTLEdBQUFvNUIsV0FBQTtZQUFFekIsV0FBVyxHQUFBeUIsV0FBQTtVQUNoQyxJQUFJcnlDLFFBQVEsQ0FBQ2laLFVBQVMsRUFBRSxFQUFFLENBQUMsR0FBRzgzQixZQUFZLEVBQUU7WUFDMUM7VUFDRjtVQUVBLElBQUksSUFBSSxDQUFDaUIscUJBQXFCLEtBQUssU0FBUyxFQUFFO1lBQzVDLElBQUksQ0FBQ25oQiw4QkFBOEIsQ0FBQ08sOEJBQThCLENBQUNqMEIsS0FBSyxHQUFBbzFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNuRTNCLFdBQVcsQ0FBQzFmLDZCQUE2QjtjQUM1Q3NoQixlQUFlLEVBQUUsSUFBSTcxQyxJQUFJLENBQUM4MUMsV0FBVyxDQUFDQyxVQUFVLEdBQUc5MUMsR0FBRyxDQUFDO2NBQ3ZEbTFDLGFBQWEsRUFBRTtZQUFTLEVBQ3pCO1VBQ0g7VUFFQUssa0JBQWtCLENBQUNoc0MsSUFBSSxDQUFDNlMsVUFBUyxDQUFDO1FBQ3BDO01BQUMsU0FBQTR0QixHQUFBO1FBQUFOLFNBQUEsQ0FBQS8rQixDQUFBLENBQUFxL0IsR0FBQTtNQUFBO1FBQUFOLFNBQUEsQ0FBQU8sQ0FBQTtNQUFBO01BRUQsU0FBQTZMLEVBQUEsTUFBQUMsbUJBQUEsR0FBd0JSLGtCQUFrQixFQUFBTyxFQUFBLEdBQUFDLG1CQUFBLENBQUF4ckMsTUFBQSxFQUFBdXJDLEVBQUEsSUFBRTtRQUF2QyxJQUFNMTVCLFNBQVMsR0FBQTI1QixtQkFBQSxDQUFBRCxFQUFBO1FBQ2xCLElBQUksQ0FBQ3ZDLDJCQUEyQixVQUFPLENBQUNuM0IsU0FBUyxDQUFDO01BQ3BEO0lBQ0Y7RUFBQztJQUFBaGMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJ6QyxzQ0FBc0NBLENBQUEsRUFBUztNQUNyRCxJQUFNK0IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDekMsMkJBQTJCLENBQUMwQyxJQUFJLElBQUk5QyxpQ0FBaUMsQ0FBQytDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztNQUVqSSxJQUFJRixnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDekI7TUFDRjtNQUVBLElBQU1HLFFBQVEsR0FBRyxJQUFJLENBQUM1QywyQkFBMkIsQ0FBQzZDLElBQUksQ0FBQyxDQUFDO01BRXhELEtBQUssSUFBSXIwQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdpMEIsZ0JBQWdCLEVBQUVqMEIsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBTXMwQixXQUFXLEdBQUdGLFFBQVEsQ0FBQzc0QixJQUFJLENBQUMsQ0FBQyxDQUFDaGQsS0FBSztRQUV6QyxJQUFJLENBQUNpekMsMkJBQTJCLFVBQU8sQ0FBQzhDLFdBQVcsQ0FBQztNQUN0RDtJQUNGO0VBQUM7SUFBQWoyQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRbXpDLHdCQUF3QkEsQ0FBQ2pqQixZQUE4QixFQUFRO01BQUEsSUFBQW5hLE1BQUE7TUFDckUsSUFBTWlnQyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBQTtRQUFBLE9BQVNqZ0MsTUFBSSxDQUFDOCtCLHFCQUFxQixHQUFHLFNBQVM7TUFBQTtNQUU5RDNrQixZQUFZLENBQUMxb0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFd3VDLFNBQVMsQ0FBQztNQUNuRCxJQUFJLENBQUM5Qyx3QkFBd0IsQ0FBQ3h5QyxHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUM7UUFBQSxPQUFNa3hCLFlBQVksQ0FBQ3hvQixtQkFBbUIsQ0FBQyxTQUFTLEVBQUVzdUMsU0FBUyxDQUFDO01BQUEsRUFBQyxDQUFDO01BRS9HLElBQU1DLE9BQU8sR0FBRyxTQUFWQSxPQUFPQSxDQUFBO1FBQUEsT0FBU2xnQyxNQUFJLENBQUM4K0IscUJBQXFCLEdBQUcsUUFBUTtNQUFBO01BRTNEM2tCLFlBQVksQ0FBQzFvQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUV5dUMsT0FBTyxDQUFDO01BQy9DLElBQUksQ0FBQy9DLHdCQUF3QixDQUFDeHlDLEdBQUcsQ0FBQyxJQUFJMUIsd0RBQVUsQ0FBQztRQUFBLE9BQU1reEIsWUFBWSxDQUFDeG9CLG1CQUFtQixDQUFDLE9BQU8sRUFBRXV1QyxPQUFPLENBQUM7TUFBQSxFQUFDLENBQUM7TUFFM0csSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQUE7UUFBQSxPQUFTbmdDLE1BQUksQ0FBQzgrQixxQkFBcUIsR0FBRyxTQUFTO01BQUE7TUFFOUQza0IsWUFBWSxDQUFDMW9CLGdCQUFnQixDQUFDLFNBQVMsRUFBRTB1QyxTQUFTLENBQUM7TUFDbkQsSUFBSSxDQUFDaEQsd0JBQXdCLENBQUN4eUMsR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDO1FBQUEsT0FBTWt4QixZQUFZLENBQUN4b0IsbUJBQW1CLENBQUMsU0FBUyxFQUFFd3VDLFNBQVMsQ0FBQztNQUFBLEVBQUMsQ0FBQztNQUUvRyxJQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBQTtRQUFBLE9BQVNwZ0MsTUFBSSxDQUFDOCtCLHFCQUFxQixHQUFHLFNBQVM7TUFBQTtNQUU5RDNrQixZQUFZLENBQUMxb0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFMnVDLFNBQVMsQ0FBQztNQUNuRCxJQUFJLENBQUNqRCx3QkFBd0IsQ0FBQ3h5QyxHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUM7UUFBQSxPQUFNa3hCLFlBQVksQ0FBQ3hvQixtQkFBbUIsQ0FBQyxTQUFTLEVBQUV5dUMsU0FBUyxDQUFDO01BQUEsRUFBQyxDQUFDO01BRS9HLElBQU1DLE9BQU8sR0FBRyxTQUFWQSxPQUFPQSxDQUFBO1FBQUEsT0FBU3JnQyxNQUFJLENBQUM4K0IscUJBQXFCLEdBQUcsT0FBTztNQUFBO01BRTFEM2tCLFlBQVksQ0FBQzFvQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU0dUMsT0FBTyxDQUFDO01BQy9DLElBQUksQ0FBQ2xELHdCQUF3QixDQUFDeHlDLEdBQUcsQ0FBQyxJQUFJMUIsd0RBQVUsQ0FBQztRQUFBLE9BQU1reEIsWUFBWSxDQUFDeG9CLG1CQUFtQixDQUFDLE9BQU8sRUFBRTB1QyxPQUFPLENBQUM7TUFBQSxFQUFDLENBQUM7TUFFM0csSUFBTUMsT0FBTyxHQUFHLFNBQVZBLE9BQU9BLENBQUE7UUFBQSxPQUFTdGdDLE1BQUksQ0FBQzgrQixxQkFBcUIsR0FBRyxPQUFPO01BQUE7TUFFMUQza0IsWUFBWSxDQUFDMW9CLGdCQUFnQixDQUFDLE9BQU8sRUFBRTZ1QyxPQUFPLENBQUM7TUFDL0MsSUFBSSxDQUFDbkQsd0JBQXdCLENBQUN4eUMsR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDO1FBQUEsT0FBTWt4QixZQUFZLENBQUN4b0IsbUJBQW1CLENBQUMsT0FBTyxFQUFFMnVDLE9BQU8sQ0FBQztNQUFBLEVBQUMsQ0FBQztNQUUzRyxJQUFJLENBQUNyQixxQkFBcUIsQ0FBQyxDQUFDO01BQzVCLElBQUksQ0FBQzlCLHdCQUF3QixDQUFDeHlDLEdBQUcsQ0FBQyxJQUFJMUIsd0RBQVUsQ0FBQyxZQUFNO1FBQ3JELElBQUkrVyxNQUFJLENBQUN1Z0MsMEJBQTBCLEVBQUU7VUFBQSxJQUFBQyxxQkFBQTtVQUNuQyxDQUFBQSxxQkFBQSxHQUFBeGdDLE1BQUksQ0FBQzhhLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDbHdCLEtBQUssY0FBQXUyQyxxQkFBQSx1QkFBdkNBLHFCQUFBLENBQXlDQyx3QkFBd0IsQ0FBQ3pnQyxNQUFJLENBQUN1Z0MsMEJBQTBCLENBQUM7UUFDcEc7TUFDRixDQUFDLENBQUMsQ0FBQztJQUNMO0VBQUM7SUFBQXgyQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRZzFDLHFCQUFxQkEsQ0FBQSxFQUFTO01BQUEsSUFBQXlCLHFCQUFBO01BQ3BDLElBQUksR0FBQUEscUJBQUEsR0FBQyxJQUFJLENBQUM1bEIsZUFBZSxDQUFDWCxZQUFZLENBQUNsd0IsS0FBSyxjQUFBeTJDLHFCQUFBLGVBQXZDQSxxQkFBQSxDQUF5QzNwQyx5QkFBeUIsR0FBRTtRQUN2RTtNQUNGO01BRUEsSUFBSSxDQUFDd3BDLDBCQUEwQixHQUFHLElBQUksQ0FBQ3psQixlQUFlLENBQUNYLFlBQVksQ0FBQ2x3QixLQUFLLENBQUM4TSx5QkFBeUIsQ0FBQyxJQUFJLENBQUNnb0Msa0JBQWtCLENBQUMvdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pJO0VBQUM7QUFBQTtBQUFBeEYsaUZBQUEsQ0ExT2tCc3pDLGlDQUFpQyw4QkFDRCxFQUFFLEdBQUcsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6QjVEO0FBQ0E7QUFDQTs7QUFFd0Q7QUFDVDtBQUNRO0FBQ007QUFFVztBQUM1QjtBQUNuQjtBQUVtQjtBQUM0QjtBQUkvQjtBQUN5QjtBQUVuQjtBQUNxQjtBQUNoQjtBQUVHO0FBSzBDO0FBQzdCO0FBR3BFLElBQU04RCxnQ0FBZ0MsR0FBRyxHQUFHO0FBQzVDLElBQU1DLHlCQUF5QixHQUFHLEtBQUs7QUFBQyxJQUVuQkMsY0FBYztFQVNqQyxTQUFBQSxlQUFZL0QsY0FBOEIsRUFBRWdFLHFCQUE0QyxFQUFFQyxzQkFBOEMsRUFBRWhFLDZCQUE0RCxFQUFFN1osbUJBQXdDLEVBQUU7SUFBQTU1QixpRkFBQSxPQUFBdTNDLGNBQUE7SUFBQXQzQyxpRkFBQSxrQkFSOU13SSw4REFBYSxDQUFDRyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7SUFBQTNJLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBO0lBUzNFLElBQUksQ0FBQ3N4QixlQUFlLEdBQUdpaUIsY0FBYztJQUNyQyxJQUFJLENBQUNoaUIsc0JBQXNCLEdBQUdnbUIscUJBQXFCO0lBQ25ELElBQUksQ0FBQy9sQix1QkFBdUIsR0FBR2dtQixzQkFBc0I7SUFDckQsSUFBSSxDQUFDcmpCLDhCQUE4QixHQUFHcWYsNkJBQTZCO0lBQ25FLElBQUksQ0FBQ3RZLG9CQUFvQixHQUFHdkIsbUJBQW1CO0lBQy9DLElBQUksQ0FBQzk0QixZQUFZLEdBQUcsSUFBSW5CLDREQUFjLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUM0eEIsZUFBZSxDQUFDZ0YsV0FBVyxDQUFDbjFCLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDNUM7RUFBQyxPQUFBYiw4RUFBQSxDQUFBZzNDLGNBQUE7SUFBQS8yQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbzFCLEtBQUtBLENBQUN4cUIsR0FBUSxFQUFFakIsS0FBYSxFQUFFMnRCLG1CQUF3QyxFQUFFYiw2QkFBdUMsRUFBaUI7TUFBQSxJQUFBcDJCLEtBQUE7TUFDL0gsSUFBTTIyQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUNqbUIsdUJBQXVCLENBQUNSLDJCQUEyQixDQUFDdndCLEtBQUssSUFDbEcsSUFBSSxDQUFDMHpCLDhCQUE4QixDQUFDMkgscUJBQXFCLENBQUNyN0IsS0FBSyxJQUMvRCxJQUFJLENBQUMwekIsOEJBQThCLENBQUM0SCx1QkFBdUIsQ0FBQ3Q3QixLQUFLLEdBQUd3ZSxpRkFBd0IsQ0FBQ3NCLE9BQU8sR0FBR3RCLGlGQUF3QixDQUFDb0IsUUFBUTtNQUU3SSxPQUFPekQsT0FBTyxDQUFDODZCLEdBQUcsQ0FBQyxDQUNqQnBuQiw2REFBUyxDQUFDbWIsa0NBQWtDLENBQUNwZ0MsR0FBRyxDQUFDLEVBQ2pEOFQsbUVBQXFCLENBQUNTLHlCQUF5QixDQUFDLFVBQVUsRUFBRVYsMEVBQWlCLEVBQUV1NEIsZ0NBQWdDLENBQUMsQ0FDN0cxN0IsSUFBSSxDQUFDLFVBQUFqVixJQUFBLEVBQWtDO1FBQUEsSUFBaENxYSxVQUFVLEdBQUFyYSxJQUFBLENBQVZxYSxVQUFVO1VBQUV4QixjQUFjLEdBQUE3WSxJQUFBLENBQWQ2WSxjQUFjO1FBQ2hDN2UsS0FBSSxDQUFDeXdCLHNCQUFzQixDQUFDNVIsY0FBYyxDQUFDbGYsS0FBSyxHQUFHa2YsY0FBYztRQUVqRSxPQUFPO1VBQ0x3QixVQUFVLEVBQVZBLFVBQVU7VUFDVnhCLGNBQWMsRUFBZEE7UUFDRixDQUFDO01BQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQyxDQUNDNUQsSUFBSSxDQUFDLFVBQUExVSxLQUFBLEVBQThDO1FBQUEsSUFBQXNoQyxLQUFBLEdBQUFpTixnRkFBQSxDQUFBdnVDLEtBQUE7VUFBNUNxc0IsUUFBUSxHQUFBaVYsS0FBQTtVQUFBZ1AsTUFBQSxHQUFBaFAsS0FBQTtVQUFHeG5CLFVBQVUsR0FBQXcyQixNQUFBLENBQVZ4MkIsVUFBVTtVQUFFeEIsY0FBYyxHQUFBZzRCLE1BQUEsQ0FBZGg0QixjQUFjO1FBQzNDN2UsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ2lCLE1BQU0sQ0FBQzl4QixLQUFLLEdBQUcsSUFBSTtRQUN4Q0ssS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQ2p6QixLQUFLLEdBQUdpekIsUUFBUTtRQUM5QzV5QixLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTRwQixRQUFRLENBQUMvaUIsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RDdQLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHcVgsVUFBVSxDQUFDa0MsR0FBRyxDQUFDO1FBRXBELElBQUl0ZSx1RUFBaUIsQ0FBQzZ5QyxtQkFBbUIsSUFBSSxDQUFDajRCLGNBQWMsQ0FBQ2s0Qix3QkFBd0IsSUFBSSxDQUFDbDRCLGNBQWMsQ0FBQ200Qix3QkFBd0IsRUFBRTtVQUNqSW40QixjQUFjLENBQUMrSyxLQUFLLENBQUMsQ0FBQztVQUN0Qi9LLGNBQWMsQ0FBQy9lLE9BQU8sQ0FBQyxDQUFDO1VBRXhCLElBQUkySCw2Q0FBRyxDQUFDZ3pCLCtCQUErQixJQUFJLEVBQUV4MkIsdUVBQWlCLENBQUM1QyxRQUFRLElBQUlvRyw2Q0FBRyxDQUFDaXpCLG9DQUFvQyxDQUFDLEVBQUU7WUFDcEh4MkIscUVBQXVCLENBQUNFLHNCQUFzQixDQUFDLENBQUM7VUFDbEQ7VUFFQXBFLEtBQUksQ0FBQ3l3QixzQkFBc0IsQ0FBQzVSLGNBQWMsQ0FBQ2xmLEtBQUssR0FBRyxJQUFJO1VBRXZELE9BQU9pekIsUUFBUSxDQUFDempCLFNBQVMsQ0FBQzdGLEtBQUssRUFBRSxJQUFJLEVBQUV0SixLQUFJLENBQUN3d0IsZUFBZSxDQUFDa0MsWUFBWSxDQUFDL3lCLEtBQUssQ0FBQztRQUNqRjtRQUVBLE9BQU9pekIsUUFBUSxDQUFDempCLFNBQVMsQ0FBQzdGLEtBQUssRUFBRStXLFVBQVUsRUFBRXJnQixLQUFJLENBQUN3d0IsZUFBZSxDQUFDa0MsWUFBWSxDQUFDL3lCLEtBQUssQ0FBQztNQUN2RixDQUFDLENBQUMsQ0FDRHNiLElBQUksQ0FBQyxVQUFBMEMsUUFBUSxFQUFJO1FBQ2hCLElBQU9LLE1BQU0sR0FBSUwsUUFBUSxDQUFsQkssTUFBTTtRQUViaGUsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDcHhCLEtBQUssR0FBR0ssS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ2dNLGlDQUFpQyxDQUFDeGUsTUFBTSxDQUFDO1FBRWpHaGUsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzhMLFdBQVcsQ0FBQ3RlLE1BQU0sQ0FBQztRQUV4QyxJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO1VBQ25CaGUsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3NDLE1BQU0sQ0FBQ256QixLQUFLLEdBQUcsSUFBSTtVQUN4Q0ssS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzRCLEdBQUcsQ0FBQ3p5QixLQUFLLEdBQUc0RixTQUFTO1VBRTFDdkYsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQytMLDZDQUE2QyxDQUFDLENBQUM7VUFFcEV2OEIsS0FBSSxDQUFDK0ksT0FBTyxDQUFDQyxJQUFJLENBQ2Ysd0NBQXdDLEVBQ3hDaEosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQzdCOFYsTUFDRixDQUFDO1VBRUQ7UUFDRjtRQUVBLElBQU84VSxNQUFNLEdBQTBIblYsUUFBUSxDQUF4SW1WLE1BQU07VUFBRTBkLGdCQUFnQixHQUF3Rzd5QixRQUFRLENBQWhJNnlCLGdCQUFnQjtVQUFFdEMsNEJBQTRCLEdBQTBFdndCLFFBQVEsQ0FBOUd1d0IsNEJBQTRCO1VBQUV5Qyw4QkFBOEIsR0FBMENoekIsUUFBUSxDQUFoRmd6Qiw4QkFBOEI7VUFBRUQsK0JBQStCLEdBQVMveUIsUUFBUSxDQUFoRCt5QiwrQkFBK0I7VUFBRXRlLEdBQUcsR0FBSXpVLFFBQVEsQ0FBZnlVLEdBQUc7UUFFbklweUIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3NDLE1BQU0sQ0FBQ256QixLQUFLLEdBQUdtekIsTUFBTTtRQUMxQzl5QixLQUFJLENBQUN3d0IsZUFBZSxDQUFDNEIsR0FBRyxDQUFDenlCLEtBQUssR0FBR3l5QixHQUFHO1FBRXBDcHlCLEtBQUksQ0FBQ3d3QixlQUFlLENBQUMrTCw2Q0FBNkMsQ0FBQyxDQUFDO1FBRXBFdjhCLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ3lMLEtBQUssQ0FDaEIsbURBQW1ELEVBQ25EeFUsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQzdCOFYsTUFBTSxFQUNOd3lCLGdCQUFnQixFQUNoQnRDLDRCQUE0QixFQUM1QnlDLDhCQUE4QixFQUM5QkQsK0JBQ0YsQ0FBQztRQUVELE9BQU8xd0MsS0FBSSxDQUFDaTNDLHFCQUFxQixDQUFDajNDLEtBQUksQ0FBQ3l3QixzQkFBc0IsQ0FBQzVSLGNBQWMsQ0FBQ2xmLEtBQUssRUFBRTZ3QyxnQkFBb0MsQ0FBQyxDQUN0SHYxQixJQUFJLENBQUMsVUFBQTRELGNBQWMsRUFBSTtVQUN0QixJQUFJcTRCLHVCQUEyQztVQUMvQyxJQUFJQyxlQUFlLEdBQUcsS0FBSztVQUMzQixJQUFJbEksa0JBQWtCLEdBQUcsS0FBSztVQUM5QixJQUFNRCxVQUE2QixHQUFHLEVBQUU7VUFFeEMsSUFBSSxDQUFDaHZDLEtBQUksQ0FBQ3l3QixzQkFBc0IsQ0FBQzVSLGNBQWMsQ0FBQ2xmLEtBQUssRUFBRTtZQUNyREssS0FBSSxDQUFDeXdCLHNCQUFzQixDQUFDNVIsY0FBYyxDQUFDbGYsS0FBSyxHQUFHa2YsY0FBYztVQUNuRTtVQUVBQSxjQUFjLENBQUM0SyxjQUFjLEdBQUcsVUFBQ3pmLENBQUMsRUFBVztZQUMzQyxJQUFJaEssS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3NDLE1BQU0sQ0FBQ256QixLQUFLLEtBQUttekIsTUFBTSxFQUFFO2NBQ2hEO1lBQ0Y7WUFFQSxJQUFJOXlCLEtBQUksQ0FBQ3l3QixzQkFBc0IsQ0FBQzVSLGNBQWMsQ0FBQ2xmLEtBQUssS0FBS2tmLGNBQWMsRUFBRTtjQUN2RTtZQUNGO1lBRUEsSUFBSXM0QixlQUFlLEVBQUU7Y0FDbkI7WUFDRjtZQUVBLElBQUksQ0FBQzF2Qyw2Q0FBRyxDQUFDd0QsbUJBQW1CLENBQUN0TCxLQUFLLEVBQUU7Y0FDbEM7WUFDRjtZQUVBLElBQUlxSyxDQUFDLENBQUNvdEMsU0FBUyxJQUFJcHRDLENBQUMsQ0FBQ290QyxTQUFTLENBQUNBLFNBQVMsRUFBRTtjQUN4Q3BJLFVBQVUsQ0FBQ3BtQyxJQUFJLENBQUNvQixDQUFDLENBQUNvdEMsU0FBUyxDQUFDO1lBQzlCLENBQUMsTUFBTTtjQUNMbkksa0JBQWtCLEdBQUcsSUFBSTtZQUMzQjtZQUVBLElBQUksQ0FBQ2lJLHVCQUF1QixFQUFFO2NBQzVCQSx1QkFBdUIsR0FBR3g0QyxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDZ0YsVUFBVSxDQUFDLFlBQU07Z0JBQUEsSUFBQXl4QyxxQkFBQTtnQkFDM0QsSUFBSXAyQyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDc0MsTUFBTSxDQUFDbnpCLEtBQUssS0FBS216QixNQUFNLEVBQUU7a0JBQ2hEO2dCQUNGO2dCQUVBLElBQUlxa0IsZUFBZSxFQUFFO2tCQUNuQjtnQkFDRjtnQkFFQSxJQUFNdjdCLE9BQU8sSUFBQXc2QixxQkFBQSxHQUFHcDJDLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNvQyxRQUFRLENBQUNqekIsS0FBSyxjQUFBeTJDLHFCQUFBLHVCQUFuQ0EscUJBQUEsQ0FBcUM5RyxnQkFBZ0IsQ0FBQ3hjLE1BQU0sRUFBRWtjLFVBQVUsRUFBRUMsa0JBQWtCLENBQUMsQ0FDMUdoMEIsSUFBSSxDQUFDLFVBQUFpdEIsS0FBQSxFQUF1QjtrQkFBQSxJQUFyQmxxQixNQUFNLEdBQUFrcUIsS0FBQSxDQUFObHFCLE1BQU07b0JBQUU4QixPQUFPLEdBQUFvb0IsS0FBQSxDQUFQcG9CLE9BQU87a0JBQ3JCLElBQUk5QixNQUFNLEtBQUssSUFBSSxFQUFFO29CQUNuQmhlLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ2dNLElBQUksQ0FBQyxvREFBb0QsRUFBRS9VLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFOFYsTUFBTSxDQUFDO29CQUU5RztrQkFDRjtrQkFFQSxJQUFJOEIsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRTljLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDL0JtMEMsZUFBZSxHQUFHLElBQUk7a0JBQ3hCO2tCQUVBbjNDLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZEQUE2RCxFQUFFaEosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQUU4VixNQUFNLEVBQUU4QixPQUFPLENBQUM7Z0JBQ2xJLENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQTlWLENBQUMsRUFBSTtrQkFDVmhLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFeEosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQUU4QixDQUFDLENBQUM7Z0JBQzNGLENBQUMsQ0FBQztjQUNOLENBQUMsRUFBRXNzQyxnQ0FBZ0MsQ0FBQztZQUN0QztVQUNGLENBQUM7VUFFRHozQixjQUFjLENBQUM4SywwQkFBMEIsR0FBRyxZQUFZO1lBQ3RELElBQUkzcEIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3NDLE1BQU0sQ0FBQ256QixLQUFLLEtBQUttekIsTUFBTSxFQUFFO2NBQ2hEO1lBQ0Y7WUFFQSxJQUFJOXlCLEtBQUksQ0FBQ3l3QixzQkFBc0IsQ0FBQzVSLGNBQWMsQ0FBQ2xmLEtBQUssS0FBS2tmLGNBQWMsRUFBRTtjQUN2RTtZQUNGO1lBRUEsSUFBTXc0QixhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUEsRUFBZTtjQUNoQztjQUNBO2NBQ0FyM0MsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDcHhCLEtBQUssR0FBR2l2QiwrREFBWSxDQUFDdUwsZUFBZTtjQUUvRCxJQUFJbjZCLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNYLFlBQVksQ0FBQ2x3QixLQUFLLEVBQUU7Z0JBQzNDSyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDWCxZQUFZLENBQUNsd0IsS0FBSyxDQUFDcTFCLEtBQUssQ0FBQyxDQUFDO2dCQUMvQ2gxQixLQUFJLENBQUN3d0IsZUFBZSxDQUFDWCxZQUFZLENBQUNsd0IsS0FBSyxDQUFDczFCLFNBQVMsR0FBRyxJQUFJO2NBQzFEO2NBRUFqMUIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ2x5QixLQUFLLEdBQUcsS0FBSztjQUMxQ0ssS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ21CLE9BQU8sQ0FBQ2h5QixLQUFLLEdBQUcsSUFBSTtjQUV6QyxJQUFNaWMsT0FBTyxHQUFHNWIsS0FBSSxDQUFDbzZCLG9CQUFvQixDQUFDLENBQUMsU0FDbkMsQ0FBQyxVQUFBcHdCLENBQUMsRUFBSTtnQkFDVmhLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ1MsS0FBSyxDQUNoQixtRkFBbUYsRUFDbkZ4SixLQUFJLENBQUN3d0IsZUFBZSxDQUFDdG9CLFFBQVEsRUFDN0IyVyxjQUFjLENBQUN3SSxrQkFBa0IsRUFDakNyZCxDQUNGLENBQUM7Y0FDSCxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsUUFBUTZVLGNBQWMsQ0FBQ3dJLGtCQUFrQjtjQUN2QyxLQUFLLFVBQVU7Y0FDZixLQUFLLFdBQVc7Y0FDaEIsS0FBSyxXQUFXO2NBQ2hCLEtBQUssS0FBSztnQkFDUjtjQUVGLEtBQUssY0FBYztjQUNuQixLQUFLLFFBQVE7Z0JBQ1gsSUFBSTNvQixnRUFBVyxDQUFDaUIsS0FBSyxDQUFDMjNDLGlCQUFpQixFQUFFO2tCQUN2Q3QzQyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyxnRUFBZ0UsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFMlcsY0FBYyxDQUFDd0ksa0JBQWtCLENBQUM7a0JBQ3JKcm5CLEtBQUksQ0FBQ3UzQyx1QkFBdUIsQ0FBQzE0QixjQUFjLEVBQUV3NEIsYUFBYSxDQUFDO2dCQUM3RDtnQkFFQTtjQUNGLEtBQUssUUFBUTtnQkFDWHIzQyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyxnRUFBZ0UsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFMlcsY0FBYyxDQUFDd0ksa0JBQWtCLENBQUM7Z0JBRXJKZ3dCLGFBQWEsQ0FBQyxDQUFDO2dCQUVmO2NBQ0Y7Z0JBQ0Uxa0MsbUVBQWlCLENBQUNrTSxjQUFjLENBQUN3SSxrQkFBMkIsQ0FBQztZQUNqRTtVQUNGLENBQUM7VUFFRCxJQUFNbXdCLGtCQUFrQixHQUFHLElBQUkxN0IsT0FBTyxDQUFjLFVBQUNDLE9BQU8sRUFBRWlNLE1BQU0sRUFBSztZQUN2RSxJQUFJLENBQUMvakIsdUVBQWlCLENBQUN3ekMsZUFBZSxFQUFFO2NBQ3RDLElBQU14ZSxVQUFTLEdBQUd2NkIsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ2dGLFVBQVUsQ0FBQztnQkFBQSxPQUFNcWpCLE1BQU0sQ0FBQyxJQUFJN2pCLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2NBQUEsR0FBRW95Qyx5QkFBeUIsQ0FBQztjQUU1SHYyQyxLQUFJLENBQUNELFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDO2dCQUFBLE9BQU1ELGdFQUFXLENBQUNpQixLQUFLLENBQUN5TyxZQUFZLENBQUM2cUIsVUFBUyxDQUFDO2NBQUEsRUFBQyxDQUFDO2NBRXRGcGEsY0FBYyxDQUFDMEssT0FBTyxHQUFHLFVBQUN2ZixDQUFDLEVBQVc7Z0JBQ3BDdEwsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQ3lPLFlBQVksQ0FBQzZxQixVQUFTLENBQUM7Z0JBQ3pDbGQsT0FBTyxDQUFDL1IsQ0FBQyxDQUFDMHRDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN2QixDQUFDO2NBRUQ7WUFDRjtZQUVBLElBQU1DLGNBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSTN0QyxDQUFtRCxFQUFXO2NBQ25GO2NBQ0F0TCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDeU8sWUFBWSxDQUFDNnFCLFNBQVMsQ0FBQztjQUN6Q3BhLGNBQWMsQ0FBQ3hYLG1CQUFtQixDQUFDLE9BQU8sRUFBRXN3QyxjQUFhLENBQUM7Y0FDMUQ5NEIsY0FBYyxDQUFDeFgsbUJBQW1CLENBQUMsV0FBVyxFQUFFc3dDLGNBQWEsQ0FBQztjQUU5RCxJQUFJLFNBQVMsSUFBSTN0QyxDQUFDLEVBQUU7Z0JBQ2xCK1IsT0FBTyxDQUFDL1IsQ0FBQyxDQUFDMHRDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN2QixDQUFDLE1BQU07Z0JBQ0wzN0IsT0FBTyxDQUFDL1IsQ0FBQyxDQUFDOG9CLE1BQU0sQ0FBQztjQUNuQjtZQUNGLENBQUM7WUFFRCxJQUFNbUcsU0FBUyxHQUFHdjZCLGdFQUFXLENBQUNpQixLQUFLLENBQUNnRixVQUFVLENBQUMsWUFBTTtjQUNuRGthLGNBQWMsQ0FBQ3hYLG1CQUFtQixDQUFDLE9BQU8sRUFBRXN3QyxjQUFhLENBQUM7Y0FDMUQ5NEIsY0FBYyxDQUFDeFgsbUJBQW1CLENBQUMsV0FBVyxFQUFFc3dDLGNBQWEsQ0FBQztjQUM5RDN2QixNQUFNLENBQUMsSUFBSTdqQixLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUM3QyxDQUFDLEVBQUVveUMseUJBQXlCLENBQUM7WUFFN0IxM0IsY0FBYyxDQUFDMVgsZ0JBQWdCLENBQUMsT0FBTyxFQUFFd3dDLGNBQWEsQ0FBQztZQUN2RDk0QixjQUFjLENBQUMxWCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUV3d0MsY0FBYSxDQUFDO1lBQzNEMzNDLEtBQUksQ0FBQ0QsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUM7Y0FBQSxPQUFNRCxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDeU8sWUFBWSxDQUFDNnFCLFNBQVMsQ0FBQztZQUFBLEVBQUMsQ0FBQztZQUV0RjtVQUNGLENBQUMsQ0FBQztVQUVGLE9BQU8sSUFBSW5kLE9BQU8sQ0FBTyxVQUFBQyxPQUFPLEVBQUk7WUFDbENBLE9BQU8sQ0FBQyxDQUFDO1VBQ1gsQ0FBQyxDQUFDLENBQUNkLElBQUksQ0FBQyxZQUFNO1lBQ1osSUFBSSxDQUFDaXpCLDRCQUE0QixFQUFFO2NBQ2pDO1lBQ0Y7WUFFQWx1QyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQywrQkFBK0IsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFZ21DLDRCQUE0QixDQUFDWCxrQkFBa0IsQ0FBQ2hyQixHQUFHLENBQUM7WUFFdEksT0FBTzFELGNBQWMsQ0FBQ3lKLG1CQUFtQixDQUFDNGxCLDRCQUE0QixDQUFDWCxrQkFBa0IsQ0FBQyxTQUNsRixDQUFDLFVBQUF2akMsQ0FBQyxFQUFJO2NBQ1ZoSyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyw2REFBNkQsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFZ21DLDRCQUE0QixDQUFDWCxrQkFBa0IsRUFBRXZqQyxDQUFDLENBQUN5SixPQUFPLENBQUM7Y0FFM0ssTUFBTXpKLENBQUM7WUFDVCxDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQ2lSLElBQUksQ0FBQyxZQUFNO1lBQ1osSUFBSSxDQUFDeTFCLCtCQUErQixFQUFFO2NBQ3BDO1lBQ0Y7WUFFQTF3QyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFd29DLCtCQUErQixDQUFDbkQsa0JBQWtCLENBQUNockIsR0FBRyxDQUFDO1lBRTNJLE9BQU8xRCxjQUFjLENBQUNpSyxvQkFBb0IsQ0FBQzRuQiwrQkFBK0IsQ0FBQ25ELGtCQUFrQixDQUFDLFNBQ3RGLENBQUMsVUFBQXZqQyxDQUFDLEVBQUk7Y0FDVmhLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDhEQUE4RCxFQUFFaEosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQUV3b0MsK0JBQStCLENBQUNuRCxrQkFBa0IsRUFBRXZqQyxDQUFDLENBQUN5SixPQUFPLENBQUM7Y0FFL0ssTUFBTXpKLENBQUM7WUFDVCxDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQ2lSLElBQUksQ0FBQyxZQUFNO1lBQ1osSUFBSSxDQUFDMDFCLDhCQUE4QixFQUFFO2NBQ25DO1lBQ0Y7WUFFQTN3QyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFeW9DLDhCQUE4QixDQUFDcEQsa0JBQWtCLENBQUNockIsR0FBRyxDQUFDO1lBRXpJLE9BQU8xRCxjQUFjLENBQUNpSyxvQkFBb0IsQ0FBQzZuQiw4QkFBOEIsQ0FBQ3BELGtCQUFrQixDQUFDLFNBQ3JGLENBQUMsVUFBQXZqQyxDQUFDLEVBQUk7Y0FDVmhLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDhEQUE4RCxFQUFFaEosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQUV5b0MsOEJBQThCLENBQUNwRCxrQkFBa0IsRUFBRXZqQyxDQUFDLENBQUN5SixPQUFPLENBQUM7Y0FFOUssTUFBTXpKLENBQUM7WUFDVCxDQUFDLENBQUMsQ0FDRGlSLElBQUksQ0FBQyxZQUFNO2NBQ1YsT0FBTzRELGNBQWMsQ0FBQ3FKLFlBQVksQ0FBQztnQkFDakM1SCxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QkMsbUJBQW1CLEVBQUU7Y0FDdkIsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUN0RixJQUFJLENBQUMsVUFBQTI4QixNQUFNLEVBQUk7Y0FDaEI1M0MsS0FBSSxDQUFDK0ksT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUVoSixLQUFJLENBQUN3d0IsZUFBZSxDQUFDdG9CLFFBQVEsRUFBRTB2QyxNQUFNLENBQUM7Y0FFMUYsSUFBTWhsQixRQUFRLEdBQUc1eUIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQ2p6QixLQUFpQjtjQUVoRSxPQUFPaXpCLFFBQVEsQ0FBQzlKLG9CQUFvQixDQUFDZ0ssTUFBTSxFQUFFOGtCLE1BQU0sQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQzM4QixJQUFJLENBQUMsVUFBQXF0QixLQUFBLEVBQWtDO2NBQUEsSUFBaEN0cUIsTUFBTSxHQUFBc3FCLEtBQUEsQ0FBTnRxQixNQUFNO2dCQUFFdXZCLGtCQUFrQixHQUFBakYsS0FBQSxDQUFsQmlGLGtCQUFrQjtjQUNsQ3Z0QyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDTyxLQUFLLENBQUNweEIsS0FBSyxHQUFHSyxLQUFJLENBQUM2M0MsNENBQTRDLENBQUM3NUIsTUFBTSxDQUFDO2NBRTVGLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CaGUsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ2x5QixLQUFLLEdBQUcsS0FBSztnQkFDMUNLLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN1QixPQUFPLENBQUNweUIsS0FBSyxHQUFHLElBQUk7Z0JBQ3pDSyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDeUIsT0FBTyxDQUFDdHlCLEtBQUssR0FBRyxLQUFLO2dCQUUxQztjQUNGO2NBRUEsT0FBT2tmLGNBQWMsQ0FBQ3lKLG1CQUFtQixDQUFDaWxCLGtCQUEyQyxDQUFDLFNBQzlFLENBQUMsVUFBQXZqQyxDQUFDLEVBQUk7Z0JBQ1ZoSyxLQUFJLENBQUMrSSxPQUFPLENBQUNDLElBQUksQ0FBQyw2REFBNkQsRUFBRWhKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFcWxDLGtCQUFrQixFQUFFdmpDLENBQUMsQ0FBQ3lKLE9BQU8sQ0FBQztnQkFFOUksTUFBTXpKLENBQUM7Y0FDVCxDQUFDLENBQUM7WUFDTixDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQ2lSLElBQUksQ0FBQyxZQUFNO1lBQ1pnYyxtQkFBbUIsQ0FBQ2h2QixPQUFPLENBQUNqSSxLQUFJLENBQUN3d0IsZUFBZSxDQUFDdG9CLFFBQVEsQ0FBQztZQUUxRCxPQUFPc3ZDLGtCQUFrQjtVQUMzQixDQUFDLENBQUMsQ0FBQ3Y4QixJQUFJLENBQUMsVUFBQTBHLFdBQVcsRUFBSTtZQUFBLElBQUFtMkIscUJBQUEsRUFBQUMsc0JBQUE7WUFDckIsSUFBSXBCLGdDQUFnQyxJQUFJOTNCLGNBQWMsYUFBZEEsY0FBYyxnQkFBQWk1QixxQkFBQSxHQUFkajVCLGNBQWMsQ0FBRXlELHdCQUF3QixjQUFBdzFCLHFCQUFBLGVBQXhDQSxxQkFBQSxDQUEwQ3YxQixHQUFHLEVBQUU7Y0FDckYsSUFBTXkxQix1QkFBdUIsR0FBRyxJQUFJeDJCLHVEQUFTLENBQUMzQyxjQUFjLENBQUN5RCx3QkFBd0IsQ0FBQ0MsR0FBRyxDQUFDO2NBQzFGLElBQU0wMUIsU0FBUyxHQUFHcDVCLGNBQWMsQ0FBQ29LLFlBQVksQ0FBQyxDQUFDO2NBQy9DLElBQUFpdkIscUJBQUEsR0FBeUM3QiwwRUFBaUIsQ0FBQzhCLDhCQUE4QixDQUFDeDJCLFdBQVcsRUFBRXMyQixTQUFTLEVBQUVqNEMsS0FBSSxDQUFDMHdCLHVCQUF1QixDQUFDTCxzQkFBc0IsRUFBRXJ3QixLQUFJLENBQUMwd0IsdUJBQXVCLENBQUNKLHNCQUFzQixFQUFFMG5CLHVCQUF1QixDQUFDcDFCLFVBQVUsRUFBRW8xQix1QkFBdUIsQ0FBQ3QxQixVQUFVLENBQUM7Z0JBQTVSOFMsV0FBVyxHQUFBMGlCLHFCQUFBLENBQVgxaUIsV0FBVztnQkFBRTRpQixpQkFBaUIsR0FBQUYscUJBQUEsQ0FBakJFLGlCQUFpQjtjQUNyQyxJQUFNQyw4QkFBOEIsR0FBR0wsdUJBQXVCLENBQUNwMUIsVUFBVSxDQUFDMDFCLFdBQVcsQ0FBQyxDQUFDLEtBQUssTUFBTSxLQUM1RnQ0QyxLQUFJLENBQUNxekIsOEJBQThCLENBQUMySCxxQkFBcUIsQ0FBQ3I3QixLQUFLLElBQUlLLEtBQUksQ0FBQ3F6Qiw4QkFBOEIsQ0FBQzRILHVCQUF1QixDQUFDdDdCLEtBQUssQ0FBQztjQUUzSSxJQUFJMDRDLDhCQUE4QixFQUFFO2dCQUNsQyxJQUFNRSw2QkFBNkIsR0FBRyxJQUFJL0YsdUZBQWlDLENBQUN4eUMsS0FBSSxDQUFDd3dCLGVBQWUsRUFBRXh3QixLQUFJLENBQUNxekIsOEJBQThCLENBQUM7Z0JBRXRJcnpCLEtBQUksQ0FBQ0QsWUFBWSxDQUFDTSxHQUFHLENBQUNrNEMsNkJBQTZCLENBQUM7Z0JBRXBENTJCLFdBQVcsQ0FBQzYyQixjQUFjLENBQUMsQ0FBQyxDQUN6QjVvQyxPQUFPLENBQUMsVUFBQXNTLEtBQUssRUFBSTtrQkFBQSxJQUFBdTJCLHFCQUFBO2tCQUNoQjtrQkFDQSxJQUFNQyxRQUFRLEdBQUdULFNBQVMsQ0FBQ3JjLE1BQU0sQ0FBQyxVQUFBOGMsUUFBUTtvQkFBQSxPQUFJQSxRQUFRLENBQUN4MkIsS0FBSyxLQUFLQSxLQUFLO2tCQUFBLEVBQUMsQ0FBQyxDQUFDLENBQUM7a0JBQzFFO2tCQUNBLElBQU1neEIsR0FBRyxHQUFHcjBCLGNBQWMsQ0FBQzg1Qix1QkFBdUIsSUFBQUYscUJBQUEsR0FDOUM1NUIsY0FBYyxDQUFDK0ksZUFBZSxDQUFDLENBQUMsQ0FBQ2dVLE1BQU0sQ0FBQyxVQUFBZ2QsV0FBVztvQkFBQSxPQUFJQSxXQUFXLENBQUNGLFFBQVEsS0FBS0EsUUFBUTtrQkFBQSxFQUFDLENBQUMsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLHVCQUE1RkEscUJBQUEsQ0FBOEZ2RixHQUFHLEdBQ2pHLElBQUk7a0JBRVIsSUFBSSxDQUFDd0YsUUFBUSxFQUFFO29CQUNiMTRDLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ2dNLElBQUksQ0FBQyxxRkFBcUYsRUFBRS9VLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFZ2EsS0FBSyxDQUFDcUIsRUFBRSxDQUFDO29CQUVqSjtrQkFDRjtrQkFFQSxJQUFJLENBQUMydkIsR0FBRyxFQUFFO29CQUNSbHpDLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ2dNLElBQUksQ0FBQyxnRkFBZ0YsRUFBRS9VLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFZ2EsS0FBSyxDQUFDcUIsRUFBRSxDQUFDO29CQUU1STtrQkFDRjtrQkFFQXZqQixLQUFJLENBQUNELFlBQVksQ0FBQ00sR0FBRyxDQUFDKzNDLGlCQUFpQixDQUFDanBDLFNBQVMsQ0FBQyxVQUFBaXBDLGlCQUFpQixFQUFJO29CQUNyRSxJQUFJQSxpQkFBaUIsRUFBRTtzQkFDckJHLDZCQUE2QixDQUFDdEYsWUFBWSxDQUFDanpDLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUFFZ3JDLEdBQUcsRUFBRWtGLGlCQUFpQixDQUFDbDJCLEtBQUssQ0FBQ3FCLEVBQUUsRUFBRTYwQixpQkFBaUIsQ0FBQy9ZLEtBQUssQ0FBQztvQkFDckk7a0JBQ0YsQ0FBQyxDQUFDLENBQUM7a0JBQ0hyL0IsS0FBSSxDQUFDcXpCLDhCQUE4QixDQUFDRyxTQUFTLENBQUM3ekIsS0FBSyxHQUFHLElBQUk7Z0JBQzVELENBQUMsQ0FBQztjQUNOO2NBRUFLLEtBQUksQ0FBQ0QsWUFBWSxDQUFDTSxHQUFHLENBQUNtMUIsV0FBVyxDQUFDO1lBQ3BDO1lBRUEsSUFBSXgxQixLQUFJLENBQUMwd0IsdUJBQXVCLENBQUNULG9CQUFvQixDQUFDdHdCLEtBQUssRUFBRTtjQUMzRCxJQUFBazVDLHNCQUFBLEdBQXlDeEMsMEVBQWlCLENBQUN5Qyx1Q0FBdUMsQ0FBQ24zQixXQUFXLEVBQUUzaEIsS0FBSSxDQUFDMHdCLHVCQUF1QixDQUFDUCw0QkFBNEIsRUFBRW53QixLQUFJLENBQUMwd0IsdUJBQXVCLENBQUNOLDRCQUE0QixDQUFDO2dCQUE5TjJvQixpQkFBaUIsR0FBQUYsc0JBQUEsQ0FBakJFLGlCQUFpQjtnQkFBRXZqQixZQUFXLEdBQUFxakIsc0JBQUEsQ0FBWHJqQixXQUFXO2NBRXJDeDFCLEtBQUksQ0FBQ0QsWUFBWSxDQUFDTSxHQUFHLENBQUNtMUIsWUFBVyxDQUFDO2NBQ2xDN1QsV0FBVyxHQUFHbzNCLGlCQUFpQjtZQUNqQztZQUVBLzRDLEtBQUksQ0FBQ3l3QixzQkFBc0IsQ0FBQzlPLFdBQVcsQ0FBQ2hpQixLQUFLLEdBQUdnaUIsV0FBVztZQUUzRCxJQUFNcTNCLG9CQUFvQixHQUFHLElBQUl0M0Isa0VBQW9CLENBQUM3QyxjQUFjLEVBQUU4QyxXQUFXLEVBQUUsQ0FBQW8yQixzQkFBQSxHQUFBLzNDLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNvQyxRQUFRLENBQUNqekIsS0FBSyxjQUFBbzRDLHNCQUFBLGVBQW5DQSxzQkFBQSxDQUFxQ3AwQixhQUFhLEdBQUczakIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ29DLFFBQVEsQ0FBQ2p6QixLQUFLLENBQUNna0IsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbE0zakIsS0FBSSxDQUFDRCxZQUFZLENBQUNNLEdBQUcsQ0FBQzI0QyxvQkFBb0IsQ0FBQztZQUUzQyxJQUFNQyx5Q0FBeUMsR0FBR0Qsb0JBQW9CLENBQUNFLFlBQVksQ0FBQy9wQyxTQUFTLENBQUMsVUFBQWdxQyxVQUFVLEVBQUk7Y0FDMUduNUMsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzlNLGFBQWEsQ0FBQy9qQixLQUFLLEdBQUd3NUMsVUFBVTtjQUVyRCxJQUFJLENBQUNBLFVBQVUsRUFBRTtnQkFDZjtjQUNGO2NBRUEsSUFBSSxDQUFDbjVDLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM2TCxpQkFBaUIsSUFBSSxDQUFDcjhCLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM0TCxpQkFBaUIsRUFBRTtnQkFDdEZwOEIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzRMLGlCQUFpQixHQUFHK2MsVUFBVSxDQUFDdDRCLEtBQUs7Z0JBQ3pEN2dCLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM2TCxpQkFBaUIsR0FBRzhjLFVBQVUsQ0FBQ3I0QixLQUFLO2dCQUV6RDtjQUNGO2NBRUEsSUFBSXM0QixnQkFBZ0IsR0FBRyxLQUFLO2NBQzVCLElBQUlDLGdCQUFnQixHQUFHLEtBQUs7Y0FFNUIsSUFBSUYsVUFBVSxDQUFDdDRCLEtBQUssRUFBRTtnQkFDcEIsSUFBSTdnQixLQUFJLENBQUN3d0IsZUFBZSxDQUFDNEwsaUJBQWlCLElBQUlwOEIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzRMLGlCQUFpQixDQUFDM2dCLFNBQVMsS0FBSzA5QixVQUFVLENBQUN0NEIsS0FBSyxDQUFDcEYsU0FBUyxFQUFFO2tCQUM3SDI5QixnQkFBZ0IsR0FBR3A1QyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDNEwsaUJBQWlCLElBQUlwOEIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzRMLGlCQUFpQixDQUFDelgsYUFBYSxLQUFLdzBCLFVBQVUsQ0FBQ3Q0QixLQUFLLENBQUM4RCxhQUFhO2tCQUVwSixJQUFJeTBCLGdCQUFnQixJQUFJMTZDLGdFQUFXLENBQUNpQixLQUFLLENBQUMyM0MsaUJBQWlCLEVBQUU7b0JBQzNEdDNDLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLDBHQUEwRyxFQUMxR2hKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUN0b0IsUUFBUSxFQUM3Qml4QyxVQUFVLENBQUN0NEIsS0FBSyxDQUFDOEQsYUFBYSxFQUM5QjNrQixLQUFJLENBQUN3d0IsZUFBZSxDQUFDNEwsaUJBQWlCLENBQUN6WCxhQUFhLEVBQ3BELElBQUluZCx1REFBUyxDQUFDMnhDLFVBQVUsQ0FBQ3Q0QixLQUFLLENBQUNwRixTQUFTLEdBQUd6YixLQUFJLENBQUN3d0IsZUFBZSxDQUFDNEwsaUJBQWlCLENBQUMzZ0IsU0FBUyxDQUFDLENBQUN4UyxXQUFXLENBQUMsQ0FDM0csQ0FBQztrQkFDSDtrQkFFQWpKLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM0TCxpQkFBaUIsR0FBRytjLFVBQVUsQ0FBQ3Q0QixLQUFLO2dCQUMzRDtjQUNGO2NBRUEsSUFBSXM0QixVQUFVLENBQUNyNEIsS0FBSyxFQUFFO2dCQUNwQixJQUFJOWdCLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM2TCxpQkFBaUIsSUFBSXI4QixLQUFJLENBQUN3d0IsZUFBZSxDQUFDNkwsaUJBQWlCLENBQUM1Z0IsU0FBUyxLQUFLMDlCLFVBQVUsQ0FBQ3I0QixLQUFLLENBQUNyRixTQUFTLEVBQUU7a0JBQzdINDlCLGdCQUFnQixHQUFHcjVDLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM2TCxpQkFBaUIsSUFBSXI4QixLQUFJLENBQUN3d0IsZUFBZSxDQUFDNkwsaUJBQWlCLENBQUMxWCxhQUFhLEtBQUt3MEIsVUFBVSxDQUFDcjRCLEtBQUssQ0FBQzZELGFBQWE7a0JBRXBKLElBQUkwMEIsZ0JBQWdCLElBQUkzNkMsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzIzQyxpQkFBaUIsRUFBRTtvQkFDM0R0M0MsS0FBSSxDQUFDK0ksT0FBTyxDQUFDQyxJQUFJLENBQ2YsMEdBQTBHLEVBQzFHaEosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3RvQixRQUFRLEVBQzdCaXhDLFVBQVUsQ0FBQ3I0QixLQUFLLENBQUM2RCxhQUFhLEVBQzlCM2tCLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM2TCxpQkFBaUIsQ0FBQzFYLGFBQWEsRUFDcEQsSUFBSW5kLHVEQUFTLENBQUMyeEMsVUFBVSxDQUFDcjRCLEtBQUssQ0FBQ3JGLFNBQVMsR0FBR3piLEtBQUksQ0FBQ3d3QixlQUFlLENBQUM2TCxpQkFBaUIsQ0FBQzVnQixTQUFTLENBQUMsQ0FBQ3hTLFdBQVcsQ0FBQyxDQUMzRyxDQUFDO2tCQUNIO2tCQUVBakosS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQzZMLGlCQUFpQixHQUFHOGMsVUFBVSxDQUFDcjRCLEtBQUs7Z0JBQzNEO2NBQ0Y7Y0FFQSxJQUFJLENBQUNwaUIsZ0VBQVcsQ0FBQ2lCLEtBQUssQ0FBQzIzQyxpQkFBaUIsRUFBRTtnQkFDeEN0M0MsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDcHhCLEtBQUssR0FBR2l2QiwrREFBWSxDQUFDaUwsT0FBTztnQkFFdkQ7Y0FDRjtjQUVBLElBQUl3ZixnQkFBZ0IsSUFBSUQsZ0JBQWdCLEVBQUU7Z0JBQ3hDLElBQU0vQixhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUEsRUFBZTtrQkFDaENyM0MsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDcHhCLEtBQUssR0FBR2l2QiwrREFBWSxDQUFDdUwsZUFBZTtrQkFFL0QsSUFBSW42QixLQUFJLENBQUN3d0IsZUFBZSxDQUFDWCxZQUFZLENBQUNsd0IsS0FBSyxFQUFFO29CQUMzQ0ssS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDbHdCLEtBQUssQ0FBQ3ExQixLQUFLLENBQUMsQ0FBQztvQkFDL0NoMUIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDbHdCLEtBQUssQ0FBQ3MxQixTQUFTLEdBQUcsSUFBSTtrQkFDMUQ7a0JBRUFqMUIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ2x5QixLQUFLLEdBQUcsS0FBSztrQkFDMUNLLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNtQixPQUFPLENBQUNoeUIsS0FBSyxHQUFHLElBQUk7a0JBRXpDcTVDLG9CQUFvQixDQUFDbDVDLE9BQU8sQ0FBQyxDQUFDO2tCQUU5QixJQUFNOGIsT0FBTyxHQUFHNWIsS0FBSSxDQUFDbzZCLG9CQUFvQixDQUFDLENBQUMsU0FDbkMsQ0FBQyxVQUFBcHdCLENBQUMsRUFBSTtvQkFDVmhLLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ1MsS0FBSyxDQUNoQix5RUFBeUUsRUFDekV4SixLQUFJLENBQUN3d0IsZUFBZSxDQUFDdG9CLFFBQVEsRUFDN0IyVyxjQUFjLENBQUN3SSxrQkFBa0IsRUFDakNyZCxDQUNGLENBQUM7a0JBQ0gsQ0FBQyxDQUFDO2dCQUNOLENBQUM7Z0JBRURoSyxLQUFJLENBQUN1M0MsdUJBQXVCLENBQUMxNEIsY0FBYyxFQUFFdzRCLGFBQWEsQ0FBQztjQUM3RCxDQUFDLE1BQU07Z0JBQ0xyM0MsS0FBSSxDQUFDeXdCLHNCQUFzQixDQUFDbUssK0JBQStCLEdBQUcsQ0FBQztnQkFFL0QsSUFBSTU2QixLQUFJLENBQUN3d0IsZUFBZSxDQUFDTyxLQUFLLENBQUNweEIsS0FBSyxLQUFLaXZCLCtEQUFZLENBQUNxTCxZQUFZLElBQUlqNkIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDcHhCLEtBQUssS0FBS2l2QiwrREFBWSxDQUFDaUwsT0FBTyxFQUFFO2tCQUMvSDtnQkFDRjtnQkFFQTc1QixLQUFJLENBQUN3d0IsZUFBZSxDQUFDTyxLQUFLLENBQUNweEIsS0FBSyxHQUFHSyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDcUIsT0FBTyxDQUFDbHlCLEtBQUssR0FBR2l2QiwrREFBWSxDQUFDeUYsT0FBTyxHQUFHekYsK0RBQVksQ0FBQ29MLE1BQU07Z0JBQ2xIaDZCLEtBQUksQ0FBQytJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1EQUFtRCxFQUFFNGxCLCtEQUFZLENBQUM1dUIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ08sS0FBSyxDQUFDcHhCLEtBQUssQ0FBQyxDQUFDO2NBQ3hIO1lBQ0YsQ0FBQyxDQUFDO1lBRUZLLEtBQUksQ0FBQ0QsWUFBWSxDQUFDTSxHQUFHLENBQUM0NEMseUNBQXlDLENBQUM7WUFFaEUsSUFBSSxDQUFDeHhDLDZDQUFHLENBQUNxbUIsNEJBQTRCLEVBQUU7Y0FDckM5dEIsS0FBSSxDQUFDd3dCLGVBQWUsQ0FBQ1MsU0FBUyxDQUFDdHhCLEtBQUssR0FBRyxLQUFLO2NBQzVDSyxLQUFJLENBQUN3d0IsZUFBZSxDQUFDVyxVQUFVLENBQUN4eEIsS0FBSyxHQUFHLElBQUk7Y0FDNUNLLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNtQixPQUFPLENBQUNoeUIsS0FBSyxHQUFHLEtBQUs7Y0FDMUNLLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNxQixPQUFPLENBQUNseUIsS0FBSyxHQUFHLEtBQUs7Y0FDMUNLLEtBQUksQ0FBQ3d3QixlQUFlLENBQUNPLEtBQUssQ0FBQ3B4QixLQUFLLEdBQUdpdkIsK0RBQVksQ0FBQ29MLE1BQU07Y0FFdEQ7WUFDRjtZQUVBLE9BQU81RCw2QkFBNkIsQ0FBQ3pVLFdBQVcsQ0FBQztVQUNuRCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUFsaUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTI1QyxzQkFBQSxHQUFBcjlCLG1GQUFBLGNBQUFDLHNFQUFBLENBRUQsU0FBQUUsUUFDRW05QixzQkFBOEMsRUFDOUMvSSxnQkFBa0M7UUFBQSxJQUFBZ0osbUJBQUE7UUFBQSxPQUFBdDlCLHNFQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsSUFDN0I0OEIsc0JBQXNCO2dCQUFBOThCLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQ3pCNnpCLGdCQUFnQixHQUFHdnZCLHFFQUF1QixDQUFDQyxrQkFBa0IsQ0FBQ3N2QixnQkFBZ0IsQ0FBQztjQUFDLE9BQUEvekIsUUFBQSxDQUFBTyxNQUFBLFdBRXpFdlYsNkNBQUcsQ0FBQ2ttQixxQkFBcUIsQ0FBQ2h1QixLQUFLLENBQUMrZixvQkFBb0IsQ0FBQzh3QixnQkFBZ0IsQ0FBQztZQUFBO2NBR3pFZ0osbUJBQW1CLEdBQUF6RSxhQUFBLENBQUFBLGFBQUEsS0FDcEJ3RSxzQkFBc0IsQ0FBQ2h5QixnQkFBZ0IsQ0FBQyxDQUFDLEdBQ3pDaXBCLGdCQUFnQjtjQUdyQitJLHNCQUFzQixDQUFDOXhCLGdCQUFnQixDQUFDK3hCLG1CQUFtQixDQUFDO2NBQUMsT0FBQS84QixRQUFBLENBQUFPLE1BQUEsV0FFdER1OEIsc0JBQXNCO1lBQUE7WUFBQTtjQUFBLE9BQUE5OEIsUUFBQSxDQUFBUyxJQUFBO1VBQUE7UUFBQSxHQUFBZCxPQUFBO01BQUEsQ0FDOUI7TUFBQSxTQWpCYTY2QixxQkFBcUJBLENBQUE5NUIsRUFBQSxFQUFBZ0wsR0FBQTtRQUFBLE9BQUFteEIsc0JBQUEsQ0FBQWw4QixLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFyQitrQyxxQkFBcUI7SUFBQTtFQUFBO0lBQUF4M0MsR0FBQTtJQUFBRSxLQUFBLEVBbUJuQyxTQUFRNDNDLHVCQUF1QkEsQ0FBQzE0QixjQUErQixFQUFFdzRCLGFBQXlCLEVBQVE7TUFBQSxJQUFBM2hDLE1BQUE7TUFDaEcsSUFBSW1KLGNBQWMsQ0FBQ3dJLGtCQUFrQixLQUFLLFFBQVEsRUFBRTtRQUNsRDtNQUNGO01BRUEsSUFBSSxDQUFDbUosZUFBZSxDQUFDTyxLQUFLLENBQUNweEIsS0FBSyxHQUFHaXZCLCtEQUFZLENBQUNxTCxZQUFZO01BRTVELElBQUksSUFBSSxDQUFDeEosc0JBQXNCLENBQUNtSywrQkFBK0IsR0FBR256Qiw2Q0FBRyxDQUFDZ3lDLDhDQUE4QyxJQUFJLENBQUNoeUMsNkNBQUcsQ0FBQ2l5QyxvQ0FBb0MsRUFBRTtRQUFBLElBQUFDLHNCQUFBO1FBQ2pLLElBQUksQ0FBQ2xwQixzQkFBc0IsQ0FBQ21LLCtCQUErQixFQUFFO1FBRTdELElBQU1nZixpQkFBaUIsR0FBRyxFQUFBRCxzQkFBQSxHQUFBOTZCLGNBQWMsQ0FBQ3NJLHVCQUF1QixjQUFBd3lCLHNCQUFBLHVCQUF0Q0Esc0JBQUEsQ0FBd0MveUMsSUFBSSxNQUFLLE9BQU87UUFFbEYsSUFBSTNDLHVFQUFpQixDQUFDNnlDLG1CQUFtQixJQUN2QyxDQUFDajRCLGNBQWMsQ0FBQ2s0Qix3QkFBd0IsSUFDeEMsQ0FBQ2w0QixjQUFjLENBQUNtNEIsd0JBQXdCLElBQ3hDLENBQUM0QyxpQkFBaUIsRUFDbEI7VUFDQTtRQUNGO1FBRUEsSUFBSSxDQUFDN3dDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdEQUFnRCxDQUFDO1FBRW5FLElBQU1tZSx1QkFBdUIsR0FBR3RJLGNBQWMsQ0FBQ3NJLHVCQUF1QjtRQUN0RSxJQUFNdkwsT0FBTyxHQUFHaUQsY0FBYyxDQUFDc0IsV0FBVyxDQUFDO1VBQUMwNUIsVUFBVSxFQUFFO1FBQUksQ0FBQyxDQUFDLENBQUM1K0IsSUFBSSxDQUFDLFVBQUE2K0IsS0FBSyxFQUFJO1VBQzNFLE9BQU9qN0IsY0FBYyxDQUFDeUosbUJBQW1CLENBQUN3eEIsS0FBSyxDQUFDLENBQUM3K0IsSUFBSSxDQUFDLFlBQU07WUFDMUQsT0FBTzRELGNBQWMsQ0FBQ3lKLG1CQUFtQixDQUFDbkIsdUJBQXVCLENBQUM7VUFDcEUsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLFNBQ00sQ0FBQyxVQUFBbmQsQ0FBQyxFQUFJO1VBQ1YwTCxNQUFJLENBQUMzTSxPQUFPLENBQUNTLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRVEsQ0FBQyxDQUFDO1VBQzVEMEwsTUFBSSxDQUFDK2Esc0JBQXNCLENBQUNtSywrQkFBK0IsR0FBRyxDQUFDO1VBQy9EeWMsYUFBYSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUo7TUFDRjtNQUVBLElBQUksQ0FBQ3R1QyxPQUFPLENBQUNDLElBQUksQ0FBQyxtRkFBbUYsRUFBRSxJQUFJLENBQUN5bkIsc0JBQXNCLENBQUNtSywrQkFBK0IsQ0FBQztNQUNuSyxJQUFJLENBQUNuSyxzQkFBc0IsQ0FBQ21LLCtCQUErQixHQUFHLENBQUM7TUFDL0R5YyxhQUFhLENBQUMsQ0FBQztJQUNqQjtFQUFDO0lBQUE1M0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWs0Qyw0Q0FBNENBLENBQUM3NUIsTUFBa0MsRUFBZ0I7TUFDckcsUUFBUUEsTUFBTTtRQUNaLEtBQUssSUFBSTtVQUNQLE9BQU80USwrREFBWSxDQUFDd0osUUFBUTtRQUM5QixLQUFLLGNBQWM7VUFDakIsT0FBT3hKLCtEQUFZLENBQUN5SixZQUFZO1FBQ2xDLEtBQUssV0FBVztRQUNoQixLQUFLLFVBQVU7UUFDZixLQUFLLGNBQWM7UUFDbkIsS0FBSyxTQUFTO1VBQ1osT0FBT3pKLCtEQUFZLENBQUMrSixVQUFVO1FBQ2hDLEtBQUssUUFBUTtVQUNYLE9BQU8vSiwrREFBWSxDQUFDenFCLEtBQUs7UUFDM0I7VUFDRXdPLG1FQUFpQixDQUFDcUwsTUFBTSxDQUFDO01BQzdCO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbG5CSDtBQUNBO0FBQ0E7O0FBRzJEO0FBQ2I7QUFFUztBQUNIO0FBQUEsSUFNL0IrN0IscUJBQXFCO0VBdUJ4QyxTQUFBQSxzQkFBQSxFQUFjO0lBQUE5NkMsaUZBQUEsT0FBQTg2QyxxQkFBQTtJQUNaLE1BQU0sSUFBSTUxQyxLQUFLLENBQUMsc0VBQXNFLENBQUM7RUFDekY7RUFBQyxPQUFBM0UsOEVBQUEsQ0FBQXU2QyxxQkFBQTtJQUFBdDZDLEdBQUE7SUFBQUUsS0FBQSxFQXRCRCxTQUFPbTVCLE1BQU1BLENBQUN4dkIsS0FBYSxFQUFFbXBDLGNBQThCLEVBQUVnRSxxQkFBNEMsRUFBRUMsc0JBQThDLEVBQUVoRSw2QkFBNEQsRUFBRTdaLG1CQUF3QyxFQUF1QjtNQUN0UixJQUFNbWhCLGlCQUFpQixHQUFHNXdDLGdFQUFjLENBQUNDLFVBQVUsQ0FBQ0MsS0FBSyxDQUFDLENBQUNrQixZQUFZO01BRXZFLElBQUl3dkMsaUJBQWlCLENBQUNoM0MsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzNDLElBQUksQ0FBQytGLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHdEQUF3RCxDQUFDO1FBQzVFaXBDLGNBQWMsQ0FBQzFoQixLQUFLLENBQUNweEIsS0FBSyxHQUFHaXZCLDhEQUFZLENBQUM4SixrQkFBa0I7UUFFNUQ7TUFDRjtNQUVBLElBQUlzaEIsaUJBQWlCLENBQUNoM0MsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzNDLElBQUksQ0FBQytGLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1EQUFtRCxDQUFDO1FBQ3ZFaXBDLGNBQWMsQ0FBQzFoQixLQUFLLENBQUNweEIsS0FBSyxHQUFHaXZCLDhEQUFZLENBQUM4SixrQkFBa0I7UUFFNUQ7TUFDRjtNQUVBLE9BQU8sSUFBSThkLHVEQUFjLENBQUMvRCxjQUFjLEVBQUVnRSxxQkFBcUIsRUFBRUMsc0JBQXNCLEVBQUVoRSw2QkFBNkIsRUFBRTdaLG1CQUFtQixDQUFDO0lBQzlJO0VBQUM7QUFBQTtBQUFBMzVCLGlGQUFBLENBckJrQjY2QyxxQkFBcUIsYUFDTnJ5Qyw2REFBYSxDQUFDRyxTQUFTLENBQUMsV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQnhFO0FBQ0E7QUFDQTtBQUZBLElBUXFCb25CLGlCQUFpQjtFQXNCcEMsU0FBQUEsa0JBQUEsRUFBYztJQUFBaHdCLGlGQUFBLE9BQUFnd0IsaUJBQUE7SUFDWixNQUFNLElBQUk5cUIsS0FBSyxDQUFDLGtFQUFrRSxDQUFDO0VBQ3JGO0VBQUMsT0FBQTNFLDhFQUFBLENBQUF5dkIsaUJBQUE7SUFBQXh2QixHQUFBO0lBQUFFLEtBQUEsRUF2QkQsU0FBTzY0Qix5QkFBeUJBLENBQXdEeWhCLElBQXVCLEVBQUUvbUMsSUFBMkIsRUFBRTtNQUM1SSxJQUFJLE9BQU9BLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDOUIsT0FBTztVQUNMaWtCLEtBQUssRUFBRSxLQUFLO1VBQ1pDLGdCQUFnQixnQkFBQTcwQixNQUFBLENBQWdCMDNDLElBQUksaURBQUExM0MsTUFBQSxDQUFBd1gseUVBQUEsQ0FBcUQ3RyxJQUFJO1FBQy9GLENBQUM7TUFDSDtNQUVBLElBQUlBLElBQUksQ0FBQ3RKLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTztVQUNMdXRCLEtBQUssRUFBRSxLQUFLO1VBQ1pDLGdCQUFnQixnQkFBQTcwQixNQUFBLENBQWdCMDNDLElBQUkseUVBQUExM0MsTUFBQSxDQUFzRTJRLElBQUksQ0FBQ3RKLE1BQU07UUFDdkgsQ0FBQztNQUNIO01BRUEsT0FBTztRQUNMdXRCLEtBQUssRUFBRSxJQUFJO1FBQ1hDLGdCQUFnQixFQUFFO01BQ3BCLENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Qkg7QUFDQTtBQUNBOztBQUUrQztBQUNRO0FBQ007QUFDdEI7QUFHNkI7QUFDaUM7QUFDUjtBQUFBLElBU3hFaWYsaUJBQWlCO0VBeVFwQyxTQUFBQSxrQkFBQSxFQUFjO0lBQUFwM0MsaUZBQUEsT0FBQW8zQyxpQkFBQTtJQUNaLE1BQU0sSUFBSWx5QyxLQUFLLENBQUMsa0VBQWtFLENBQUM7RUFDckY7RUFBQyxPQUFBM0UsOEVBQUEsQ0FBQTYyQyxpQkFBQTtJQUFBNTJDLEdBQUE7SUFBQUUsS0FBQSxFQTFRRCxTQUFPdzRDLDhCQUE4QkEsQ0FDbkNybEIsTUFBbUIsRUFDbkJtbEIsU0FBMkIsRUFDM0I1bkIsc0JBQTRFO0lBQUU7SUFDOUVDLHNCQUE0RTtJQUFFO0lBQzlFMU4sVUFBa0IsRUFDbEJGLFVBQWtCLEVBS2xCO01BQ0EsSUFBTThTLFdBQTJCLEdBQUcsSUFBSTUyQiw0REFBYyxDQUFDLENBQUM7TUFDeEQsSUFBTXc1QyxpQkFBaUIsR0FBRyxJQUFJdjVDLG1EQUFPLENBQWdELElBQUksQ0FBQztNQUMxRixJQUFNdzdDLGlCQUFpQixHQUFHLElBQUl4N0MsbURBQU8sQ0FBZ0QsSUFBSSxDQUFDO01BRTFGaTBCLE1BQU0sQ0FBQzlRLFNBQVMsQ0FBQyxDQUFDLENBQUNwUyxPQUFPLENBQUMsVUFBQXNTLEtBQUssRUFBSTtRQUNsQyxJQUFNdzJCLFFBQVEsR0FBR1QsU0FBUyxDQUFDcmMsTUFBTSxDQUFDLFVBQUEwZSxPQUFPO1VBQUEsT0FBSUEsT0FBTyxDQUFDcDRCLEtBQUssS0FBS0EsS0FBSztRQUFBLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBTTNHLElBQTBCLEdBQUcyRyxLQUFLLENBQUMzRyxJQUE0QjtRQUVyRSxRQUFRQSxJQUFJO1VBQ1YsS0FBSyxPQUFPO1lBQUU7Y0FDWixJQUFNZy9CLFFBQVEsR0FBRyxDQUFDLENBQUNscUIsc0JBQXNCOztjQUV6QztjQUNBLElBQUlwc0Isc0VBQWlCLENBQUMySSxnQ0FBZ0MsRUFBRTtnQkFDdEQ7Z0JBQ0E7Z0JBQ0EsSUFBTTR0QyxNQUFNLEdBQUdKLG9FQUFxQixDQUFDLENBQUM7Z0JBRXRDSSxNQUFNLENBQUNDLFNBQVM7a0JBQUEsSUFBQXowQyxJQUFBLEdBQUFpVyxtRkFBQSxjQUFBQyxzRUFBQSxDQUFHLFNBQUFFLFFBQU0wc0IsS0FBdUU7b0JBQUEsT0FBQTVzQixzRUFBQSxVQUFBTSxTQUFBQyxRQUFBO3NCQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO3dCQUFBOzBCQUM5Rnk3QixpQkFBaUIsQ0FBQ3o0QyxLQUFLLEdBQUc7NEJBQ3hCdWlCLEtBQUssRUFBTEEsS0FBSzs0QkFDTG1kLEtBQUssRUFBRXlKLEtBQUssQ0FBQ2ozQixJQUFJLENBQUN3dEI7MEJBQ3BCLENBQUM7MEJBQUM1aUIsUUFBQSxDQUFBdUQsRUFBQSxHQUVFdTZCLFFBQVE7MEJBQUEsS0FBQTk5QixRQUFBLENBQUF1RCxFQUFBOzRCQUFBdkQsUUFBQSxDQUFBRSxJQUFBOzRCQUFBOzBCQUFBOzBCQUFBRixRQUFBLENBQUFFLElBQUE7MEJBQUEsT0FBVzBULHNCQUFzQixDQUFDbk8sS0FBSyxFQUFFNG1CLEtBQUssQ0FBQ2ozQixJQUFJLENBQUN3dEIsS0FBSyxDQUFDO3dCQUFBOzBCQUFBNWlCLFFBQUEsQ0FBQXVELEVBQUEsSUFBQXZELFFBQUEsQ0FBQVEsSUFBQTt3QkFBQTswQkFBQSxLQUFBUixRQUFBLENBQUF1RCxFQUFBOzRCQUFBdkQsUUFBQSxDQUFBRSxJQUFBOzRCQUFBOzBCQUFBOzBCQUNwRTY5QixNQUFNLENBQUNFLFdBQVcsQ0FBQzs0QkFBQ0MsaUJBQWlCLEVBQUU7MEJBQUksQ0FBQyxDQUFDO3dCQUFDO3dCQUFBOzBCQUFBLE9BQUFsK0IsUUFBQSxDQUFBUyxJQUFBO3NCQUFBO29CQUFBLEdBQUFkLE9BQUE7a0JBQUEsQ0FFakQ7a0JBQUEsaUJBQUFlLEVBQUE7b0JBQUEsT0FBQW5YLElBQUEsQ0FBQW9YLEtBQUEsT0FBQWxMLFNBQUE7a0JBQUE7Z0JBQUE7Z0JBRUR3bUMsUUFBUSxDQUFDa0MsU0FBUyxHQUFHLElBQUl0dUMscUJBQXFCLENBQUNrdUMsTUFBTSxFQUFFO2tCQUNyRGovQixJQUFJLEVBQUUyRyxLQUFLLENBQUMzRyxJQUFJO2tCQUNoQnlJLEtBQUssRUFBRXBCLFVBQVU7a0JBQ2pCMjNCLFFBQVEsRUFBUkE7Z0JBQ0YsQ0FBQyxDQUFDO2dCQUNGL2tCLFdBQVcsQ0FBQ24xQixHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUMsWUFBTTtrQkFDbkM2N0MsTUFBTSxDQUFDSyxTQUFTLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBRUg7Y0FDRjs7Y0FFQTtjQUNBLElBQU1DLDhCQUF3RztnQkFBQSxJQUFBdjBDLEtBQUEsR0FBQTBWLG1GQUFBLGNBQUFDLHNFQUFBLENBQUcsU0FBQW9CLFNBQU0raEIsS0FBSyxFQUFFMGIsVUFBVTtrQkFBQSxJQUFBQyxTQUFBO2tCQUFBLE9BQUE5K0Isc0VBQUEsVUFBQXFCLFVBQUFDLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7c0JBQUE7d0JBQ3RJeTdCLGlCQUFpQixDQUFDejRDLEtBQUssR0FBRzswQkFDeEJ1aUIsS0FBSyxFQUFMQSxLQUFLOzBCQUNMbWQsS0FBSyxFQUFMQTt3QkFDRixDQUFDO3dCQUFDLEtBRUVrYixRQUFROzBCQUFBLzhCLFNBQUEsQ0FBQWIsSUFBQTswQkFBQTt3QkFBQTt3QkFBQWEsU0FBQSxDQUFBYixJQUFBO3dCQUFBLE9BQ0MwVCxzQkFBc0IsQ0FBQ25PLEtBQUssRUFBRW1kLEtBQUssQ0FBQztzQkFBQTt3QkFBQSxJQUFBN2hCLFNBQUEsQ0FBQVAsSUFBQTswQkFBQU8sU0FBQSxDQUFBYixJQUFBOzBCQUFBO3dCQUFBO3dCQUc3QyxJQUFJMGlCLEtBQUssQ0FBQ3o0QixJQUFJLEtBQUssS0FBSyxFQUFFOzBCQUN4Qm8wQyxTQUFTLEdBQUdkLGtFQUF5QixDQUFDZSw4QkFBOEIsQ0FBQ3I0QixVQUFVLENBQUM7d0JBQ2xGLENBQUMsTUFBTTswQkFDTG80QixTQUFTLEdBQUdkLGtFQUF5QixDQUFDZ0IsOEJBQThCLENBQUN0NEIsVUFBVSxDQUFDO3dCQUNsRjt3QkFBQyxNQUVHbzRCLFNBQVMsS0FBS2IsaUVBQVM7MEJBQUEzOEIsU0FBQSxDQUFBYixJQUFBOzBCQUFBO3dCQUFBO3dCQUFBLE9BQUFhLFNBQUEsQ0FBQVIsTUFBQTtzQkFBQTt3QkFJM0JxaUIsS0FBSyxDQUFDeHRCLElBQUksR0FBR21wQyxTQUFTLElBQUkzYixLQUFLLENBQUN4dEIsSUFBSTt3QkFBQzJMLFNBQUEsQ0FBQWIsSUFBQTt3QkFBQTtzQkFBQTt3QkFFckMsSUFBSTBpQixLQUFLLENBQUN6NEIsSUFBSSxLQUFLLEtBQUssRUFBRTswQkFDeEJ5NEIsS0FBSyxDQUFDeHRCLElBQUksR0FBR3FvQyxrRUFBeUIsQ0FBQ2lCLCtCQUErQixDQUFDdjRCLFVBQVUsQ0FBQyxJQUFJeWMsS0FBSyxDQUFDeHRCLElBQUk7d0JBQ2xHLENBQUMsTUFBTTswQkFDTHd0QixLQUFLLENBQUN4dEIsSUFBSSxHQUFHcW9DLGtFQUF5QixDQUFDa0IsK0JBQStCLENBQUN4NEIsVUFBVSxDQUFDLElBQUl5YyxLQUFLLENBQUN4dEIsSUFBSTt3QkFDbEc7c0JBQUM7d0JBSUxrcEMsVUFBVSxDQUFDTSxPQUFPLENBQUNoYyxLQUFLLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQTdoQixTQUFBLENBQUFOLElBQUE7b0JBQUE7a0JBQUEsR0FBQUksUUFBQTtnQkFBQSxDQUMzQjtnQkFBQSxnQkEvQkt3OUIsOEJBQXdHQSxDQUFBM3lCLEdBQUEsRUFBQUksR0FBQTtrQkFBQSxPQUFBaGlCLEtBQUEsQ0FBQTZXLEtBQUEsT0FBQWxMLFNBQUE7Z0JBQUE7Y0FBQSxHQStCN0c7Y0FFRCxJQUFNb3BDLFdBQVcsR0FBRyxJQUFJQyxlQUFlLENBQUM7Z0JBQUNYLFNBQVMsRUFBRUU7Y0FBOEIsQ0FBQyxDQUFDO2NBQ3BGLElBQU1VLGVBQWUsR0FBRzlDLFFBQVEsQ0FBQ3JzQyxvQkFBb0IsQ0FBRSxDQUFDO2NBQ3hELElBQU1vdkMsTUFBTSxHQUFHRCxlQUFlLENBQUNFLFFBQVE7Y0FDdkMsSUFBTUMsSUFBSSxHQUFHSCxlQUFlLENBQUNJLFFBQVE7Y0FFckNILE1BQU0sQ0FDSEksV0FBVyxDQUFDUCxXQUFXLENBQUMsQ0FDeEJRLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDO2NBRWY7WUFDRjtVQUVBLEtBQUssT0FBTztZQUFFO2NBQ1osSUFBTXBCLFNBQVEsR0FBRyxDQUFDLENBQUNqcUIsc0JBQXNCOztjQUV6QztjQUNBLElBQUlyc0Isc0VBQWlCLENBQUMySSxnQ0FBZ0MsRUFBRTtnQkFDdEQ7Z0JBQ0E7Z0JBQ0EsSUFBTTR0QyxPQUFNLEdBQUdKLG9FQUFxQixDQUFDLENBQUM7Z0JBRXRDSSxPQUFNLENBQUNDLFNBQVM7a0JBQUEsSUFBQTVTLEtBQUEsR0FBQTVyQixtRkFBQSxjQUFBQyxzRUFBQSxDQUFHLFNBQUE4QyxTQUFNOHBCLEtBQXVFO29CQUFBLE9BQUE1c0Isc0VBQUEsVUFBQW1ELFVBQUFDLFNBQUE7c0JBQUEsa0JBQUFBLFNBQUEsQ0FBQTVDLElBQUEsR0FBQTRDLFNBQUEsQ0FBQTNDLElBQUE7d0JBQUE7MEJBQzlGMDlCLGlCQUFpQixDQUFDMTZDLEtBQUssR0FBRzs0QkFDeEJ1aUIsS0FBSyxFQUFMQSxLQUFLOzRCQUNMbWQsS0FBSyxFQUFFeUosS0FBSyxDQUFDajNCLElBQUksQ0FBQ3d0QjswQkFDcEIsQ0FBQzswQkFBQy9mLFNBQUEsQ0FBQVUsRUFBQSxHQUVFdTZCLFNBQVE7MEJBQUEsS0FBQWo3QixTQUFBLENBQUFVLEVBQUE7NEJBQUFWLFNBQUEsQ0FBQTNDLElBQUE7NEJBQUE7MEJBQUE7MEJBQUEyQyxTQUFBLENBQUEzQyxJQUFBOzBCQUFBLE9BQVcyVCxzQkFBc0IsQ0FBQ3BPLEtBQUssRUFBRTRtQixLQUFLLENBQUNqM0IsSUFBSSxDQUFDd3RCLEtBQUssQ0FBQzt3QkFBQTswQkFBQS9mLFNBQUEsQ0FBQVUsRUFBQSxJQUFBVixTQUFBLENBQUFyQyxJQUFBO3dCQUFBOzBCQUFBLEtBQUFxQyxTQUFBLENBQUFVLEVBQUE7NEJBQUFWLFNBQUEsQ0FBQTNDLElBQUE7NEJBQUE7MEJBQUE7MEJBQ3BFNjlCLE9BQU0sQ0FBQ0UsV0FBVyxDQUFDOzRCQUFDQyxpQkFBaUIsRUFBRTswQkFBSSxDQUFDLENBQUM7d0JBQUM7d0JBQUE7MEJBQUEsT0FBQXI3QixTQUFBLENBQUFwQyxJQUFBO3NCQUFBO29CQUFBLEdBQUE4QixRQUFBO2tCQUFBLENBRWpEO2tCQUFBLGlCQUFBK0osR0FBQTtvQkFBQSxPQUFBOGUsS0FBQSxDQUFBenFCLEtBQUEsT0FBQWxMLFNBQUE7a0JBQUE7Z0JBQUE7Z0JBRUR3bUMsUUFBUSxDQUFDa0MsU0FBUyxHQUFHLElBQUl0dUMscUJBQXFCLENBQUNrdUMsT0FBTSxFQUFFO2tCQUNyRGovQixJQUFJLEVBQUUyRyxLQUFLLENBQUMzRyxJQUFJO2tCQUNoQnlJLEtBQUssRUFBRXRCLFVBQVU7a0JBQ2pCNjNCLFFBQVEsRUFBUkE7Z0JBQ0YsQ0FBQyxDQUFDO2dCQUVGLElBQU01NEIsV0FBVyxHQUFHLElBQUk5VCxXQUFXLENBQUMsQ0FBQztnQkFDckMsSUFBTWt1QyxXQUFXLEdBQUcsSUFBSUMsS0FBSyxDQUFDLENBQUM7Z0JBRS9CRCxXQUFXLENBQUM5bUIsU0FBUyxHQUFHdFQsV0FBVztnQkFDbkN0VSxRQUFRLENBQUMwUCxJQUFJLENBQUNrL0IsV0FBVyxDQUFDRixXQUFXLENBQUM7Z0JBRXRDdm1CLFdBQVcsQ0FBQ24xQixHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUMsWUFBTTtrQkFDbkM2N0MsT0FBTSxDQUFDSyxTQUFTLENBQUMsQ0FBQztrQkFDbEJ4dEMsUUFBUSxDQUFDMFAsSUFBSSxDQUFDbS9CLFdBQVcsQ0FBQ0gsV0FBVyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFFSDtjQUNGOztjQUVBO2NBQ0EsSUFBTWpCLCtCQUF3RztnQkFBQSxJQUFBNVMsS0FBQSxHQUFBanNCLG1GQUFBLGNBQUFDLHNFQUFBLENBQUcsU0FBQXVNLFNBQU00VyxLQUFLLEVBQUUwYixVQUFVO2tCQUFBLE9BQUE3K0Isc0VBQUEsVUFBQTBNLFVBQUFDLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQW5NLElBQUEsR0FBQW1NLFNBQUEsQ0FBQWxNLElBQUE7c0JBQUE7d0JBQ3RJMDlCLGlCQUFpQixDQUFDMTZDLEtBQUssR0FBRzswQkFDeEJ1aUIsS0FBSyxFQUFMQSxLQUFLOzBCQUNMbWQsS0FBSyxFQUFMQTt3QkFDRixDQUFDO3dCQUFDLEtBRUVrYixTQUFROzBCQUFBMXhCLFNBQUEsQ0FBQWxNLElBQUE7MEJBQUE7d0JBQUE7d0JBQUFrTSxTQUFBLENBQUFsTSxJQUFBO3dCQUFBLE9BQ0MyVCxzQkFBc0IsQ0FBQ3BPLEtBQUssRUFBRW1kLEtBQUssQ0FBQztzQkFBQTt3QkFBQSxJQUFBeFcsU0FBQSxDQUFBNUwsSUFBQTswQkFBQTRMLFNBQUEsQ0FBQWxNLElBQUE7MEJBQUE7d0JBQUE7d0JBQzdDMGlCLEtBQUssQ0FBQ3h0QixJQUFJLEdBQUdxb0Msa0VBQXlCLENBQUNpQyw0QkFBNEIsQ0FBQyxDQUFDO3dCQUFDdHpCLFNBQUEsQ0FBQWxNLElBQUE7d0JBQUE7c0JBQUE7d0JBRXRFMGlCLEtBQUssQ0FBQ3h0QixJQUFJLEdBQUdxb0Msa0VBQXlCLENBQUNrQywrQkFBK0IsQ0FBQzE1QixVQUFVLENBQUMsSUFBSTJjLEtBQUssQ0FBQ3h0QixJQUFJO3NCQUFDO3dCQUlyR2twQyxVQUFVLENBQUNNLE9BQU8sQ0FBQ2hjLEtBQUssQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBeFcsU0FBQSxDQUFBM0wsSUFBQTtvQkFBQTtrQkFBQSxHQUFBdUwsUUFBQTtnQkFBQSxDQUMzQjtnQkFBQSxnQkFmS3F5QiwrQkFBd0dBLENBQUEvTSxHQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQTlGLEtBQUEsQ0FBQTlxQixLQUFBLE9BQUFsTCxTQUFBO2dCQUFBO2NBQUEsR0FlN0c7Y0FFRCxJQUFNb3BDLFlBQVcsR0FBRyxJQUFJQyxlQUFlLENBQUM7Z0JBQUNYLFNBQVMsRUFBRUU7Y0FBOEIsQ0FBQyxDQUFDO2NBQ3BGLElBQU1VLGdCQUFlLEdBQUc5QyxRQUFRLENBQUNyc0Msb0JBQW9CLENBQUUsQ0FBQztjQUN4RCxJQUFNb3ZDLE9BQU0sR0FBR0QsZ0JBQWUsQ0FBQ0UsUUFBUTtjQUN2QyxJQUFNQyxLQUFJLEdBQUdILGdCQUFlLENBQUNJLFFBQVE7Y0FFckNILE9BQU0sQ0FDSEksV0FBVyxDQUFDUCxZQUFXLENBQUMsQ0FDeEJRLE1BQU0sQ0FBQ0gsS0FBSSxDQUFDO2NBRWY7WUFDRjtVQUVBO1lBQ0VocEMsbUVBQWlCLENBQUM0SSxJQUFJLENBQUM7UUFDM0I7TUFDRixDQUFDLENBQUM7TUFFRixPQUFPO1FBQ0xpYSxXQUFXLEVBQVhBLFdBQVc7UUFDWDRpQixpQkFBaUIsRUFBakJBLGlCQUFpQjtRQUNqQmlDLGlCQUFpQixFQUFqQkE7TUFDRixDQUFDO0lBQ0g7RUFBQztJQUFBNTZDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9tNUMsdUNBQXVDQSxDQUFDaG1CLE1BQW1CLEVBQUUzQyw0QkFBMkUsRUFBRUMsNEJBQTBFLEVBQWlFO01BQzFSLElBQU0yb0IsaUJBQWlCLEdBQUcsSUFBSWxyQyxXQUFXLENBQUMsQ0FBQztNQUMzQyxJQUFNMm5CLFdBQTJCLEdBQUcsSUFBSTUyQiw0REFBYyxDQUFDLENBQUM7TUFFeERrMEIsTUFBTSxDQUFDOVEsU0FBUyxDQUFDLENBQUMsQ0FBQ3BTLE9BQU8sQ0FBQyxVQUFBc1MsS0FBSyxFQUFJO1FBQ2xDLElBQU0zRyxJQUEwQixHQUFHMkcsS0FBSyxDQUFDM0csSUFBNEI7UUFFckUsUUFBUUEsSUFBSTtVQUNWLEtBQUssT0FBTztZQUFFO2NBQ1osSUFBSTRVLDRCQUE0QixFQUFFO2dCQUNoQyxJQUFNa3NCLGlDQUF1RixHQUFHLFNBQTFGQSxpQ0FBdUZBLENBQUloZCxLQUFLLEVBQUUwYixVQUFVLEVBQUs7a0JBQ3JINXFCLDRCQUE0QixDQUFDak8sS0FBSyxFQUFFbWQsS0FBSyxFQUFFMGIsVUFBVSxDQUFDO2dCQUN4RCxDQUFDO2dCQUVELElBQU11QixVQUFVLEdBQUdwNkIsS0FBOEI7Z0JBQ2pELElBQU1vNUIsV0FBVyxHQUFHLElBQUlDLGVBQWUsQ0FBQztrQkFBQ1gsU0FBUyxFQUFFeUI7Z0JBQWlDLENBQUMsQ0FBQztnQkFDdkYsSUFBTUUsU0FBUyxHQUFHLElBQUl0d0MseUJBQXlCLENBQUM7a0JBQUNpVyxLQUFLLEVBQUVvNkI7Z0JBQVUsQ0FBQyxDQUFDO2dCQUNwRSxJQUFNRSxTQUFTLEdBQUcsSUFBSXR3Qyx5QkFBeUIsQ0FBQztrQkFBQ3FQLElBQUksRUFBRStnQyxVQUFVLENBQUMvZ0M7Z0JBQUksQ0FBQyxDQUFDO2dCQUN4RSxJQUFNa2dDLE1BQU0sR0FBR2MsU0FBUyxDQUFDYixRQUFRO2dCQUNqQyxJQUFNQyxJQUFJLEdBQUdhLFNBQVMsQ0FBQ1osUUFBUTtnQkFFL0JILE1BQU0sQ0FDSEksV0FBVyxDQUFDUCxXQUFXLENBQUMsQ0FDeEJRLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDO2dCQUVmNUMsaUJBQWlCLENBQUN6dkIsUUFBUSxDQUFDa3pCLFNBQVMsQ0FBQztnQkFDckNobkIsV0FBVyxDQUFDbjFCLEdBQUcsQ0FBQyxJQUFJMUIsd0RBQVUsQ0FBQyxZQUFNO2tCQUNuQ282QyxpQkFBaUIsQ0FBQzBELFdBQVcsQ0FBQ0QsU0FBUyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsQ0FBQztjQUNMLENBQUMsTUFBTTtnQkFDTHpELGlCQUFpQixDQUFDenZCLFFBQVEsQ0FBQ3BILEtBQUssQ0FBQztjQUNuQztjQUVBO1lBQ0Y7VUFFQSxLQUFLLE9BQU87WUFBRTtjQUNaLElBQUlrTyw0QkFBNEIsRUFBRTtnQkFDaEMsSUFBTWlzQixrQ0FBcUYsR0FBRyxTQUF4RkEsa0NBQXFGQSxDQUFJaGQsS0FBSyxFQUFFMGIsVUFBVSxFQUFLO2tCQUNuSDNxQiw0QkFBNEIsQ0FBQ2xPLEtBQUssRUFBRW1kLEtBQUssRUFBRTBiLFVBQVUsQ0FBQztnQkFDeEQsQ0FBQztnQkFFRCxJQUFNMkIsVUFBVSxHQUFHeDZCLEtBQThCO2dCQUNqRCxJQUFNbzVCLGFBQVcsR0FBRyxJQUFJQyxlQUFlLENBQUM7a0JBQUNYLFNBQVMsRUFBRXlCO2dCQUFpQyxDQUFDLENBQUM7Z0JBQ3ZGLElBQU1FLFVBQVMsR0FBRyxJQUFJdHdDLHlCQUF5QixDQUFDO2tCQUFDaVcsS0FBSyxFQUFFdzZCO2dCQUFVLENBQUMsQ0FBQztnQkFDcEUsSUFBTUYsVUFBUyxHQUFHLElBQUl0d0MseUJBQXlCLENBQUM7a0JBQUNxUCxJQUFJLEVBQUVtaEMsVUFBVSxDQUFDbmhDO2dCQUFJLENBQUMsQ0FBQztnQkFDeEUsSUFBTWtnQyxRQUFNLEdBQUdjLFVBQVMsQ0FBQ2IsUUFBUTtnQkFDakMsSUFBTUMsTUFBSSxHQUFHYSxVQUFTLENBQUNaLFFBQVE7Z0JBRS9CSCxRQUFNLENBQ0hJLFdBQVcsQ0FBQ1AsYUFBVyxDQUFDLENBQ3hCUSxNQUFNLENBQUNILE1BQUksQ0FBQztnQkFFZjVDLGlCQUFpQixDQUFDenZCLFFBQVEsQ0FBQ2t6QixVQUFTLENBQUM7Z0JBRXJDLElBQU03NkIsV0FBVyxHQUFHLElBQUk5VCxXQUFXLENBQUMsQ0FBQztnQkFDckMsSUFBTWt1QyxXQUFXLEdBQUcsSUFBSUMsS0FBSyxDQUFDLENBQUM7Z0JBRS9CcjZCLFdBQVcsQ0FBQzJILFFBQVEsQ0FBQ3BILEtBQUssQ0FBQztnQkFDM0I2NUIsV0FBVyxDQUFDOW1CLFNBQVMsR0FBR3RULFdBQVc7Z0JBQ25DdFUsUUFBUSxDQUFDMFAsSUFBSSxDQUFDay9CLFdBQVcsQ0FBQ0YsV0FBVyxDQUFDO2dCQUN0Q3ZtQixXQUFXLENBQUNuMUIsR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDLFlBQU07a0JBQ25DbzZDLGlCQUFpQixDQUFDMEQsV0FBVyxDQUFDRCxVQUFTLENBQUM7a0JBQ3hDbnZDLFFBQVEsQ0FBQzBQLElBQUksQ0FBQ20vQixXQUFXLENBQUNILFdBQVcsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7Y0FDTCxDQUFDLE1BQU07Z0JBQ0xoRCxpQkFBaUIsQ0FBQ3p2QixRQUFRLENBQUNwSCxLQUFLLENBQUM7Y0FDbkM7Y0FFQTtZQUNGO1VBRUE7WUFDRXZQLG1FQUFpQixDQUFDNEksSUFBSSxDQUFDO1FBQzNCO01BQ0YsQ0FBQyxDQUFDO01BRUYsT0FBTztRQUNMdzlCLGlCQUFpQixFQUFqQkEsaUJBQWlCO1FBQ2pCdmpCLFdBQVcsRUFBWEE7TUFDRixDQUFDO0lBQ0g7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Ukg7QUFDQTtBQUNBO0FBRkEsSUFRcUJ0RyxvQkFBb0I7RUFBQSxTQUFBQSxxQkFBQTtJQUFBandCLGlGQUFBLE9BQUFpd0Isb0JBQUE7RUFBQTtFQUFBLE9BQUExdkIsOEVBQUEsQ0FBQTB2QixvQkFBQTtJQUFBenZCLEdBQUE7SUFBQUUsS0FBQSxFQUN2QyxTQUFPMjRCLGlDQUFpQ0EsQ0FBbUMyaEIsSUFBdUIsRUFBRS9tQyxJQUE4QixFQUFFO01BQ2xJLElBQUksT0FBT0EsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUM5QixPQUFPO1VBQ0xpa0IsS0FBSyxFQUFFLEtBQUs7VUFDWkMsZ0JBQWdCLGdCQUFBNzBCLE1BQUEsQ0FBZ0IwM0MsSUFBSSwwREFBQTEzQyxNQUFBLENBQUF3WCx5RUFBQSxDQUE4RDdHLElBQUk7UUFDeEcsQ0FBQztNQUNIO01BRUEsSUFBSUEsSUFBSSxDQUFDdEosTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNyQixPQUFPO1VBQ0x1dEIsS0FBSyxFQUFFLEtBQUs7VUFDWkMsZ0JBQWdCLGdCQUFBNzBCLE1BQUEsQ0FBZ0IwM0MsSUFBSSxrRkFBQTEzQyxNQUFBLENBQStFMlEsSUFBSSxDQUFDdEosTUFBTTtRQUNoSSxDQUFDO01BQ0g7TUFFQSxPQUFPO1FBQ0x1dEIsS0FBSyxFQUFFLElBQUk7UUFDWEMsZ0JBQWdCLEVBQUU7TUFDcEIsQ0FBQztJQUNIO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Qkg7QUFDQTtBQUNBOztBQUV3RDtBQUVqRCxJQUFNK2lCLFNBQVMsR0FBR3dDLE1BQU0sQ0FBQyxDQUFDO0FBQUMsSUFJYnpDLHlCQUF5QjtFQTJKNUMsU0FBQUEsMEJBQUEsRUFBc0I7SUFBQWo3QyxpRkFBQSxPQUFBaTdDLHlCQUFBO0lBQ3BCLE1BQU0sSUFBSS8xQyxLQUFLLENBQUMsMEVBQTBFLENBQUM7RUFDN0Y7RUFBQyxPQUFBM0UsOEVBQUEsQ0FBQTA2Qyx5QkFBQTtJQUFBejZDLEdBQUE7SUFBQUUsS0FBQSxFQXhIRCxTQUFPeThDLCtCQUErQkEsQ0FBQ3A0QixLQUFhLEVBQTJCO01BQzdFLFFBQVFBLEtBQUssQ0FBQ3MwQixXQUFXLENBQUMsQ0FBQztRQUN6QixLQUFLLE1BQU07VUFBRTtZQUNYLE9BQU80Qix5QkFBeUIsQ0FBQzBDLHlCQUF5QixDQUFDQyxJQUFJLENBQUMzYSxNQUFNO1VBQ3hFO1FBRUE7VUFBUztZQUNQLE9BQU8zOEIsU0FBUztVQUNsQjtNQUNGO0lBQ0Y7RUFBQztJQUFBOUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3c4Qyw0QkFBNEJBLENBQUEsRUFBZ0I7TUFDakQsT0FBT2pDLHlCQUF5QixDQUFDNEMsZUFBZSxDQUFDNWEsTUFBTTtJQUN6RDtFQUFDO0lBQUF6aUMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3c3QywrQkFBK0JBLENBQUNuM0IsS0FBYSxFQUEyQjtNQUM3RSxRQUFRQSxLQUFLLENBQUNzMEIsV0FBVyxDQUFDLENBQUM7UUFDekIsS0FBSyxNQUFNO1VBQUU7WUFDWCxJQUFJNEIseUJBQXlCLENBQUM2Qyx5Q0FBeUMsRUFBRTtjQUN2RTdDLHlCQUF5QixDQUFDOEMsZ0NBQWdDLEdBQUc5Qyx5QkFBeUIsQ0FBQytDLHFDQUFxQztjQUU1SCxPQUFPL0MseUJBQXlCLENBQUNnRCxlQUFlLENBQUNDLE1BQU0sQ0FBQ2piLE1BQU07WUFDaEU7WUFFQSxPQUFPZ1kseUJBQXlCLENBQUNrRCw0QkFBNEIsQ0FBQ0MsSUFBSSxDQUFDbmIsTUFBTTtVQUMzRTtRQUVBLEtBQUssS0FBSztVQUFFO1lBQ1YsT0FBT2dZLHlCQUF5QixDQUFDa0QsNEJBQTRCLENBQUNFLEdBQUcsQ0FBQ3BiLE1BQU07VUFDMUU7UUFFQSxLQUFLLEtBQUs7VUFBRTtZQUNWLE9BQU9nWSx5QkFBeUIsQ0FBQ2tELDRCQUE0QixDQUFDRyxHQUFHLENBQUNyYixNQUFNO1VBQzFFO1FBRUE7VUFBUztZQUNQLE9BQU8zOEIsU0FBUztVQUNsQjtNQUNGO0lBQ0Y7RUFBQztJQUFBOUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3M3Qyw4QkFBOEJBLENBQUNqM0IsS0FBYSxFQUFzQjtNQUN2RSxJQUFLQSxLQUFLLENBQUNzMEIsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUs0Qix5QkFBeUIsQ0FBQzZDLHlDQUF5QyxFQUFFO1FBQzNHN0MseUJBQXlCLENBQUM4QyxnQ0FBZ0MsR0FBRzlDLHlCQUF5QixDQUFDK0MscUNBQXFDO1FBRTVILElBQUkvQyx5QkFBeUIsQ0FBQ3NELGdCQUFnQixFQUFFO1VBQzlDLE9BQU9yRCxTQUFTO1FBQ2xCO01BQ0Y7TUFFQSxPQUFPRCx5QkFBeUIsQ0FBQzRDLGVBQWUsQ0FBQzVhLE1BQU07SUFDekQ7RUFBQztJQUFBemlDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU95N0MsK0JBQStCQSxDQUFDcDNCLEtBQWEsRUFBMkI7TUFDN0UsUUFBUUEsS0FBSyxDQUFDczBCLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssTUFBTTtVQUFFO1lBQ1gsSUFBSTRCLHlCQUF5QixDQUFDNkMseUNBQXlDLEVBQUU7Y0FDdkUsSUFBTTdhLE1BQU0sR0FBR2dZLHlCQUF5QixDQUFDdUQsMkNBQTJDLENBQUMsQ0FBQztjQUV0RixPQUFPdmIsTUFBTTtZQUNmO1lBRUEsT0FBT2dZLHlCQUF5QixDQUFDd0QsNEJBQTRCLENBQUNMLElBQUksQ0FBQ25iLE1BQU07VUFDM0U7UUFFQSxLQUFLLEtBQUs7VUFBRTtZQUNWLE9BQU9nWSx5QkFBeUIsQ0FBQ3dELDRCQUE0QixDQUFDSixHQUFHLENBQUNwYixNQUFNO1VBQzFFO1FBRUEsS0FBSyxLQUFLO1VBQUU7WUFDVixPQUFPZ1kseUJBQXlCLENBQUN3RCw0QkFBNEIsQ0FBQ0gsR0FBRyxDQUFDcmIsTUFBTTtVQUMxRTtRQUVBO1VBQVM7WUFDUCxPQUFPMzhCLFNBQVM7VUFDbEI7TUFDRjtJQUNGO0VBQUM7SUFBQTlGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU91N0MsOEJBQThCQSxDQUFDbDNCLEtBQWEsRUFBc0I7TUFDdkUsSUFBS0EsS0FBSyxDQUFDczBCLFdBQVcsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFLNEIseUJBQXlCLENBQUM2Qyx5Q0FBeUMsRUFBRTtRQUMzRyxJQUFNWSx5QkFBeUIsR0FBR3pELHlCQUF5QixDQUFDOEMsZ0NBQWdDO1FBQzVGLElBQU05YSxNQUFNLEdBQUdnWSx5QkFBeUIsQ0FBQ3VELDJDQUEyQyxDQUFDLENBQUM7UUFFdEYsSUFBSUUseUJBQXlCLEdBQUd6RCx5QkFBeUIsQ0FBQytDLHFDQUFxQyxFQUFFO1VBQy9GLElBQUkvQyx5QkFBeUIsQ0FBQ3NELGdCQUFnQixFQUFFO1lBQzlDLE9BQU9yRCxTQUFTO1VBQ2xCO1VBRUEsT0FBT0QseUJBQXlCLENBQUM0QyxlQUFlLENBQUM1YSxNQUFNO1FBQ3pEO1FBRUFnWSx5QkFBeUIsQ0FBQzhDLGdDQUFnQyxFQUFFO1FBRTVELE9BQU85YSxNQUFNO01BQ2Y7TUFFQSxPQUFPZ1kseUJBQXlCLENBQUM0QyxlQUFlLENBQUM1YSxNQUFNO0lBQ3pEO0VBQUM7SUFBQXppQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFlODlDLDJDQUEyQ0EsQ0FBQSxFQUFnQjtNQUN4RSxJQUFNRyxRQUFRLEdBQUcsSUFBSTtNQUNyQixJQUFNQyxRQUFRLEdBQUcsSUFBSTtNQUNyQixJQUFNQyxnQkFBZ0IsR0FBRyxDQUFDO01BQzFCLElBQU1DLGVBQWUsR0FBRyxDQUFDO01BQ3pCLElBQU1DLEtBQUssR0FBSSxDQUFDOUQseUJBQXlCLENBQUM4QyxnQ0FBZ0MsR0FBR1ksUUFBUSxLQUFLRSxnQkFBaUI7TUFDM0csSUFBTUcsS0FBSyxHQUFJLENBQUMvRCx5QkFBeUIsQ0FBQzhDLGdDQUFnQyxHQUFHYSxRQUFRLEtBQUtFLGVBQWdCO01BQzFHLElBQU1HLGtCQUFrQixHQUFHaEUseUJBQXlCLENBQUNnRCxlQUFlLENBQUNpQixNQUFNLENBQUN6Z0MsS0FBSyxDQUFDLENBQUM7TUFDbkYsSUFBTTBnQyxXQUFXLEdBQUdsRSx5QkFBeUIsQ0FBQ21FLHFDQUFxQztNQUVuRkgsa0JBQWtCLENBQUNFLFdBQVcsQ0FBQyxJQUFJSixLQUFLO01BQ3hDRSxrQkFBa0IsQ0FBQ0UsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJSCxLQUFLO01BQzVDL0QseUJBQXlCLENBQUM4QyxnQ0FBZ0MsRUFBRTtNQUU1RCxPQUFPa0Isa0JBQWtCLENBQUNoYyxNQUFNO0lBQ2xDO0VBQUM7QUFBQTtBQUFBb2MsMEJBQUEsR0F6SmtCcEUseUJBQXlCO0FBQUFoN0MsaUZBQUEsQ0FBekJnN0MseUJBQXlCLGVBQ1IxNUMsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxRQUFRO0FBQUE1TSxpRkFBQSxDQUR6RGc3Qyx5QkFBeUIscUJBRUYxNUMsNERBQWUsQ0FBQ3NMLFdBQVcsS0FBSyxRQUFRLElBQUl0TCw0REFBZSxDQUFDYSxRQUFRLENBQUMsQ0FBQztBQUFBbkMsaUZBQUEsQ0FGN0ZnN0MseUJBQXlCLHNCQUdEMTVDLDREQUFlLENBQUNzTCxXQUFXLEtBQUssUUFBUSxJQUFJdEwsNERBQWUsQ0FBQys5QyxTQUFTO0FBQUFyL0MsaUZBQUEsQ0FIN0ZnN0MseUJBQXlCLHFCQUlGLElBQUlqWSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUFBL2lDLGlGQUFBLENBSjdDZzdDLHlCQUF5QiwrQkFLUTtFQUFDMkMsSUFBSSxFQUFFLElBQUk1YSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFBQyxDQUFDO0FBQUEvaUMsaUZBQUEsQ0FMdlJnN0MseUJBQXlCLGtDQU1XO0VBQ3JEbUQsSUFBSSxFQUFFLElBQUlwYixVQUFVLENBQUMsQ0FDbkIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3hLLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUM1RDtFQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQ3hMcWIsR0FBRyxFQUFFLElBQUlyYixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN6U3NiLEdBQUcsRUFBRSxJQUFJdGIsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwTSxDQUFDO0FBQUEvaUMsaUZBQUEsQ0Fka0JnN0MseUJBQXlCLGtDQWVXO0VBQ3JEbUQsSUFBSSxFQUFFLElBQUlwYixVQUFVLENBQUMsQ0FDbkIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQUU7RUFDMUdxYixHQUFHLEVBQUUsSUFBSXJiLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3ZSc2IsR0FBRyxFQUFFLElBQUl0YixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNoSCxDQUFDO0FBQUEvaUMsaUZBQUEsQ0FyQmtCZzdDLHlCQUF5QixxQkFzQkY7RUFDeENpRCxNQUFNLEVBQUUsSUFBSWxiLFVBQVUsRUFDcEIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDbEssSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUNoRCxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQTEvQixNQUFBLENBQUF1YixvRkFBQSxDQUFLLElBQUlta0IsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDM3dCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRSxJQUFJLEdBQUF3TSxvRkFBQSxDQUFLLElBQUlta0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDM3dCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRSxJQUFJO0VBQUU7RUFDdkgsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBQXdNLG9GQUFBLENBQUssSUFBSW1rQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMzd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO0VBQUU7RUFDalM2c0MsTUFBTSxFQUFFLElBQUlsYyxVQUFVLEVBQ3BCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFBMS9CLE1BQUEsQ0FBQXViLG9GQUFBLENBQUssSUFBSW1rQixVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMzd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLElBQUksR0FBQXdNLG9GQUFBLENBQUssSUFBSW1rQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMzd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLElBQUk7RUFBRTtFQUN2SCxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFBQXBTLGlGQUFBLENBL0JrQmc3Qyx5QkFBeUIsMkNBZ0NvQixLQUFLO0FBQUFoN0MsaUZBQUEsQ0FoQ2xEZzdDLHlCQUF5QiwyQ0FpQ29CLENBQUM7QUFBQWg3QyxpRkFBQSxDQWpDOUNnN0MseUJBQXlCLCtDQWtDd0JBLDBCQUF5QixDQUFDc0UsZUFBZSxJQUFJdEUsMEJBQXlCLENBQUN1RSxTQUFTO0FBQUF2L0MsaUZBQUEsQ0FsQ2pJZzdDLHlCQUF5QixzQ0FtQ01BLDBCQUF5QixDQUFDK0MscUNBQXFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3Q25IO0FBQ0E7QUFDQTtBQUZBLElBTXFCdGlDLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUExYixpRkFBQSxPQUFBMGIsY0FBQTtFQUFBO0VBQUEsT0FBQW5iLDhFQUFBLENBQUFtYixjQUFBO0lBQUFsYixHQUFBO0lBQUFDLEdBQUEsRUFHakMsU0FBQUEsSUFBQSxFQUFnQztNQUM5QixJQUFJO1FBQ0YsT0FBT2cvQyw4Q0FBaUI7TUFDMUIsQ0FBQyxDQUFDLE9BQU8xMEMsQ0FBQyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUMyMEMsZUFBZTtNQUM3QjtJQUNGO0VBQUM7QUFBQTtBQUFBei9DLGlGQUFBLENBVGtCeWIsY0FBYyxxQkFDQSxJQUFJeGIsSUFBSSxDQUFDLENBQUMsQ0FBQzBVLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUDNEO0FBQ0E7QUFDQTs7QUFFa0Q7QUFBQSxJQUs3QitDLGlCQUFpQjtFQU1wQyxTQUFBQSxrQkFBWXlWLHNCQUE4QyxFQUFFO0lBQUFwdEIsaUZBQUEsT0FBQTJYLGlCQUFBO0lBQUExWCxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQTtJQUMxRCxJQUFJLENBQUNvYSxRQUFRLEdBQUcrUyxzQkFBc0IsQ0FBQzlTLE9BQU87SUFDOUMsSUFBSSxDQUFDQyxVQUFVLEdBQUc2UyxzQkFBc0IsQ0FBQzVTLFNBQVM7SUFDbEQsSUFBSSxDQUFDbkcsVUFBVSxHQUFHK1ksc0JBQXNCLENBQUNoWixTQUFTO0lBQ2xELElBQUksQ0FBQ3dyQyxpQkFBaUIsR0FBRyxJQUFJRCx5REFBZ0IsQ0FBQ3Z5QixzQkFBc0IsQ0FBQztFQUN2RTtFQUFDLE9BQUE3c0IsOEVBQUEsQ0FBQW9YLGlCQUFBO0lBQUFuWCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNFQsR0FBR0EsQ0FBQ0MsUUFBc0IsRUFBRUMsT0FBZSxFQUFFQyxRQUFnQixFQUFFQyxJQUFVLEVBQVE7TUFDL0UsSUFBSUgsUUFBUSxHQUFHLElBQUksQ0FBQ0YsVUFBVSxFQUFFO1FBQzlCO01BQ0Y7TUFFQSxJQUFJLENBQUN1ckMsaUJBQWlCLENBQUNqMkMsSUFBSSxDQUFDNEssUUFBUSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxDQUFDO0lBQ2hFO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Qkg7QUFDQTtBQUNBOztBQUVxRDtBQUVDO0FBQUEsSUFFakNrRCxzQkFBc0I7RUFBQSxTQUFBQSx1QkFBQTtJQUFBNVgsaUZBQUEsT0FBQTRYLHNCQUFBO0lBQUEzWCxpRkFBQSxlQUMxQixnREFBZ0Q7SUFBQUEsaUZBQUEsbUJBQ3BDLEdBQUc7SUFBQUEsaUZBQUEscUJBQ0QsR0FBRztJQUFBQSxpRkFBQSx1QkFDRCxHQUFHO0lBQUFBLGlGQUFBLHdCQUNGLENBQUM7SUFBQUEsaUZBQUEscUJBQ1prRSw4REFBYyxDQUFDWSw0QkFBNEI7RUFBQTtFQUFBLE9BQUF4RSw4RUFBQSxDQUFBcVgsc0JBQUE7SUFBQXBYLEdBQUE7SUFBQUMsR0FBQSxFQUVoRSxTQUFBQSxJQUFBLEVBQWtCO01BQ2hCLE9BQU8sSUFBSSxDQUFDcVosSUFBSTtJQUNsQixDQUFDO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFRQyxHQUFXLEVBQUU7TUFDbkIsSUFBTXVULFlBQVksR0FBRyxJQUFJOXRCLGdFQUFXLENBQUNpQixLQUFLLENBQUNvRixHQUFHLENBQUNrVSxHQUFHLENBQUM7TUFFbkR1VCxZQUFZLENBQUNyVCxRQUFRLEdBQUdxVCxZQUFZLENBQUNyVCxRQUFRLEdBQUcsT0FBTztNQUV2RCxJQUFJLENBQUNKLElBQUksR0FBR3lULFlBQVksQ0FBQzNjLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDO0VBQUM7SUFBQXBRLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEI7TUFDeEIsT0FBTyxJQUFJLENBQUMwWixZQUFZO0lBQzFCLENBQUM7SUFBQUosR0FBQSxFQUVELFNBQUFBLElBQWdCSyxXQUFtQixFQUFFO01BQ25DLElBQUksQ0FBQ0QsWUFBWSxHQUFHQyxXQUFXO0lBQ2pDO0VBQUM7SUFBQTVaLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUM0WixRQUFRO0lBQ3RCLENBQUM7SUFBQU4sR0FBQSxFQUVELFNBQUFBLElBQVlPLE9BQWUsRUFBRTtNQUMzQixJQUFJLENBQUNELFFBQVEsR0FBR0MsT0FBTztJQUN6QjtFQUFDO0lBQUE5WixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdCO01BQ3RCLE9BQU8sSUFBSSxDQUFDOFosVUFBVTtJQUN4QixDQUFDO0lBQUFSLEdBQUEsRUFFRCxTQUFBQSxJQUFjUyxTQUFpQixFQUFFO01BQy9CLElBQUksQ0FBQ0QsVUFBVSxHQUFHQyxTQUFTO0lBQzdCO0VBQUM7SUFBQWhhLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNzSSxhQUFhO0lBQzNCLENBQUM7SUFBQWdSLEdBQUEsRUFFRCxTQUFBQSxJQUFpQnBSLFlBQW9CLEVBQUU7TUFDckMsSUFBSSxDQUFDSSxhQUFhLEdBQUdKLFlBQVk7SUFDbkM7RUFBQztJQUFBbkksR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUksQ0FBQzRULFVBQVU7SUFDeEIsQ0FBQztJQUFBMEYsR0FBQSxFQUVELFNBQUFBLElBQWMzRixTQUF1QixFQUFFO01BQ3JDLElBQUksQ0FBQ0MsVUFBVSxHQUFHRCxTQUFTO0lBQzdCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEVIO0FBQ0E7QUFDQTs7QUFFcUQ7QUFDZjtBQUNRO0FBRWE7QUFFM0QsSUFBTXVILGdCQUFnQixHQUFHLElBQUk7QUFBQyxJQWVUZ2tDLGdCQUFnQjtFQU9uQyxTQUFBQSxpQkFBWXZ5QixzQkFBOEMsRUFBRTtJQUFBLElBQUFyc0IsS0FBQTtJQUFBZixpRkFBQSxPQUFBMi9DLGdCQUFBO0lBQUExL0MsaUZBQUE7SUFBQUEsaUZBQUEsZ0JBSjNCLEVBQUU7SUFBQUEsaUZBQUEscUJBQ0wsS0FBSztJQUFBQSxpRkFBQSxrQkFDakIsRUFBRTtJQUdsQixJQUFJLENBQUM2WCx1QkFBdUIsR0FBR3NWLHNCQUFzQjtJQUNyRCxJQUFJLENBQUNyUixrQ0FBa0MsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFBQyxnQkFBZ0IsRUFBSTtNQUNqRWxiLEtBQUksQ0FBQ21iLE9BQU8sR0FBR0QsZ0JBQWdCO0lBQ2pDLENBQUMsQ0FBQztFQUNKO0VBQUMsT0FBQTFiLDhFQUFBLENBQUFvL0MsZ0JBQUE7SUFBQW4vQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaUosSUFBSUEsQ0FBQzRLLFFBQXNCLEVBQUVDLE9BQWUsRUFBRUMsUUFBZ0IsRUFBRStILFNBQWUsRUFBUTtNQUNyRixJQUFNNVMsT0FBTyxHQUFHLENBQUM0UyxTQUFTLENBQUNxakMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMvbkMsdUJBQXVCLENBQUNuUCxZQUFZLElBQUksSUFBSTtNQUN4RixJQUFNbTNDLFNBQVMsR0FBRztRQUNoQnRqQyxTQUFTLEVBQUVBLFNBQVMsQ0FBQzVILFdBQVcsQ0FBQyxDQUFDO1FBQ2xDMEYsT0FBTyxFQUFFLElBQUksQ0FBQ3hDLHVCQUF1QixDQUFDd0MsT0FBTztRQUM3Qy9ELEtBQUssRUFBRXJDLHdEQUFZLENBQUNLLFFBQVEsQ0FBQztRQUM3QkUsUUFBUSxFQUFSQSxRQUFRO1FBQ1JELE9BQU8sRUFBUEEsT0FBTztRQUNQZ0csU0FBUyxFQUFFLElBQUksQ0FBQzFDLHVCQUF1QixDQUFDMEMsU0FBUztRQUNqRDlXLE9BQU8sRUFBRWdZLG1FQUFjLENBQUNnQixVQUFVO1FBQ2xDdEMsV0FBVyxFQUFFLElBQUksQ0FBQ3RDLHVCQUF1QixDQUFDc0MsV0FBVztRQUNyRHFDLGlCQUFpQixFQUFFLElBQUksQ0FBQ1AsT0FBTztRQUMvQnRTLE9BQU8sRUFBUEE7TUFDRixDQUFDO01BRUQsSUFBSTJLLFFBQVEsR0FBR0wsd0RBQVksQ0FBQ2hQLEtBQUssRUFBRTtRQUNqQyxJQUFJLENBQUM2NkMsS0FBSyxDQUFDcDJDLElBQUksQ0FBQ20yQyxTQUFTLENBQUM7TUFDNUIsQ0FBQyxNQUFNO1FBQ0wsSUFBSSxDQUFDQyxLQUFLLENBQUN6d0IsT0FBTyxDQUFDd3dCLFNBQVMsQ0FBQztNQUMvQjtNQUVBLElBQU1uakMsT0FBTyxHQUFHLElBQUksQ0FBQ3FqQyxjQUFjLENBQUMsQ0FBQztJQUN2QztFQUFDO0lBQUF4L0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXFiLGtDQUFrQ0EsQ0FBQSxFQUFvQjtNQUM1RCxPQUFPLElBQUljLE9BQU8sQ0FBUyxVQUFBQyxPQUFPLEVBQUk7UUFDcEMsSUFBTUMsWUFBWSxHQUFHdGQsZ0VBQVcsQ0FBQ3lRLFNBQVMsQ0FBQyxVQUFBM0IsV0FBVyxFQUFJO1VBQ3hELElBQUlBLFdBQVcsRUFBRTtZQUNmdU8sT0FBTyxDQUFDdk8sV0FBVyxDQUFDME4sZ0JBQWdCLENBQUM7WUFDckNjLFlBQVksQ0FBQ2xjLE9BQU8sQ0FBQyxDQUFDO1VBQ3hCO1FBQ0YsQ0FBQyxDQUFDO01BQ0osQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBTCxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBZ0wsU0FBQSxHQUFBc1IsbUZBQUEsY0FBQUMsc0VBQUEsQ0FFRCxTQUFBRSxRQUF1QjhpQyxXQUE0QjtRQUFBLElBQUE1aUMsUUFBQTtRQUFBLE9BQUFKLHNFQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQzNDTCxRQUFRLEdBQUcsSUFBSTVkLGdFQUFXLENBQUNpQixLQUFLLENBQUNpTyxRQUFRLENBQUMsQ0FBQztjQUVqRDBPLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRTlTLElBQUksQ0FBQ2lNLFNBQVMsQ0FBQztnQkFBQzhHLE9BQU8sRUFBRXFpQztjQUFXLENBQUMsQ0FBQyxDQUFDO2NBQUN6aUMsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FFdkRqZSxnRUFBVyxDQUFDaUIsS0FBSyxDQUFDOE8sS0FBSyxDQUFDLElBQUksQ0FBQ3NJLHVCQUF1QixDQUFDa0MsR0FBRyxFQUFFO2dCQUNyRTZELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVUO2NBQ1IsQ0FBQyxDQUFDO1lBQUE7Y0FBQSxPQUFBRyxRQUFBLENBQUFPLE1BQUEsV0FBQVAsUUFBQSxDQUFBUSxJQUFBO1lBQUE7WUFBQTtjQUFBLE9BQUFSLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ0g7TUFBQSxTQVRhbFIsUUFBUUEsQ0FBQWlTLEVBQUE7UUFBQSxPQUFBeFMsU0FBQSxDQUFBeVMsS0FBQSxPQUFBbEwsU0FBQTtNQUFBO01BQUEsT0FBUmhILFFBQVE7SUFBQTtFQUFBO0lBQUF6TCxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBdy9DLGVBQUEsR0FBQWxqQyxtRkFBQSxjQUFBQyxzRUFBQSxDQVd0QixTQUFBb0IsU0FBQTtRQUFBLElBQUE1SCxNQUFBO1FBQUEsSUFBQTBwQyxrQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxXQUFBLEVBQUFDLFVBQUEsRUFBQUwsV0FBQTtRQUFBLE9BQUFoakMsc0VBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQUEsTUFDTSxJQUFJLENBQUNxaUMsS0FBSyxDQUFDcDFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDNlQsVUFBVSxJQUFJLENBQUMvZSxnRUFBVyxDQUFDaUIsS0FBSztnQkFBQTZkLFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWEsU0FBQSxDQUFBUixNQUFBO1lBQUE7Y0FJL0RvaUMsa0JBQWtCLEdBQUcsQ0FBQztjQUN0QkMsZ0JBQWdCLEdBQUcsQ0FBQztjQUV4QixJQUFJLENBQUM1aEMsVUFBVSxHQUFHLElBQUk7Y0FFaEI2aEMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlwc0MsSUFBcUI7Z0JBQUEsT0FBSyxPQUFPQSxJQUFJLEtBQUssUUFBUSxHQUFHbkQscURBQU8sQ0FBQ0MsaUJBQWlCLENBQUNrRCxJQUFJLENBQUMsR0FBR0EsSUFBSSxDQUFDdEosTUFBTTtjQUFBO2NBQ2pIMjFDLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJaHNDLEdBQWE7Z0JBQUEsT0FBYWlELE1BQU0sQ0FBQ2lFLE1BQU0sQ0FBQ2xILEdBQUcsQ0FBQyxDQUM3RGhDLE1BQU0sQ0FBQyxVQUFDaXVDLEdBQUcsRUFBRXRzQyxJQUFJO2tCQUFBLE9BQUtzc0MsR0FBRyxJQUFJdHNDLElBQUksR0FBR29zQyxXQUFXLENBQUNwc0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUFBLEdBQUUsQ0FBQyxDQUFDO2NBQUE7Y0FFakUsT0FBTyxJQUFJLENBQUM4ckMsS0FBSyxDQUFDcDFDLE1BQU0sR0FBR3cxQyxrQkFBa0IsSUFBSUcsVUFBVSxDQUFDLElBQUksQ0FBQ1AsS0FBSyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDLEdBQUdDLGdCQUFnQixHQUFHemtDLGdCQUFnQixFQUFFO2dCQUNqSXlrQyxnQkFBZ0IsSUFBSUUsVUFBVSxDQUFDLElBQUksQ0FBQ1AsS0FBSyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM5REEsa0JBQWtCLEVBQUU7Y0FDdEI7Y0FFQSxJQUFJLENBQUNBLGtCQUFrQixFQUFFO2dCQUN2QixJQUFJLENBQUNKLEtBQUssQ0FBQ0ksa0JBQWtCLENBQUMsQ0FBQzNyQyxPQUFPLEdBQUcsSUFBSSxDQUFDdXJDLEtBQUssQ0FBQ0ksa0JBQWtCLENBQUMsQ0FBQzNyQyxPQUFPLENBQUNoUixTQUFTLENBQUMsQ0FBQyxFQUN6Rjg4QyxVQUFVLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUNJLGtCQUFrQixDQUFDLENBQUMsSUFBSXhrQyxnQkFBZ0IsR0FBRzJrQyxVQUFVLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUNJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvR0Esa0JBQWtCLEdBQUcsQ0FBQztjQUN4QjtjQUVNRixXQUFXLEdBQUcsSUFBSSxDQUFDRixLQUFLLENBQUN0aEMsS0FBSyxDQUFDLENBQUMsRUFBRTBoQyxrQkFBa0IsQ0FBQztjQUUzRCxJQUFJLENBQUNKLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUssQ0FBQ3RoQyxLQUFLLENBQUMwaEMsa0JBQWtCLENBQUM7Y0FBQyxPQUFBNWhDLFNBQUEsQ0FBQVIsTUFBQSxXQUUzQyxJQUFJLENBQUM5UixRQUFRLENBQUNnMEMsV0FBVyxDQUFDLENBQUNqa0MsSUFBSSxDQUFDLFVBQUEwQyxRQUFRLEVBQUk7Z0JBQ2pEakksTUFBSSxDQUFDK0gsVUFBVSxHQUFHLEtBQUs7Z0JBRXZCLElBQU03QixPQUFPLEdBQUdsRyxNQUFJLENBQUN1cEMsY0FBYyxDQUFDLENBQUM7Z0JBRXJDLE9BQU90aEMsUUFBUTtjQUNqQixDQUFDLENBQUMsU0FBTSxDQUFDLFlBQU07Z0JBQ2JqSSxNQUFJLENBQUMrSCxVQUFVLEdBQUcsS0FBSztnQkFFdkIsSUFBTTdCLE9BQU8sR0FBR2xHLE1BQUksQ0FBQ3VwQyxjQUFjLENBQUMsQ0FBQztjQUN2QyxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXpoQyxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUNIO01BQUEsU0F4Q2EyaEMsY0FBY0EsQ0FBQTtRQUFBLE9BQUFFLGVBQUEsQ0FBQS9oQyxLQUFBLE9BQUFsTCxTQUFBO01BQUE7TUFBQSxPQUFkK3NDLGNBQWM7SUFBQTtFQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JGOUI7QUFDQTtBQUNBO0FBRkEsSUFJcUJ6M0MsU0FBUztFQUc1QixTQUFBQSxVQUFBLEVBQTBCO0lBQUEsSUFBZGk0QyxRQUFRLEdBQUF2dEMsU0FBQSxDQUFBdEksTUFBQSxRQUFBc0ksU0FBQSxRQUFBM00sU0FBQSxHQUFBMk0sU0FBQSxNQUFHLENBQUM7SUFBQWpULGlGQUFBLE9BQUF1SSxTQUFBO0lBQUF0SSxpRkFBQTtJQUN0QixJQUFJLENBQUN3Z0QsU0FBUyxHQUFHRCxRQUFRO0VBQzNCO0VBQUMsT0FBQWpnRCw4RUFBQSxDQUFBZ0ksU0FBQTtJQUFBL0gsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXNKLFdBQVdBLENBQUEsRUFBVztNQUNwQixJQUFJLElBQUksQ0FBQ3kyQyxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSztNQUNkO01BRUEsSUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0QsU0FBUyxHQUFHLENBQUM7TUFDckMsSUFBTUQsUUFBUSxHQUFHRSxVQUFVLEdBQUd2dkMsSUFBSSxDQUFDd3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsU0FBUztNQUN2RSxJQUFJNXRDLE1BQU0sR0FBRzFCLElBQUksQ0FBQ0MsS0FBSyxDQUFDb3ZDLFFBQVEsQ0FBQztNQUNqQyxJQUFNSSxZQUFZLEdBQUcvdEMsTUFBTSxHQUFHLElBQUk7TUFFbENBLE1BQU0sR0FBRzFCLElBQUksQ0FBQ0MsS0FBSyxDQUFDeUIsTUFBTSxHQUFHLElBQUksQ0FBQztNQUVsQyxJQUFNb3lCLE9BQU8sR0FBR3B5QixNQUFNLEdBQUcsRUFBRTtNQUUzQkEsTUFBTSxHQUFHMUIsSUFBSSxDQUFDQyxLQUFLLENBQUN5QixNQUFNLEdBQUcsRUFBRSxDQUFDO01BRWhDLElBQU1xeUIsT0FBTyxHQUFHcnlCLE1BQU0sR0FBRyxFQUFFO01BRTNCQSxNQUFNLEdBQUcxQixJQUFJLENBQUNDLEtBQUssQ0FBQ3lCLE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFaEMsSUFBTXN5QixLQUFLLEdBQUd0eUIsTUFBTSxHQUFHLEVBQUU7TUFDekIsSUFBTWd1QyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7TUFFcEIsSUFBSUgsVUFBVSxFQUFFO1FBQ2RHLEtBQUssQ0FBQ3Z4QixPQUFPLENBQUMsR0FBRyxDQUFDO01BQ3BCO01BRUEsSUFBSTZWLEtBQUssRUFBRTtRQUNUMGIsS0FBSyxDQUFDbDNDLElBQUksQ0FBQ3c3QixLQUFLLEdBQUcsR0FBRyxDQUFDO01BQ3pCO01BRUEsSUFBSUQsT0FBTyxFQUFFO1FBQ1gyYixLQUFLLENBQUNsM0MsSUFBSSxDQUFDdTdCLE9BQU8sR0FBRyxHQUFHLENBQUM7TUFDM0I7TUFFQSxJQUFJRCxPQUFPLElBQUkyYixZQUFZLEVBQUU7UUFDM0JDLEtBQUssQ0FBQ2wzQyxJQUFJLENBQUNtM0MsTUFBTSxDQUFDN2IsT0FBTyxDQUFDLENBQUM7UUFFM0IsSUFBSTJiLFlBQVksRUFBRTtVQUNoQkMsS0FBSyxDQUFDbDNDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDNkosUUFBUSxDQUFDb3RDLFlBQVksQ0FBQ2h3QyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRTtRQUVBaXdDLEtBQUssQ0FBQ2wzQyxJQUFJLENBQUMsR0FBRyxDQUFDO01BQ2pCO01BRUEsT0FBT2szQyxLQUFLLENBQUNwdEMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN2QjtFQUFDO0lBQUFqVCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOFMsUUFBUUEsQ0FBQ1MsSUFBWSxFQUFFOHNDLFlBQW9CLEVBQUVDLFNBQWlCLEVBQVU7TUFDdEVELFlBQVksR0FBR0EsWUFBWSxJQUFJLENBQUM7TUFDaENDLFNBQVMsR0FBR0YsTUFBTSxDQUFFLE9BQU9FLFNBQVMsS0FBSyxXQUFXLEdBQUdBLFNBQVMsR0FBRyxHQUFJLENBQUM7TUFFeEUsSUFBSS9zQyxJQUFJLENBQUN0SixNQUFNLEdBQUdvMkMsWUFBWSxFQUFFO1FBQzlCLE9BQU85c0MsSUFBSTtNQUNiO01BRUE4c0MsWUFBWSxHQUFHQSxZQUFZLEdBQUc5c0MsSUFBSSxDQUFDdEosTUFBTTtNQUV6QyxJQUFJbzJDLFlBQVksR0FBR0MsU0FBUyxDQUFDcjJDLE1BQU0sRUFBRTtRQUNuQ3EyQyxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDRixZQUFZLEdBQUdDLFNBQVMsQ0FBQ3IyQyxNQUFNLENBQUM7TUFDaEU7TUFFQSxPQUFPcTJDLFNBQVMsQ0FBQ3ZpQyxLQUFLLENBQUMsQ0FBQyxFQUFFc2lDLFlBQVksQ0FBQyxHQUFHOXNDLElBQUk7SUFDaEQ7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxRUg7QUFDQTtBQUNBOztBQUVBLElBQU1pdEMsbUNBQW1DLEdBQUcsSUFBSTtBQUNoRCxJQUFNQyxzQ0FBc0MsR0FBRyxDQUFDO0FBQ2hELElBQU1DLHNDQUFzQyxHQUFHLE1BQU07QUFBQyxJQUVqQzNsQyxrQkFBa0I7RUFLckMsU0FBQUEsbUJBQUEsRUFJRTtJQUFBLElBSEE0bEMsNEJBQW9DLEdBQUFwdUMsU0FBQSxDQUFBdEksTUFBQSxRQUFBc0ksU0FBQSxRQUFBM00sU0FBQSxHQUFBMk0sU0FBQSxNQUFHaXVDLG1DQUFtQztJQUFBLElBQzFFSSwrQkFBdUMsR0FBQXJ1QyxTQUFBLENBQUF0SSxNQUFBLFFBQUFzSSxTQUFBLFFBQUEzTSxTQUFBLEdBQUEyTSxTQUFBLE1BQUdrdUMsc0NBQXNDO0lBQUEsSUFDaEZJLCtCQUF1QyxHQUFBdHVDLFNBQUEsQ0FBQXRJLE1BQUEsUUFBQXNJLFNBQUEsUUFBQTNNLFNBQUEsR0FBQTJNLFNBQUEsTUFBR211QyxzQ0FBc0M7SUFBQXBoRCxpRkFBQSxPQUFBeWIsa0JBQUE7SUFBQXhiLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBO0lBRWhGLElBQUksQ0FBQ3VoRCw2QkFBNkIsR0FBR0gsNEJBQTRCO0lBQ2pFLElBQUksQ0FBQ0ksZ0NBQWdDLEdBQUdILCtCQUErQjtJQUN2RSxJQUFJLENBQUNJLGdDQUFnQyxHQUFHSCwrQkFBK0I7RUFDekU7RUFBQyxPQUFBaGhELDhFQUFBLENBQUFrYixrQkFBQTtJQUFBamIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW9lLDJDQUEyQ0EsQ0FBQzJVLFlBQW9CLEVBQVU7TUFDeEUsSUFBTWt1Qix3QkFBd0IsR0FBRyxJQUFJLENBQUNILDZCQUE2QixHQUFHLElBQUk7TUFDMUUsSUFBTUksYUFBYSxHQUFHLEdBQUcsR0FBSSxHQUFHLEdBQUd6d0MsSUFBSSxDQUFDYSxNQUFNLENBQUMsQ0FBRSxDQUFDLENBQUM7TUFDbkQsSUFBTTZ2QyxrQkFBa0IsR0FBRzF3QyxJQUFJLENBQUNNLEdBQUcsQ0FBQ2t3Qyx3QkFBd0IsRUFBRWx1QixZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNqRixJQUFNcXVCLG1DQUFtQyxHQUFHM3dDLElBQUksQ0FBQ0MsS0FBSyxDQUFDeXdDLGtCQUFrQixDQUFDLEdBQUdELGFBQWE7TUFDMUYsSUFBTUcsZ0RBQWdELEdBQUc1d0MsSUFBSSxDQUFDZ0IsSUFBSSxDQUFDaEIsSUFBSSxDQUFDNndDLEdBQUcsQ0FBQ0YsbUNBQW1DLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQ0wsZ0NBQWdDLENBQUMsQ0FBQztNQUUvSixPQUFPdHdDLElBQUksQ0FBQytzQixHQUFHLENBQUM2akIsZ0RBQWdELEVBQUUsSUFBSSxDQUFDTCxnQ0FBZ0MsQ0FBQztJQUMxRztFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9CSDtBQUNBO0FBQ0E7QUFGQSxJQU1xQmh5QixTQUFTO0VBUTVCLFNBQUFBLFVBQVl3RyxLQUFhLEVBQUVFLE1BQWMsRUFBRTtJQUFBcDJCLGlGQUFBLE9BQUEwdkIsU0FBQTtJQUFBenZCLGlGQUFBO0lBQUFBLGlGQUFBO0lBQ3pDLElBQUksQ0FBQ2kyQixLQUFLLEdBQUdBLEtBQUs7SUFDbEIsSUFBSSxDQUFDRSxNQUFNLEdBQUdBLE1BQU07RUFDdEI7RUFBQyxPQUFBNzFCLDhFQUFBLENBQUFtdkIsU0FBQTtJQUFBbHZCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnckIsTUFBTUEsQ0FBQ3UyQixLQUFnQixFQUFXO01BQ2hDLE9BQU9BLEtBQUssSUFBSSxJQUFJLENBQUMvckIsS0FBSyxLQUFLK3JCLEtBQUssQ0FBQy9yQixLQUFLLElBQUksSUFBSSxDQUFDRSxNQUFNLEtBQUs2ckIsS0FBSyxDQUFDN3JCLE1BQU07SUFDNUU7RUFBQztJQUFBNTFCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFrUSxRQUFRQSxDQUFBLEVBQVc7TUFDakIsVUFBQXROLE1BQUEsQ0FBVSxJQUFJLENBQUM0eUIsS0FBSyxPQUFBNXlCLE1BQUEsQ0FBSSxJQUFJLENBQUM4eUIsTUFBTTtJQUNyQztFQUFDO0lBQUE1MUIsR0FBQTtJQUFBQyxHQUFBLEVBZkQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUlpdkIsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUI7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWkg7QUFDQTtBQUNBOztBQUUrRDtBQUVYO0FBQ0Q7QUFDdEI7QUFDb0I7QUFDUjtBQUVXO0FBQUEsSUFTL0JHLGdCQUFnQjtFQVNuQyxTQUFBQSxpQkFBWWxuQixZQUFvQixFQUFFRSxjQUE4QixFQUFFO0lBQUEsSUFBQTlILEtBQUE7SUFBQWYsaUZBQUEsT0FBQTZ2QixnQkFBQTtJQUFBNXZCLGlGQUFBLGtCQVI5QndJLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztJQUFBM0ksaUZBQUE7SUFBQUEsaUZBQUEsc0NBRWhDdUksZ0RBQUcsQ0FBQzA1QywwQkFBMEI7SUFBQWppRCxpRkFBQSwwQkFDMUIsSUFBSW1HLDJEQUFjLENBQUMsQ0FBQztJQUFBbkcsaUZBQUE7SUFBQUEsaUZBQUEsdUJBRXZCLElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUFBTSxpRkFBQSxpQ0FDZixDQUFDLENBQUM7SUFHckQsSUFBSSxDQUFDOEksYUFBYSxHQUFHSixZQUFZO0lBQ2pDLElBQUksQ0FBQzdILFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQytnRCxlQUFlLENBQUM7SUFDM0MsSUFBSSxDQUFDdDFCLGVBQWUsR0FBR2hrQixjQUFjO0lBRXJDLElBQUksQ0FBQyxJQUFJLENBQUNpa0IsMkJBQTJCLEVBQUU7TUFDckMsTUFBTSxJQUFJNW5CLEtBQUssQ0FBQyw4REFBOEQsQ0FBQztJQUNqRjtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNpOUMsZUFBZSxDQUFDNTdDLFdBQVcsRUFBRTtNQUNyQztJQUNGO0lBRUEsSUFBSSxDQUFDekYsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDMHJCLDJCQUEyQixDQUFDczFCLFlBQVksQ0FBQ2x5QyxTQUFTLENBQUMsVUFBQWt5QyxZQUFZLEVBQUk7TUFDNUZyaEQsS0FBSSxDQUFDc2hELHNCQUFzQixDQUFDRCxZQUFZLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUN0aEQsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDK2dELGVBQWUsQ0FBQ3A2QyxHQUFHLENBQUNtSSxTQUFTLENBQUMsVUFBQXhQLEtBQUssRUFBSTtNQUNoRSxJQUFJLENBQUNBLEtBQUssRUFBRTtRQUNWO01BQ0Y7TUFFQUssS0FBSSxDQUFDdWhELHNCQUFzQixDQUFDNWhELEtBQUssQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQ0ksWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDK2dELGVBQWUsQ0FBQ3o2QyxhQUFhLENBQUN3SSxTQUFTLENBQUMsVUFBQXhQLEtBQUssRUFBSTtNQUMxRSxJQUFJLENBQUNBLEtBQUssRUFBRTtRQUNWO01BQ0Y7TUFFQUssS0FBSSxDQUFDd2hELDZCQUE2QixDQUFDN2hELEtBQUssQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQ0ksWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDK2dELGVBQWUsQ0FBQ0ssMEJBQTBCLENBQUN0eUMsU0FBUyxDQUFDLFVBQUF4UCxLQUFLLEVBQUk7TUFDdkYsSUFBSSxDQUFDQSxLQUFLLEVBQUU7UUFDVjtNQUNGO01BRUFLLEtBQUksQ0FBQzBoRCw2Q0FBNkMsQ0FBQy9oRCxLQUFLLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7RUFDTDtFQUFDLE9BQUFILDhFQUFBLENBQUFzdkIsZ0JBQUE7SUFBQXJ2QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBczNCLG1CQUFtQkEsQ0FBQSxFQUF3QjtNQUN6QyxPQUFPLElBQUl0dkIseUVBQW1CLENBQUMsSUFBSSxDQUFDSyxhQUFhLENBQUM7SUFDcEQ7RUFBQztJQUFBdkksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJoRCxzQkFBc0JBLENBQUNELFlBQXFCLEVBQVE7TUFBQSxJQUFBbHpCLHFCQUFBO01BQzFELElBQU0vdUIsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLElBQU11aUQsbUJBQW1CLElBQUF4ekIscUJBQUEsR0FBRyxJQUFJLENBQUNwQywyQkFBMkIsY0FBQW9DLHFCQUFBLHVCQUFoQ0EscUJBQUEsQ0FBa0N2dUIsc0JBQXNCLENBQUMsQ0FBQztNQUV0RixJQUFJLENBQUMraEQsbUJBQW1CLEVBQUU7UUFDeEI7TUFDRjtNQUVBLElBQUksQ0FBQzcxQixlQUFlLENBQUNsakIsSUFBSSxDQUFDO1FBQ3hCTCxVQUFVLEVBQUU4NEMsWUFBWSxHQUFHLzVDLDREQUFXLENBQUNzUixxQkFBcUIsR0FBR3RSLDREQUFXLENBQUN1UixxQkFBcUI7UUFDaEdoUSxPQUFPLEVBQUUsQ0FBQ3pKLEdBQUcsR0FBRyxJQUFJLENBQUM0SSxhQUFhLElBQUksSUFBSTtRQUMxQ3JJLEtBQUssRUFBRTtVQUFDbUosTUFBTSxFQUFFNjRDO1FBQW1CO01BQ3JDLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQzU0QyxPQUFPLENBQUNDLElBQUksQ0FDZixrREFBa0QsRUFDbERxNEMsWUFBWSxHQUFHLFlBQVksR0FBRyxZQUFZLEVBQzFDLElBQUk3NUMsc0RBQVMsQ0FBQ202QyxtQkFBbUIsQ0FBQyxDQUFDMTRDLFdBQVcsQ0FBQyxDQUNqRCxDQUFDO0lBQ0g7RUFBQztJQUFBeEosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTRoRCxzQkFBc0JBLENBQUNLLE1BQWMsRUFBUTtNQUNuRCxJQUFNeGlELEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNeWlELE1BQU0sR0FBRyxJQUFJLENBQUNDLHNCQUFzQixDQUFDOTZDLEdBQUc7TUFFOUMsSUFBSSxDQUFDODZDLHNCQUFzQixDQUFDOTZDLEdBQUcsR0FBRzQ2QyxNQUFNO01BRXhDLElBQUksQ0FBQzkxQixlQUFlLENBQUNsakIsSUFBSSxDQUFDO1FBQ3hCTCxVQUFVLEVBQUVqQiw0REFBVyxDQUFDa1IsYUFBYTtRQUNyQzNQLE9BQU8sRUFBRSxDQUFDekosR0FBRyxHQUFHLElBQUksQ0FBQzRJLGFBQWEsSUFBSSxJQUFJO1FBQzFDckksS0FBSyxFQUFFO1VBQUNtSixNQUFNLEVBQUU4NEM7UUFBTSxDQUFDO1FBQ3ZCdm1DLGFBQWEsRUFBRXdtQyxNQUFNLEdBQUc7VUFBQy80QyxNQUFNLEVBQUUrNEM7UUFBTSxDQUFDLEdBQUd0OEMsU0FBUztRQUNwRCtWLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQ3ZTLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLDRDQUE0QyxFQUM1QyxJQUFJeEIsc0RBQVMsQ0FBQ3BJLEdBQUcsR0FBRyxJQUFJLENBQUM0SSxhQUFhLENBQUMsQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLEVBQ3JEMjRDLE1BQU0sRUFDTkMsTUFDRixDQUFDO0lBQ0g7RUFBQztJQUFBcGlELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE2aEQsNkJBQTZCQSxDQUFDTyxjQUFzQixFQUFRO01BQ2xFLElBQU0zaUQsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLElBQU00aUQsY0FBYyxHQUFHLElBQUksQ0FBQ0Ysc0JBQXNCLENBQUNuN0MsYUFBYTtNQUVoRSxJQUFJLENBQUNtN0Msc0JBQXNCLENBQUNuN0MsYUFBYSxHQUFHbzdDLGNBQWM7TUFFMUQsSUFBSSxDQUFDajJCLGVBQWUsQ0FBQ2xqQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUNvUixXQUFXO1FBQ25DN1AsT0FBTyxFQUFFLENBQUN6SixHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxJQUFJLElBQUk7UUFDMUNySSxLQUFLLEVBQUU7VUFBQzZSLE1BQU0sRUFBRXV3QztRQUFjLENBQUM7UUFDL0IxbUMsYUFBYSxFQUFFMm1DLGNBQWMsR0FBRztVQUFDeHdDLE1BQU0sRUFBRXd3QztRQUFjLENBQUMsR0FBR3o4QztNQUM3RCxDQUFDLENBQUM7TUFFRixJQUFJLENBQUN3RCxPQUFPLENBQUNDLElBQUksQ0FDZiwyREFBMkQsRUFDM0QsSUFBSXhCLHNEQUFTLENBQUNwSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxDQUFDLENBQUNpQixXQUFXLENBQUMsQ0FBQyxFQUNyRDg0QyxjQUFjLEVBQ2RDLGNBQ0YsQ0FBQztJQUNIO0VBQUM7SUFBQXZpRCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRK2hELDZDQUE2Q0EsQ0FBQ08sV0FBbUIsRUFBUTtNQUMvRSxJQUFNN2lELEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNOGlELFdBQVcsR0FBRyxJQUFJLENBQUNKLHNCQUFzQixDQUFDTCwwQkFBMEI7TUFFMUUsSUFBSSxDQUFDSyxzQkFBc0IsQ0FBQ0wsMEJBQTBCLEdBQUdRLFdBQVc7TUFFcEUsSUFBSSxDQUFDbjJCLGVBQWUsQ0FBQ2xqQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUNtUiwwQkFBMEI7UUFDbEQ1UCxPQUFPLEVBQUUsQ0FBQ3pKLEdBQUcsR0FBRyxJQUFJLENBQUM0SSxhQUFhLElBQUksSUFBSTtRQUMxQ3JJLEtBQUssRUFBRTtVQUFDLFNBQU9zaUQ7UUFBVyxDQUFDO1FBQzNCNW1DLGFBQWEsRUFBRTZtQyxXQUFXLEdBQUc7VUFBQyxTQUFPQTtRQUFXLENBQUMsR0FBRzM4QztNQUN0RCxDQUFDLENBQUM7TUFFRixJQUFJLENBQUN3RCxPQUFPLENBQUNDLElBQUksQ0FDZixxRUFBcUUsRUFDckUsSUFBSXhCLHNEQUFTLENBQUNwSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxDQUFDLENBQUNpQixXQUFXLENBQUMsQ0FBQyxFQUNyRGc1QyxXQUFXLEVBQ1hDLFdBQ0YsQ0FBQztJQUNIO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoS0g7QUFDQTtBQUNBOztBQUVvRDtBQUVYO0FBQ0c7QUFFSztBQUNHO0FBSXBELElBQU1yYixJQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBQTtFQUFBLE9BQWV0aEMsU0FBUztBQUFBO0FBQUMsSUFFZHNwQixjQUFjO0VBbUJqQyxTQUFBQSxlQUFZM21CLFFBQWdCLEVBQUVOLFlBQW9CLEVBQUV1NkMsZ0JBQXdCLEVBQUVyNkMsY0FBOEIsRUFBRTtJQUFBN0ksaUZBQUEsT0FBQTR2QixjQUFBO0lBQUEzdkIsaUZBQUE7SUFBQUEsaUZBQUE7SUFBQUEsaUZBQUEsa0JBaEIxRXdJLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUFBM0ksaUZBQUEsdUJBQzlCLElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUFBTSxpRkFBQTtJQUFBQSxpRkFBQTtJQUFBQSxpRkFBQSw2QkFHM0IybkMsSUFBSTtJQUFBM25DLGlGQUFBLDBCQUNQMm5DLElBQUk7SUFBQTNuQyxpRkFBQSxpQ0FDMkIybkMsSUFBSTtJQUFBM25DLGlGQUFBLDRCQUNyQyxDQUFDO0lBQUFBLGlGQUFBLDJDQUNjLENBQUM7SUFBQUEsaUZBQUEsb0NBQ1IsQ0FBQztJQUFBQSxpRkFBQSx3QkFDTixJQUFJO0lBQUFBLGlGQUFBLHdCQUNYLENBQUM7SUFBQUEsaUZBQUEsMkJBQ0UsRUFBRTtJQUFBQSxpRkFBQSx5Q0FDZ0IsSUFBSVAsd0RBQVUsQ0FBQztNQUFBLE9BQU0sSUFBSTtJQUFBLEVBQUM7SUFBQU8saUZBQUEsb0NBQy9CLElBQUlQLHdEQUFVLENBQUM7TUFBQSxPQUFNLElBQUk7SUFBQSxFQUFDO0lBR3hFLElBQUksQ0FBQ3lqRCxTQUFTLEdBQUdsNkMsUUFBUTtJQUN6QixJQUFJLENBQUNGLGFBQWEsR0FBR0osWUFBWTtJQUNqQyxJQUFJLENBQUNncEIsaUJBQWlCLEdBQUd1eEIsZ0JBQWdCO0lBRXpDLElBQUksQ0FBQ3IyQixlQUFlLEdBQUdoa0IsY0FBYztFQUN2QztFQUFDLE9BQUF0SSw4RUFBQSxDQUFBcXZCLGNBQUE7SUFBQXB2QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBcTBCLCtCQUErQkEsQ0FBQ2xULEtBQXVCLEVBQVE7TUFBQSxJQUFBOWdCLEtBQUE7TUFDN0QsSUFBSSxDQUFDcWlELHlCQUF5QixHQUFHbGpELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFFM0MsSUFBSSxDQUFDa2pELGtCQUFrQixHQUFHO1FBQUEsT0FBWXRpRCxLQUFJLENBQUN1aUQsb0JBQW9CLENBQUMsQ0FBQztNQUFBO01BRWpFemhDLEtBQUssQ0FBQzNaLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUNtN0Msa0JBQWtCLENBQUM7TUFDN0R4aEMsS0FBSyxDQUFDM1osZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDbTdDLGtCQUFrQixDQUFDO01BRWpFLElBQUksQ0FBQ0UsOEJBQThCLEdBQUcsSUFBSTdqRCx3REFBVSxDQUFDLFlBQU07UUFDekRtaUIsS0FBSyxDQUFDelosbUJBQW1CLENBQUMsWUFBWSxFQUFFckgsS0FBSSxDQUFDc2lELGtCQUFrQixDQUFDO1FBQ2hFeGhDLEtBQUssQ0FBQ3paLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFckgsS0FBSSxDQUFDc2lELGtCQUFrQixDQUFDO01BQ3RFLENBQUMsQ0FBQztNQUNGLElBQUksQ0FBQ3ZpRCxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUNtaUQsOEJBQThCLENBQUM7SUFDNUQ7RUFBQztJQUFBL2lELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzMEIsMkJBQTJCQSxDQUFDblQsS0FBdUIsRUFBUTtNQUFBLElBQUFwTCxNQUFBO01BQ3pELElBQUksQ0FBQytzQyxlQUFlLEdBQUc7UUFBQSxPQUFZL3NDLE1BQUksQ0FBQ2d0QyxPQUFPLENBQUMsQ0FBQztNQUFBO01BRWpELElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcsVUFBQzdaLEtBQXdCO1FBQUEsT0FBV3B6QixNQUFJLENBQUNrdEMsY0FBYyxDQUFDOVosS0FBSyxFQUFFaG9CLEtBQUssQ0FBQztNQUFBO01BRW5HQSxLQUFLLENBQUMzWixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDczdDLGVBQWUsQ0FBQztNQUN2RDNoQyxLQUFLLENBQUMzWixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDczdDLGVBQWUsQ0FBQztNQUNyRDNoQyxLQUFLLENBQUMzWixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDczdDLGVBQWUsQ0FBQztNQUN2RDNoQyxLQUFLLENBQUMzWixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDdzdDLHNCQUFzQixDQUFDO01BQzNEN2hDLEtBQUssQ0FBQzNaLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUN3N0Msc0JBQXNCLENBQUM7TUFDOUQ3aEMsS0FBSyxDQUFDM1osZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQ3c3QyxzQkFBc0IsQ0FBQztNQUMvRDdoQyxLQUFLLENBQUMzWixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDdzdDLHNCQUFzQixDQUFDO01BRWpFLElBQUksQ0FBQ0UseUJBQXlCLEdBQUcsSUFBSWxrRCx3REFBVSxDQUFDLFlBQU07UUFDcERtaUIsS0FBSyxDQUFDelosbUJBQW1CLENBQUMsU0FBUyxFQUFFcU8sTUFBSSxDQUFDK3NDLGVBQWUsQ0FBQztRQUMxRDNoQyxLQUFLLENBQUN6WixtQkFBbUIsQ0FBQyxPQUFPLEVBQUVxTyxNQUFJLENBQUMrc0MsZUFBZSxDQUFDO1FBQ3hEM2hDLEtBQUssQ0FBQ3paLG1CQUFtQixDQUFDLFNBQVMsRUFBRXFPLE1BQUksQ0FBQytzQyxlQUFlLENBQUM7UUFDMUQzaEMsS0FBSyxDQUFDelosbUJBQW1CLENBQUMsTUFBTSxFQUFFcU8sTUFBSSxDQUFDaXRDLHNCQUFzQixDQUFDO1FBQzlEN2hDLEtBQUssQ0FBQ3paLG1CQUFtQixDQUFDLFNBQVMsRUFBRXFPLE1BQUksQ0FBQ2l0QyxzQkFBc0IsQ0FBQztRQUNqRTdoQyxLQUFLLENBQUN6WixtQkFBbUIsQ0FBQyxVQUFVLEVBQUVxTyxNQUFJLENBQUNpdEMsc0JBQXNCLENBQUM7UUFDbEU3aEMsS0FBSyxDQUFDelosbUJBQW1CLENBQUMsWUFBWSxFQUFFcU8sTUFBSSxDQUFDaXRDLHNCQUFzQixDQUFDO01BQ3RFLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQzVpRCxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUN3aUQseUJBQXlCLENBQUM7SUFDdkQ7RUFBQztJQUFBcGpELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLE9BQU9BLENBQUEsRUFBUztNQUNkLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUMsSUFBTU4sR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BRXRCLE9BQU8sSUFBSW9JLHNEQUFTLENBQUNwSSxHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxDQUFDLENBQUNpQixXQUFXLENBQUMsQ0FBQztJQUM5RDtFQUFDO0lBQUF4SixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRNGlELG9CQUFvQkEsQ0FBQSxFQUFTO01BQ25DLElBQU1uakQsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BRXRCLElBQUksQ0FBQzBqRCxvQkFBb0IsQ0FBQzFqRCxHQUFHLENBQUM7TUFDOUIsSUFBSSxDQUFDMmpELG1DQUFtQyxDQUFDM2pELEdBQUcsQ0FBQztNQUU3QyxJQUFJLENBQUNvakQsOEJBQThCLENBQUMxaUQsT0FBTyxDQUFDLENBQUM7SUFDL0M7RUFBQztJQUFBTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRbWpELG9CQUFvQkEsQ0FBQzFqRCxHQUFXLEVBQVE7TUFDOUMsSUFBSSxDQUFDNGpELGlCQUFpQixHQUFHNWpELEdBQUcsR0FBRyxJQUFJLENBQUNpakQseUJBQXlCO01BRTdELElBQUksQ0FBQ3YyQixlQUFlLENBQUNsakIsSUFBSSxDQUFDO1FBQ3hCTCxVQUFVLEVBQUVqQiw0REFBVyxDQUFDNlEsZ0JBQWdCO1FBQ3hDdFAsT0FBTyxFQUFFLENBQUN6SixHQUFHLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxJQUFJLElBQUk7UUFDMUNySSxLQUFLLEVBQUU7VUFBQ21KLE1BQU0sRUFBRSxJQUFJLENBQUNrNkM7UUFBaUIsQ0FBQztRQUN2Qzk2QyxRQUFRLEVBQUUsSUFBSSxDQUFDazZDO01BQ2pCLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQ3I1QyxPQUFPLENBQUNDLElBQUksQ0FDZiw0QkFBNEIsRUFDNUIsSUFBSSxDQUFDaTZDLHFCQUFxQixFQUMxQixJQUFJLENBQUNiLFNBQVMsRUFDZCxJQUFJNTZDLHNEQUFTLENBQUMsSUFBSSxDQUFDdzdDLGlCQUFpQixDQUFDLENBQUMvNUMsV0FBVyxDQUFDLENBQ3BELENBQUM7SUFDSDtFQUFDO0lBQUF4SixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRb2pELG1DQUFtQ0EsQ0FBQzNqRCxHQUFXLEVBQVE7TUFDN0QsSUFBSSxDQUFDOGpELGdDQUFnQyxHQUFHOWpELEdBQUcsR0FBRyxJQUFJLENBQUN3eEIsaUJBQWlCO01BRXBFLElBQUksQ0FBQzlFLGVBQWUsQ0FBQ2xqQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUMrUSwrQkFBK0I7UUFDdkR4UCxPQUFPLEVBQUUsQ0FBQ3pKLEdBQUcsR0FBRyxJQUFJLENBQUM0SSxhQUFhLElBQUksSUFBSTtRQUMxQ3JJLEtBQUssRUFBRTtVQUFDbUosTUFBTSxFQUFFLElBQUksQ0FBQ282QztRQUFnQyxDQUFDO1FBQ3REaDdDLFFBQVEsRUFBRSxJQUFJLENBQUNrNkM7TUFDakIsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDcjVDLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLGdEQUFnRCxFQUNoRCxJQUFJLENBQUNpNkMscUJBQXFCLEVBQzFCLElBQUksQ0FBQ2IsU0FBUyxFQUNkLElBQUk1NkMsc0RBQVMsQ0FBQyxJQUFJLENBQUMwN0MsZ0NBQWdDLENBQUMsQ0FBQ2o2QyxXQUFXLENBQUMsQ0FDbkUsQ0FBQztJQUNIO0VBQUM7SUFBQXhKLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVEraUQsT0FBT0EsQ0FBQSxFQUFTO01BQ3RCLElBQUksSUFBSSxDQUFDUyxhQUFhLEVBQUU7UUFDdEI7TUFDRjtNQUVBLElBQUksQ0FBQ3IzQixlQUFlLENBQUNsakIsSUFBSSxDQUFDO1FBQ3hCTCxVQUFVLEVBQUVqQiw0REFBVyxDQUFDZ1IsT0FBTztRQUMvQnpQLE9BQU8sRUFBRSxDQUFDMUosSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzRJLGFBQWEsSUFBSSxJQUFJO1FBQ2pERSxRQUFRLEVBQUUsSUFBSSxDQUFDazZDO01BQ2pCLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQ2UsYUFBYSxHQUFHaGtELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFFL0IsSUFBSSxDQUFDMkosT0FBTyxDQUFDQyxJQUFJLENBQ2YsMENBQTBDLEVBQzFDLElBQUksQ0FBQ2k2QyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDYixTQUNQLENBQUM7SUFDSDtFQUFDO0lBQUEzaUQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWlqRCxjQUFjQSxDQUFDOVosS0FBd0IsRUFBRWhvQixLQUF1QixFQUFRO01BQzlFLElBQUksQ0FBQ0EsS0FBSyxDQUFDc2lDLFFBQVEsRUFBRTtRQUNuQjtNQUNGO01BRUEsSUFBTUMsWUFBWSxHQUFHdmlDLEtBQUssQ0FBQ3NpQyxRQUFRLENBQUN4NUMsTUFBTTtNQUMxQyxJQUFNMDVDLHNDQUFzQyxHQUFHeGEsS0FBSyxDQUFDbGlDLElBQUksS0FBSyxTQUFTLElBQ3BFeThDLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQ3ZhLEtBQUssQ0FBQ2xpQyxJQUFJLEtBQUssVUFBVSxJQUMzQ2tpQyxLQUFLLENBQUNsaUMsSUFBSSxLQUFLLFlBQVksS0FDM0JrYSxLQUFLLENBQUNzaUMsUUFBUSxDQUFDRyxHQUFHLENBQUNGLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUNHLGFBQWEsR0FBRyxJQUFJO01BRXZFLElBQUksQ0FBQyxJQUFJLENBQUNMLGFBQWEsSUFBSUcsc0NBQXNDLEVBQUU7UUFDakU7TUFDRjtNQUVBLElBQUl4YSxLQUFLLENBQUNsaUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtRQUM3QixJQUFJLENBQUM0OEMsYUFBYSxHQUFHMWlDLEtBQUssQ0FBQ3NpQyxRQUFRLENBQUNHLEdBQUcsQ0FBQ0YsWUFBWSxHQUFHLENBQUMsQ0FBQztNQUMzRDtNQUVBLElBQU1JLGFBQWEsR0FBR3RrRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDK2pELGFBQWE7TUFFckQsSUFBSSxDQUFDcjNCLGVBQWUsQ0FBQ2xqQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUNpUixTQUFTO1FBQ2pDMVAsT0FBTyxFQUFFLENBQUMxSixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxJQUFJLElBQUk7UUFDakRySSxLQUFLLEVBQUU7VUFBQ21KLE1BQU0sRUFBRTI2QztRQUFhLENBQUM7UUFDOUJ2N0MsUUFBUSxFQUFFLElBQUksQ0FBQ2s2QztNQUNqQixDQUFDLENBQUM7TUFFRixJQUFJLENBQUNyNUMsT0FBTyxDQUFDQyxJQUFJLENBQ2Ysa0VBQWtFLEVBQ2xFLElBQUksQ0FBQ2k2QyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDYixTQUFTLEVBQ2QsSUFBSTU2QyxzREFBUyxDQUFDaThDLGFBQWEsQ0FBQyxDQUFDeDZDLFdBQVcsQ0FBQyxDQUMzQyxDQUFDO01BQ0QsSUFBSSxDQUFDazZDLGFBQWEsR0FBRyxJQUFJO0lBQzNCO0VBQUM7SUFBQTFqRCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMjBCLHdCQUF3QkEsQ0FBQ292QixhQUFxQixFQUFRO01BQ3BELElBQUksQ0FBQzUzQixlQUFlLENBQUNsakIsSUFBSSxDQUFDO1FBQ3hCTCxVQUFVLEVBQUVqQiw0REFBVyxDQUFDcVIsaUJBQWlCO1FBQ3pDOVAsT0FBTyxFQUFFLENBQUMxSixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDNEksYUFBYSxJQUFJLElBQUk7UUFDakRySSxLQUFLLEVBQUU7VUFBQzZSLE1BQU0sRUFBRWt5QztRQUFhLENBQUM7UUFDOUJyb0MsYUFBYSxFQUFFLElBQUksQ0FBQ3NvQyxnQkFBZ0IsR0FBRztVQUFDbnlDLE1BQU0sRUFBRSxJQUFJLENBQUNteUM7UUFBZ0IsQ0FBQyxHQUFHcCtDLFNBQVM7UUFDbEYyQyxRQUFRLEVBQUUsSUFBSSxDQUFDazZDO01BQ2pCLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQ3VCLGdCQUFnQixHQUFHRCxhQUFhO0lBQ3ZDO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN00rRTs7QUFFbkU7QUFDZixTQUFTLHlGQUFNLHlCQUF5QiwrQ0FBK0MseUNBQXlDLG1RQUFtUSxxRUFBcUUsbURBQW1ELHVDQUF1Qyx3QkFBd0IsRUFBRSxrT0FBa08seU5BQXlOLGtPQUFrTyxzREFBc0QsbUtBQW1LLGdDQUFnQyxpSEFBaUgsS0FBSyxxSEFBcUgsZ0VBQWdFLHNEQUFzRCxPQUFPLEtBQUssR0FBRyxzREFBc0QsaUNBQWlDLE9BQU8sS0FBSyxHQUFHLDhEQUE4RCx5Q0FBeUMsT0FBTyxLQUFLLEdBQUcsb0RBQW9ELDBDQUEwQyxPQUFPLEtBQUssR0FBRyxxREFBcUQsMkNBQTJDLE9BQU8sS0FBSyxHQUFHLHFEQUFxRCwyQ0FBMkMsT0FBTyxLQUFLLEdBQUcscURBQXFELDJDQUEyQyxPQUFPLEtBQUssR0FBRyxxREFBcUQsMkNBQTJDLE9BQU8sS0FBSyxHQUFHLHFEQUFxRCwyQ0FBMkMsT0FBTyxLQUFLLEdBQUcscURBQXFELDJDQUEyQyxPQUFPLEtBQUssR0FBRyxxREFBcUQsMkNBQTJDLE9BQU8sS0FBSyxHQUFHLHFEQUFxRCwyQ0FBMkMsT0FBTyxLQUFLLEdBQUcsMERBQTBELHlDQUF5QyxPQUFPLEtBQUssR0FBRyw4RkFBOEYsaURBQWlELG9CQUFvQixTQUFTLDJHQUEyRyxnRUFBZ0UsMENBQTBDLFNBQVMsaUVBQWlFLE9BQU8sS0FBSyxHQUFHLDBFQUEwRSxzREFBc0Qsb0JBQW9CLFNBQVMsZ0ZBQWdGLHNEQUFzRCxvQkFBb0IsU0FBUyxrQ0FBa0MsT0FBTyxLQUFLLEdBQUcsMEZBQTBGLHNEQUFzRCxtQkFBbUIsU0FBUyxtRkFBbUYsNERBQTRELG1CQUFtQixTQUFTLGdEQUFnRCwyQkFBMkIsbUJBQW1CLFNBQVMsc0RBQXNELE9BQU8sS0FBSyxHQUFHLHdHQUF3RyxpREFBaUQsb0JBQW9CLFNBQVMsNENBQTRDLDhDQUE4Qyx1QkFBdUIsK0pBQStKLFNBQVMsb0RBQW9ELDBCQUEwQiw0RkFBNEYsaUhBQWlILFNBQVMsa0JBQWtCLE9BQU8sS0FBSyxHQUFHLEdBQUcsR0FBRyxxQ0FBcUMsd1NBQXdTLGtMQUFrTCw4SkFBOEosOEtBQThLLDBRQUEwUSx1T0FBdU8sd0xBQXdMLHdMQUF3TCx3TEFBd0wsd0xBQXdMLHdMQUF3TCx3TEFBd0wsd0xBQXdMLHdMQUF3TCxhQUFhLHlXQUF5VyxxRUFBcUUsaURBQWlELGlDQUFpQyxvREFBb0QsaURBQWlELHdCQUF3QixFQUFFLDJPQUEyTyxrT0FBa08seU5BQXlOLGtPQUFrTyxzS0FBc0sseUNBQXlDLGdKQUFnSiw0REFBNEQsMENBQTBDLDJIQUEySCxrR0FBa0csS0FBSywrSEFBK0gsNkdBQTZHLHNDQUFzQyxtQ0FBbUMscUZBQXFGLGFBQWEsK0JBQStCLCtCQUErQixhQUFhLFNBQVMsT0FBTyxLQUFLLEdBQUcsa0dBQWtHLGdFQUFnRSxPQUFPLEtBQUssR0FBRyw2R0FBNkcsc0NBQXNDLG1DQUFtQyx3RkFBd0YsNklBQTZJLCtFQUErRSxlQUFlLHdGQUF3RixhQUFhLGtDQUFrQyx1RkFBdUYsYUFBYSxrQ0FBa0MsdUZBQXVGLGFBQWEsK0JBQStCLCtCQUErQixhQUFhLFNBQVMsT0FBTyxLQUFLLEdBQUcsMkdBQTJHLG9IQUFvSCx1SUFBdUksMkRBQTJELDZCQUE2QixXQUFXLFNBQVMsZ0VBQWdFLE9BQU8sS0FBSyxHQUFHLDZHQUE2RyxzQ0FBc0MsbUNBQW1DLHdGQUF3RixxR0FBcUcsOEJBQThCLGVBQWUsd0ZBQXdGLGFBQWEsa0NBQWtDLHVGQUF1RixhQUFhLGtDQUFrQyx1RkFBdUYsYUFBYSwrQkFBK0IsK0JBQStCLGFBQWEsU0FBUyxPQUFPLEtBQUssR0FBRywyR0FBMkcsb0hBQW9ILHFHQUFxRywrRkFBK0YsNEdBQTRHLDZEQUE2RCwrQkFBK0IsYUFBYSxvRUFBb0UsV0FBVyx1RUFBdUUsd0JBQXdCLFNBQVMsZ0VBQWdFLE9BQU8sS0FBSyxHQUFHLGdJQUFnSSw0QkFBNEIsNEJBQTRCLGlDQUFpQyxnQ0FBZ0MsZ0hBQWdILCtHQUErRywwRkFBMEYsMEZBQTBGLGlEQUFpRCxxREFBcUQscUVBQXFFLHlDQUF5QyxPQUFPLEtBQUssR0FBRyxHQUFHLEdBQUcseURBQXlELHlOQUF5Tiw0U0FBNFMsNFNBQTRTLDhKQUE4SixpSkFBaUosMlBBQTJQLEVBQUUsb0pBQW9KLDJrQ0FBMmtDLEVBQUUsb0pBQW9KLHNuQkFBc25CLEVBQUUsdUlBQXVJLCs4Q0FBKzhDLEVBQUUsbUtBQW1LLCtKQUErSixvUEFBb1AseU5BQXlOLGFBQWEscVpBQXFaLHFFQUFxRSxtREFBbUQseUNBQXlDLHdCQUF3QixFQUFFLG9DQUFvQyxrREFBa0Qsa0NBQWtDLE9BQU8saUJBQWlCLGFBQWEsR0FBRyxhQUFhLHlaQUF5WixxRUFBcUUsbURBQW1ELDBDQUEwQyx3QkFBd0IsRUFBRSxtTUFBbU0sb0NBQW9DLHVHQUF1RyxHQUFHLGFBQWEsNllBQTZZLHFFQUFxRSxtREFBbUQsdUNBQXVDLHdCQUF3QixFQUFFLGtDQUFrQyxzRkFBc0YsR0FBRyxhQUFhLGlZQUFpWSxxRUFBcUUsbURBQW1ELG9DQUFvQyx3QkFBd0IsRUFBRSwwTEFBMEwsc0NBQXNDLG9CQUFvQixjQUFjLE1BQU0sbUJBQW1CLHVNQUF1TSxLQUFLLEdBQUcsa0NBQWtDLDBIQUEwSCx1QkFBdUIsS0FBSyxHQUFHLGFBQWEsNllBQTZZLHFFQUFxRSxtREFBbUQsdUNBQXVDLHdCQUF3QixFQUFFLDBMQUEwTCx1Q0FBdUMsd0hBQXdILGtGQUFrRixnQkFBZ0IsR0FBRyxhQUFhLGlaQUFpWixxRUFBcUUsbURBQW1ELHdDQUF3Qyx3QkFBd0IsRUFBRSxnQ0FBZ0Msd0hBQXdILEdBQUcsYUFBYSx5WkFBeVoscUVBQXFFLG1EQUFtRCwwQ0FBMEMsd0JBQXdCLEVBQUUsaUNBQWlDLG1LQUFtSyxHQUFHLGFBQWEseVpBQXlaLHFFQUFxRSxtREFBbUQsMENBQTBDLHdCQUF3QixFQUFFLHNNQUFzTSxnTUFBZ00saU9BQWlPLHNNQUFzTSwwQ0FBMEMsc1RBQXNULEdBQUcsYUFBYSxpWUFBaVkscUVBQXFFLG1EQUFtRCxtQ0FBbUMsd0JBQXdCLEVBQUUscUtBQXFLLGdDQUFnQyxrR0FBa0csa0NBQWtDLHVCQUF1QiwwQ0FBMEMsOEZBQThGLDRFQUE0RSxLQUFLLG1EQUFtRCxHQUFHLGFBQWEseVlBQXlZLHFFQUFxRSxtREFBbUQscUNBQXFDLHdCQUF3QixFQUFFLHFLQUFxSyxvTEFBb0wsaUNBQWlDLHlGQUF5RixvR0FBb0csR0FBRyxhQUFhLDZXQUE2VyxxRUFBcUUsbURBQW1ELCtCQUErQix3QkFBd0IsRUFBRSx1QkFBdUIsZ0NBQWdDLDZHQUE2RyxzQkFBc0IsTUFBTSxnQkFBZ0IsOEhBQThILEtBQUssYUFBYSxHQUFHLGFBQWEsNmJBQTZiLHFFQUFxRSxtREFBbUQsbURBQW1ELHdCQUF3QixFQUFFLG1NQUFtTSxnREFBZ0QsWUFBWSxrSEFBa0gsZ0JBQWdCLCtCQUErQiwyUkFBMlIsS0FBSyxHQUFHLGFBQWEsaUJBQWlCLEVBQUUsMkpBQTJKLHNHQUFzRyxrSEFBa0gsZ0RBQWdELDZDQUE2QyxnQkFBZ0IsbUlBQW1JLDhHQUE4RyxpQkFBaUIsb0pBQW9KLG9HQUFvRyxjQUFjLDZLQUE2SyxtSUFBbUksNkNBQTZDLHVHQUF1RywyREFBMkQsd0NBQXdDLEVBQUUsb0JBQW9CLGtCQUFrQixpQkFBaUIsY0FBYyxHQUFHLGtHQUFrRyw2REFBNkQseURBQXlELGNBQWMsR0FBRyx3SEFBd0gsNG1CQUE0bUIseU5BQXlOLGtPQUFrTyx1TUFBdU0sK0lBQStJLHVDQUF1QywyRUFBMkUsSUFBSSwrQkFBK0IsNENBQTRDLDBDQUEwQyw4REFBOEQsbUxBQW1MLG9FQUFvRSxzREFBc0QsaURBQWlELGlFQUFpRSxFQUFFLHdDQUF3QyxzQ0FBc0MsdURBQXVELE1BQU0sR0FBRyx3REFBd0Qsc0NBQXNDLHVIQUF1SCw4RkFBOEYsS0FBSywySEFBMkgsdUdBQXVHLHFCQUFxQixrQkFBa0IsMkdBQTJHLFNBQVMsRUFBRSw2Q0FBNkMsd0RBQXdELDBCQUEwQiw0REFBNEQsdUNBQXVDLDJKQUEySixjQUFjLE1BQU0sMkpBQTJKLGFBQWEsa0dBQWtHLHFCQUFxQixhQUFhLGlEQUFpRCxZQUFZLE1BQU0sdUNBQXVDLDJLQUEySyxjQUFjLE1BQU0sMktBQTJLLGFBQWEsV0FBVyxTQUFTLGtDQUFrQyxPQUFPLEtBQUssR0FBRyx1R0FBdUcscUJBQXFCLGtCQUFrQiw4RUFBOEUsU0FBUyxFQUFFLDZDQUE2Qyx3REFBd0QsNERBQTRELDZIQUE2SCxZQUFZLE1BQU0seUtBQXlLLFdBQVcsU0FBUyxrQ0FBa0MsT0FBTyxLQUFLLEdBQUcsR0FBRyxHQUFHLGdJQUFnSSw0SUFBNEksbUlBQW1JLDRJQUE0SSw4RUFBOEUsWUFBWSxNQUFNO0FBQzUrd0M7Ozs7Ozs7Ozs7OztBQ0xhOztBQUViOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQ3RDQSxjQUFjLHNHQUFpQztBQUMvQztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsR0FBRyxFQUFFLHlCQUF5QixTQUFTLHlCQUF5QjtBQUNoRTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFD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SztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQyw0QkFBNEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsMEJBQTBCLGVBQWU7QUFDdEU7O0FBRU87QUFDUDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pvQkE7QUFDQTtBQUNBOztBQUV5QjtBQUNTO0FBQ1E7QUFLNUI7QUFHZCwrREFBZTtFQUNiajhDLEdBQUcsRUFBSEEsNENBQUc7RUFDSHEwQixRQUFRLEVBQVJBLGlEQUFRO0VBQ1JsTixZQUFZLEVBQVpBLHFEQUFZQTtBQUNkLENBQUMsRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1BsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9OdW1iZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvVWludDhBcnJheXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9TZHBQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9SZWFkT25seVN1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1N1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1NESy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1RlbGVtZXRyeVVybC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9CaXRzdHJlYW1SZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXRUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZFR5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS9FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS92Y2wvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9ldmVudC9FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvRXZlbnRQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZnJhbWVUaW1pbmcvSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxuY29uc3QgdmlzaWJpbGl0eUNoYW5nZUV2ZW50ID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSAhR2xvYmFsU2NvcGUudmFsdWUuZG9jdW1lbnRJc0hpZGRlbjtcbiAgICBjb25zdCB1c2VFdmVudENhcHR1cmVQaGFzZSA9IGZhbHNlO1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUuYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2VFdmVudCwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdXNlRXZlbnRDYXB0dXJlUGhhc2UpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLnJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKSkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZSA9ICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZCA9ICgvQW5kcm9pZC9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbi8vIFRoZSBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZmlsZSBpcyB1c2VkIGluIHRoZSBzaWxlbnQgYnVpbGRcbi8vIHRvIGNvbnN0cmFpbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWVzLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgcHVibGljIHN0YXRpYyBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnF1ZXVlTWljcm90YXNrKHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcyksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nOiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IEdsb2JhbFNjb3BlLnZhbHVlLmRvY3VtZW50Q3JlYXRlRWxlbWVudDxIVE1MSW1hZ2VFbGVtZW50PignaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gR2xvYmFsU2NvcGUudmFsdWUuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uICE9PSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmsgPz8gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmtNYXggPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSA/PyBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy50eXBlID8/ICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5ydHQgPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbiB8IG51bGwpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgR2xvYmFsU2NvcGUudmFsdWU/LmRvY3VtZW50Q3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBSVENSdHBSZWNlaXZlci5wcm90b3R5cGUuY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIEdsb2JhbFNjb3BlLnZhbHVlPy5IVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkXG4gICAgICAmJiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpO1xuICB9XG5cbiAgc3RhdGljIGdldCBlcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnU2FmYXJpJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElHbG9iYWxTY29wZSBmcm9tICcuL0lHbG9iYWxTY29wZSc7XG5pbXBvcnQgSURvY3VtZW50IGZyb20gJy4vSURvY3VtZW50JztcbmltcG9ydCBJTG9jYXRpb24gZnJvbSAnLi9JTG9jYXRpb24nO1xuaW1wb3J0IElOZXR3b3JrSW5mb3JtYXRpb24gZnJvbSAnLi9JTmV0d29ya0luZm9ybWF0aW9uJztcbmltcG9ydCBJTmF2aWdhdG9yIGZyb20gJy4vSU5hdmlnYXRvcic7XG5pbXBvcnQgSVdpbmRvdyBmcm9tICcuL0lXaW5kb3cnO1xuaW1wb3J0IElQcm92aWRlZEdsb2JhbFNjb3BlIGZyb20gJy4vSVByb3ZpZGVkR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5cbnR5cGUgQnJvd3Nlckdsb2JhbFNjb3BlID0gSVByb3ZpZGVkR2xvYmFsU2NvcGU7XG5cbmNvbnN0IGJyb3dzZXJHbG9iYWxTY29wZTogQnJvd3Nlckdsb2JhbFNjb3BlID0ge1xuICBkb2N1bWVudCxcbiAgbG9jYXRpb24sXG4gIG5hdmlnYXRvcixcbiAgd2luZG93XG59O1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsU2NvcGUgaW1wbGVtZW50cyBJR2xvYmFsU2NvcGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5zdGFuY2UgPSBuZXcgU3ViamVjdDxJR2xvYmFsU2NvcGU+KG5ldyBHbG9iYWxTY29wZShicm93c2VyR2xvYmFsU2NvcGUpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5zdGFuY2U6IFJlYWRPbmx5U3ViamVjdDxJR2xvYmFsU2NvcGU+ID0gbmV3IFJlYWRPbmx5U3ViamVjdChHbG9iYWxTY29wZS5faW5zdGFuY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogSURvY3VtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhdGlvbjogSUxvY2F0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0b3I6IElOYXZpZ2F0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpbmRvdzogSVdpbmRvdztcblxuICBjb25zdHJ1Y3RvcihnbG9iYWxTY29wZTogQnJvd3Nlckdsb2JhbFNjb3BlKSB7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBnbG9iYWxTY29wZS5kb2N1bWVudDtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGdsb2JhbFNjb3BlLmxvY2F0aW9uO1xuICAgIHRoaXMuX25hdmlnYXRvciA9IGdsb2JhbFNjb3BlLm5hdmlnYXRvcjtcbiAgICB0aGlzLl93aW5kb3cgPSBnbG9iYWxTY29wZS53aW5kb3c7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCB0byBtYWludGFpbiBBUEkgY29uc2lzdGVuY3kgd2l0aCBQcm92aWRlZEdsb2JhbFNjb3BlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHB1YmxpYyBzdGF0aWMgc2V0SW5zdGFuY2UocHJvdmlkZWRHbG9iYWxTY29wZTogSVByb3ZpZGVkR2xvYmFsU2NvcGUpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIHRoZSBHbG9iYWxTY29wZScpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBSZWFkT25seVN1YmplY3Q8SUdsb2JhbFNjb3BlPiB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLl9yZWFkT25seUluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzdWJzY3JpYmUoY2FsbGJhY2s6ICh2YWx1ZTogSUdsb2JhbFNjb3BlIHwgbnVsbCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUuX3JlYWRPbmx5SW5zdGFuY2Uuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGdldCBGb3JtRGF0YSgpOiB0eXBlb2YgRm9ybURhdGEge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuRm9ybURhdGE7XG4gIH1cblxuICBnZXQgSFRNTFZpZGVvRWxlbWVudCgpOiB0eXBlb2YgSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5IVE1MVmlkZW9FbGVtZW50O1xuICB9XG5cbiAgZ2V0IE1lZGlhU3RyZWFtKCk6IHR5cGVvZiBNZWRpYVN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5NZWRpYVN0cmVhbTtcbiAgfVxuXG4gIGdldCBNZWRpYVN0cmVhbVRyYWNrKCk6IHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93Lk1lZGlhU3RyZWFtVHJhY2s7XG4gIH1cblxuICBnZXQgUlRDUGVlckNvbm5lY3Rpb24oKTogdHlwZW9mIFJUQ1BlZXJDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlJUQ1BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbigpOiB0eXBlb2YgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlJUQ1Nlc3Npb25EZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBSVENJY2VDYW5kaWRhdGUoKTogdHlwZW9mIFJUQ0ljZUNhbmRpZGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5SVENJY2VDYW5kaWRhdGU7XG4gIH1cblxuICBnZXQgVVJMKCk6IHR5cGVvZiBVUkwge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuVVJMO1xuICB9XG5cbiAgZ2V0IFVSTFNlYXJjaFBhcmFtcygpOiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlVSTFNlYXJjaFBhcmFtcztcbiAgfVxuXG4gIGdldCBhZGREb2N1bWVudEV2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgY2xlYXJJbnRlcnZhbCgpOiAoaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuY2xlYXJJbnRlcnZhbC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgY2xlYXJUaW1lb3V0KCk6IChpZD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5jbGVhclRpbWVvdXQuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgpOiA8RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50Pih0YWc6IHN0cmluZykgPT4gRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRIYXNGb2N1cygpOiAoKSA9PiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuaGFzRm9jdXMuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRJc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9kb2N1bWVudC5oaWRkZW47XG4gIH1cblxuICBnZXQgZG9jdW1lbnRRdWVyeVNlbGVjdG9yKCk6IDxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHRhZzogc3RyaW5nKSA9PiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZmV0Y2goKTogKGlucHV0OiBzdHJpbmcgfCBVUkwgfCBSZXF1ZXN0LCBpbml0PzogUmVxdWVzdEluaXQpID0+IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmZldGNoLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvbkhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhvc3RuYW1lO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uU2VhcmNoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaDtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0b3JDb25uZWN0aW9uKCk6IElOZXR3b3JrSW5mb3JtYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0b3JJc09uTGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdG9yLm9uTGluZTtcbiAgfVxuXG4gIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHRoaXMuX3dpbmRvd1snX19wYWdlTG9hZFRpbWUnXTtcbiAgfVxuXG4gIGdldCBxdWV1ZU1pY3JvdGFzaygpOiAobWljcm90YXNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnF1ZXVlTWljcm90YXNrLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCByZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IHJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgc2V0SW50ZXJ2YWwoKTogKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuc2V0SW50ZXJ2YWwuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHNldFRpbWVvdXQoKTogKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuc2V0VGltZW91dC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU2NvcGUuZ2V0SW5zdGFuY2UoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbi8vIEFzIGZsb2F0IGluIEVDTUFTY3JpcHQgdXNlIDY0LWJpdCBmb3JtYXQgaXQgY2Fubm90IGhhdmUvaGFuZGxlIG1vcmUgdGhhbiAxNSBzeW1ib2xzIGFmdGVyIGRvdC5cbmNvbnN0IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCA9IDE1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJzIHtcbiAgc3RhdGljIGNvdW50TnVtYmVyTGVuZ3RoKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlID0gMDtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgbnVtYmVyICo9IC0xO1xuICAgICAgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSsrO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXJzLmNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbChudW1iZXIpICsgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSArIChudW1iZXIgIT09IE1hdGguZmxvb3IobnVtYmVyKSA/IE51bWJlcnMuY291bnREaWdpdHNBZnRlckRlY2ltYWwobnVtYmVyKSArIDEgOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpeFJvdW5kaW5nKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3dlciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwb3dlcikgLyBwb3dlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGlnaXRzQmVmb3JlRGVjaW1hbCA9IDE7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICBkaWdpdHNCZWZvcmVEZWNpbWFsKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZ2l0c0JlZm9yZURlY2ltYWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgbGV0IG1vZGlmaWVkVmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgd2hpbGUgKG1vZGlmaWVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUgJiYgY291bnQgPCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBtb2RpZmllZFZhbHVlID0gTnVtYmVycy5maXhSb3VuZGluZyhvcmlnaW5hbFZhbHVlLCBjb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWludDhBcnJheXMge1xuICBwdWJsaWMgc3RhdGljIGlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKHRhcmdldEJ5dGVTZXF1ZW5jZTogVWludDhBcnJheSwgZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0YXJnZXRCeXRlU2VxdWVuY2UubGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKHRhcmdldEJ5dGVTZXF1ZW5jZVtpZHhdICE9PSBkYXRhW29mZnNldCArIGlkeF0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmaW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0KHRhcmdldEJ5dGVTZXF1ZW5jZTogVWludDhBcnJheSwgZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kID0gLTEpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldDsgY3VycmVudEluZGV4IDw9IGRhdGEuYnl0ZUxlbmd0aDsgY3VycmVudEluZGV4KyspIHtcbiAgICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSh0YXJnZXRCeXRlU2VxdWVuY2UsIGRhdGEsIGN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFV1aWRTdHJpbmdGcm9tVWludDhBcnJheShkYXRhOiBVaW50OEFycmF5LCB1dWlkQnl0ZUxlbmd0aCA9IDE2KTogc3RyaW5nIHtcbiAgICBjb25zdCB1dWlkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdXVpZEJ5dGVMZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBieXRlSGV4ID0gZGF0YVtpZHhdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgICB1dWlkLnB1c2goYnl0ZUhleCk7XG5cbiAgICAgIGlmIChpZHggPT09IDMgfHwgaWR4ID09PSA1IHx8IGlkeCA9PT0gNyB8fCBpZHggPT09IDkpIHtcbiAgICAgICAgdXVpZC5wdXNoKCctJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHV1aWQuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVWludDhBcnJheXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwZW5kZXJzIHtcbiAgcHJpdmF0ZSBfYXBwZW5kZXJzOiBBcnJheTxJQXBwZW5kZXI+ID0gW107XG5cbiAgZ2V0IHZhbHVlKCk6IEFycmF5PElBcHBlbmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBhZGQoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5wdXNoKGFwcGVuZGVyKTtcbiAgfVxuXG4gIHJlbW92ZShhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3I6IHN0cmluZywgY3VycmVudFZhbHVlOiBzdHJpbmcgfCBFcnJvciwgaW5kZXg6IG51bWJlciwgYXJyYXk6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5lcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5tZXNzYWdlKSArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGU6IG9iamVjdFtdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKF8sIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKSBhcyBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCkgYXMgTG9nZ2luZ0xldmVsVHlwZTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXJsIG11c3QgYmUgYSBzdHJpbmcgaW5zdGVhZCByZWNlaXZlZCBbJHt0eXBlb2YgdXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldHJpY3NGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9mYWlsdXJlQ291bnQgPSAwO1xuICBwcml2YXRlIF9kb21haW4gPSAnJztcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLmdldExvY2F0aW9uSG9zdG5hbWVGcm9tR2xvYmFsU2NvcGUoKS50aGVuKGxvY2F0aW9uSG9zdG5hbWUgPT4ge1xuICAgICAgdGhpcy5fZG9tYWluID0gbG9jYXRpb25Ib3N0bmFtZSA/PyAnJztcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2F0aW9uSG9zdG5hbWVGcm9tR2xvYmFsU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPihyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IEdsb2JhbFNjb3BlLnN1YnNjcmliZShnbG9iYWxTY29wZSA9PiB7XG4gICAgICAgIGlmIChnbG9iYWxTY29wZSkge1xuICAgICAgICAgIHJlc29sdmUoZ2xvYmFsU2NvcGUubG9jYXRpb25Ib3N0bmFtZSk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZyB8fCAhR2xvYmFsU2NvcGUudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHJlc3BvbnNlKSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gbWF4QnVmZmVyZWRSZWNvcmRzKSB7XG4gICAgICAgICAgdGhpcy5fZmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ldHJpY3MgPSBbLi4ubWV0cmljc01lc3NhZ2VzLCAuLi50aGlzLl9tZXRyaWNzXTtcblxuICAgICAgICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgICAgICAgfSwgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fZmFpbHVyZUNvdW50KSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RvbyBtYW55IGNhY2hlZCBtZXRyaWMgcmVjb3JkcyBbJXNdLCBkcm9wcGluZyBbJXNdIHJlY29yZHMnLCB0aGlzLl9tZXRyaWNzLmxlbmd0aCwgbWV0cmljc01lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZmFpbHVyZUNvdW50ID0gMDtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSh7c3RhdHVzfTogUmVzcG9uc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL141XFxkezJ9JC8udGVzdChzdGF0dXMudG9TdHJpbmcoKSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbCkge1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsOlxuICAgICAgICByZXR1cm4gJ0Vzc2VudGlhbCc7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbFR5cGU6IFRlbGVtZXRyeUxldmVsVHlwZSk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLk9mZjtcbiAgICAgIGNhc2UgJ0Vzc2VudGlhbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcnM/OiBSVENSdHBUcmFuc2NlaXZlcltdO1xuICB2aWRlb1RyYW5zY2VpdmVycz86IFJUQ1J0cFRyYW5zY2VpdmVyW107XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBlbnVtIEVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIERpc2FibGVkLFxuICBFbmFibGVkXG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhY2tLaW5kczogKCdhdWRpbycgfCAndmlkZW8nKVtdID0gWydhdWRpbycsICd2aWRlbyddO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9IHwgbnVsbDtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgdHJhY2tLaW5kcyA9IGRlZmF1bHRUcmFja0tpbmRzLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IEVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IEVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy5EaXNhYmxlZCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uICYmIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9PT0gRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLkRpc2FibGVkICYmIHRoaXMuaXNUcmFja3NLaW5kc0VxdWl2YWxlbnRUb0RlZmF1bHQodHJhY2tLaW5kcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSBGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCA/IHtlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9PT0gRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLkVuYWJsZWR9IDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBjb25zdCBhdWRpb1RyYW5zY2VpdmVyczogUlRDUnRwVHJhbnNjZWl2ZXJbXSA9IFtdO1xuICAgICAgICBjb25zdCB2aWRlb1RyYW5zY2VpdmVyczogUlRDUnRwVHJhbnNjZWl2ZXJbXSA9IFtdO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgdHJhY2tLaW5kcy5mb3JFYWNoKGtpbmQgPT4ge1xuICAgICAgICAgICAgaWYgKGtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcnMucHVzaChwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihraW5kLCB7ZGlyZWN0aW9ufSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgdmlkZW9UcmFuc2NlaXZlcnMucHVzaChwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihraW5kLCB7ZGlyZWN0aW9ufSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVycyxcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXJzLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNUcmFja3NLaW5kc0VxdWl2YWxlbnRUb0RlZmF1bHQodHJhY2tzS2luZHM6ICgnYXVkaW8nIHwgJ3ZpZGVvJylbXSk6IGJvb2xlYW4ge1xuICAgIGlmICh0cmFja3NLaW5kcy5sZW5ndGggIT09IGRlZmF1bHRUcmFja0tpbmRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50VHJhY2tLaW5kcyA9IChhcnJheTogKCdhdWRpbycgfCAndmlkZW8nKVtdKSA9PiBhcnJheS5yZWR1Y2UoKHRyYWNrS2luZENvdW50LCBraW5kKSA9PiB7XG4gICAgICB0cmFja0tpbmRDb3VudFtraW5kXSA9ICh0cmFja0tpbmRDb3VudFtraW5kXSB8fCAwKSArIDE7XG5cbiAgICAgIHJldHVybiB0cmFja0tpbmRDb3VudDtcbiAgICB9LCB7XG4gICAgICBhdWRpbzogMCxcbiAgICAgIHZpZGVvOiAwXG4gICAgfSk7XG4gICAgY29uc3QgY291bnRlZFRyYWNrS2luZHMgPSBjb3VudFRyYWNrS2luZHModHJhY2tzS2luZHMpO1xuICAgIGNvbnN0IGNvdW50ZWREZWZhdWx0VHJhY2tLaW5kcyA9IGNvdW50VHJhY2tLaW5kcyhkZWZhdWx0VHJhY2tLaW5kcyk7XG5cbiAgICByZXR1cm4gY291bnRlZFRyYWNrS2luZHMuYXVkaW8gPT09IGNvdW50ZWREZWZhdWx0VHJhY2tLaW5kcy5hdWRpbyAmJiBjb3VudGVkVHJhY2tLaW5kcy52aWRlbyA9PT0gY291bnRlZERlZmF1bHRUcmFja0tpbmRzLnZpZGVvO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lOiBzdHJpbmcpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nID0gJ3Vua25vd24nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmcgPSAndW5rbm93bic7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCAmJiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uPy5zZHApIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtOiB7aWQ6IHN0cmluZ30pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtICh0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wIHx8IDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy52aWRlbz8uZnJhbWVzRGVjb2RlZCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy52aWRlbz8uZnJhbWVzRGVjb2RlZCkge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjIHx8ICd1bmtub3duJztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgfHwgJ3Vua25vd24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgvKD86XnxbXFxyXFxuXSltPS8pO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBydG1hcCA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpPy5zcGxpdCgnICcpWzNdIHx8ICcnO1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7cnRtYXB9YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmU/LnNwbGl0KCcgJylbMV0gfHwgJyc7XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24/LmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIHx8IG51bGw7XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIHx8IG51bGw7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24/LmNvbm5lY3Rpb25TdGF0ZSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24/LmljZUNvbm5lY3Rpb25TdGF0ZSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0VHJhbnNjZWl2ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRUcmFuc2NlaXZlcnMgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFJlY2VpdmVycygpOiBSVENSdHBSZWNlaXZlcltdIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcjxUIGV4dGVuZHMga2V5b2YgUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcD4odHlwZTogVCwgbGlzdGVuZXI6ICh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1BlZXJDb25uZWN0aW9uRXZlbnRNYXBbVF0pID0+IHVua25vd24sIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBSVENQZWVyQ29ubmVjdGlvbkV2ZW50TWFwPih0eXBlOiBULCBsaXN0ZW5lcjogKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFtUXSkgPT4gdW5rbm93biwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRyYW5zY2VpdmVycygpOiBSVENSdHBUcmFuc2NlaXZlcltdIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5jbG9zZSgpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPihyZXNvbHZlUGVlckNvbm5lY3Rpb25Qcm9taXNlID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS5zdWJzY3JpYmUoZ2xvYmFsU2NvcGUgPT4ge1xuICAgICAgICBpZiAoIWdsb2JhbFNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZVBlZXJDb25uZWN0aW9uUHJvbWlzZShuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAodmFsdWU6IFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBUW10sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6ICgodmFsdWU6IFQpID0+IHZvaWQpW107XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAodmFsdWU6IFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KHZhbHVlOiBUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9JR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtHbG9iYWxTY29wZX0gZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IHtTaGFrYVBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL0lTaGFrYVBsYXllcic7XG5pbXBvcnQge0hsc1BsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9JV2ViUGxheWVyJztcbmltcG9ydCBJUHJvdmlkZWRHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9JUHJvdmlkZWRHbG9iYWxTY29wZSc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCkudmFsdWU/LnBhZ2VMb2FkVGltZSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86ICh2YWx1ZTogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAodmFsdWU6IChwbGF5ZXI6IFNoYWthUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAodmFsdWU6IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlcjogKHZhbHVlOiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXI6ICh2YWx1ZTogKHBsYXllcjogU2hha2FQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXI6ICh2YWx1ZTogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB8IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0O1xuICB9XG5cbiAgc3RhdGljIGdldCBza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6ICh2YWx1ZTogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKHZhbHVlOiAocGxheWVyOiBTaGFrYVBsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKHZhbHVlOiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSA9IFNESy5wYWdlTG9hZFRpbWU7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpIGFzIFRlbGVtZXRyeUxldmVsVHlwZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0Jyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcycpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgY29uc3QgZ2xvYmFsU2NvcGUgPSBHbG9iYWxTY29wZS5nZXRJbnN0YW5jZSgpLnZhbHVlO1xuICAgICAgY29uc3QgdXJpID0gbmV3IGdsb2JhbFNjb3BlLlVSTChiYXNlVVJJVmFsdWUpO1xuXG4gICAgICB1cmkucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgb25Mb2FkKGdsb2JhbFNjb3BlOiBJR2xvYmFsU2NvcGUgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NESyBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2xvYmFsU2NvcGUuYWRkV2luZG93RXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICAgICAgU0RLLmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIFNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuICAgIFNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG4gICAgU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlOiBJSW5pdE9wdGlvbnMgJiB7Z2xvYmFsU2NvcGU/OiBJUHJvdmlkZWRHbG9iYWxTY29wZX0gPSBvcHRpb25zO1xuXG4gICAgaWYgKG9wdGlvbnNXaXRoT3B0aW9uYWxnbG9iYWxTY29wZS5nbG9iYWxTY29wZSkge1xuICAgICAgR2xvYmFsU2NvcGUuc2V0SW5zdGFuY2Uob3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlLmdsb2JhbFNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5HbG9iYWxTY29wZS5zdWJzY3JpYmUoU0RLLm9uTG9hZC5iaW5kKFNESykpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBFbmNvZGVkU3RyZWFtU2luaywge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IFN0cmVhbVRyYWNrVHJhbnNmb3JtLCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwge1N0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24sIFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbn0gZnJvbSAnLi4vZnJhbWVUaW1pbmcvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbSB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IFJlYWRPbmx5U3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogUmVhZE9ubHlTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge3RhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnfTtcbiAgICBjb25zdCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8uYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24gfCBudWxsPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD4odGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtIHwgbnVsbD4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gbmV3IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0KCk7XG4gICAgdGhpcy5jb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKGVkZ2VUb2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4odGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUuYWRkV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZykge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5jb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKGVkZ2VUb2tlbik7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBnZXQgaXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQ7XG4gIH1cblxuICBnZXQgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgZ2V0IHJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbigpOiBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG5cbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+KCd2aWRlbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggaW5zZXJ0YWJsZS1zdHJlYW1zIGFuZCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBhcmUgZW5hYmxlZCwgb25seSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBjYWxsYmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIHNpbmsgZnVuY3Rpb24gZm91bmQsIG9ubHkgdXNlIG9uZSB0eXBlIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIShGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLkVycm9yIHx8IHN0YXRlID09PSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBpbml0aWFsaXppbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50ICYmIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKHRva2VuOiBFZGdlVG9rZW4pOiB2b2lkIHtcbiAgICBjb25zdCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSA9IHRva2VuLmNhcGFiaWxpdGllcy5maW5kKGNhcGFiaWxpdHkgPT4gY2FwYWJpbGl0eS5zdGFydHNXaXRoKCdmcmFtZS10aW1pbmctaW5mb3JtYXRpb249JykpO1xuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICghZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNhYmxpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGFzIG5vIGNhcGFiaWxpdHkgd2FzIGZvdW5kJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzQ2hhbm5lbEZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNhYmxpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGFzIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGl0IFslc10nLCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eS5zcGxpdCgnPScpWzFdXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChvcHRpb24gPT4gb3B0aW9uLnRyaW0oKSlcbiAgICAgIC5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgICAgY2FzZSAndGltZWNvZGUnOlxuICAgICAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndGltZXN0YW1wcyc6XG4gICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnSWdub3JpbmcgdW5rbm93biBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gb3B0aW9uIFslc10nLCBvcHRpb24pO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGNvbmZpZ3VyYXRpb24gWyh0aW1lY29kZSBbJXNdLCB0aW1lc3RhbXBzIFslc10pXScsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIEluaXRpYWxpemluZyA9IDAsXG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyA9IDIsXG4gIFBhdXNlZCA9IDMsXG4gIFBsYXlpbmcgPSA0LFxuICBSZWNvdmVyaW5nID0gNSxcbiAgUmVjb25uZWN0aW5nID0gNixcbiAgU3RhbmRCeSA9IDcsXG4gIFN0b3BwZWQgPSA4LFxuICBVbmF1dGhvcml6ZWQgPSA5LFxuICBHZW9SZXN0cmljdGVkID0gMTAsXG4gIEdlb0Jsb2NrZWQgPSAxMSxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlID0gMTIsXG4gIENvbmZpZ3VyYXRpb25FcnJvciA9IDEzLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IgPSAxNCxcbiAgQ29ubmVjdGlvbkVycm9yID0gMTUsXG4gIENsaWVudFN0YXJ0RXJyb3IgPSAxNixcbiAgRXJyb3IgPSAxN1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50IHwgbnVsbD47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQgfCB1bmRlZmluZWQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50IHwgbnVsbD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtIHwgbnVsbD47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPjtcbiAgdmlkZW9UZWxlbWV0cnk6IFZpZGVvVGVsZW1ldHJ5IHwgbnVsbDtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWMgfCBudWxsO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYyB8IG51bGw7XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFubmVsQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMudmlkZW9UZWxlbWV0cnkgPSBudWxsO1xuICAgIHRoaXMucnRjQXVkaW9TdGF0aXN0aWMgPSBudWxsO1xuICAgIHRoaXMucnRjVmlkZW9TdGF0aXN0aWMgPSBudWxsO1xuICAgIHRoaXMuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiwgUmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuLi9mcmFtZVRpbWluZy9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQge1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvdWxkRXh0cmFjdFRpbWVjb2RlOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBpc0VuYWJsZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogU3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2hvdWxkRXh0cmFjdFRpbWVjb2RlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0VuYWJsZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgU3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPihudWxsKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCB7XG4gIHJlYWRvbmx5IGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRzdHJlYW1SZWFkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9iaXRPZmZzZXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVaW50OEFycmF5KSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5fYml0T2Zmc2V0ID0gMDtcbiAgfVxuXG4gIHB1YmxpYyByZWFkQml0cyhiaXRzVG9SZWFkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9iaXRPZmZzZXQgKyBiaXRzVG9SZWFkID4gdGhpcy5fZGF0YS5sZW5ndGggKiA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkIFske2JpdHNUb1JlYWR9XSBiaXRzIC0gb25seSBbJHt0aGlzLmdldFJlbWFpbmluZ0JpdHMoKX1dIGJpdHMgcmVtYWluaW5nIGluIHN0cmVhbWApO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgbGV0IGJpdHNSZW1haW5pbmcgPSBiaXRzVG9SZWFkO1xuXG4gICAgd2hpbGUgKGJpdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICBjb25zdCBieXRlT2Zmc2V0ID0gTWF0aC5mbG9vcih0aGlzLl9iaXRPZmZzZXQgLyA4KTtcbiAgICAgIGNvbnN0IGJpdFBvc2l0aW9uSW5CeXRlID0gdGhpcy5fYml0T2Zmc2V0ICUgODtcbiAgICAgIGNvbnN0IGJpdHNBdmFpbGFibGVJbkJ5dGUgPSA4IC0gYml0UG9zaXRpb25JbkJ5dGU7XG4gICAgICBjb25zdCBiaXRzVG9SZWFkID0gTWF0aC5taW4oYml0c1JlbWFpbmluZywgYml0c0F2YWlsYWJsZUluQnl0ZSk7XG4gICAgICAvLyBDcmVhdGUgYSBtYXNrIGZvciB0aGUgYml0cyB3ZSB3YW50IHRvIHJlYWRcbiAgICAgIGNvbnN0IG1hc2sgPSAoMSA8PCBiaXRzVG9SZWFkKSAtIDE7XG4gICAgICAvLyBTaGlmdCByaWdodCB0byBnZXQgcmlkIG9mIGxvd2VyIGJpdHMgd2UgZG9uJ3Qgd2FudFxuICAgICAgY29uc3QgYnl0ZVZhbHVlID0gKHRoaXMuX2RhdGFbYnl0ZU9mZnNldF0gPj4gKGJpdHNBdmFpbGFibGVJbkJ5dGUgLSBiaXRzVG9SZWFkKSk7XG4gICAgICAvLyBNYXNrIHRvIGtlZXAgb25seSB0aGUgYml0cyB3ZSB3YW50XG4gICAgICBjb25zdCBiaXRzID0gYnl0ZVZhbHVlICYgbWFzaztcblxuICAgICAgLy8gQWRkIHRoZXNlIGJpdHMgdG8gb3VyIHJlc3VsdFxuICAgICAgdmFsdWUgPSAodmFsdWUgPDwgYml0c1RvUmVhZCkgfCBiaXRzO1xuXG4gICAgICBiaXRzUmVtYWluaW5nIC09IGJpdHNUb1JlYWQ7XG4gICAgICB0aGlzLl9iaXRPZmZzZXQgKz0gYml0c1RvUmVhZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2tpcEJpdHMoYml0c1RvU2tpcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2JpdE9mZnNldCArIGJpdHNUb1NraXAgPiB0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNraXAgWyR7Yml0c1RvU2tpcH1dIGJpdHMgLSBvbmx5IFske3RoaXMuZ2V0UmVtYWluaW5nQml0cygpfV0gYml0cyByZW1haW5pbmcgaW4gc3RyZWFtYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYml0T2Zmc2V0ICs9IGJpdHNUb1NraXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVtYWluaW5nQml0cygpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5fZGF0YS5sZW5ndGggKiA4KSAtIHRoaXMuX2JpdE9mZnNldDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQsIHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50fSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudHMvRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi9uYWxVbml0L05hbFVuaXQnO1xuaW1wb3J0IFNlaVBheWxvYWQgZnJvbSAnLi9uYWxVbml0L1NlaVBheWxvYWQnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4vbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi9uYWxVbml0L1NlaVBheWxvYWRUeXBlJztcbmltcG9ydCBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQgZnJvbSAnLi4vLi4vRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NEJpdHN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb05hbFVuaXQobmFsVW5pdFR5cGU6IE5hbFVuaXRUeXBlLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxOYWxVbml0PikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8TmFsVW5pdD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuTmFsVW5pdCwgbmFsVW5pdEV2ZW50ID0+IHtcbiAgICAgIGlmIChuYWxVbml0RXZlbnQuZGF0YS50eXBlID09PSBuYWxVbml0VHlwZSkge1xuICAgICAgICBoYW5kbGVyKG5hbFVuaXRFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9TZWlQYXlsb2FkVHlwZShzZWlQYXlsb2FkVHlwZTogU2VpUGF5bG9hZFR5cGUsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFNlaVBheWxvYWQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxTZWlQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5TZWlQYXlsb2FkLCBzZWlQYXlsb2FkRXZlbnQgPT4ge1xuICAgICAgaWYgKHNlaVBheWxvYWRFdmVudC5kYXRhLnR5cGUgPT09IHNlaVBheWxvYWRUeXBlKSB7XG4gICAgICAgIGhhbmRsZXIoc2VpUGF5bG9hZEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb1BheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkVXVpZDogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxzdHJpbmc+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWRTdWJzY3JpcHRpb24sIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkVXVpZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHBheWxvYWRFdmVudCA9PiB7XG4gICAgICBpZiAocGF5bG9hZEV2ZW50LmRhdGEudXVpZCA9PT0gcGF5bG9hZFV1aWQpIHtcbiAgICAgICAgaGFuZGxlcihwYXlsb2FkRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gTmFsVW5pdFR5cGUge1xuICBVbnNwZWNpZmllZCA9IDAsXG4gIFNsaWNlTGF5ZXJOb25JZHJEYXRhID0gMSxcbiAgU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyID0gMixcbiAgU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyID0gMyxcbiAgU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyID0gNCxcbiAgU2xpY2VMYXllcklkckRhdGEgPSA1LFxuICBTdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uID0gNixcbiAgU2VxdWVuY2VQYXJhbWV0ZXJTZXQgPSA3LFxuICBQaWN0dXJlUGFyYW1ldGVyU2V0ID0gOCxcbiAgQWNjZXNzVW5pdERlbGltaXRlciA9IDksXG4gIEVuZE9mU2VxdWVuY2UgPSAxMCxcbiAgRW5kT2ZTdHJlYW0gPSAxMSxcbiAgRmlsbGVyRGF0YSA9IDEyLFxuICBTZXF1ZW5jZVBhcmFtdGVyU2V0RXh0ZW5zaW9uID0gMTMsXG4gIFByZWZpeE5hbFVuaXQgPSAxNCxcbiAgU3Vic2V0U2VxdWVuY2VQYXJhbXRlclNldCA9IDE1LFxuICBEZXB0aFBhcmFtdGVyU2V0ID0gMTYsXG4gIFJlc2VydmVkMTcgPSAxNyxcbiAgUmVzZXJ2ZWQxOCA9IDE4LFxuICBTbGljZUxheWVyQXV4aWxpYXJ5ID0gMTksXG4gIFNsaWNlRXh0ZW5zaW9uID0gMjAsXG4gIFNsaWNlRXh0ZW5zaW9uRGVwdGhWaWV3Q29tcG9uZW50ID0gMjEsXG4gIFJlc2VydmVkMjIgPSAyMixcbiAgUmVzZXJ2ZXJkMjMgPSAyMyxcbiAgVW5zcGVjaWZpZWQyNCA9IDI0LFxuICBVbnNwZWNpZmllZDI1ID0gMjUsXG4gIFVuc3BlY2lmaWVkMjYgPSAyNixcbiAgVW5zcGVjaWZpZWQyNyA9IDI3LFxuICBVbnNwZWNpZmllZDI4ID0gMjgsXG4gIFVuc3BlY2lmaWVkMjkgPSAyOSxcbiAgVW5zcGVjaWZpZWQzMCA9IDMwLFxuICBVbnNwZWNpZmllZDMxID0gMzFcbn1cblxuZXhwb3J0IGRlZmF1bHQgTmFsVW5pdFR5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gU2VpUGF5bG9hZFR5cGUge1xuICBCdWZmZXJpbmdQZXJpb2QgPSAwLFxuICBQaWN0dXJlVGltaW5nID0gMSxcbiAgUGFuU2NhblJlY3QgPSAyLFxuICBGaWxsZXJQYXlsb2FkID0gMyxcbiAgVXNlckRhdGFSZWdpc3RlcmVkID0gNCxcbiAgVXNlckRhdGFVbnJlZ2lzdGVyZWQgPSA1LFxuICBSZWNvdmVyeVBvaW50ID0gNixcbiAgRGVjUmVmUGljTWFya2luZ1JlcGVpdGlvbiA9IDcsXG4gIFNwYXJlUGljID0gOCxcbiAgU2NlbmVJbmZvID0gOSxcbiAgU3ViU2VxSW5mbyA9IDEwLFxuICBTdWJTZXFMYXllckNoYXJhY3RlcmlzdGljcyA9IDExLFxuICBTdWJTZXFDaGFyYWN0ZXJpc3RpY3MgPSAxMixcbiAgRnVsbEZyYW1lRnJlZXplID0gMTMsXG4gIEZ1bGxGcmFtZUZyZWV6ZVJlbGVhc2UgPSAxNCxcbiAgRnVsbEZyYW1lU25hcHNob3QgPSAxNSxcbiAgUHJvZ3Jlc3NpdmVSZWZpbmVtZW50U2VnbWVudFN0YXJ0ID0gMTYsXG4gIFByb2dyZXNzaXZlUmVmaW5lbWVudFNlZ21lbnRFbmQgPSAxNyxcbiAgTW90aW9uQ29uc3RyYWluZWRTbGljZUdyb3VwU2V0ID0gMTgsXG4gIEZpbG1HcmFpbkNoYXJhY3RlcmlzdGljID0gMTksXG4gIERlYmxvY2tpbmdGaWx0ZXJEaXNwbGF5UmVmZXJlbmNlID0gMjAsXG4gIFN0ZXJlb1ZpZGVvSW5mbyA9IDIxLFxuICBQb3N0RmlsdGVySGludCA9IDIyLFxuICBUb25lTWFwcGluZ0luZm8gPSAyMyxcbiAgU2NhbGFiaWxpdHlJbmZvID0gMjQsXG4gIFN1YlBpY1NjYWxhYmxlTGF5ZXIgPSAyNSxcbiAgTm9uUmVxdWlyZWRMYXllclJlcCA9IDI2LFxuICBQYXJpb3JpdHlMYXllckluZm8gPSAyNyxcbiAgTGF5ZXJzTm90UHJlc2VudCA9IDI4LFxuICBMYXllckRlcGVuZGVuY3lDaGFuZ2UgPSAyOSxcbiAgU2NhbGFibGVOZXN0aW5nID0gMzAsXG4gIEJhc2VMYXllclRlbXBvcmFsSHJkID0gMzEsXG4gIFF1YWxpdHlMYXllckludGVncml0eUNoZWNrID0gMzIsXG4gIFJlZHVuZGFudFBpY1Byb3BlcnR5ID0gMzMsXG4gIFRsMERlcFJlcEluZGV4ID0gMzQsXG4gIFRsU3dpdGNoaW5nUG9pbnQgPSAzNSxcbiAgUGFyYWxsZWxEZWNvZGluZ0luZm8gPSAzNixcbiAgTXZjU2NhbGFibGVOZXN0aW5nID0gMzcsXG4gIFZpZXdTY2FsYWJpbGl0eUluZm8gPSAzOCxcbiAgTXVsdGl2aWV3U2NlbmVJbmZvID0gMzksXG4gIE11bHRpdmlld0FjcXVpc2l0aW9uSW5mbyA9IDQwLFxuICBOb25SZXF1aXJlZFZpZXdDb21wb25lbnQgPSA0MSxcbiAgVmlld0RlcGVuZGVuY3lDaGFuZ2UgPSA0MixcbiAgT3BlcmF0aW9uUG9pbnRzTm90UHJlc2VudCA9IDQzLFxuICBCYXNlVmlld1RlbXBvcmFsSGRyID0gNDQsXG4gIEZyYW1lUGFja2luZ0FycmFuZ2VtZW50ID0gNDUsXG4gIE11bHRpdmlld1ZpZXdQb3NpdGlvbiA9IDQ2LFxuICBEaXNwbGF5T3JpZW50YXRpb24gPSA0NyxcbiAgTXZjZFNjYWxhYmxlTmVzdGluZyA9IDQ4LFxuICBNdmNkVmlld1NjYWxhYmlsaXR5SW5mbyA9IDQ5LFxuICBEZXB0aFJlcHJlc2VudGF0aW9uSW5mbyA9IDUwLFxuICBUaHJlZURpbWVuc2lvbmFsUmVmZXJlbmNlRGlzcGxheXNJbmZvID0gNTEsXG4gIERlcHRoVGltaW5nID0gNTIsXG4gIERlcHRoU2FtcGxpbmdJbmZvID0gNTMsXG4gIENvbnN0cmFpbmVkRGVwdGhQYXJhbWV0ZXJTZXRJZGVudGlmaWVyID0gNTQsXG4gIEdyZWVuTWV0YWRhdGEgPSA1NSxcbiAgTWFzdGVyaW5nRGlzcGxheUNvbG91clZvbHVtZXYgPSA1NixcbiAgQ29sb3VyUmVtYXBwaW5nSW5mbyA9IDU3LFxuICBDb250ZW50TGlnaHRMZXZlbEluZm8gPSA1OCxcbiAgQWx0ZXJuYXRpdmVUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IDU5LFxuICBBbWJpZW50Vmlld2luZ0Vudmlyb25tZW50ID0gNjAsXG4gIENvbnRlbnRDb2xvdXJWb2x1bWUgPSA2MSxcbiAgRXF1aXJlY3Rhbmd1bGFyUHJvamVjdGlvbiA9IDYyLFxuICBDdWJlbWFwUHJvamVjdGlvbiA9IDYzLFxuICBTcGhlcmVSb3RhdGlvbiA9IDY0LFxuICBSZWdpb253aXNlUGFja2luZyA9IDY1LFxuICBPbW5pVmlld3BvcnQgPSA2NixcbiAgQWx0ZXJuYXRpdmVEZXB0aEluZm8gPSA2NyxcbiAgU2VpTWFuaWZlc3QgPSA2OCxcbiAgU2VpUHJlZml4SW5kaWNhdGlvbiA9IDY5LFxuICBBbm5vdGF0ZWRSZWdpb25zID0gNzAsXG4gIFNodXR0ZXJJbnRlcnZhbEluZm8gPSA3MVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWlQYXlsb2FkVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBVaW50OEFycmF5cyBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL1VpbnQ4QXJyYXlzJztcbmltcG9ydCBOYWxVbml0IGZyb20gJy4uL25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgTmFsVW5pdFR5cGUgZnJvbSAnLi4vbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuLi9uYWxVbml0L1NlaVBheWxvYWQnO1xuaW1wb3J0IFNlaVBheWxvYWRUeXBlIGZyb20gJy4uL25hbFVuaXQvU2VpUGF5bG9hZFR5cGUnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQsIHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHR9IGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi9ldmVudC9ldmVudHMvRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCBmcm9tICcuLi8uLi8uLi9FbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQnO1xuaW1wb3J0IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGZyb20gJy4vdmNsL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcbmltcG9ydCBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMgZnJvbSAnLi9FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMnO1xuXG50eXBlIEV4dHJhY3RlZERhdGEgPSB7XG4gIGFubmV4QlN0YXJ0Q29kZUxlbmd0aDogMyB8IDQ7XG4gIG5hbFVuaXQ6IE5hbFVuaXQ7XG4gIHNlaVBheWxvYWRzPzogU2VpUGF5bG9hZFtdO1xufTtcblxudHlwZSBFeHRyYWN0ZWROYWxVbml0ID0ge1xuICBuYWxVbml0RGF0YTogVWludDhBcnJheTtcbiAgc2VpUGF5bG9hZHM/OiBTZWlQYXlsb2FkW107XG59O1xuXG50eXBlIEV4dHJhY3RlZFNlaVBheWxvYWQgPSB7XG4gIHBheWxvYWRUeXBlOiBTZWlQYXlsb2FkVHlwZTtcbiAgcGF5bG9hZDogVWludDhBcnJheTtcbiAgZW5kSW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXJDb25maWd1cmF0aW9uID0ge1xuICB0cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgYW5uZXhCM0J5dGVTdGFydENvZGUgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGFubmV4QjRCeXRlU3RhcnRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlaVBheWxvYWQzQnl0ZUVuZENvZGUgPSBuZXcgVWludDhBcnJheShbMHg4MCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VpUGF5bG9hZDRCeXRlRW5kQ29kZSA9IG5ldyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmNsRXh0cmFjdGlvblN0cmF0ZWd5OiBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyLCB2Y2xFeHRyYWN0aW9uU3RyYXRlZ3k6IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5KSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl92Y2xFeHRyYWN0aW9uU3RyYXRlZ3kgPSB2Y2xFeHRyYWN0aW9uU3RyYXRlZ3k7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPFVpbnQ4QXJyYXk+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuY29kZWRWaWRlb1N0cmVhbUNodW5rLCB0aGlzLnBhcnNlRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsoe2NvbnRleHQsIGRhdGE6IGNodW5rfTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgY2h1bmsuYnl0ZUxlbmd0aCkge1xuICAgICAgY3VycmVudEluZGV4ICs9IHRoaXMuaGFuZGxlRXh0cmFjdGVkRGF0YShjb250ZXh0LCB0aGlzLmV4dHJhY3ROYWxVbml0QXRPZmZzZXQoY2h1bmssIGN1cnJlbnRJbmRleCkpO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5RW5kT2ZDaHVuayhjb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXh0cmFjdGVkRGF0YShjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHthbm5leEJTdGFydENvZGVMZW5ndGgsIG5hbFVuaXQsIHNlaVBheWxvYWRzfTogRXh0cmFjdGVkRGF0YSk6IG51bWJlciB7XG4gICAgdGhpcy5wdWJsaXNoTmFsVW5pdChjb250ZXh0LCBuYWxVbml0KTtcbiAgICBzZWlQYXlsb2Fkcz8uZm9yRWFjaChzZWlQYXlsb2FkID0+IHRoaXMuaGFuZGxlU2VpUGF5bG9hZChjb250ZXh0LCBzZWlQYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmFsVW5pdC5kYXRhLmJ5dGVMZW5ndGggKyBhbm5leEJTdGFydENvZGVMZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlaVBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBzZWlQYXlsb2FkOiBTZWlQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoU2VpUGF5bG9hZChjb250ZXh0LCBzZWlQYXlsb2FkKTtcblxuICAgIHN3aXRjaCAoc2VpUGF5bG9hZC50eXBlKSB7XG4gICAgICBjYXNlIFNlaVBheWxvYWRUeXBlLlVzZXJEYXRhVW5yZWdpc3RlcmVkOlxuICAgICAgICB0aGlzLmhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZChjb250ZXh0LCBzZWlQYXlsb2FkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXlsb2FkVXVpZCA9IFVpbnQ4QXJyYXlzLmdldFV1aWRTdHJpbmdGcm9tVWludDhBcnJheShzZWlQYXlsb2FkLmRhdGEuc3ViYXJyYXkoMCwgMTYpKTtcbiAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHNlaVBheWxvYWQuZGF0YS5zdWJhcnJheSgxNik7XG5cbiAgICB0aGlzLnB1Ymxpc2hQYXlsb2FkKGNvbnRleHQsIHtcbiAgICAgIHV1aWQ6IHBheWxvYWRVdWlkLFxuICAgICAgZGF0YTogcGF5bG9hZERhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaE5hbFVuaXQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBuYWxVbml0OiBOYWxVbml0KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxOYWxVbml0PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5OYWxVbml0LCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogbmFsVW5pdFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoU2VpUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPFNlaVBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlNlaVBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBzZWlQYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgcGF5bG9hZDogRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUVuZE9mQ2h1bmsoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxudWxsPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmRPZkNodW5rLCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TmFsVW5pdEF0T2Zmc2V0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZERhdGEge1xuICAgIGNvbnN0IGFubmV4QlN0YXJ0Q29kZUxlbmd0aCA9IGNodW5rW29mZnNldCArIDJdID09PSAweDAxID8gMyA6IDQ7XG4gICAgY29uc3QgbmFsVW5pdEhlYWRlckluZGV4ID0gb2Zmc2V0ICsgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoO1xuICAgIGNvbnN0IG5hbFVuaXRUeXBlID0gY2h1bmtbbmFsVW5pdEhlYWRlckluZGV4XSAmIDB4MWY7XG4gICAgbGV0IGV4dHJhY3RlZERhdGE7XG5cbiAgICBzd2l0Y2ggKG5hbFVuaXRUeXBlKSB7XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlTGF5ZXJOb25JZHJEYXRhOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZURhdGFQYXJ0aXRpb25BTGF5ZXI6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlRGF0YVBhcnRpdGlvbkJMYXllcjpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZUxheWVySWRyRGF0YTpcbiAgICAgICAgZXh0cmFjdGVkRGF0YSA9IHRoaXMuX3ZjbEV4dHJhY3Rpb25TdHJhdGVneS5leHRyYWN0VmNsTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uOlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0U2VpTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZXh0cmFjdGVkRGF0YSA9IHRoaXMuZXh0cmFjdE5vblZjbE5hbFVuaXQoY2h1bmssIG5hbFVuaXRIZWFkZXJJbmRleCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFubmV4QlN0YXJ0Q29kZUxlbmd0aCxcbiAgICAgIG5hbFVuaXQ6IHtcbiAgICAgICAgdHlwZTogbmFsVW5pdFR5cGUsXG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZERhdGEubmFsVW5pdERhdGFcbiAgICAgIH0sXG4gICAgICBzZWlQYXlsb2FkczogZXh0cmFjdGVkRGF0YS5zZWlQYXlsb2Fkc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RTZWlOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBvZmZzZXQgKyAxO1xuICAgIGNvbnN0IHNlaVBheWxvYWRzOiBTZWlQYXlsb2FkW10gPSBbXTtcblxuICAgIHdoaWxlIChcbiAgICAgICFVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLl9zZWlQYXlsb2FkNEJ5dGVFbmRDb2RlLCBjaHVuaywgY3VycmVudEluZGV4KVxuICAgICAgJiYgIVVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuX3NlaVBheWxvYWQzQnl0ZUVuZENvZGUsIGNodW5rLCBjdXJyZW50SW5kZXgpXG4gICAgICAmJiBjdXJyZW50SW5kZXggPCBjaHVuay5ieXRlTGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zdCBleHRyYWN0ZWRTZWlQYXlsb2FkID0gdGhpcy5leHRyYWN0U2VpUGF5bG9hZChjaHVuaywgY3VycmVudEluZGV4KTtcblxuICAgICAgc2VpUGF5bG9hZHMucHVzaCh7XG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZFNlaVBheWxvYWQucGF5bG9hZCxcbiAgICAgICAgdHlwZTogZXh0cmFjdGVkU2VpUGF5bG9hZC5wYXlsb2FkVHlwZVxuICAgICAgfSk7XG4gICAgICBjdXJyZW50SW5kZXggPSBleHRyYWN0ZWRTZWlQYXlsb2FkLmVuZEluZGV4O1xuICAgIH1cblxuICAgIGN1cnJlbnRJbmRleCsrO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIGN1cnJlbnRJbmRleCksXG4gICAgICBzZWlQYXlsb2Fkc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3ROb25WY2xOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGNvbnN0IG5leHRBbm5leEJTdGFydENvZGVJbmRleCA9IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuZmluZEFubmV4QlN0YXJ0SW5kZXhGcm9tT2Zmc2V0KGNodW5rLCBvZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuXG4gICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0LCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXgpfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlaVBheWxvYWQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkU2VpUGF5bG9hZCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldDtcbiAgICBsZXQgZmZDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoY2h1bmtbY3VycmVudEluZGV4XSA9PT0gMHhmZikge1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICBmZkNvdW50Kys7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZFR5cGUgPSBmZkNvdW50ICogMjU1ICsgY2h1bmtbY3VycmVudEluZGV4XTtcblxuICAgIGN1cnJlbnRJbmRleCsrO1xuICAgIGZmQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGNodW5rW2N1cnJlbnRJbmRleF0gPT09IDB4ZmYpIHtcbiAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgZmZDb3VudCsrO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWRTaXplID0gZmZDb3VudCAqIDI1NSArIGNodW5rW2N1cnJlbnRJbmRleF07XG5cbiAgICBjdXJyZW50SW5kZXgrKztcblxuICAgIGNvbnN0IGVuZEluZGV4ID0gY3VycmVudEluZGV4ICsgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLmdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhjaHVuaywgY3VycmVudEluZGV4LCBwYXlsb2FkU2l6ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF5bG9hZFR5cGUsXG4gICAgICBwYXlsb2FkOiBjaHVuay5zdWJhcnJheShjdXJyZW50SW5kZXgsIGVuZEluZGV4KSxcbiAgICAgIGVuZEluZGV4XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZmluZEFubmV4QlN0YXJ0SW5kZXhGcm9tT2Zmc2V0KGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbmRleDQgPSBVaW50OEFycmF5cy5maW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0KEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUsIGRhdGEsIG9mZnNldCwgcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQpO1xuXG4gICAgaWYgKGluZGV4NCAhPT0gcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQpIHtcbiAgICAgIHJldHVybiBpbmRleDQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFVpbnQ4QXJyYXlzLmZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZSwgZGF0YSwgb2Zmc2V0LCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIHtcbiAgcHVibGljIHN0YXRpYyBnZXRPZmZzZXRXaXRoRXhwYW5kZWRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoYnVmZmVyOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbnVtYmVyT2ZOb25FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGxlYWRpbmdaZXJvQnl0ZXMgPSAwO1xuICAgIGxldCBudW1iZXJPZkJ5dGVzVmlzaXRlZCA9IDA7XG4gICAgbGV0IG51bWJlck9mQnl0ZXNUb1NlZWsgPSBudW1iZXJPZk5vbkVtdWxhdGlvblByZXZlbnRpb25CeXRlcztcblxuICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyssIG51bWJlck9mQnl0ZXNWaXNpdGVkKyspIHtcbiAgICAgIGlmIChudW1iZXJPZkJ5dGVzVG9TZWVrID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAobGVhZGluZ1plcm9CeXRlcyA9PT0gMiAmJiBidWZmZXJbaV0gPT09IDB4MDMpIHtcbiAgICAgICAgbGVhZGluZ1plcm9CeXRlcyA9IDA7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChidWZmZXJbaV0gPT09IDB4MDApIHtcbiAgICAgICAgbGVhZGluZ1plcm9CeXRlcysrO1xuICAgICAgfSBlbHNlIGlmIChsZWFkaW5nWmVyb0J5dGVzID4gMCkge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzID0gMDtcbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZCeXRlc1RvU2Vlay0tO1xuICAgIH1cblxuICAgIHJldHVybiBudW1iZXJPZkJ5dGVzVmlzaXRlZDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGJ1ZmZlcjogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICBsZXQgb3V0T2Zmc2V0ID0gMDtcbiAgICBsZXQgZWJzcE9mZnNldCA9IDA7XG5cbiAgICBmb3IgKGxldCBwcmV2ZW50aW9uQnl0ZUlkeCA9IDI7IHByZXZlbnRpb25CeXRlSWR4IDwgYnVmZmVyLmJ5dGVMZW5ndGg7IHByZXZlbnRpb25CeXRlSWR4KyspIHtcbiAgICAgIGlmIChidWZmZXJbcHJldmVudGlvbkJ5dGVJZHhdID09PSAweDAzICYmIGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeCAtIDFdID09PSAweDAwICYmIGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeCAtIDJdID09PSAweDAwKSB7XG4gICAgICAgIG91dHB1dC5zZXQoYnVmZmVyLnN1YmFycmF5KGVic3BPZmZzZXQsIHByZXZlbnRpb25CeXRlSWR4KSwgb3V0T2Zmc2V0KTtcbiAgICAgICAgb3V0T2Zmc2V0ICs9IHByZXZlbnRpb25CeXRlSWR4IC0gZWJzcE9mZnNldDtcbiAgICAgICAgZWJzcE9mZnNldCA9IHByZXZlbnRpb25CeXRlSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWJzcE9mZnNldCA8IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICBvdXRwdXQuc2V0KGJ1ZmZlci5zdWJhcnJheShlYnNwT2Zmc2V0KSwgb3V0T2Zmc2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJpdHN0cmVhbVJlYWRlciBmcm9tICcuLi8uLi8uLi9CaXRzdHJlYW1SZWFkZXInO1xuaW1wb3J0IEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyBmcm9tICcuL0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyc7XG5cbmVudW0gUGljU3RydWN0IHtcbiAgUHJvZ3Jlc3NpdmVGcmFtZSA9IDAsXG4gIFRvcEZpZWxkID0gMSxcbiAgQm90dG9tRmllbGQgPSAyLFxuICBUb3BGaWVsZEJvdHRvbUZpZWxkID0gMyxcbiAgQm90dG9tRmllbGRUb3BGaWVsZCA9IDQsXG4gIFRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkID0gNSxcbiAgQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQgPSA2LFxuICBGcmFtZURvdWJsaW5nID0gNyxcbiAgRnJhbWVUcmlwbGluZyA9IDhcbn1cblxuZXhwb3J0IHR5cGUgUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcgPSB7XG4gIHBpY1N0cnVjdFByZXNlbnRGbGFnOiBib29sZWFuO1xufSAmIChcbiAge1xuICAgIGNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnOiB0cnVlO1xuICAgIGNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMTogbnVtYmVyO1xuICAgIGRwYk91dHB1dERlbGF5TGVuZ3RoTWludXMxOiBudW1iZXI7XG4gIH1cbiAgfCB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IGZhbHNlO1xuICB9XG4pO1xuXG5leHBvcnQgdHlwZSBDbG9ja1RpbWVzdGFtcCA9IHtcbiAgY3RUeXBlOiBudW1iZXI7XG4gIG51aXRGaWVsZEJhc2VkRmxhZzogYm9vbGVhbjtcbiAgY291bnRpbmdUeXBlOiBudW1iZXI7XG4gIGZ1bGxUaW1lc3RhbXBGbGFnOiBib29sZWFuO1xuICBkaXNjb250aW51aXR5RmxhZzogYm9vbGVhbjtcbiAgY250RHJvcHBlZEZsYWc6IGJvb2xlYW47XG4gIG5GcmFtZXM6IG51bWJlcjtcbiAgc2Vjb25kcz86IG51bWJlcjtcbiAgbWludXRlcz86IG51bWJlcjtcbiAgaG91cnM/OiBudW1iZXI7XG4gIHRpbWVPZmZzZXQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBQaWN0dXJlVGltaW5nID0ge1xuICBwaWNTdHJ1Y3Q6IHVuZGVmaW5lZCB8IHtcbiAgICBudW1DbG9ja1RTOiBudW1iZXI7XG4gICAgY2xvY2tUaW1lc3RhbXBzOiBBcnJheTx7XG4gICAgICBjbG9ja1RpbWVzdGFtcEZsYWc6IGZhbHNlO1xuICAgIH0gfCB7XG4gICAgICBjbG9ja1RpbWVzdGFtcEZsYWc6IHRydWU7XG4gICAgICBjbG9ja1RpbWVzdGFtcDogQ2xvY2tUaW1lc3RhbXA7XG4gICAgfT47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaWN0dXJlVGltaW5nUGFyc2VyIHtcbiAgcHVibGljIHBhcnNlKGRhdGE6IFVpbnQ4QXJyYXksIGNvbmZpZzogUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcpOiBQaWN0dXJlVGltaW5nIHtcbiAgICBjb25zdCBiaXRzdHJlYW1SZWFkZXIgPSBuZXcgQml0c3RyZWFtUmVhZGVyKEVtdWxhdGlvblByZXZlbnRpb25CeXRlcy5yZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoZGF0YSkpO1xuICAgIGNvbnN0IHBpY3R1cmVUaW1pbmc6IFBpY3R1cmVUaW1pbmcgPSB7cGljU3RydWN0OiB1bmRlZmluZWR9O1xuXG4gICAgaWYgKGNvbmZpZy5jcGJEcGJEZWxheXNQcmVzZW50RmxhZykge1xuICAgICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBDUEIgYW5kIERQQiBkZWxheXMgYXQgdGhlIG1vbWVudFxuICAgICAgYml0c3RyZWFtUmVhZGVyLnNraXBCaXRzKGNvbmZpZy5jcGJSZW1vdmFsRGVsYXlMZW5ndGhNaW51czEgKyAxKTtcbiAgICAgIGJpdHN0cmVhbVJlYWRlci5za2lwQml0cyhjb25maWcuZHBiT3V0cHV0RGVsYXlMZW5ndGhNaW51czEgKyAxKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnBpY1N0cnVjdFByZXNlbnRGbGFnKSB7XG4gICAgICBjb25zdCBudW1DbG9ja1RTID0gdGhpcy5jb252ZXJ0UGljU3RydWN0VG9OdW1DbG9ja1RTKGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg0KSk7XG5cbiAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0ID0ge1xuICAgICAgICBudW1DbG9ja1RTLFxuICAgICAgICBjbG9ja1RpbWVzdGFtcHM6IFtdXG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY3R1cmVUaW1pbmcucGljU3RydWN0Lm51bUNsb2NrVFM7IGkrKykge1xuICAgICAgICBjb25zdCBjbG9ja1RpbWVzdGFtcEZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgaWYgKGNsb2NrVGltZXN0YW1wRmxhZykge1xuICAgICAgICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wOiBDbG9ja1RpbWVzdGFtcCA9IHtcbiAgICAgICAgICAgIGN0VHlwZTogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDIpLFxuICAgICAgICAgICAgbnVpdEZpZWxkQmFzZWRGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBjb3VudGluZ1R5cGU6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KSxcbiAgICAgICAgICAgIGZ1bGxUaW1lc3RhbXBGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBkaXNjb250aW51aXR5RmxhZzogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxLFxuICAgICAgICAgICAgY250RHJvcHBlZEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIG5GcmFtZXM6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg4KVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoY2xvY2tUaW1lc3RhbXAuZnVsbFRpbWVzdGFtcEZsYWcpIHtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLnNlY29uZHMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5taW51dGVzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuaG91cnMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICBpZiAoc2Vjb25kc0ZsYWcpIHtcbiAgICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg2KTtcblxuICAgICAgICAgICAgICBjb25zdCBtaW51dGVzRmxhZyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMTtcblxuICAgICAgICAgICAgICBpZiAobWludXRlc0ZsYWcpIHtcbiAgICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5taW51dGVzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaG91cnNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzRmxhZykge1xuICAgICAgICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuaG91cnMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvY2tUaW1lc3RhbXAudGltZU9mZnNldCA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygyNCk7XG5cbiAgICAgICAgICBwaWN0dXJlVGltaW5nLnBpY1N0cnVjdC5jbG9ja1RpbWVzdGFtcHMucHVzaCh7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcEZsYWcsXG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0LmNsb2NrVGltZXN0YW1wcy5wdXNoKHtjbG9ja1RpbWVzdGFtcEZsYWc6IGZhbHNlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGljdHVyZVRpbWluZztcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBpY1N0cnVjdFRvTnVtQ2xvY2tUUyhwaWNTdHJ1Y3Q6IG51bWJlcik6IG51bWJlciB7XG4gICAgc3dpdGNoIChwaWNTdHJ1Y3QpIHtcbiAgICAgIGNhc2UgUGljU3RydWN0LlByb2dyZXNzaXZlRnJhbWU6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Ub3BGaWVsZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkQm90dG9tRmllbGQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Cb3R0b21GaWVsZFRvcEZpZWxkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuRnJhbWVEb3VibGluZzpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Ub3BGaWVsZEJvdHRvbUZpZWxkVG9wRmllbGRSZXBlYXRlZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkVG9wRmllbGRCb3R0b21GaWVsZFJlcGVhdGVkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuRnJhbWVUcmlwbGluZzpcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFVpbnQ4QXJyYXlzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvVWludDhBcnJheXMnO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3ksIHtFeHRyYWN0ZWROYWxVbml0fSBmcm9tICcuL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aCA9IDMyO1xuXG4gIHB1YmxpYyBleHRyYWN0VmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCA9IG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCArIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5Ll90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDtcblxuICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLCBjaHVuaywgbmV4dFBvdGVudGlhbDRCeXRlU3RhcnRDb2RlSW5kZXgpKSB7XG4gICAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGgsIG5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4KX07XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXggPSBvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGggKyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneS5fdHJ1bmNhdGVkVmNsTmFsVW5pdEJ5dGVMZW5ndGg7XG5cbiAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZSwgY2h1bmssIG5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4KSkge1xuICAgICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoLCBuZXh0UG90ZW50aWFsM0J5dGVTdGFydENvZGVJbmRleCl9O1xuICAgIH1cblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCl9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIGZyb20gJy4uL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LCB7RXh0cmFjdGVkTmFsVW5pdH0gZnJvbSAnLi9JVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kge1xuICBwdWJsaWMgZXh0cmFjdFZjbE5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgY29uc3QgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4ID0gQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5maW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoY2h1bmssIG9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG5cbiAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIG5leHRBbm5leEJTdGFydENvZGVJbmRleCl9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBFdmVudFB1Ymxpc2hlciBmcm9tICcuLi8uLi9ldmVudC9FdmVudFB1Ymxpc2hlcic7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9WYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5pbXBvcnQgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS92Y2wvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMgZnJvbSAnLi4vZW5jb2RpbmcvMjAyMy9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJztcbmltcG9ydCBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5pbXBvcnQgUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9QaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHN0cmVhbURlY29kZXJzIHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIge1xuICAgIGNvbnN0IGRlY29kZXJFdmVudFB1Ymxpc2hlciA9IG5ldyBFdmVudFB1Ymxpc2hlcigpO1xuICAgIGNvbnN0IGJpdHN0cmVhbSA9IG5ldyBIMjY0Qml0c3RyZWFtKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBuZXcgVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3koKSk7XG5cbiAgICByZXR1cm4gbmV3IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBiaXRzdHJlYW0sIHBhcnNlcik7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk6IFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIHtcbiAgICBjb25zdCBkZWNvZGVyRXZlbnRQdWJsaXNoZXIgPSBuZXcgRXZlbnRQdWJsaXNoZXIoKTtcbiAgICBjb25zdCBiaXRzdHJlYW0gPSBuZXcgSDI2NEJpdHN0cmVhbShkZWNvZGVyRXZlbnRQdWJsaXNoZXIpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgbmV3IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5KCkpO1xuICAgIGNvbnN0IGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBuZXcgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbSwgcGFyc2VyKTtcbiAgICBjb25zdCBlbmNvZGluZyA9IG5ldyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG5cbiAgICByZXR1cm4gbmV3IFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyKGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIsIGVuY29kaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCaXRzdHJlYW1EZWNvZGVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBJQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0lCaXRzdHJlYW1EZWNvZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBpbXBsZW1lbnRzIElCaXRzdHJlYW1EZWNvZGVyPEgyNjRCaXRzdHJlYW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9iaXRzdHJlYW06IEgyNjRCaXRzdHJlYW07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcnNlcjogQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyLCBiaXRzdHJlYW06IEgyNjRCaXRzdHJlYW0sIHBhcnNlcjogQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fYml0c3RyZWFtID0gYml0c3RyZWFtO1xuICAgIHRoaXMuX3BhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fcGFyc2VyKTtcbiAgfVxuXG4gIGdldCBiaXRzdHJlYW0oKTogSDI2NEJpdHN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHN0cmVhbTtcbiAgfVxuXG4gIHB1YmxpYyBkZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bms6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxVaW50OEFycmF5Pik6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIGVuY29kZWRNZWRpYVN0cmVhbUNodW5rKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IEgyNjRCaXRzdHJlYW0gZnJvbSAnLi4vY29kZWMvaDI2NC9IMjY0Qml0c3RyZWFtJztcbmltcG9ydCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzIGZyb20gJy4uL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyc7XG5pbXBvcnQgSXNvQm1mZlNlZ21lbnQgZnJvbSAnLi4vY29udGFpbmVyL2lzb2JtZmYvc2VnbWVudC9Jc29CbWZmU2VnbWVudCc7XG5pbXBvcnQgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuaW1wb3J0IElCaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSUJpdHN0cmVhbURlY29kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciBpbXBsZW1lbnRzIElCaXRzdHJlYW1EZWNvZGVyPEgyNjRCaXRzdHJlYW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5jb2Rpbmc6IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcblxuICBjb25zdHJ1Y3RvcihoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLCBlbmNvZGluZzogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMykge1xuICAgIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyO1xuICAgIHRoaXMuX2VuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcik7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2VuY29kaW5nKTtcbiAgfVxuXG4gIGdldCBiaXRzdHJlYW0oKTogSDI2NEJpdHN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIuYml0c3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuazogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci5kZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmspO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvRW1iZWRkZWREYXRhKG9uRGVjb2RlZE1lZGlhQ2h1bms6IChlbWJlZGRlZERhdGFFdmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PElzb0JtZmZTZWdtZW50PikgPT4gdm9pZCwgdHJhY2tJZD86IHN0cmluZyk6IERpc3Bvc2FibGUge1xuICAgIGlmICh0cmFja0lkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmcuc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEoZGVjb2RlZE1lZGlhQ2h1bmtFdmVudCA9PiB7XG4gICAgICAgIGlmIChkZWNvZGVkTWVkaWFDaHVua0V2ZW50LnRyYWNrSWQgPT09IHRyYWNrSWQpIHtcbiAgICAgICAgICBvbkRlY29kZWRNZWRpYUNodW5rKGRlY29kZWRNZWRpYUNodW5rRXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmcuc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEob25EZWNvZGVkTWVkaWFDaHVuayk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4uLy4uL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgTmFsVW5pdCBmcm9tICcuLi8uLi9jb2RlYy9oMjY0L25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgSXNvQm1mZlNlZ21lbnQgZnJvbSAnLi4vLi4vY29udGFpbmVyL2lzb2JtZmYvc2VnbWVudC9Jc29CbWZmU2VnbWVudCc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5cbmNvbnN0IG5vb3AgPSAoKTogdm9pZCA9PiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoID0gMzI7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkID0gJzUxMWUyMmJkLTM0YzAtNGNlZS1iNmMzLTNjNGQ0MDc2MjJjNyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwZWN0ZWRQYXlsb2FkVXVpZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZDogTWFwPHN0cmluZywgKHRyYWNrSWQ6IHN0cmluZykgPT4gdm9pZD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kOiBEaXNwb3NhYmxlID0gbmV3IERpc3Bvc2FibGUodGhpcy5lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmJpbmQodGhpcykpO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCk7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9QYXlsb2FkRXZlbnRzKCkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cygpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb05hbFVuaXRFdmVudHMoKSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEoaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8SXNvQm1mZlNlZ21lbnQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZC5kaXNwb3NlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgKHtjb250ZXh0LCBkYXRhOiBwYXlsb2FkfSkgPT4ge1xuICAgICAgc3dpdGNoIChwYXlsb2FkLnV1aWQpIHtcbiAgICAgICAgY2FzZSBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkOlxuICAgICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ0luaXRpYWxpemF0aW9uJyxcbiAgICAgICAgICAgICAgZGF0YTogcGF5bG9hZC5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQ6XG4gICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0eXBlOiAnTWVkaWEnLFxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLmNsZWFyKCk7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmRPZkNodW5rRXZlbnRzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxzdHJpbmc+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWRTdWJzY3JpcHRpb24sICh7ZGF0YTogcGF5bG9hZFV1aWR9KSA9PiB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChwYXlsb2FkVXVpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIHRoaXMuYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIHRoaXMuaGFuZGxlTmFsVW5pdEV2ZW50LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYWxVbml0RXZlbnQoe2NvbnRleHQsIGRhdGE6IG5hbFVuaXR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8TmFsVW5pdD4pOiB2b2lkIHtcbiAgICBpZiAobmFsVW5pdC50eXBlID4gTmFsVW5pdFR5cGUuU2xpY2VMYXllcklkckRhdGEgfHwgbmFsVW5pdC5kYXRhLmJ5dGVMZW5ndGggPCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnB1Ymxpc2hWY2xFbWJlZGRlZFBheWxvYWQoY29udGV4dCwge1xuICAgICAgdXVpZDogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCxcbiAgICAgIGRhdGE6IHRoaXMuZXh0cmFjdFZjbEVtYmVkZGVkRGF0YShuYWxVbml0KVxuICAgIH0pO1xuICAgIHRoaXMuZGlzYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQoY29udGV4dC50cmFja0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFZjbEVtYmVkZGVkRGF0YShuYWxVbml0OiBOYWxVbml0KTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIG5hbFVuaXQuZGF0YS5zdWJhcnJheShQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgcGF5bG9hZDogRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKHtjb250ZXh0fTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLnNldChjb250ZXh0LnRyYWNrSWQsIHRoaXMubG9nV2FybmluZ1ZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmJpbmQodGhpcywgY29udGV4dCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCh0cmFja0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuc2V0KHRyYWNrSWQsIG5vb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gWyVzXSBObyBWQ0wgZW1iZWRkZWQgZGF0YSBmb3VuZCBpbiBhbiBlbmNvZGVkIHZpZGVvIHN0cmVhbSBjaHVuayBmcm9tIHRyYWNrIHdpdGggaWQgWyVzXScsIGNvbnRleHQuc3RyZWFtSWQsIGNvbnRleHQuY29udGV4dElkLCBjb250ZXh0LnRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuZE9mQ2h1bmtFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxudWxsPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmRPZkNodW5rLCB0aGlzLmhhbmRsZUVuZE9mRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVuZE9mRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsoe2NvbnRleHR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8bnVsbD4pOiB2b2lkIHtcbiAgICBjb25zdCBlbmRPZkNodW5rRXZlbnRIYW5kbGVyID0gdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLmdldChjb250ZXh0LnRyYWNrSWQpIGFzICgpID0+IHZvaWQ7XG5cbiAgICBlbmRPZkNodW5rRXZlbnRIYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgdGhpcy5oYW5kbGVQYXlsb2FkRXZlbnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBheWxvYWRFdmVudCh7Y29udGV4dCwgZGF0YTogcGF5bG9hZH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KSB7XG4gICAgaWYgKCF0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmhhcyhwYXlsb2FkLnV1aWQpKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCh0aGlzLmxvZ1dhcm5pbmdVbmV4cGVjdGVkUGF5bG9hZFV1aWRSZWNlaXZlZE9uY2UuYmluZCh0aGlzLCBjb250ZXh0LCBwYXlsb2FkLnV1aWQpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ1dhcm5pbmdVbmV4cGVjdGVkUGF5bG9hZFV1aWRSZWNlaXZlZE9uY2UoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkVXVpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gWyVzXSBbJXNdIFJlY2VpdmVkIHVuZXhwZWN0ZWQgcGF5bG9hZCB3aXRoIHV1aWQgWyVzXScsIGNvbnRleHQuc3RyZWFtSWQsIGNvbnRleHQuY29udGV4dElkLCBjb250ZXh0LnRyYWNrSWQsIHBheWxvYWRVdWlkKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChwYXlsb2FkVXVpZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YX0gZnJvbSAnLi9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBTZXQ8KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPikgPT4gdm9pZD4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIHN1YnNjcmliZTxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGxpc3RlbmVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmFkZChsaXN0ZW5lciBhcyA8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX2xpc3RlbmVycy5kZWxldGUobGlzdGVuZXIgYXMgPEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4oZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKSk7XG4gIH1cblxuICBwdWJsaWMgZW1pdDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YX0gZnJvbSAnLi9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9FdmVudEVtaXR0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudFB1Ymxpc2hlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50RW1pdHRlcnM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEV2ZW50RW1pdHRlcj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnM6IFNldDw8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgcHVibGljIG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVyKG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcjogKGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycy5hZGQob25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZSgoKSA9PiB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmRlbGV0ZShvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmU8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLl9ldmVudEVtaXR0ZXJzLmdldChldmVudFR5cGUpIHx8IHRoaXMuY3JlYXRlRW1pdHRlcihldmVudFR5cGUpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVMaXN0ZW5lciA9IGVtaXR0ZXIuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVMaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZGlzcG9zYWJsZUxpc3RlbmVyO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2g8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KTogdm9pZCB7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuX2V2ZW50RW1pdHRlcnMuZ2V0KGV2ZW50VHlwZSk7XG5cbiAgICBpZiAoIWVtaXR0ZXIpIHtcbiAgICAgIHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoZXZlbnRUeXBlLCBldmVudCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZW1pdHRlci5lbWl0PEV2ZW50RGF0YT4oZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50RW1pdHRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVtaXR0ZXIoZXZlbnRUeXBlOiBzdHJpbmcgfCBudW1iZXIpOiBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLl9ldmVudEVtaXR0ZXJzLnNldChldmVudFR5cGUsIGVtaXR0ZXIpO1xuXG4gICAgcmV0dXJuIGVtaXR0ZXI7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQge1xuICBFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayA9IDAsXG4gIE5hbFVuaXQsXG4gIFNlaVBheWxvYWQsXG4gIFBheWxvYWQsXG4gIFBheWxvYWRTdWJzY3JpcHRpb24sXG4gIEVuZE9mQ2h1bmtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8RW5kUG9pbnQ+KHJlc29sdmVFbmRQb2ludFByb21pc2UgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnN1YnNjcmliZShnbG9iYWxTY29wZSA9PiB7XG4gICAgICAgIGlmICghZ2xvYmFsU2NvcGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmkgPSBuZXcgZ2xvYmFsU2NvcGUuVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAgICAgLnRoZW4ocmVzb2x2ZUVuZFBvaW50UHJvbWlzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKHVybCBpbiBEaXNjb3ZlcnkuX2NhY2hlKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmk6IFVSTCk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKHVybCBpbiBEaXNjb3ZlcnkuX2NhY2hlKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PiBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVTdWNjZXNzUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZUluaXQge1xuICBzdGF0dXM6ICdvayc7XG4gIHN0cmVhbTogSVN0cmVhbTtcbiAgbGFnOiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlRmFpbHVyZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZm9yYmlkZGVuLXRhZycgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiAnb2snO1xuICBzdHJlYW06IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hGYWlsdXJlUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6ICdub3QtZm91bmQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCcgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KSlcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0IHwgbnVsbCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVTdWNjZXNzUmVzcG9uc2VJbml0IHwgSVN1YnNjcmliZUZhaWx1cmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgfCBudWxsLCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2VJbml0IHwgSVB1Ymxpc2hGYWlsdXJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbT8uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3R5cGUnLCAnaHR0cCcpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDY6XG4gICAgICAgIHJldHVybiAnbWlzc2luZy1jaGFubmVsLW9yLXJvb20taWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgc3RyZWFtOiB7XG4gICAgICAgIHRlbmFuY3ksXG4gICAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgICB9LFxuICAgICAgbGFnOiBkYXRhLmxhZ1xuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIHN0cmVhbToge1xuICAgICAgICB0ZW5hbmN5LFxuICAgICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IFNlaVBheWxvYWQgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZFR5cGUnO1xuaW1wb3J0IFBpY3R1cmVUaW1pbmdQYXJzZXIsIHtQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZ30gZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL1BpY3R1cmVUaW1pbmdQYXJzZXInO1xuaW1wb3J0IEJpdHN0cmVhbURlY29kZXJzIGZyb20gJy4uL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvQml0c3RyZWFtRGVjb2RlcnMnO1xuaW1wb3J0IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9IMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQgZnJvbSAnLi4vZGVjb2RlL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0RlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuL0ZyYW1lVGltaW5nSW5mb3JtYXRpb24nO1xuXG50eXBlIEZyYW1lVGltaW5nID0ge1xuICBtaWQ6IHN0cmluZztcbiAgdHJhY2tJZDogc3RyaW5nO1xuICByZWNlaXZlVGltZXN0YW1wOiBEYXRlO1xuICBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbj86IERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfRlJBTUVfVElNSU5HX0VOVFJJRVMgPSA2MCAqIDMwOyAvLyAzMHMgKiA2MGZwcyA9IDE4MDAgZW50cmllc1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9iaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyID0gQml0c3RyZWFtRGVjb2RlcnMuY3JlYXRlSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcDogTWFwPHN0cmluZywgRnJhbWVUaW1pbmc+ID0gbmV3IE1hcCgpO1xuICAvLyBXb3JrcyB3aXRoIG11bHRpLWJpdHJhdGUgc3RyZWFtcyBhcyB3ZSBhcmUgaW4gY29udHJvbCBvZiBob3cgd2UgZ2VuZXJhdGUgdGhlIHBpY3R1cmUgdGltaW5nIFNFSSBwYXlsb2Fkc1xuICAvLyBNaWdodCBub3QgYWx3YXlzIHdvcmsgd2l0aCBzaW5nbGUtYml0cmF0ZSBzdHJlYW1zIHdoZW4gdGhlIGNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnIGlzIHRydWVcbiAgLy8gVE9ETyAoTkgpOiBNb25pdG9yIFNQUyB0byBkeW5hbWljYWxseSBzZXQgdGhlc2UgZmxhZ3NcbiAgcHJpdmF0ZSByZWFkb25seSBfcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZzogUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcgPSB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IGZhbHNlLFxuICAgIHBpY1N0cnVjdFByZXNlbnRGbGFnOiB0cnVlXG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BpY3R1cmVUaW1pbmdQYXJzZXI6IFBpY3R1cmVUaW1pbmdQYXJzZXIgPSBuZXcgUGljdHVyZVRpbWluZ1BhcnNlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnREaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBsYXliYWNrU3RhdGU6ICdwbGF5aW5nJyB8ICdwYXVzZWQnIHwgJ3N0YWxsZWQnIHwgJ2VuZGVkJyB8ICdlcnJvcicgfCAnd2FpdGluZycgPSAnd2FpdGluZyc7XG4gIHByaXZhdGUgX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQpIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtRGVjb2Rlcik7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmNsZWFyKCkpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMpO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5zZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzKHZpZGVvRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSkge1xuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2JpdHN0cmVhbURlY29kZXIuYml0c3RyZWFtLnN1YnNjcmliZVRvU2VpUGF5bG9hZFR5cGUoU2VpUGF5bG9hZFR5cGUuUGljdHVyZVRpbWluZywgdGhpcy5vblBpY3R1cmVUaW1pbmdFeHRyYWN0ZWQuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzRnJhbWUoc3RyZWFtSWQ6IHN0cmluZywgbWlkOiBzdHJpbmcsIHRyYWNrSWQ6IHN0cmluZywgZnJhbWU6IFJUQ0VuY29kZWRWaWRlb0ZyYW1lKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVUaW1pbmcgPSB7XG4gICAgICBtaWQsXG4gICAgICB0cmFja0lkLFxuICAgICAgcmVjZWl2ZVRpbWVzdGFtcDogbmV3IERhdGUoKVxuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZUZyYW1lVGltaW5nc0V4Y2VlZGluZ01heENhcGFjaXR5KCk7XG5cbiAgICBjb25zdCBydHBUaW1lc3RhbXAgPSBmcmFtZS50aW1lc3RhbXAudG9TdHJpbmcoMTApO1xuXG4gICAgaWYgKHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmhhcyhydHBUaW1lc3RhbXApKSB7XG4gICAgICAvLyBUT0RPIChOSCk6IEFkZCBhIHRocm90dGxlZCBsb2cgaW5kaWNhdGluZyB0aGF0IGEgZnJhbWUgdGltaW5nIHdhcyBvdmVyd3JpdHRlblxuICAgIH1cblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLnNldChydHBUaW1lc3RhbXAsIGZyYW1lVGltaW5nKTtcblxuICAgIC8vIFRPRE8gKE5IKTogVGhhdCBzaG91bGQgYmUgZG9uZSB3aXRoaW4gYSBXb3JrZXJcbiAgICAvLyBOb3QgcG9zc2libGUgeWV0IGJlY2F1c2UgaXQgd29uJ3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBzaW5rIGFuZCB0cmFuc2Zvcm0gcGlwZWxpbmUgKHdlIGNhbm5vdCBkeW5hbWljYWxseSBpbmplY3QgY29kZSBpbiBhIHdvcmtlcilcbiAgICAvLyBXZSBuZWVkIHRvIHJlZmluZSB0aGUgYXJjaGl0ZWN0dXJlIHRvIG1ha2UgaXQgcG9zc2libGVcbiAgICB0aGlzLl9iaXRzdHJlYW1EZWNvZGVyLmRlY29kZSh7XG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHN0cmVhbUlkLFxuICAgICAgICB0cmFja0lkLFxuICAgICAgICBjb250ZXh0SWQ6IHJ0cFRpbWVzdGFtcFxuICAgICAgfSxcbiAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KGZyYW1lLmRhdGEpXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBpY3R1cmVUaW1pbmdFeHRyYWN0ZWQoe2NvbnRleHQ6IHtjb250ZXh0SWQ6IHJ0cFRpbWVzdGFtcCwgdHJhY2tJZH0sIGRhdGE6IHNlaVBheWxvYWR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8U2VpUGF5bG9hZD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwaWN0dXJlVGltaW5nID0gdGhpcy5fcGljdHVyZVRpbWluZ1BhcnNlci5wYXJzZShzZWlQYXlsb2FkLmRhdGEsIHRoaXMuX3BpY3R1cmluZ1RpbWluZ1BhcnNpbmdDb25maWcpO1xuICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wID0gcGljdHVyZVRpbWluZy5waWNTdHJ1Y3Q/LmNsb2NrVGltZXN0YW1wcy5maW5kKGkgPT4gaS5jbG9ja1RpbWVzdGFtcEZsYWcgPT09IHRydWUpPy5jbG9ja1RpbWVzdGFtcDtcblxuICAgIGlmICghY2xvY2tUaW1lc3RhbXApIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gY2xvY2sgdGltZXN0YW1wIHdhcyBmb3VuZFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVUaW1pbmcgPSB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5nZXQocnRwVGltZXN0YW1wKTtcblxuICAgIGlmICghZnJhbWVUaW1pbmcpIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gZnJhbWUgdGltaW5nIHdhcyBmb3VuZFxuICAgICAgLy8gRXhwZWN0ZWQgaWYgdGhlIGNpcmN1bGFyIGZyYW1lIHRpbWluZ3MgYnVmZmVyIGlzIGZ1bGwgYW5kIGEgZnJhbWUgaGFzIGJlZW4gZHJvcHBlZFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0ge1xuICAgICAgbWlkOiBmcmFtZVRpbWluZy5taWQsXG4gICAgICB0cmFja0lkLFxuICAgICAga2luZDogJ3ZpZGVvJyxcbiAgICAgIGNvZGVjOiAnSDI2NCcsXG4gICAgICB0aW1lY29kZToge1xuICAgICAgICBob3VyczogY2xvY2tUaW1lc3RhbXAuaG91cnMgPz8gbnVsbCxcbiAgICAgICAgbWludXRlczogY2xvY2tUaW1lc3RhbXAubWludXRlcyA/PyBudWxsLFxuICAgICAgICBzZWNvbmRzOiBjbG9ja1RpbWVzdGFtcC5zZWNvbmRzID8/IG51bGwsXG4gICAgICAgIGZyYW1lczogY2xvY2tUaW1lc3RhbXAubkZyYW1lcyxcbiAgICAgICAgaXNGcmFtZURyb3A6IGNsb2NrVGltZXN0YW1wLmNvdW50aW5nVHlwZSA+IDFcbiAgICAgIH0sXG4gICAgICBzb3VyY2VUaW1lc3RhbXA6IG51bGwsXG4gICAgICBpbmdlc3RUaW1lc3RhbXA6IG51bGwsXG4gICAgICBlbmNvZGVUaW1lc3RhbXA6IG51bGwsXG4gICAgICB0cmFuc2NvZGVUaW1lc3RhbXA6IG51bGwsXG4gICAgICByZWNlaXZlVGltZXN0YW1wOiBuZXcgRGF0ZShmcmFtZVRpbWluZy5yZWNlaXZlVGltZXN0YW1wKSxcbiAgICAgIHBsYXliYWNrU3RhdGU6IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlXG4gICAgfTtcblxuICAgIGZyYW1lVGltaW5nLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbi52YWx1ZSA9IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB2aWRlb0ZyYW1lQ2FsbGJhY2sobm93OiBET01IaWdoUmVzVGltZVN0YW1wLCBtZXRhZGF0YTogVmlkZW9GcmFtZUNhbGxiYWNrTWV0YWRhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZS1yZWdpc3RlciB0aGUgY2FsbGJhY2sgdG8gZW5zdXJlIGl0J3MgY2FsbGVkIGFnYWluXG4gICAgdGhpcy5hcm1WaWRlb0ZyYW1lQ2FsbGJhY2soKTtcblxuICAgIGNvbnN0IHJ0cFRpbWVzdGFtcCA9IG1ldGFkYXRhLnJ0cFRpbWVzdGFtcDtcblxuICAgIGlmICghcnRwVGltZXN0YW1wKSB7XG4gICAgICAvLyBUT0RPIChOSCk6IEFkZCBhIHRocm90dGxlZCBsb2cgaW5kaWNhdGluZyB0aGF0IG5vIFJUUCB0aW1lc3RhbXAgd2FzIGZvdW5kXG4gICAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgaXQncyBudWxsYWJsZSwgYnV0IHdlIGFsd2F5cyBoYXZlIGl0IGluIGEgV2ViUlRDIGNvbnRleHRcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcHNUb0RlbGV0ZTogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3RpbWVzdGFtcCwgZnJhbWVUaW1pbmddIG9mIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wKSB7XG4gICAgICBpZiAocGFyc2VJbnQodGltZXN0YW1wLCAxMCkgPiBydHBUaW1lc3RhbXApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9PT0gJ3BsYXlpbmcnKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbi52YWx1ZSA9IHtcbiAgICAgICAgICAuLi5mcmFtZVRpbWluZy5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiEsXG4gICAgICAgICAgcmVuZGVyVGltZXN0YW1wOiBuZXcgRGF0ZShwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgbm93KSxcbiAgICAgICAgICBwbGF5YmFja1N0YXRlOiAncGxheWluZydcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGltZXN0YW1wc1RvRGVsZXRlLnB1c2godGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRpbWVzdGFtcCBvZiB0aW1lc3RhbXBzVG9EZWxldGUpIHtcbiAgICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmRlbGV0ZSh0aW1lc3RhbXApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudHNUb0RlbGV0ZSA9IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLnNpemUgLSAoSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLk1BWF9GUkFNRV9USU1JTkdfRU5UUklFUyAtIDEpO1xuXG4gICAgaWYgKGVsZW1lbnRzVG9EZWxldGUgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAua2V5cygpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRGVsZXRlOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleVRvRGVsZXRlID0gaXRlcmF0b3IubmV4dCgpLnZhbHVlO1xuXG4gICAgICB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5kZWxldGUoa2V5VG9EZWxldGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9uUGxheWluZyA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3BsYXlpbmcnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBvblBsYXlpbmcpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIG9uUGxheWluZykpKTtcblxuICAgIGNvbnN0IG9uUGF1c2UgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdwYXVzZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIG9uUGF1c2UpKSk7XG5cbiAgICBjb25zdCBvblN0YWxsZWQgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdzdGFsbGVkJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgb25TdGFsbGVkKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBvblN0YWxsZWQpKSk7XG5cbiAgICBjb25zdCBvbldhaXRpbmcgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICd3YWl0aW5nJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3YWl0aW5nJywgb25XYWl0aW5nKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dhaXRpbmcnLCBvbldhaXRpbmcpKSk7XG5cbiAgICBjb25zdCBvbkVuZGVkID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAnZW5kZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgb25FbmRlZCk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmRlZCcsIG9uRW5kZWQpKSk7XG5cbiAgICBjb25zdCBvbkVycm9yID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAnZXJyb3InO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpKSk7XG5cbiAgICB0aGlzLmFybVZpZGVvRnJhbWVDYWxsYmFjaygpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU/LmNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayh0aGlzLl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFybVZpZGVvRnJhbWVDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZT8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayh0aGlzLnZpZGVvRnJhbWVDYWxsYmFjay5iaW5kKHRoaXMpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi4vLi4vcnRjL1NkcFBhcnNlcic7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UsIHtcbiAgZGVmYXVsdFRyYWNrS2luZHMsXG4gIEVuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1xufSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IEVuZFBvaW50LCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIGZyb20gJy4uL2ZyYW1lVGltaW5nL0gyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcic7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZywgbGlzdGVuT25TdHJlYW1TZXR1cDogU3RyZWFtU2V0dXBMaXN0ZW5lciwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQ6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZVxuICAgICAgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlXG4gICAgICB8fCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSA/IEVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy5FbmFibGVkIDogRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLkRpc2FibGVkO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCBkZWZhdWx0VHJhY2tLaW5kcywgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc3Qge3N0YXR1c30gPSByZXNwb25zZTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gdW5kZWZpbmVkIDtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgZmFpbGVkIHdpdGggc3RhdHVzIFslc10nLFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3N0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbiBhcyBSVENDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDogdW5kZWZpbmVkIHwgbnVtYmVyO1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWU/LmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgYXMgbmV2ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCkpKTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZTogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFsndHJhY2snIHwgJ2FkZHN0cmVhbSddKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3N0cmVhbXMnIGluIGUpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dElkKSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgYXMgRW5kUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRQb2ludC5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uIGFzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zICYmIHBlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24/LnNkcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcihwZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlcnMgPSBwZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZGlzcG9zYWJsZXMsIGVuY29kZWRWaWRlb0ZyYW1lfSA9IEluc2VydGFibGVTdHJlYW1zLmNvbmZpZ3VyZUVuY29kZWRTdHJlYW1QaXBlbGluZShtZWRpYVN0cmVhbSwgcmVjZWl2ZXJzLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uYXVkaW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWlyZXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCdcbiAgICAgICAgICAgICAgICAgICYmICh0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIgPSBuZXcgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyKHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtLmdldFZpZGVvVHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggYXJlIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQsIGJ1dCB0aGUgdHlwZSBzeXN0ZW0gbWFrZXMgdGhlbSBudWxsYWJsZSwgc28gd2UgaGF2ZSB0byBhc3NlcnQgdGhlIHByZXNlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmVyID0+IHJlY2VpdmVyLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gUGxhdGZvcm0gc3VwcG9ydGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gc2hvdWxkIGFsc28gc3VwcG9ydCBnZXRUcmFuc2NlaXZlcnNcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWQgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldFRyYW5zY2VpdmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKS5maWx0ZXIodHJhbnNjZWl2ZXIgPT4gdHJhbnNjZWl2ZXIucmVjZWl2ZXIgPT09IHJlY2VpdmVyKVswXT8ubWlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBTa2lwcGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRyYWNrIFslc10gYmVjYXVzZSBubyByZWNlaXZlciB3YXMgZm91bmQnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgdHJhY2suaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFNraXBwaW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdHJhY2sgWyVzXSBiZWNhdXNlIG5vIG1pZCB3YXMgZm91bmQnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgdHJhY2suaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGVuY29kZWRWaWRlb0ZyYW1lLnN1YnNjcmliZShlbmNvZGVkVmlkZW9GcmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIucHJvY2Vzc0ZyYW1lKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBtaWQsIGVuY29kZWRWaWRlb0ZyYW1lLnRyYWNrLmlkLCBlbmNvZGVkVmlkZW9GcmFtZS5jaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuY29uZmlndXJlSW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKG1lZGlhU3RyZWFtLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlPy5yb3VuZFRyaXBUaW1lID8gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQgOiAwKTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghc3RhdGlzdGljcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gQXVkaW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkICYmIEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuT2ZmbGluZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuT2ZmbGluZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA/IENoYW5uZWxTdGF0ZS5QbGF5aW5nIDogQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIHN0YXRlIHJlc3RvcmVkIHRvIFslc10gYWZ0ZXIgcmVjb25uZWN0aW5nJywgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJykpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IE9uLURlbWFuZCBTdHJlYW0gcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBMaXZlIFN0cmVhbSBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFsVGltZVN0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgZXh0ZW5kcyBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luazxUIGV4dGVuZHMgUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElFbmNvZGVkU3RyZWFtU2luazxUPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAyLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RlZFN0cmVhbVNpbmsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCB7U3Vycm9nYXRlRnJhbWVUeXBlLCBTa2lwRnJhbWV9IGZyb20gJy4vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcic7XG5pbXBvcnQgV29ya2VyVHJhbnNmb3JtU3RyZWFtLCB7Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZX0gZnJvbSAnLi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyJztcblxudHlwZSBNZWRpYVN0cmVhbVRyYWNrS2luZCA9ICd2aWRlbycgfCAnYXVkaW8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSVENFbmNvZGVkRnJhbWU8VCBleHRlbmRzIFJUQ0VuY29kZWRWaWRlb0ZyYW1lIHwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHtcbiAgdHJhY2s6IE1lZGlhU3RyZWFtVHJhY2s7XG4gIGNodW5rOiBUO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUoXG4gICAgc3RyZWFtOiBNZWRpYVN0cmVhbSxcbiAgICByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sXG4gICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZCwgLy8gQ2FuIGJlIHVuZGVmaW5lZCB3aGVuIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgc2lua1xuICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQsIC8vIENhbiBiZSB1bmRlZmluZWQgd2hlbiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIHNpbmtcbiAgICB2aWRlb0NvZGVjOiBzdHJpbmcsXG4gICAgYXVkaW9Db2RlYzogc3RyaW5nXG4gICk6IHtcbiAgICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gICAgZW5jb2RlZFZpZGVvRnJhbWU6IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCBudWxsPjtcbiAgICBlbmNvZGVkQXVkaW9GcmFtZTogU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+O1xuICB9IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICBjb25zdCBlbmNvZGVkVmlkZW9GcmFtZSA9IG5ldyBTdWJqZWN0PElSVENFbmNvZGVkRnJhbWU8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgZW5jb2RlZEF1ZGlvRnJhbWUgPSBuZXcgU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+KG51bGwpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmUgPT4gcmVjZWl2ZS50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgY29uc3QgbXVzdFNpbmsgPSAhIWVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG5cbiAgICAgICAgICAvLyBGaXJlZm94IGFuZCBTYWZhcmlcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IFdvcmtlclRyYW5zZm9ybVN0cmVhbSgpO1xuXG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMoZXZlbnQ6IE1lc3NhZ2VFdmVudDxGb3JjZUludmFsaWRGcmFtZVBvc3RNZXNzYWdlPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPj4pID0+IHtcbiAgICAgICAgICAgICAgZW5jb2RlZFZpZGVvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgY2h1bms6IGV2ZW50LmRhdGEuY2h1bmtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAobXVzdFNpbmsgJiYgIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtmb3JjZUludmFsaWRGcmFtZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZWNlaXZlci50cmFuc2Zvcm0gPSBuZXcgUlRDUnRwU2NyaXB0VHJhbnNmb3JtKHdvcmtlciwge1xuICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlYyxcbiAgICAgICAgICAgICAgbXVzdFNpbmtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaHJvbWl1bSAoQ2hyb21lLCBFZGdlLCBPcGVyYSwgLi4uKVxuICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIGVuY29kZWRWaWRlb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChtdXN0U2luaykge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMhKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGNvbnN0IG11c3RTaW5rID0gISFlbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuXG4gICAgICAgICAgLy8gRmlyZWZveCBhbmQgU2FmYXJpXG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKTtcblxuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jKGV2ZW50OiBNZXNzYWdlRXZlbnQ8Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGVuY29kZWRBdWRpb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICAgIGNodW5rOiBldmVudC5kYXRhLmNodW5rXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKG11c3RTaW5rICYmICFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgY29kZWM6IGF1ZGlvQ29kZWMsXG4gICAgICAgICAgICAgIG11c3RTaW5rXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG5cbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENocm9taXVtIChDaHJvbWUsIEVkZ2UsIE9wZXJhLCAuLi4pXG4gICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgZW5jb2RlZEF1ZGlvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG11c3RTaW5rKSB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoYXVkaW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMhKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zYWJsZXMsXG4gICAgICBlbmNvZGVkVmlkZW9GcmFtZSxcbiAgICAgIGVuY29kZWRBdWRpb0ZyYW1lXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24oc3RyZWFtOiBNZWRpYVN0cmVhbSwgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkLCBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZCk6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdH0ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VCBleHRlbmRzIEF1ZGlvRGF0YSB8IFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBULCBjb250cm9sbGVyOiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjxUPik6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhY2tUcmFuc2Zvcm0ge1xuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgZXh0ZW5kcyBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPihtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQ+KSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBTa2lwRnJhbWUgPSBTeW1ib2woKTtcblxuZXhwb3J0IHR5cGUgU3Vycm9nYXRlRnJhbWVUeXBlID0gQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQgfCB0eXBlb2YgU2tpcEZyYW1lO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzU2FmYXJpID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZENocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzQW5kcm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NpbmdsZVplcm9CeXRlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyA9IHtPUFVTOiBuZXcgVWludDhBcnJheShbMHg2OCwgMHgwNywgMHhkOSwgMHhhYiwgMHhiYywgMHg3OSwgMHg4NywgMHhhYiwgMHg4ZSwgMHg0YSwgMHgxNCwgMHhmMywgMHhhNywgMHgxYywgMHhmMiwgMHg5YSwgMHg3YSwgMHg0NSwgMHhhNywgMHgyZCwgMHg0NCwgMHgyNSwgMHg3NCwgMHg0YywgMHhhZCwgMHgxNiwgMHhiMywgMHgwZSwgMHg1MSwgMHg1NywgMHhlYSwgMHhlNywgMHhhZCwgMHgyYSwgMHgzOCwgMHhjZSwgMHgzM10pfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4ZjQsIDB4MDAsIDB4MGEsIDB4OTEsIDB4OWIsIDB4MmIsIDB4ZjEsIDB4ZjEsIDB4ZjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDcsIDB4ODksIDB4MTIsIDB4Y2IsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4YzQsIDB4NDgsIDB4NDQsIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XG4gICAgICAvKiAqLyAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSksIC8vIFNsaWNlIGxheWVyOiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSwgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDg2LCAweDAwLCAweDQwLCAweDkyLCAweDljLCAweDI0LCAweDQ4LCAweDAwLCAweDAwLCAweDAzLCAweDcwLCAweDAwLCAweDAwLCAweDRiLCAweDQwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0ID0ge1xuICAgIElGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCwgLy8gUGljdHVyZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHg1ZiwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAyOTUpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwNSwgLi4ubmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSwgMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pLCAvLyBTbGljZSBsYXllcjogSWRyIGRhdGFcbiAgICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweGE0LCAuLi5uZXcgVWludDhBcnJheSgxMDM2NCkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU0VJXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDIwLCAweDE1LCAweGYwLCAweDRiXSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4ID0gMTA0MTg7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQgPSAxO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpO1xuICBwcml2YXRlIHN0YXRpYyBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnT1BVUyc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5JRnJhbWUuYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBjb25zdCBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYml0TWFzazEgPSAweDBlO1xuICAgIGNvbnN0IGJpdE1hc2syID0gMHgwMTtcbiAgICBjb25zdCBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcbiAgICBjb25zdCBiaXRTaGlmdExlZnRCeTcgPSA3O1xuICAgIGNvbnN0IGJ5dGUxID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTEpO1xuICAgIGNvbnN0IGJ5dGUyID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5Nyk7XG4gICAgY29uc3QgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XG4gICAgY29uc3QgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XG5cbiAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXhdIHw9IGJ5dGUxO1xuICAgIGNvcHlPZkR1bW15UEZyYW1lc1tidWZmZXJJbmRleCArIDFdIHw9IGJ5dGUyO1xuICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgIHJldHVybiBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RvbWFpbiA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgICB0aGlzLmdldExvY2F0aW9uSG9zdG5hbWVGcm9tR2xvYmFsU2NvcGUoKS50aGVuKGxvY2F0aW9uSG9zdG5hbWUgPT4ge1xuICAgICAgdGhpcy5fZG9tYWluID0gbG9jYXRpb25Ib3N0bmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhdGlvbkhvc3RuYW1lRnJvbUdsb2JhbFNjb3BlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4ocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBHbG9iYWxTY29wZS5zdWJzY3JpYmUoZ2xvYmFsU2NvcGUgPT4ge1xuICAgICAgICBpZiAoZ2xvYmFsU2NvcGUpIHtcbiAgICAgICAgICByZXNvbHZlKGdsb2JhbFNjb3BlLmxvY2F0aW9uSG9zdG5hbWUpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZyB8fCAhR2xvYmFsU2NvcGUudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSAoaXRlbTogbnVtYmVyIHwgc3RyaW5nKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgPyBOdW1iZXJzLmNvdW50TnVtYmVyTGVuZ3RoKGl0ZW0pIDogaXRlbS5sZW5ndGg7XG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGdldEl0ZW1TaXplKGl0ZW0pIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uVGVsZW1ldHJ5IEZhaWxlZDogTm8gYXBwbGljYXRpb24gbW9uaXRvciBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcj8uZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgaWYgKCF0aW1lU2luY2VMYXN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbnR5cGUgQ29udGludWF0aW9uRXZlbnQgPSBIVE1MVmlkZW9FbGVtZW50RXZlbnRNYXBbJ3BsYXknIHwgJ3BsYXlpbmcnIHwgJ3Byb2dyZXNzJyB8ICd0aW1ldXBkYXRlJ107XG5jb25zdCBub29wID0gKCk6IHZvaWQgPT4gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQ6IENvbnRpbnVhdGlvbkV2ZW50KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlID0gbmV3IERpc3Bvc2FibGUoKCkgPT4gbnVsbCk7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZSA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQ6IENvbnRpbnVhdGlvbkV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50OiBDb250aW51YXRpb25FdmVudCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCJcbmltcG9ydCB3b3JrZXIgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXb3JrZXJfZm4oKSB7XG4gIHJldHVybiB3b3JrZXIoXCIvKioqKioqLyAoZnVuY3Rpb24oKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcXG4vKioqKioqLyBcXHRcXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xcblxcbi8qKiovIFxcXCIuL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBCcm93c2VyRGV0ZWN0b3I7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eSAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcXFwiKTtcXG5cXG5cXG5cXG52YXIgX0Jyb3dzZXJEZXRlY3RvciwgX25hdmlnYXRvciwgX25hdmlnYXRvcjI7XFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG52YXIgQnJvd3NlckRldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcXG4gIGZ1bmN0aW9uIEJyb3dzZXJEZXRlY3RvcigpIHtcXG4gICAgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHRoaXMsIEJyb3dzZXJEZXRlY3Rvcik7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJOYW1lXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0FuZHJvaWRcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU2OVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3N1xcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNNb2JpbGVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNNb2JpbGUoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKSB7XFxuICAgICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgdmFyIGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XFxuICAgICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcXG4gICAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck5hbWVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZSgpIHtcXG4gICAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xcbiAgICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xcbiAgICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICB2YXIgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcXG4gICAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgICB9XFxuICAgICAgdmFyIGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xcbiAgICAgIGlmICghZnVsbFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCkge1xcbiAgICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xcbiAgICAgIHZhciBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XFxuICAgICAgaWYgKG1zaWUgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHJldHVybiBcXFwiSUUvXFxcIi5jb25jYXQocGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKSk7XFxuICAgICAgfVxcbiAgICAgIHZhciB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XFxuICAgICAgaWYgKHRyaWRlbnQgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJJRS9cXFwiLmNvbmNhdChwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbl9Ccm93c2VyRGV0ZWN0b3IgPSBCcm93c2VyRGV0ZWN0b3I7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleFxcXCIsIC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXFxcLykoW1xcXFxkLmFwcmVdKykvZyk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCkpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVcXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTWFqb3JWZXJzaW9uXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc01vYmlsZVxcXCIsIC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kudGVzdCgoX25hdmlnYXRvciA9IG5hdmlnYXRvcikgPT09IG51bGwgfHwgX25hdmlnYXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hdmlnYXRvci51c2VyQWdlbnQpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQW5kcm9pZFxcXCIsIC9BbmRyb2lkL2kudGVzdCgoX25hdmlnYXRvcjIgPSBuYXZpZ2F0b3IpID09PSBudWxsIHx8IF9uYXZpZ2F0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmF2aWdhdG9yMi51c2VyQWdlbnQpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNjlcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcwXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzJcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc0XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzZcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc3XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJykpO1xcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50c1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgU2tpcEZyYW1lOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gU2tpcEZyYW1lOyB9LFxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3RvciAqLyBcXFwiLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50c1xcXCIpO1xcblxcblxcblxcblxcbnZhciBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbiAqL1xcblxcblxcbnZhciBTa2lwRnJhbWUgPSBTeW1ib2woKTtcXG52YXIgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyKCkge1xcbiAgICAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXFxcImRlZmF1bHRcXFwiXSkodGhpcywgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcik7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIG51bGwsIFt7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWNcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYykge1xcbiAgICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xcbiAgICAgICAgY2FzZSAnT1BVUyc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKSB7XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XFxuICAgICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA4JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA5JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYykge1xcbiAgICAgIGlmIChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xcbiAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcXG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOCc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOSc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWMpIHtcXG4gICAgICBpZiAoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgIHZhciBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcXG4gICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XFxuICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgICAgICB9XFxuICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgICByZXR1cm4gYnVmZmVyO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXJcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpIHtcXG4gICAgICB2YXIgYml0TWFzazEgPSAweDBlO1xcbiAgICAgIHZhciBiaXRNYXNrMiA9IDB4MDE7XFxuICAgICAgdmFyIGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xcbiAgICAgIHZhciBiaXRTaGlmdExlZnRCeTcgPSA3O1xcbiAgICAgIHZhciBieXRlMSA9IChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTE7XFxuICAgICAgdmFyIGJ5dGUyID0gKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3O1xcbiAgICAgIHZhciBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcXG4gICAgICB2YXIgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XFxuICAgICAgY29weU9mRHVtbXlQRnJhbWVzW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcXG4gICAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgcmV0dXJuIGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XFxuICAgIH1cXG4gIH1dKTtcXG59KCk7XFxuX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2lzU2FmYXJpXFxcIiwgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfaXNNb2JpbGVDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc01vYmlsZSgpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9pc0FuZHJvaWRDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc0FuZHJvaWQpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3NpbmdsZVplcm9CeXRlXFxcIiwgbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjXFxcIiwge1xcbiAgT1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKVxcbn0pO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlY1xcXCIsIHtcXG4gIEgyNjQ6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLFxcbiAgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCxcXG4gIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XFxuICAvKiAqL1xcbiAgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXFxuICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXFxuICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcXG59KTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWNcXFwiLCB7XFxuICBIMjY0OiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCxcXG4gIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHg2OCwgMHg0OSwgMHhhOCwgMHg0MSwgMHg2OCwgMHg5OSwgMHg0YywgMHgwZiwgMHhmZiwgMHg5MiwgMHg4MV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxcbiAgVlA4OiBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxcbiAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRcXFwiLCB7XFxuICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCxcXG4gIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwM10uY29uY2F0KCgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShuZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSksIFsweDVmXSwgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpKSwgWzB4ODAsXFxuICAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDVdLCAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSksIFsweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSkpLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXFxuICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzXS5jb25jYXQoKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpKSwgWzB4YTRdLCAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZikpLCBbMHg4MCxcXG4gIC8vIFNFSVxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pKSAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4XFxcIiwgMTA0MTgpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldFxcXCIsIDEpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJcXFwiLCBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNNb2JpbGVDaHJvbWUgfHwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyXFxcIiwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9hcnJheUxpa2VUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XFxuICByZXR1cm4gbjtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfYXJyYXlXaXRob3V0SG9sZXM7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5TGlrZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXJyYXlMaWtlVG9BcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qc1xcXCIpO1xcblxcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7XFxuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkocik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2NsYXNzQ2FsbENoZWNrOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcXG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2NyZWF0ZUNsYXNzOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XFxuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcXG4gICAgdmFyIG8gPSByW3RdO1xcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFxcXCJ2YWx1ZVxcXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsICgwLF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkoby5rZXkpLCBvKTtcXG4gIH1cXG59XFxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcXG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFxcXCJwcm90b3R5cGVcXFwiLCB7XFxuICAgIHdyaXRhYmxlOiAhMVxcbiAgfSksIGU7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2RlZmluZVByb3BlcnR5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xcbiAgcmV0dXJuIChyID0gKDAsX3RvUHJvcGVydHlLZXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XFxuICAgIHZhbHVlOiB0LFxcbiAgICBlbnVtZXJhYmxlOiAhMCxcXG4gICAgY29uZmlndXJhYmxlOiAhMCxcXG4gICAgd3JpdGFibGU6ICEwXFxuICB9KSA6IGVbcl0gPSB0LCBlO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfaXRlcmFibGVUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7XFxuICBpZiAoXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXFxcIkBAaXRlcmF0b3JcXFwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX25vbkl0ZXJhYmxlU3ByZWFkOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXFxcIik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3RvQ29uc3VtYWJsZUFycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheVdpdGhvdXRIb2xlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheVdpdGhvdXRIb2xlcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZXJhYmxlVG9BcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub25JdGVyYWJsZVNwcmVhZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub25JdGVyYWJsZVNwcmVhZC5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanNcXFwiKTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xcbiAgcmV0dXJuICgwLF9hcnJheVdpdGhvdXRIb2xlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHIpIHx8ICgwLF9pdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfbm9uSXRlcmFibGVTcHJlYWRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKSgpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIHRvUHJpbWl0aXZlOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XFxuICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHQpIHx8ICF0KSByZXR1cm4gdDtcXG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFxcXCJkZWZhdWx0XFxcIik7XFxuICAgIGlmIChcXFwib2JqZWN0XFxcIiAhPSAoMCxfdHlwZW9mX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkoaSkpIHJldHVybiBpO1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlxcXCIpO1xcbiAgfVxcbiAgcmV0dXJuIChcXFwic3RyaW5nXFxcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyB0b1Byb3BlcnR5S2V5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RvUHJpbWl0aXZlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJpbWl0aXZlLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qc1xcXCIpO1xcblxcblxcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xcbiAgdmFyIGkgPSAoMCxfdG9QcmltaXRpdmVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKSh0LCBcXFwic3RyaW5nXFxcIik7XFxuICByZXR1cm4gXFxcInN5bWJvbFxcXCIgPT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKGkpID8gaSA6IGkgKyBcXFwiXFxcIjtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3R5cGVvZjsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xcbiAgXFxcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXFxcIjtcXG5cXG4gIHJldHVybiBfdHlwZW9mID0gXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgU3ltYm9sICYmIFxcXCJzeW1ib2xcXFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xcbiAgICByZXR1cm4gdHlwZW9mIG87XFxuICB9IDogZnVuY3Rpb24gKG8pIHtcXG4gICAgcmV0dXJuIG8gJiYgXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXFxcInN5bWJvbFxcXCIgOiB0eXBlb2YgbztcXG4gIH0sIF90eXBlb2Yobyk7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FycmF5TGlrZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xcbiAgaWYgKHIpIHtcXG4gICAgaWYgKFxcXCJzdHJpbmdcXFwiID09IHR5cGVvZiByKSByZXR1cm4gKDAsX2FycmF5TGlrZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyLCBhKTtcXG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcXG4gICAgcmV0dXJuIFxcXCJPYmplY3RcXFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcXFwiTWFwXFxcIiA9PT0gdCB8fCBcXFwiU2V0XFxcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcXFwiQXJndW1lbnRzXFxcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/ICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkociwgYSkgOiB2b2lkIDA7XFxuICB9XFxufVxcblxcblxcbi8qKiovIH0pXFxuXFxuLyoqKioqKi8gXFx0fSk7XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgbW9kdWxlIGNhY2hlXFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xcbi8qKioqKiovIFxcdFxcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcXG4vKioqKioqLyBcXHRcXHR9XFxuLyoqKioqKi8gXFx0XFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcXG4vKioqKioqLyBcXHRcXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcXG4vKioqKioqLyBcXHRcXHRcXHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXFxuLyoqKioqKi8gXFx0XFx0XFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcXG4vKioqKioqLyBcXHRcXHRcXHRleHBvcnRzOiB7fVxcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcXG4vKioqKioqLyBcXHRcXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0fVxcbi8qKioqKiovIFxcdFxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gXFx0Lyogd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzICovXFxuLyoqKioqKi8gXFx0IWZ1bmN0aW9uKCkge1xcbi8qKioqKiovIFxcdFxcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHR9O1xcbi8qKioqKiovIFxcdH0oKTtcXG4vKioqKioqLyBcXHRcXG4vKioqKioqLyBcXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXFxuLyoqKioqKi8gXFx0IWZ1bmN0aW9uKCkge1xcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH1cXG4vKioqKioqLyBcXHR9KCk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IHt9O1xcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2UhLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2sgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgKi8gXFxcIi4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzXFxcIik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG5cXG5cXG52YXIgd29ya2VyID0gc2VsZjtcXG53b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBldmVudC5kYXRhLmZvcmNlSW52YWxpZEZyYW1lO1xcbn07XFxuaWYgKHNlbGYuUlRDVHJhbnNmb3JtRXZlbnQpIHtcXG4gIHNlbGYub25ydGN0cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgdmFyIHRyYW5zZm9ybWVyID0gZXZlbnQudHJhbnNmb3JtZXI7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyA9IHRyYW5zZm9ybWVyLm9wdGlvbnMuY29kZWM7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybWVyLm9wdGlvbnMua2luZCA9PT0gJ3ZpZGVvJyA/IFdvcmtlclRyYW5zZm9ybVN0cmVhbS52aWRlb1RyYW5zZm9ybUZ1bmN0aW9uIDogV29ya2VyVHJhbnNmb3JtU3RyZWFtLmF1ZGlvVHJhbnNmb3JtRnVuY3Rpb247XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luayA9IHRyYW5zZm9ybWVyLm9wdGlvbnMubXVzdFNpbms7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XFxuICAgICAgdHJhbnNmb3JtOiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHJhbnNmb3JtRnVuY3Rpb25cXG4gICAgfSk7XFxuICAgIHZhciBzb3VyY2UgPSB0cmFuc2Zvcm1lci5yZWFkYWJsZTtcXG4gICAgdmFyIHNpbmsgPSB0cmFuc2Zvcm1lci53cml0YWJsZTtcXG4gICAgc291cmNlLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkucGlwZVRvKHNpbmspO1xcbiAgfTtcXG59XFxudmFyIFdvcmtlclRyYW5zZm9ybVN0cmVhbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKSB7XFxuICAgICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKSh0aGlzLCBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0pO1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclRyYW5zZm9ybVN0cmVhbSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwidmlkZW9UcmFuc2Zvcm1GdW5jdGlvblxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2aWRlb1RyYW5zZm9ybUZ1bmN0aW9uKGNodW5rLCBjb250cm9sbGVyKSB7XFxuICAgICAgcG9zdE1lc3NhZ2Uoe1xcbiAgICAgICAgY2h1bms6IHtcXG4gICAgICAgICAgdHlwZTogY2h1bmsudHlwZSxcXG4gICAgICAgICAgdGltZXN0YW1wOiBjaHVuay50aW1lc3RhbXAsXFxuICAgICAgICAgIGRhdGE6IGNodW5rLmRhdGFcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLm11c3RTaW5rKSB7XFxuICAgICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lKSB7XFxuICAgICAgICAgIHZhciBzdXJyb2dhdGU7XFxuICAgICAgICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcXG4gICAgICAgICAgICBzdXJyb2dhdGUgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyk7XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3Vycm9nYXRlID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uU2tpcEZyYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xcbiAgICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyhXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYykgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImF1ZGlvVHJhbnNmb3JtRnVuY3Rpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXVkaW9UcmFuc2Zvcm1GdW5jdGlvbihjaHVuaywgY29udHJvbGxlcikge1xcbiAgICAgIHBvc3RNZXNzYWdlKHtcXG4gICAgICAgIGNodW5rOiB7XFxuICAgICAgICAgIHRpbWVzdGFtcDogY2h1bmsudGltZXN0YW1wLFxcbiAgICAgICAgICBkYXRhOiBjaHVuay5kYXRhXFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luaykge1xcbiAgICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSkge1xcbiAgICAgICAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJjb2RlY1xcXCIsIHZvaWQgMCk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgXFxcInRyYW5zZm9ybUZ1bmN0aW9uXFxcIiwgdm9pZCAwKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwibXVzdFNpbmtcXFwiLCB2b2lkIDApO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJmb3JjZUludmFsaWRGcmFtZVxcXCIsIHZvaWQgMCk7XFxuLyogdW51c2VkIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIF9fV0VCUEFDS19ERUZBVUxUX0VYUE9SVF9fID0gKG51bGwpO1xcbi8qKioqKiovIH0pKClcXG47XFxuXCIsIFwiV29ya2VyXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYsIG5vLXVzZS1iZWZvcmUtZGVmaW5lLCBuZXctY2FwICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZW50LCB3b3JrZXJDb25zdHJ1Y3Rvciwgd29ya2VyT3B0aW9ucywgdXJsKSB7XG4gIHZhciBnbG9iYWxTY29wZSA9IHNlbGYgfHwgd2luZG93O1xuXG4gIHRyeSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBibG9iO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBOZXcgQVBJXG4gICAgICAgIGJsb2IgPSBuZXcgZ2xvYmFsU2NvcGUuQmxvYihbY29udGVudF0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBCbG9iQnVpbGRlciA9IERlcHJlY2F0ZWQsIGJ1dCB3aWRlbHkgaW1wbGVtZW50ZWRcbiAgICAgICAgdmFyIEJsb2JCdWlsZGVyID0gZ2xvYmFsU2NvcGUuQmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTW96QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTVNCbG9iQnVpbGRlcjtcbiAgICAgICAgYmxvYiA9IG5ldyBCbG9iQnVpbGRlcigpO1xuICAgICAgICBibG9iLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgYmxvYiA9IGJsb2IuZ2V0QmxvYigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgVVJMID0gZ2xvYmFsU2NvcGUuVVJMIHx8IGdsb2JhbFNjb3BlLndlYmtpdFVSTDtcbiAgICAgIHZhciBvYmplY3RVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgdmFyIHdvcmtlciA9IG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0ob2JqZWN0VVJMLCB3b3JrZXJPcHRpb25zKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VVJMKTtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0oXCJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQsXCIuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50KSksIHdvcmtlck9wdGlvbnMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdXJsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIklubGluZSB3b3JrZXIgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGdsb2JhbFNjb3BlW3dvcmtlckNvbnN0cnVjdG9yXSh1cmwsIHdvcmtlck9wdGlvbnMpO1xuICB9XG59OyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7XG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XG4gIHJldHVybiBuO1xufVxuZXhwb3J0IHsgX2FycmF5TGlrZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIpO1xufVxuZXhwb3J0IHsgX2FycmF5V2l0aG91dEhvbGVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVDbGFzcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbmV4cG9ydCB7IF9nZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZXhwb3J0IHsgX25vbkl0ZXJhYmxlUmVzdCBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVNwcmVhZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkge1xuICBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlO1xuICBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7XG59XG5leHBvcnQgeyBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5KHIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5leHBvcnQgeyBfdG9Db25zdW1hYmxlQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkociwgYSk7XG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcbiAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBhcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwO1xuICB9XG59XG5leHBvcnQgeyBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTsiXSwibmFtZXMiOlsiR2xvYmFsU2NvcGUiLCJEaXNwb3NhYmxlIiwiRGlzcG9zYWJsZUxpc3QiLCJTdWJqZWN0IiwiUmVhZE9ubHlTdWJqZWN0IiwidmlzaWJpbGl0eUNoYW5nZUV2ZW50IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsImluaXRpYWxpemUiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXQiLCJ2YWx1ZSIsImdldFRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiZGlzcG9zZSIsIl9kaXNwb3NhYmxlcyIsIl90aGlzIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50SXNIaWRkZW4iLCJ1c2VFdmVudENhcHR1cmVQaGFzZSIsImFkZERvY3VtZW50RXZlbnRMaXN0ZW5lciIsImFkZCIsInJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lciIsImRlZmF1bHQiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNBbmRyb2lkIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX2lzTW9iaWxlIiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsIl9Ccm93c2VyRGV0ZWN0b3IiLCJ0ZXN0IiwiX25hdmlnYXRvciIsIl9uYXZpZ2F0b3IyIiwiaW5jbHVkZXMiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiZGVmYXVsdFRlbGVtZXRyeUxldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImRlZmF1bHRMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCIsImRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwiLCJGZWF0dXJlRW5hYmxlbWVudCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkIiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsImlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsImJpbmQiLCJzZXRUaW1lb3V0IiwiaW1nIiwiZG9jdW1lbnRDcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX3JlZiIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTIiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmEzIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJfcmVmMiIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTQiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE1IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hNiIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTciLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE4IiwicnR0IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hOSIsImxpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTEwIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIk1ldHJpY3NUeXBlIiwiTWV0cmljVHlwZSIsIkR1cmF0aW9ucyIsIlNESyIsIkxvZ2dlckZhY3RvcnkiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiZ2V0TG9nZ2VyIiwibWV0cmljc1NlcnZpY2UiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIlNldHVwQ29tcGxldGVkIiwiZmFpbCIsIlNldHVwRmFpbGVkIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiZ2V0TmFtZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJ0b0lzb1N0cmluZyIsIkVkZ2VUb2tlbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJpc0Nocm9tZTc0IiwiaXNDaHJvbWU3NSIsImlzQ2hyb21lNzYiLCJpc0Nocm9tZTc3IiwiYWRkVHJhbmNlaXZlckRpc2FibGVkIiwiaXNDaHJvbWU2OSIsImlzQ2hyb21lNzAiLCJpc0Nocm9tZTcxIiwiaXNDaHJvbWU3MiIsImJyb3dzZXJOYW1lIiwiYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9HbG9iYWxTY29wZSR2YWx1ZSIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiUlRDUnRwUmVjZWl2ZXIiLCJwcm90b3R5cGUiLCJjcmVhdGVFbmNvZGVkU3RyZWFtcyIsIlJUQ1J0cFNjcmlwdFRyYW5zZm9ybSIsIl9HbG9iYWxTY29wZSR2YWx1ZTIiLCJIVE1MVmlkZW9FbGVtZW50IiwicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayIsImlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZCIsImlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIiwiaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQiLCJQYXJhbWV0ZXJzIiwiX2Rpc2NvdmVyeVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiX19QQVJBTUVURVJTX18iLCJkaXNjb3ZlcnkiLCJpbnRlbnRpb25zIiwiYnJvd3Nlckdsb2JhbFNjb3BlIiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsIndpbmRvdyIsImdsb2JhbFNjb3BlIiwiX2RvY3VtZW50IiwiX2xvY2F0aW9uIiwiX3dpbmRvdyIsIkZvcm1EYXRhIiwiTWVkaWFTdHJlYW0iLCJNZWRpYVN0cmVhbVRyYWNrIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJSVENJY2VDYW5kaWRhdGUiLCJVUkxTZWFyY2hQYXJhbXMiLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiY3JlYXRlRWxlbWVudCIsImhhc0ZvY3VzIiwiaGlkZGVuIiwicXVlcnlTZWxlY3RvciIsImZldGNoIiwiaG9zdG5hbWUiLCJzZWFyY2giLCJjb25uZWN0aW9uIiwib25MaW5lIiwic2V0SW50ZXJ2YWwiLCJzZXRJbnN0YW5jZSIsInByb3ZpZGVkR2xvYmFsU2NvcGUiLCJnZXRJbnN0YW5jZSIsIl9yZWFkT25seUluc3RhbmNlIiwic3Vic2NyaWJlIiwiY2FsbGJhY2siLCJfR2xvYmFsU2NvcGUiLCJfaW5zdGFuY2UiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJjYWxsIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QiLCJOdW1iZXJzIiwiY291bnROdW1iZXJMZW5ndGgiLCJpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlIiwibnVtYmVyIiwiY291bnREaWdpdHNCZWZvcmVEZWNpbWFsIiwiTWF0aCIsImZsb29yIiwiY291bnREaWdpdHNBZnRlckRlY2ltYWwiLCJmaXhSb3VuZGluZyIsInByZWNpc2lvbiIsInBvd2VyIiwicG93Iiwicm91bmQiLCJkaWdpdHNCZWZvcmVEZWNpbWFsIiwib3JpZ2luYWxWYWx1ZSIsIm1vZGlmaWVkVmFsdWUiLCJjb3VudCIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiVWludDhBcnJheXMiLCJpc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSIsInRhcmdldEJ5dGVTZXF1ZW5jZSIsImRhdGEiLCJvZmZzZXQiLCJpZHgiLCJmaW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0IiwicmV0dXJuVmFsdWVXaGVuTm90Rm91bmQiLCJhcmd1bWVudHMiLCJjdXJyZW50SW5kZXgiLCJieXRlTGVuZ3RoIiwiZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5IiwidXVpZEJ5dGVMZW5ndGgiLCJ1dWlkIiwiYnl0ZUhleCIsInBhZFN0YXJ0Iiwiam9pbiIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkxvZ2dpbmdMZXZlbCIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiV2FybiIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwiX3RoaXMyIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsImVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlIiwic3RhY2siLCJhcmciLCJjYWNoZSIsIl8iLCJPYmplY3QiLCJhcmd1bWVudCIsInRvU3RyaW5nU3RyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwibG9nZ2luZ0xldmVsIiwiT2ZmIiwiQWxsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY3MiLCJfbWV0cmljcyIsImdldFRlbGVtZXRyeUxldmVsIiwiVGltZVRvRmlyc3RGcmFtZSIsIkVzc2VudGlhbCIsIkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJTdGFsbGVkIiwiQnVmZmVyaW5nIiwiUm91bmRUcmlwVGltZSIsIkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiTmV0d29ya1R5cGUiLCJSZXNvbHV0aW9uQ2hhbmdlZCIsIkFwcGxpY2F0aW9uRm9yZWdyb3VuZCIsIkFwcGxpY2F0aW9uQmFja2dyb3VuZCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NTZXJ2aWNlIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzRmFjdG9yeSIsImdldE1ldHJpY3NTZXJ2aWNlIiwiX3R5cGVvZiIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImdldFRlbGVtZXRyeVVybCIsImdldEVudmlyb25tZW50RnJvbVVybCIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWwiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsIkV4cG9uZW50aWFsQmFja29mZiIsIlZlcnNpb25NYW5hZ2VyIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJnZXRMb2NhdGlvbkhvc3RuYW1lRnJvbUdsb2JhbFNjb3BlIiwidGhlbiIsImxvY2F0aW9uSG9zdG5hbWUiLCJfZG9tYWluIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic3Vic2NyaXB0aW9uIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhcHBlbmQiLCJyZWNvcmRzIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwicmVzcG9uc2UiLCJpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSIsIl9mYWlsdXJlQ291bnQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50Iiwic3RhdHVzIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIkVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImRlZmF1bHRUcmFja0tpbmRzIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJpc1ByZWNhY2hpbmdFbmFibGVkIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwidHJhY2tLaW5kcyIsImVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImNvbmZpZ3VyYXRpb24iLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJEaXNhYmxlZCIsImlzVHJhY2tzS2luZHNFcXVpdmFsZW50VG9EZWZhdWx0IiwiRW5hYmxlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXJzIiwidmlkZW9UcmFuc2NlaXZlcnMiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsInRyYWNrc0tpbmRzIiwiY291bnRUcmFja0tpbmRzIiwidHJhY2tLaW5kQ291bnQiLCJhdWRpbyIsInZpZGVvIiwiY291bnRlZFRyYWNrS2luZHMiLCJjb3VudGVkRGVmYXVsdFRyYWNrS2luZHMiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJpIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsIlNkcFBhcnNlciIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uMiIsImdldEN1cnJlbnRPZmZlckRpc2FibGVkIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwicGFyc2VkU0RQIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uMyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwiZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NyIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjQiLCJnZXRTdGF0c0xlZ2FjeSIsInJlc3VsdCIsIm5hbWVzIiwic3RhdCIsIl90aGlzMiRfcnRjU3RhdGlzdGljJCIsIl90aGlzMiRfcnRjU3RhdGlzdGljJDIiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJfc2RwU3BsaXRCeUxpbmVzJGZpbmQiLCJydG1hcCIsInNkcExpbmUiLCJ1c2VkQ29kZWNMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImNvbm5lY3Rpb25TdGF0ZSIsImljZUNvbm5lY3Rpb25TdGF0ZSIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjUiLCJnZXRDb25maWd1cmF0aW9uIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uNiIsInNldENvbmZpZ3VyYXRpb24iLCJfdGhpcyRfcGVlckNvbm5lY3Rpb243IiwiZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQiLCJnZXRUcmFuc2NlaXZlcnMiLCJfdGhpcyRfcGVlckNvbm5lY3Rpb244IiwiX2NyZWF0ZU9mZmVyIiwicHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQiLCJyZWplY3QiLCJfY3JlYXRlQW5zd2VyIiwiY3JlYXRlQW5zd2VyIiwiX3gyIiwiX3NldExvY2FsRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJfeDMiLCJfc2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfY2FsbGVlNCIsIl9kZXNjcmlwdGlvbiRzZHAiLCJoYXNDcnlwdG8iLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsImdldFNlbmRlcnMiLCJnZXRSZWNlaXZlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjkiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJyZXNvbHZlUGVlckNvbm5lY3Rpb25Qcm9taXNlIiwic3ViamVjdCIsIl9zdWJqZWN0IiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJsaXN0ZW5lcnMiLCJfY2FsbFN1cGVyIiwiX2luaGVyaXRzIiwiX2xpc3RlbmVycyIsIl92YWx1ZSIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsIkRpc2NvdmVyeVVyaSIsIl9HbG9iYWxTY29wZSRnZXRJbnN0YSIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwib25Mb2FkIiwiX2luaXRpYWxpemVkIiwiYWRkV2luZG93RXZlbnRMaXN0ZW5lciIsImluaXQiLCJvcHRpb25zV2l0aE9wdGlvbmFsZ2xvYmFsU2NvcGUiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsIl90aGlzJF9hcHBsaWNhdGlvbkFjdCIsIl9TREsiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsImVuZHNXaXRoIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJEaW1lbnNpb24iLCJDaGFubmVsU3RhdGUiLCJWaWRlb1RlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJUb2tlbkNvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIkVuY29kZWRTdHJlYW1TaW5rIiwiU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiU3RhdGVDb250ZXh0IiwiRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQiLCJTdHJlYW1GYWN0b3J5IiwiRGlzY292ZXJ5IiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwiY2hhbm5lbENvbnRleHRPcHRpb25zIiwidGFyZ2V0TGFnIiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsImhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsInZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJfdG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsIl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCIsImNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJfcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkIiwiaXNFbmFibGVkIiwiX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsIl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiU3RvcHBlZCIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQbGF5aW5nIiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsIktlZXAiLCJOb3JtYWwiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50IiwicmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJJbml0aWFsaXppbmciLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsImVtcHR5IiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJSZXNldCIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwicmVhc29uIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0yIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEiLCJfdmFsaWQyIiwiX3ZhbGlkYXRpb25SZXN1bHQyIiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhMiIsIl92YWxpZDMiLCJfdmFsaWRhdGlvblJlc3VsdDMiLCJoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayIsImhhc0VuY29kZWRTdHJlYW1TaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3RhcnRpbmciLCJVbmF1dGhvcml6ZWQiLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJDb25maWd1cmF0aW9uRXJyb3IiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwiaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsIlVuc3VwcG9ydGVkRmVhdHVyZSIsIlJlY292ZXJpbmciLCJjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJjcmVhdGUiLCJDbGllbnRTdGFydEVycm9yIiwiYXV0b21hdGljUmV0cnlPbkZhaWx1cmUiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX3Jlc3RhcnRBZnRlclN0b3AiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIl9wbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwbGF5IiwiU3RhbmRCeSIsIk9mZmxpbmUiLCJHZW9SZXN0cmljdGVkIiwiR2VvQmxvY2tlZCIsIlBhdXNlZCIsIlJlY29ubmVjdGluZyIsIlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0Iiwic2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiZGVzdHJveVN0cmVhbSIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfdGhpczciLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSIsImNhcGFiaWxpdHkiLCJzaG91bGRFeHRyYWN0VGltZWNvZGUiLCJzaG91bGRFeHRyYWN0VGltZXN0YW1wcyIsImlzQ2hhbm5lbEZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQiLCJvcHRpb24iLCJ0cmltIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczgiLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImluaXRpYWxpemVkIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiQml0c3RyZWFtUmVhZGVyIiwiX2RhdGEiLCJfYml0T2Zmc2V0IiwicmVhZEJpdHMiLCJiaXRzVG9SZWFkIiwiZ2V0UmVtYWluaW5nQml0cyIsImJpdHNSZW1haW5pbmciLCJieXRlT2Zmc2V0IiwiYml0UG9zaXRpb25JbkJ5dGUiLCJiaXRzQXZhaWxhYmxlSW5CeXRlIiwibWluIiwibWFzayIsImJ5dGVWYWx1ZSIsImJpdHMiLCJza2lwQml0cyIsImJpdHNUb1NraXAiLCJFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCIsIkgyNjRCaXRzdHJlYW0iLCJldmVudFB1Ymxpc2hlciIsIl9ldmVudFB1Ymxpc2hlciIsInN1YnNjcmliZVRvTmFsVW5pdCIsIm5hbFVuaXRUeXBlIiwiTmFsVW5pdCIsIm5hbFVuaXRFdmVudCIsInN1YnNjcmliZVRvU2VpUGF5bG9hZFR5cGUiLCJzZWlQYXlsb2FkVHlwZSIsIlNlaVBheWxvYWQiLCJzZWlQYXlsb2FkRXZlbnQiLCJzdWJzY3JpYmVUb1BheWxvYWQiLCJjb250ZXh0IiwicGF5bG9hZFV1aWQiLCJwdWJsaXNoIiwiUGF5bG9hZFN1YnNjcmlwdGlvbiIsIlBheWxvYWQiLCJwYXlsb2FkRXZlbnQiLCJOYWxVbml0VHlwZSIsIlNlaVBheWxvYWRUeXBlIiwiRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwiQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciIsInZjbEV4dHJhY3Rpb25TdHJhdGVneSIsIl92Y2xFeHRyYWN0aW9uU3RyYXRlZ3kiLCJzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzIiwiRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsiLCJwYXJzZUVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwiY2h1bmsiLCJoYW5kbGVFeHRyYWN0ZWREYXRhIiwiZXh0cmFjdE5hbFVuaXRBdE9mZnNldCIsIm5vdGlmeUVuZE9mQ2h1bmsiLCJhbm5leEJTdGFydENvZGVMZW5ndGgiLCJuYWxVbml0Iiwic2VpUGF5bG9hZHMiLCJwdWJsaXNoTmFsVW5pdCIsInNlaVBheWxvYWQiLCJoYW5kbGVTZWlQYXlsb2FkIiwicHVibGlzaFNlaVBheWxvYWQiLCJVc2VyRGF0YVVucmVnaXN0ZXJlZCIsImhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZCIsInN1YmFycmF5IiwicGF5bG9hZERhdGEiLCJwdWJsaXNoUGF5bG9hZCIsInBheWxvYWQiLCJFbmRPZkNodW5rIiwibmFsVW5pdEhlYWRlckluZGV4IiwiZXh0cmFjdGVkRGF0YSIsIlNsaWNlTGF5ZXJOb25JZHJEYXRhIiwiU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyIiwiU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyIiwiU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyIiwiU2xpY2VMYXllcklkckRhdGEiLCJleHRyYWN0VmNsTmFsVW5pdCIsIlN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb24iLCJleHRyYWN0U2VpTmFsVW5pdCIsImV4dHJhY3ROb25WY2xOYWxVbml0IiwibmFsVW5pdERhdGEiLCJfc2VpUGF5bG9hZDRCeXRlRW5kQ29kZSIsIl9zZWlQYXlsb2FkM0J5dGVFbmRDb2RlIiwiZXh0cmFjdGVkU2VpUGF5bG9hZCIsImV4dHJhY3RTZWlQYXlsb2FkIiwicGF5bG9hZFR5cGUiLCJlbmRJbmRleCIsIm5leHRBbm5leEJTdGFydENvZGVJbmRleCIsImZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldCIsImZmQ291bnQiLCJwYXlsb2FkU2l6ZSIsImdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsImluZGV4NCIsImFubmV4QjRCeXRlU3RhcnRDb2RlIiwiYW5uZXhCM0J5dGVTdGFydENvZGUiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwibnVtYmVyT2ZOb25FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMiLCJsZWFkaW5nWmVyb0J5dGVzIiwibnVtYmVyT2ZCeXRlc1Zpc2l0ZWQiLCJudW1iZXJPZkJ5dGVzVG9TZWVrIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwib3V0cHV0Iiwib3V0T2Zmc2V0IiwiZWJzcE9mZnNldCIsInByZXZlbnRpb25CeXRlSWR4IiwiUGljU3RydWN0IiwiUGljdHVyZVRpbWluZ1BhcnNlciIsImNvbmZpZyIsImJpdHN0cmVhbVJlYWRlciIsInBpY3R1cmVUaW1pbmciLCJwaWNTdHJ1Y3QiLCJjcGJEcGJEZWxheXNQcmVzZW50RmxhZyIsImNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMSIsImRwYk91dHB1dERlbGF5TGVuZ3RoTWludXMxIiwicGljU3RydWN0UHJlc2VudEZsYWciLCJudW1DbG9ja1RTIiwiY29udmVydFBpY1N0cnVjdFRvTnVtQ2xvY2tUUyIsImNsb2NrVGltZXN0YW1wcyIsImNsb2NrVGltZXN0YW1wRmxhZyIsImNsb2NrVGltZXN0YW1wIiwiY3RUeXBlIiwibnVpdEZpZWxkQmFzZWRGbGFnIiwiY291bnRpbmdUeXBlIiwiZnVsbFRpbWVzdGFtcEZsYWciLCJkaXNjb250aW51aXR5RmxhZyIsImNudERyb3BwZWRGbGFnIiwibkZyYW1lcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJzZWNvbmRzRmxhZyIsIm1pbnV0ZXNGbGFnIiwiaG91cnNGbGFnIiwidGltZU9mZnNldCIsIlByb2dyZXNzaXZlRnJhbWUiLCJUb3BGaWVsZCIsIkJvdHRvbUZpZWxkIiwiVG9wRmllbGRCb3R0b21GaWVsZCIsIkJvdHRvbUZpZWxkVG9wRmllbGQiLCJGcmFtZURvdWJsaW5nIiwiVG9wRmllbGRCb3R0b21GaWVsZFRvcEZpZWxkUmVwZWF0ZWQiLCJCb3R0b21GaWVsZFRvcEZpZWxkQm90dG9tRmllbGRSZXBlYXRlZCIsIkZyYW1lVHJpcGxpbmciLCJQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSIsIm5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4IiwiX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoIiwibmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXgiLCJWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSIsIkV2ZW50UHVibGlzaGVyIiwiUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyIsIkgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciIsIkJpdHN0cmVhbURlY29kZXJzIiwiY3JlYXRlSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsImRlY29kZXJFdmVudFB1Ymxpc2hlciIsImJpdHN0cmVhbSIsInBhcnNlciIsImNyZWF0ZVBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsImVuY29kaW5nIiwiX2JpdHN0cmVhbSIsIl9wYXJzZXIiLCJkZWNvZGUiLCJlbmNvZGVkTWVkaWFTdHJlYW1DaHVuayIsIl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiX2VuY29kaW5nIiwic3Vic2NyaWJlVG9FbWJlZGRlZERhdGEiLCJvbkRlY29kZWRNZWRpYUNodW5rIiwidHJhY2tJZCIsImRlY29kZWRNZWRpYUNodW5rRXZlbnQiLCJub29wIiwiU2V0IiwiTWFwIiwiZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCIsIl9leHBlY3RlZFBheWxvYWRVdWlkIiwiX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQiLCJfcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCIsInN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cyIsInN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cyIsInN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cyIsIl9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kIiwiX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZCIsImNsZWFyIiwic3Vic2NyaWJlVG9FbmRPZkNodW5rRXZlbnRzIiwiYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQiLCJoYW5kbGVOYWxVbml0RXZlbnQiLCJfcmVmMyIsIl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgiLCJwdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkIiwiZXh0cmFjdFZjbEVtYmVkZGVkRGF0YSIsImRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kIiwiX3JlZjQiLCJsb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQiLCJjb250ZXh0SWQiLCJoYW5kbGVFbmRPZkVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwiX3JlZjUiLCJlbmRPZkNodW5rRXZlbnRIYW5kbGVyIiwiaGFuZGxlUGF5bG9hZEV2ZW50IiwiX3JlZjYiLCJoYXMiLCJsb2dXYXJuaW5nVW5leHBlY3RlZFBheWxvYWRVdWlkUmVjZWl2ZWRPbmNlIiwiRXZlbnRFbWl0dGVyIiwiZW1pdCIsImV2ZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImVyciIsImYiLCJvbkV2ZW50V2l0aE5vU3Vic2NyaWJlciIsIm9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlciIsIl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzIiwiZXZlbnRUeXBlIiwiZW1pdHRlciIsIl9ldmVudEVtaXR0ZXJzIiwiY3JlYXRlRW1pdHRlciIsImRpc3Bvc2FibGVMaXN0ZW5lciIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiRm9yY2UiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwicmVzb2x2ZUVuZFBvaW50UHJvbWlzZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJFbmRQb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsInJhY2UiLCJvayIsInRleHQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJidWlsZERpc2NvdmVyeVVybCIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImRpc2NvdmVyeVBhcmFtZXRlcnMiLCJzZWFyY2hQYXJhbXMiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIiLCJjaGFubmVsQ29udGV4dCIsImZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IiwiX2JpdHN0cmVhbURlY29kZXIiLCJfZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAiLCJfdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMiLCJzZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnMiLCJQaWN0dXJlVGltaW5nIiwib25QaWN0dXJlVGltaW5nRXh0cmFjdGVkIiwicHJvY2Vzc0ZyYW1lIiwibWlkIiwiZnJhbWUiLCJmcmFtZVRpbWluZyIsInJlY2VpdmVUaW1lc3RhbXAiLCJyZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSIsInJ0cFRpbWVzdGFtcCIsIl9waWN0dXJlVGltaW5nJHBpY1N0ciIsIl9waWN0dXJlVGltaW5nJHBpY1N0cjIiLCJfY2xvY2tUaW1lc3RhbXAkaG91cnMiLCJfY2xvY2tUaW1lc3RhbXAkbWludXQiLCJfY2xvY2tUaW1lc3RhbXAkc2Vjb24iLCJfcmVmJGNvbnRleHQiLCJfcGljdHVyZVRpbWluZ1BhcnNlciIsIl9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnIiwidGltZWNvZGUiLCJmcmFtZXMiLCJpc0ZyYW1lRHJvcCIsInNvdXJjZVRpbWVzdGFtcCIsImluZ2VzdFRpbWVzdGFtcCIsImVuY29kZVRpbWVzdGFtcCIsInRyYW5zY29kZVRpbWVzdGFtcCIsInBsYXliYWNrU3RhdGUiLCJfY3VycmVudFBsYXliYWNrU3RhdGUiLCJ2aWRlb0ZyYW1lQ2FsbGJhY2siLCJtZXRhZGF0YSIsImFybVZpZGVvRnJhbWVDYWxsYmFjayIsInRpbWVzdGFtcHNUb0RlbGV0ZSIsIl9zdGVwJHZhbHVlIiwiX3NsaWNlZFRvQXJyYXkiLCJfb2JqZWN0U3ByZWFkIiwicmVuZGVyVGltZXN0YW1wIiwicGVyZm9ybWFuY2UiLCJ0aW1lT3JpZ2luIiwiX2kiLCJfdGltZXN0YW1wc1RvRGVsZXRlIiwiZWxlbWVudHNUb0RlbGV0ZSIsInNpemUiLCJNQVhfRlJBTUVfVElNSU5HX0VOVFJJRVMiLCJpdGVyYXRvciIsImtleXMiLCJrZXlUb0RlbGV0ZSIsIm9uUGxheWluZyIsIm9uUGF1c2UiLCJvblN0YWxsZWQiLCJvbldhaXRpbmciLCJvbkVuZGVkIiwib25FcnJvciIsIl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkIiwiX3RoaXMyJF9jaGFubmVsQ29udGV4IiwiY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrIiwiX3RoaXMkX2NoYW5uZWxDb250ZXh0IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCIsImRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQiLCJSZWFsVGltZVN0cmVhbSIsInBlZXJDb25uZWN0aW9uQ29udGV4dCIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJyZXF1aXJlc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImFsbCIsIl9yZWYzJCIsImNsaWVudE9mZmVyRGlzYWJsZWQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsInJldHJ5Q2FsbGJhY2siLCJuYXZpZ2F0b3JJc09uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwib25UcmFja0Rpc2FibGVkIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsIl9wZWVyQ29ubmVjdGlvbiRjdXJyZSIsIl90aGlzJF9jaGFubmVsQ29udGV4dDIiLCJwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiIsInJlY2VpdmVycyIsIl9JbnNlcnRhYmxlU3RyZWFtcyRjbyIsImNvbmZpZ3VyZUVuY29kZWRTdHJlYW1QaXBlbGluZSIsImVuY29kZWRWaWRlb0ZyYW1lIiwicmVxdWlyZXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwidG9VcHBlckNhc2UiLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlciIsImdldFZpZGVvVHJhY2tzIiwiX3BlZXJDb25uZWN0aW9uJGdldFRyIiwicmVjZWl2ZXIiLCJzdXBwb3J0c0dldFRyYW5zY2VpdmVycyIsInRyYW5zY2VpdmVyIiwiX0luc2VydGFibGVTdHJlYW1zJGNvMiIsImNvbmZpZ3VyZUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbiIsInRyYW5zZm9ybWVkU3RyZWFtIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbiIsInJ0Y1N0YXRpc3RpYyIsInN0YXRpc3RpY3MiLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUyIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJ0b2tlbkNhcGFiaWxpdGllcyIsIm1vZGUiLCJTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiU2tpcEZyYW1lIiwiV29ya2VyVHJhbnNmb3JtU3RyZWFtIiwiZW5jb2RlZEF1ZGlvRnJhbWUiLCJyZWNlaXZlIiwibXVzdFNpbmsiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImZvcmNlSW52YWxpZEZyYW1lIiwidHJhbnNmb3JtIiwidGVybWluYXRlIiwiZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiY29udHJvbGxlciIsInN1cnJvZ2F0ZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSIsImdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMiLCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjIiwiZW5xdWV1ZSIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicmVjZWl2ZXJTdHJlYW1zIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwiU3ltYm9sIiwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyIsIk9QVVMiLCJfc2luZ2xlWmVyb0J5dGUiLCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCIsIl9kdW1teTgyeDgySDI2NCIsIklGcmFtZSIsIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMiLCJIMjY0IiwiVlA4IiwiVlA5IiwiX2lzQW5kcm9pZENocm9tZSIsImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIiLCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjIiwic2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciIsImJpdE1hc2sxIiwiYml0TWFzazIiLCJiaXRTaGlmdFJpZ2h0QnkxIiwiYml0U2hpZnRMZWZ0Qnk3IiwiYnl0ZTEiLCJieXRlMiIsImNvcHlPZkR1bW15UEZyYW1lcyIsIlBGcmFtZSIsImJ1ZmZlckluZGV4IiwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCIsIl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiaXNBbmRyb2lkIiwiX2lzTW9iaWxlQ2hyb21lIiwiX2lzU2FmYXJpIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJUZWxlbWV0cnlTZXJ2aWNlIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZU9mIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldEl0ZW1TaXplIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm1pbGxpc2Vjb25kcyIsInBhcnRzIiwiU3RyaW5nIiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWF4Iiwib3RoZXIiLCJhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9uZXR3b3JrTW9uaXRvciIsImlzRm9yZWdyb3VuZCIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0cmVhbUlkIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiZW5kIiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJzb3VyY2VSb290IjoiIn0=