easy-richtextarea 4.0.19 → 4.0.21

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.
@@ -16,8 +16,9 @@ var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete")
16
16
  var _content = /*#__PURE__*/ _interopRequireDefault(require("./transform/content"));
17
17
  var _selection1 = /*#__PURE__*/ _interopRequireDefault(require("./transform/selection"));
18
18
  var _generate = /*#__PURE__*/ _interopRequireDefault(require("./operations/generate"));
19
- var _keyCodes = require("./keyCodes");
20
19
  var _constants = require("./constants");
20
+ var _keyCodes = require("./keyCodes");
21
+ var _eventTypes = require("./eventTypes");
21
22
  function _arrayLikeToArray(arr, len) {
22
23
  if (len == null || len > arr.length) len = arr.length;
23
24
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -203,7 +204,6 @@ function _createSuper(Derived) {
203
204
  return _possibleConstructorReturn(this, result);
204
205
  };
205
206
  }
206
- var CUT_EVENT_TYPE = _easy.eventTypes.CUT_EVENT_TYPE, COPY_EVENT_TYPE = _easy.eventTypes.COPY_EVENT_TYPE, BLUR_EVENT_TYPE = _easy.eventTypes.BLUR_EVENT_TYPE, PASTE_EVENT_TYPE = _easy.eventTypes.PASTE_EVENT_TYPE, INPUT_EVENT_TYPE = _easy.eventTypes.INPUT_EVENT_TYPE, FOCUS_EVENT_TYPE = _easy.eventTypes.FOCUS_EVENT_TYPE, CHANGE_EVENT_TYPE = _easy.eventTypes.CHANGE_EVENT_TYPE, SCROLL_EVENT_TYPE = _easy.eventTypes.SCROLL_EVENT_TYPE, KEYDOWN_EVENT_TYPE = _easy.eventTypes.KEYDOWN_EVENT_TYPE, CONTEXTMENU_EVENT_TYPE = _easy.eventTypes.CONTEXTMENU_EVENT_TYPE, SELECTIONCHANGE_EVENT_TYPE = _easy.eventTypes.SELECTIONCHANGE_EVENT_TYPE;
207
207
  var RichTextarea = /*#__PURE__*/ function(Element) {
208
208
  _inherits(RichTextarea, Element);
209
209
  var _super = _createSuper(RichTextarea);
@@ -212,7 +212,7 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
212
212
  var _this;
213
213
  _this = _super.call(this, selector);
214
214
  _defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element) {
215
- var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
215
+ var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _eventTypes.CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
216
216
  if (_this.readOnly) {
217
217
  var content = _this.previousContent; ///
218
218
  _this.setContent(content);
@@ -250,24 +250,32 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
250
250
  return;
251
251
  }
252
252
  }
253
+ if (keyCode === _keyCodes.F_KEY_CODE) {
254
+ var ctrlKey1 = event.ctrlKey, metaKey1 = event.metaKey;
255
+ if (ctrlKey1 || metaKey1) {
256
+ _this.find(event, element);
257
+ event.preventDefault();
258
+ return;
259
+ }
260
+ }
253
261
  defer(function() {
254
262
  _this.intermediateHandler(event, element);
255
263
  });
256
264
  });
257
265
  _defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
258
- var eventType = SCROLL_EVENT_TYPE;
266
+ var eventType = _eventTypes.SCROLL_EVENT_TYPE;
259
267
  _this.callHandlers(eventType, event, element);
260
268
  });
261
269
  _defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
262
270
  _this.focused = true;
263
271
  defer(function() {
264
- var undoable = true, eventType = FOCUS_EVENT_TYPE, selectionChanged = true;
272
+ var undoable = true, eventType = _eventTypes.FOCUS_EVENT_TYPE, selectionChanged = true;
265
273
  _this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
266
274
  });
267
275
  });
268
276
  _defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
269
277
  _this.focused = false;
270
- var undoable = true, eventType = BLUR_EVENT_TYPE, selectionChanged = true;
278
+ var undoable = true, eventType = _eventTypes.BLUR_EVENT_TYPE, selectionChanged = true;
271
279
  _this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
272
280
  });
273
281
  _defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
@@ -437,11 +445,19 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
437
445
  }
438
446
  }
439
447
  },
448
+ {
449
+ key: "find",
450
+ value: function find(event, element) {
451
+ var eventType = _eventTypes.FIND_EVENT_TYPE;
452
+ this.callHandlers(eventType, event, element);
453
+ }
454
+ },
440
455
  {
441
456
  key: "undo",
442
457
  value: function undo(event, element) {
443
- var operation = this.undoBuffer.undo();
444
- if (operation !== null) {
458
+ var undoOperation = this.undoBuffer.undo();
459
+ if (undoOperation !== null) {
460
+ var operation = undoOperation; ///
445
461
  this.revert(event, element, operation);
446
462
  }
447
463
  }
@@ -449,8 +465,9 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
449
465
  {
450
466
  key: "redo",
451
467
  value: function redo(event, element) {
452
- var operation = this.undoBuffer.redo();
453
- if (operation !== null) {
468
+ var redoOperation = this.undoBuffer.redo();
469
+ if (redoOperation !== null) {
470
+ var operation = redoOperation; ///
454
471
  this.revert(event, element, operation);
455
472
  }
456
473
  }
@@ -475,7 +492,7 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
475
492
  this.setContent(content, setPreviousContent);
476
493
  this.setSelection(selection, setPreviousSelection);
477
494
  this.undoBuffer.transform(operations);
478
- var event = null, element = this, undoable = false, eventType = CHANGE_EVENT_TYPE;
495
+ var event = null, element = this, undoable = false, eventType = _eventTypes.CHANGE_EVENT_TYPE;
479
496
  this.intermediateHandler(event, element, undoable, eventType);
480
497
  }
481
498
  },
@@ -517,112 +534,128 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
517
534
  {
518
535
  key: "activate",
519
536
  value: function activate() {
520
- this.on(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
521
- this.on(INPUT_EVENT_TYPE, this.inputHandler, this);
522
- this.on(SCROLL_EVENT_TYPE, this.scrollHandler, this);
523
- this.on(FOCUS_EVENT_TYPE, this.focusHandler, this);
524
- this.on(BLUR_EVENT_TYPE, this.blurHandler, this);
537
+ this.on(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
538
+ this.on(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler, this);
539
+ this.on(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler, this);
540
+ this.on(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler, this);
541
+ this.on(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler, this);
525
542
  this.addClass("active");
526
543
  }
527
544
  },
528
545
  {
529
546
  key: "deactivate",
530
547
  value: function deactivate() {
531
- this.off(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
532
- this.off(INPUT_EVENT_TYPE, this.inputHandler, this);
533
- this.off(SCROLL_EVENT_TYPE, this.scrollHandler, this);
534
- this.off(FOCUS_EVENT_TYPE, this.focusHandler, this);
535
- this.off(BLUR_EVENT_TYPE, this.blurHandler, this);
548
+ this.off(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
549
+ this.off(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler, this);
550
+ this.off(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler, this);
551
+ this.off(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler, this);
552
+ this.off(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler, this);
536
553
  this.removeClass("active");
537
554
  }
538
555
  },
556
+ {
557
+ key: "onFind",
558
+ value: function onFind(findHandler, element) {
559
+ var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
560
+ this.addEventListener(eventType, handler, element);
561
+ }
562
+ },
563
+ {
564
+ key: "offFind",
565
+ value: function offFind(findHandler, element) {
566
+ var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
567
+ this.removeEventListener(eventType, handler, element);
568
+ }
569
+ },
539
570
  {
540
571
  key: "onBlur",
541
572
  value: function onBlur(blurHandler, element) {
542
- var eventType = BLUR_EVENT_TYPE, handler = blurHandler; ///
573
+ var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
543
574
  this.addEventListener(eventType, handler, element);
544
575
  }
545
576
  },
546
577
  {
547
578
  key: "offBlur",
548
579
  value: function offBlur(blurHandler, element) {
549
- var eventType = BLUR_EVENT_TYPE, handler = blurHandler; ///
580
+ var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
550
581
  this.removeEventListener(eventType, handler, element);
551
582
  }
552
583
  },
553
584
  {
554
585
  key: "onFocus",
555
586
  value: function onFocus(blurHandler, element) {
556
- var eventType = FOCUS_EVENT_TYPE, handler = blurHandler; ///
587
+ var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
557
588
  this.addEventListener(eventType, handler, element);
558
589
  }
559
590
  },
560
591
  {
561
592
  key: "offFocus",
562
593
  value: function offFocus(blurHandler, element) {
563
- var eventType = FOCUS_EVENT_TYPE, handler = blurHandler; ///
594
+ var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
564
595
  this.removeEventListener(eventType, handler, element);
565
596
  }
566
597
  },
567
598
  {
568
599
  key: "onScroll",
569
600
  value: function onScroll(scrollHandler, element) {
570
- var eventType = SCROLL_EVENT_TYPE, handler = scrollHandler; ///
601
+ var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
571
602
  this.addEventListener(eventType, handler, element);
572
603
  }
573
604
  },
574
605
  {
575
606
  key: "offScroll",
576
607
  value: function offScroll(scrollHandler, element) {
577
- var eventType = SCROLL_EVENT_TYPE, handler = scrollHandler; ///
608
+ var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
578
609
  this.removeEventListener(eventType, handler, element);
579
610
  }
580
611
  },
581
612
  {
582
613
  key: "onChange",
583
614
  value: function onChange(changeHandler, element) {
584
- var eventType = CHANGE_EVENT_TYPE, handler = changeHandler; ///
615
+ var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
585
616
  this.addEventListener(eventType, handler, element);
586
617
  }
587
618
  },
588
619
  {
589
620
  key: "offChange",
590
621
  value: function offChange(changeHandler, element) {
591
- var eventType = CHANGE_EVENT_TYPE, handler = changeHandler; ///
622
+ var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
592
623
  this.removeEventListener(eventType, handler, element);
593
624
  }
594
625
  },
595
626
  {
596
627
  key: "didMount",
597
628
  value: function didMount() {
598
- var _this_properties = this.properties, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, onFocus = _this_properties.onFocus, onBlur = _this_properties.onBlur, changeHandler = onChange, scrollHandler = onScroll, focusHandler = onFocus, blurHandler = onBlur; ///
629
+ var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, changeHandler = onChange, scrollHandler = onScroll; ///
599
630
  var content = this.getContent(), selection = this.getSelection();
600
631
  this.previousContent = content; ///
601
632
  this.previousSelection = selection; ///
633
+ findHandler && this.onFind(findHandler, this);
634
+ blurHandler && this.onBlur(blurHandler, this);
635
+ focusHandler && this.onFocus(focusHandler, this);
602
636
  changeHandler && this.onChange(changeHandler, this);
603
637
  scrollHandler && this.onScroll(scrollHandler, this);
604
- focusHandler && this.onFocus(focusHandler, this);
605
- blurHandler && this.onBlur(blurHandler, this);
606
- this.on(CUT_EVENT_TYPE, this.cutHandler);
607
- this.on(COPY_EVENT_TYPE, this.copyHandler);
608
- this.on(PASTE_EVENT_TYPE, this.pasteHandler);
609
- this.on(CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
610
- _easy.document.on(SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
638
+ this.on(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
639
+ this.on(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
640
+ this.on(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
641
+ this.on(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
642
+ _easy.document.on(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
611
643
  }
612
644
  },
613
645
  {
614
646
  key: "willUnmount",
615
647
  value: function willUnmount() {
616
- var _this_properties = this.properties, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, onFocus = _this_properties.onFocus, onBlur = _this_properties.onBlur, changeHandler = onChange, scrollHandler = onScroll, focusHandler = onFocus, blurHandler = onBlur; ///
648
+ var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, changeHandler = onChange, scrollHandler = onScroll; ///
649
+ findHandler && this.offFind(findHandler, this);
650
+ blurHandler && this.offBlur(blurHandler, this);
651
+ focusHandler && this.offFocus(focusHandler, this);
617
652
  changeHandler && this.offChange(changeHandler, this);
618
653
  scrollHandler && this.offScroll(scrollHandler, this);
619
- focusHandler && this.offFocus(focusHandler, this);
620
- blurHandler && this.offBlur(blurHandler, this);
621
- this.off(CUT_EVENT_TYPE, this.cutHandler);
622
- this.off(COPY_EVENT_TYPE, this.copyHandler);
623
- this.off(PASTE_EVENT_TYPE, this.pasteHandler);
624
- this.off(CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
625
- _easy.document.off(SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
654
+ this.off(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
655
+ this.off(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
656
+ this.off(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
657
+ this.off(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
658
+ _easy.document.off(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
626
659
  var active = this.isActive();
627
660
  if (active) {
628
661
  this.deactivate();
@@ -654,10 +687,11 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
654
687
  }(_wrapNativeSuper(_easy.Element));
655
688
  _defineProperty(RichTextarea, "tagName", "textarea");
656
689
  _defineProperty(RichTextarea, "ignoredProperties", [
657
- "onChange",
658
- "onScroll",
690
+ "onFind",
691
+ "onBlur",
659
692
  "onFocus",
660
- "onBlur"
693
+ "onChange",
694
+ "onScroll"
661
695
  ]);
662
696
  _defineProperty(RichTextarea, "defaultProperties", {
663
697
  className: "rich"
@@ -666,4 +700,4 @@ function defer(func) {
666
700
  setTimeout(func, 0);
667
701
  }
668
702
 
669
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgVEVYVCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5jb25zdCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgUEFTVEVfRVZFTlRfVFlQRSxcclxuICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSA9IGV2ZW50VHlwZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IFpfS0VZX0NPREUpIHtcclxuICAgICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgIGlmIChjdHJsS2V5IHx8IG1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgc2hpZnRLZXkgP1xyXG4gICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmx1ckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwYXN0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsgY2xpcGJvYXJkRGF0YSB9ID0gZXZlbnQsXHJcbiAgICAgICAgICB0ZXh0RGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShURVhUKTtcclxuXHJcbiAgICBpZiAodGV4dERhdGEgPT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoIXNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGV4dERhdGEsIC8vL1xyXG4gICAgICAgICAgaW5zZXJ0T3BlcmF0aW9uID0gSW5zZXJ0T3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBpbnNlcnRPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0ZWRDb250ZW50ID0gY29udGVudC5zbGljZShzdGFydCwgZW5kKTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgaGFzQ29udGVudENoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50UHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgPT09IHRoaXMucHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gIWNvbnRlbnRQcmV2aW91c0NvbnRlbnQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0VxdWFsVG8odGhpcy5wcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gIXNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNDb250ZW50KSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gY29udGVudDsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgZG9tRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5kbyhldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnVuZG8oKTtcclxuXHJcbiAgICBpZiAob3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkbyhldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnJlZG8oKTtcclxuXHJcbiAgICBpZiAob3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbU9wZXJhdGlvbihvcGVyYXRpb24pLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0ob3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucyksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24sIG9wZXJhdGlvbnMpO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy51bmRvQnVmZmVyLnRyYW5zZm9ybShvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBldmVudCA9IG51bGwsXHJcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcyxcclxuICAgICAgICAgIHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBsZXQgeyBlbGVtZW50IH0gPSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgICAgY29uc3QgeyBoYW5kbGVyIH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uQ2hhbmdlLCBvblNjcm9sbCwgb25Gb2N1cywgb25CbHVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub25TY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub25Gb2N1cyhmb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vbihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKENPUFlfRVZFTlRfVFlQRSwgdGhpcy5jb3B5SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoUEFTVEVfRVZFTlRfVFlQRSwgdGhpcy5wYXN0ZUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vZmYoU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHRoaXMuc2VsZWN0Q2hhbmdlSGFuZGxlcik7XHJcblxyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG5cclxuICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZm9jdXNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIHVuZG9CdWZmZXIgPSBVbmRvQnVmZmVyLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBudWxsLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBudWxsLFxyXG4gICAgICAgICAgcmljaFRleHRhcmVhID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIGZvY3VzZWQsIHJlYWRPbmx5LCB1bmRvQnVmZmVyLCBwcmV2aW91c0NvbnRlbnQsIHByZXZpb3VzU2VsZWN0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xyXG5cclxuICAgIHJldHVybiByaWNoVGV4dGFyZWE7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZlcihmdW5jKSB7XHJcbiAgc2V0VGltZW91dChmdW5jLCAwKTtcclxufVxyXG4iXSwibmFtZXMiOlsiUmljaFRleHRhcmVhIiwiQ1VUX0VWRU5UX1RZUEUiLCJldmVudFR5cGVzIiwiQ09QWV9FVkVOVF9UWVBFIiwiQkxVUl9FVkVOVF9UWVBFIiwiUEFTVEVfRVZFTlRfVFlQRSIsIklOUFVUX0VWRU5UX1RZUEUiLCJGT0NVU19FVkVOVF9UWVBFIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJTQ1JPTExfRVZFTlRfVFlQRSIsIktFWURPV05fRVZFTlRfVFlQRSIsIkNPTlRFWFRNRU5VX0VWRU5UX1RZUEUiLCJTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSIsInNlbGVjdG9yIiwiZm9jdXNlZCIsInJlYWRPbmx5IiwidW5kb0J1ZmZlciIsInByZXZpb3VzQ29udGVudCIsInByZXZpb3VzU2VsZWN0aW9uIiwiaW50ZXJtZWRpYXRlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsInVuZG9hYmxlIiwiZXZlbnRUeXBlIiwic2VsZWN0aW9uQ2hhbmdlZCIsImhhc1NlbGVjdGlvbkNoYW5nZWQiLCJjb250ZW50Iiwic2V0Q29udGVudCIsImdldENvbnRlbnQiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwiY2hhbmdlZCIsImNhbGxIYW5kbGVycyIsIm9wZXJhdGlvbnMiLCJnZW5lcmF0ZU9wZXJhdGlvbnMiLCJhZGRPcGVyYXRpb25zIiwic2VsZWN0Q2hhbmdlSGFuZGxlciIsImNvbnRleHRtZW51SGFuZGxlciIsInByZXZlbnREZWZhdWx0Iiwia2V5RG93bkhhbmRsZXIiLCJrZXlDb2RlIiwiWl9LRVlfQ09ERSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJyZWRvIiwidW5kbyIsImRlZmVyIiwic2Nyb2xsSGFuZGxlciIsImZvY3VzSGFuZGxlciIsImJsdXJIYW5kbGVyIiwiaW5wdXRIYW5kbGVyIiwicGFzdGVIYW5kbGVyIiwiY2xpcGJvYXJkRGF0YSIsInRleHREYXRhIiwiZ2V0RGF0YSIsIlRFWFQiLCJFTVBUWV9TVFJJTkciLCJzZWxlY3Rpb25FbXB0eSIsImlzRW1wdHkiLCJkZWxldGVPcGVyYXRpb24iLCJEZWxldGVPcGVyYXRpb24iLCJmcm9tQ29udGVudEFuZFNlbGVjdGlvbiIsIm9wZXJhdGlvbiIsImFwcGx5T3BlcmF0aW9uIiwiaW5zZXJ0T3BlcmF0aW9uIiwiSW5zZXJ0T3BlcmF0aW9uIiwiY29weUhhbmRsZXIiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJjdXRIYW5kbGVyIiwiaXNGb2N1c2VkIiwiaXNSZWFkT25seSIsImdldFVuZG9CdWZmZXIiLCJnZXRQcmV2aW91c0NvbnRlbnQiLCJwcmV2b3VzQ29udGVudCIsImdldFByZXZpb3VzU2VsZWN0aW9uIiwic2V0Rm9jdXNlZCIsInNldFJlYWRPbmx5Iiwic2V0UHJldmlvdXNDb250ZW50Iiwic2V0UHJldmlvdXNTZWxlY3Rpb24iLCJpc0FjdGl2ZSIsImFjdGl2ZSIsImhhc0NsYXNzIiwiZG9tRWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJ2YWx1ZSIsIlNlbGVjdGlvbiIsImZyb21ET01FbGVtZW50IiwiZW5kUG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iLCJnZXRTdGFydFBvc2l0aW9uIiwic3RhcnQiLCJlbmQiLCJzbGljZSIsImNvbnRlbnRQcmV2aW91c0NvbnRlbnQiLCJzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiIsImlzRXF1YWxUbyIsIk9iamVjdCIsImFzc2lnbiIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJyZXZlcnQiLCJmcm9tT3BlcmF0aW9uIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtQ29udGVudCIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwidHJhbnNmb3JtU2VsZWN0aW9uIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJoYW5kbGVyRWxlbWVudCIsImNhbGwiLCJhY3RpdmF0ZSIsIm9uIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkJsdXIiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmQmx1ciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkZvY3VzIiwib2ZmRm9jdXMiLCJvblNjcm9sbCIsIm9mZlNjcm9sbCIsIm9uQ2hhbmdlIiwiY2hhbmdlSGFuZGxlciIsIm9mZkNoYW5nZSIsImRpZE1vdW50IiwicHJvcGVydGllcyIsImRvY3VtZW50Iiwid2lsbFVubW91bnQiLCJmcm9tQ2xhc3MiLCJDbGFzcyIsIkVsZW1lbnQiLCJVbmRvQnVmZmVyIiwiZnJvbU5vdGhpbmciLCJyaWNoVGV4dGFyZWEiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZh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
703
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBURVhULCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRl9LRVlfQ09ERSwgWl9LRVlfQ09ERSB9IGZyb20gXCIuL2tleUNvZGVzXCI7XHJcbmltcG9ydCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT1BZX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBQQVNURV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEtFWURPV05fRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IFpfS0VZX0NPREUpIHtcclxuICAgICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgIGlmIChjdHJsS2V5IHx8IG1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgc2hpZnRLZXkgP1xyXG4gICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZXlDb2RlID09PSBGX0tFWV9DT0RFKSB7XHJcbiAgICAgIGNvbnN0IHsgY3RybEtleSwgbWV0YUtleSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgICBpZiAoY3RybEtleSB8fCBtZXRhS2V5KSB7XHJcbiAgICAgICAgdGhpcy5maW5kKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUsIHNlbGVjdGlvbkNoYW5nZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBibHVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdW5kb2FibGUgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICB9XHJcblxyXG4gIGlucHV0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHBhc3RlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgeyBjbGlwYm9hcmREYXRhIH0gPSBldmVudCxcclxuICAgICAgICAgIHRleHREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFRFWFQpO1xyXG5cclxuICAgIGlmICh0ZXh0RGF0YSA9PT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gZGVsZXRlT3BlcmF0aW9uO1xyXG5cclxuICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXh0RGF0YSwgLy8vXHJcbiAgICAgICAgICBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgIG9wZXJhdGlvbiA9IGluc2VydE9wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBjb3B5SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZW50KCk7XHJcblxyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2VsZWN0ZWRDb250ZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY3V0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb250ZW50KCk7XHJcblxyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2VsZWN0ZWRDb250ZW50KTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHZhbHVlIH0gPSBkb21FbGVtZW50LFxyXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBzZWxlY3RlZENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnRQcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCA9PT0gdGhpcy5wcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSAhY29udGVudFByZXZpb3VzQ29udGVudDtcclxuXHJcbiAgICByZXR1cm4gY29udGVudENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb25DaGFuZ2VkKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRXF1YWxUbyh0aGlzLnByZXZpb3VzU2VsZWN0aW9uKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSAhc2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQgPSB0cnVlKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgdmFsdWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c0NvbnRlbnQpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBkb21FbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICB1bmRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCB1bmRvT3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnVuZG8oKTtcclxuXHJcbiAgICBpZiAodW5kb09wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB1bmRvT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnJldmVydChldmVudCwgZWxlbWVudCwgb3BlcmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZG8oZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHJlZG9PcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIucmVkbygpO1xyXG5cclxuICAgIGlmIChyZWRvT3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHJlZG9PcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbU9wZXJhdGlvbihvcGVyYXRpb24pLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0ob3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucyksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24sIG9wZXJhdGlvbnMpO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy51bmRvQnVmZmVyLnRyYW5zZm9ybShvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBldmVudCA9IG51bGwsXHJcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcyxcclxuICAgICAgICAgIHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBsZXQgeyBlbGVtZW50IH0gPSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgICAgY29uc3QgeyBoYW5kbGVyIH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25GaW5kKGZpbmRIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gZmluZEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZpbmQoZmluZEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBmaW5kSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uRmluZCwgb25CbHVyLCBvbkZvY3VzLCBvbkNoYW5nZSwgb25TY3JvbGwgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbDsgLy8vXHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgZmluZEhhbmRsZXIgJiYgdGhpcy5vbkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vbihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25DaGFuZ2UsIG9uU2Nyb2xsIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXIsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsOyAvLy9cclxuXHJcbiAgICBmaW5kSGFuZGxlciAmJiB0aGlzLm9mZkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uRmluZFwiLFxyXG4gICAgXCJvbkJsdXJcIixcclxuICAgIFwib25Gb2N1c1wiLFxyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG5cclxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcclxuICAgIGNvbnN0IGZvY3VzZWQgPSBmYWxzZSxcclxuICAgICAgICAgIHJlYWRPbmx5ID0gZmFsc2UsXHJcbiAgICAgICAgICB1bmRvQnVmZmVyID0gVW5kb0J1ZmZlci5mcm9tTm90aGluZygpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbCxcclxuICAgICAgICAgIHJpY2hUZXh0YXJlYSA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBmb2N1c2VkLCByZWFkT25seSwgdW5kb0J1ZmZlciwgcHJldmlvdXNDb250ZW50LCBwcmV2aW91c1NlbGVjdGlvbiwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcclxuXHJcbiAgICByZXR1cm4gcmljaFRleHRhcmVhO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmZXIoZnVuYykge1xyXG4gIHNldFRpbWVvdXQoZnVuYywgMCk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsInNlbGVjdG9yIiwiZm9jdXNlZCIsInJlYWRPbmx5IiwidW5kb0J1ZmZlciIsInByZXZpb3VzQ29udGVudCIsInByZXZpb3VzU2VsZWN0aW9uIiwiaW50ZXJtZWRpYXRlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsInVuZG9hYmxlIiwiZXZlbnRUeXBlIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnRlbnQiLCJzZXRDb250ZW50IiwiZ2V0Q29udGVudCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJjaGFuZ2VkIiwiY2FsbEhhbmRsZXJzIiwib3BlcmF0aW9ucyIsImdlbmVyYXRlT3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiY29udGV4dG1lbnVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJrZXlEb3duSGFuZGxlciIsImtleUNvZGUiLCJaX0tFWV9DT0RFIiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSIsInJlZG8iLCJ1bmRvIiwiRl9LRVlfQ09ERSIsImZpbmQiLCJkZWZlciIsInNjcm9sbEhhbmRsZXIiLCJTQ1JPTExfRVZFTlRfVFlQRSIsImZvY3VzSGFuZGxlciIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJibHVySGFuZGxlciIsIkJMVVJfRVZFTlRfVFlQRSIsImlucHV0SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwic2VsZWN0aW9uRW1wdHkiLCJpc0VtcHR5IiwiZGVsZXRlT3BlcmF0aW9uIiwiRGVsZXRlT3BlcmF0aW9uIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJvcGVyYXRpb24iLCJhcHBseU9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsImNvcHlIYW5kbGVyIiwic2VsZWN0ZWRDb250ZW50IiwiZ2V0U2VsZWN0ZWRDb250ZW50IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiY3V0SGFuZGxlciIsImlzRm9jdXNlZCIsImlzUmVhZE9ubHkiLCJnZXRVbmRvQnVmZmVyIiwiZ2V0UHJldmlvdXNDb250ZW50IiwicHJldm91c0NvbnRlbnQiLCJnZXRQcmV2aW91c1NlbGVjdGlvbiIsInNldEZvY3VzZWQiLCJzZXRSZWFkT25seSIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsImVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJjb250ZW50UHJldmlvdXNDb250ZW50Iiwic2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb24iLCJpc0VxdWFsVG8iLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInNldFNlbGVjdGlvblJhbmdlIiwiRklORF9FVkVOVF9UWVBFIiwidW5kb09wZXJhdGlvbiIsInJldmVydCIsInJlZG9PcGVyYXRpb24iLCJmcm9tT3BlcmF0aW9uIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtQ29udGVudCIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwidHJhbnNmb3JtU2VsZWN0aW9uIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJoYW5kbGVyRWxlbWVudCIsImNhbGwiLCJhY3RpdmF0ZSIsIm9uIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiSU5QVVRfRVZFTlRfVFlQRSIsImFkZENsYXNzIiwiZGVhY3RpdmF0ZSIsIm9mZiIsInJlbW92ZUNsYXNzIiwib25GaW5kIiwiZmluZEhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmRmluZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkJsdXIiLCJvZmZCbHVyIiwib25Gb2N1cyIsIm9mZkZvY3VzIiwib25TY3JvbGwiLCJvZmZTY3JvbGwiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvZmZDaGFuZ2UiLCJkaWRNb3VudCIsInByb3BlcnRpZXMiLCJDVVRfRVZFTlRfVFlQRSIsIkNPUFlfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiZG9jdW1lbnQiLCJTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSIsIndpbGxVbm1vdW50IiwiZnJvbUNsYXNzIiwiQ2xhc3MiLCJFbGVtZW50IiwiVW5kb0J1ZmZlciIsImZyb21Ob3RoaW5nIiwicmljaFRleHRhcmVhIiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJmdW5jIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUEyQnFCQTs7O29CQXpCYTs4REFFWjsrREFDQzsyREFDSzsyREFDQTs0REFDQzsrREFDRTs2REFDQTt5QkFFSTt3QkFDSTswQkFZSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLElBQUEsQUFBTUEsNkJBcWxCcEIsQUFybEJjO2NBQU1BOzhCQUFBQTthQUFBQSxhQUNQQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLGVBQWUsRUFBRUMsaUJBQWlCOzhCQURwRU47O2tDQUVYQztRQTZDUk0sK0NBQUFBLHVCQUFzQixTQUFDQyxPQUFPQyxTQUEyRztnQkFBbEdDLDRFQUFXLElBQUksRUFBRUMs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