@sapui5/sap.fe.controls 1.142.7 → 1.142.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.controls",
3
- "version": "1.142.7",
3
+ "version": "1.142.9",
4
4
  "description": "SAPUI5 Library sap.fe.controls",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2024 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.142.7</version>
9
+ <version>1.142.9</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.controls</documentation>
12
12
 
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./AINotice", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, ClassSupport, jsx, Token, Button, FlexBox, Popover, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, MessageType, FilterOperator, FESRHelper, $AINotice, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleMessage", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./AINotice", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, ClassSupport, jsx, Token, Button, FlexBox, Popover, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, InvisibleMessage, MessageType, FilterOperator, FESRHelper, $AINotice, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;
@@ -30,6 +30,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
30
30
  var bindState = BindingToolkit.bindState;
31
31
  var and = BindingToolkit.and;
32
32
  var ValueState = coreLibrary.ValueState;
33
+ var InvisibleMessageMode = coreLibrary.InvisibleMessageMode;
33
34
  var TokenizerRenderMode = library.TokenizerRenderMode;
34
35
  var PlacementType = library.PlacementType;
35
36
  var FlexWrap = library.FlexWrap;
@@ -90,10 +91,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
90
91
  _initializerDefineProperty(_this, "afterQueryProcessing", _descriptor15, _this);
91
92
  _initializerDefineProperty(_this, "state", _descriptor16, _this);
92
93
  _this.shouldTokenChangeEventFired = true;
94
+ _this.isResettingToDefaultTokens = false;
93
95
  _this.inputFieldReady = new Promise(resolve => {
94
96
  _this.resolveContentReady = resolve;
95
97
  });
96
98
  _this.initialize();
99
+ _this.invisibleMessage = InvisibleMessage.getInstance();
97
100
  return _this;
98
101
  }
99
102
  _exports = EasyFilterBarContainer;
@@ -240,6 +243,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
240
243
  // error
241
244
  this.removeNonMandatoryTokens();
242
245
  this.setMessageStrip(easyFilterResult.message);
246
+ this.invisibleMessage.announce(this.resourceBundle.getText(easyFilterResult.message), InvisibleMessageMode.Assertive);
243
247
  this.state.messageStripType = MessageType.Warning;
244
248
  Log.error("Error while generating filter criteria: ", easyFilterResult.message);
245
249
  }
@@ -414,7 +418,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
414
418
  if (changedProps.includes("tokens")) {
415
419
  if (this.shouldTokenChangeEventFired) {
416
420
  this.fireEvent("tokensChanged", {
417
- tokens: this.formatTokens(this.state.tokens)
421
+ tokens: this.formatTokens(this.state.tokens),
422
+ reset: this.isResettingToDefaultTokens
418
423
  });
419
424
  }
420
425
  this.state.showResult = this.state.tokens.length > 0;
@@ -425,6 +430,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
425
430
  //Resetting to default values
426
431
  this.isMandatoryCheckRequired = false;
427
432
  this.shouldTokenChangeEventFired = true;
433
+ this.isResettingToDefaultTokens = false;
428
434
 
429
435
  // onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
430
436
  // In this process there are multiple popover issues happening
@@ -571,7 +577,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
571
577
  text: this.resourceBundle.getText("M_EASY_FILTER_RESET"),
572
578
  type: ButtonType.Transparent,
573
579
  press: () => {
574
- this.resetState();
580
+ this.resetState(true, true);
575
581
  //Retaining the focus on popover doesn't make the popover close on every interaction
576
582
  this.easyFilterInput.current?.$searchInput.focus();
577
583
  }
@@ -621,11 +627,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
621
627
  currentInputValue = currentInputPlaceholder;
622
628
  }
623
629
  await this.onGoPress(currentInputValue);
624
- };
630
+ }
631
+
632
+ /**
633
+ * Resets the state of the EasyFilterBarContainer to its initial configuration.
634
+ *
635
+ * This method performs the following actions:
636
+ * - Clears all non-mandatory tokens and resets mandatory tokens to their default values
637
+ * - Resets the input field to its default placeholder text
638
+ * - Clears all error value states and messages from tokens
639
+ * - Clears any displayed message strips
640
+ * - Optionally fires the clearFilters event to notify consumers
641
+ * @param clearAllFilters If true, fires the clearFilters event to notify consumers that filters should be cleared else just resets the tokens without firing the event
642
+ * @param isResettingToDefaultTokens If true, indicates that the resetButton is restoring tokens to their default values
643
+ */;
625
644
  _proto.resetState = function resetState() {
626
645
  let clearAllFilters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
646
+ let isResettingToDefaultTokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
627
647
  if (clearAllFilters) {
628
648
  this.fireEvent("clearFilters");
649
+ this.isResettingToDefaultTokens = isResettingToDefaultTokens;
629
650
  } else {
630
651
  this.shouldTokenChangeEventFired = false;
631
652
  }
@@ -834,4 +855,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
834
855
  _exports = EasyFilterBarContainer;
835
856
  return _exports;
836
857
  }, false);
837
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiZXZlbnQiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsInNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCIsImlucHV0RmllbGRSZWFkeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzb2x2ZUNvbnRlbnRSZWFkeSIsImluaXRpYWxpemUiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RWFzeUZpbHRlckxpYiIsImVhc3lGaWx0ZXJMaWIiLCJzZXRQcm9wZXJ0eSIsImVhc3lmaWx0ZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwic2V0QXBwSWQiLCJhcHBJZCIsImVhc3lGaWx0ZXJJbnB1dCIsImN1cnJlbnQiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJzZXRGaWx0ZXJCYXJNZXRhZGF0YSIsImZpbHRlckJhck1ldGFkYXRhIiwidG9rZW5zIiwiZ2V0RGVmYXVsdFRva2VucyIsImlubmVyQ29udHJvbFBvcG92ZXIiLCJjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scyIsImFkZERlcGVuZGVudCIsInN0YXRlIiwic2hvd1Jlc3VsdCIsImxlbmd0aCIsImlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCIsImluaXQiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtYW5kYXRvcnlLZXlNYXAiLCJmb3JFYWNoIiwiZGF0YSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsIm5hbWUiLCJwdXNoIiwia2V5IiwibGFiZWwiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiYnVzeSIsIm9uRW50ZXJQcmVzc2VkIiwiZSIsIm9uR29QcmVzcyIsImdldFBhcmFtZXRlciIsImNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQiLCJ0b2tlbnNJblN0YXRlIiwiZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSIsImdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSIsInRva2VuIiwiVmFsdWVTdGF0ZSIsIkVycm9yIiwiZ2V0VGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsImNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzIiwiZWFzeVRva2VucyIsInRva2VuaXplciIsImdldFRva2VucyIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCJtYWdpY1F1ZXJ5IiwicmVzZXRTdGF0ZSIsInRva2VuaXplckVkaXRhYmxlIiwiZmlyZUV2ZW50IiwiZWFzeUZpbHRlck1ldGFkYXRhIiwidmVyc2lvbiIsImVudGl0eVNldCIsImNvbnRleHRQYXRoIiwiZmllbGRzIiwiZWFzeUZpbHRlclJlc3VsdCIsImVhc3lGaWx0ZXIiLCJzdWNjZXNzIiwiaXNIaXN0b3J5RW5hYmxlZCIsImFkZFJlY2VudFF1ZXJ5IiwiaGFuZGxlVjFTdWNjZXNzIiwicmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zIiwic2V0TWVzc2FnZVN0cmlwIiwibWVzc2FnZSIsIm1lc3NhZ2VTdHJpcFR5cGUiLCJNZXNzYWdlVHlwZSIsIldhcm5pbmciLCJMb2ciLCJlcnJvciIsImZpbHRlciIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyTWVzc2FnZVN0cmlwIiwiRWFzeUZpbHRlclV0aWxzIiwiZm9ybWF0RGF0YSIsImJpbmQiLCJhbGxWYWx1ZUhlbHBUb2tlbnMiLCJyZXN1bHQiLCJyZXF1aXJlZFZhbHVlSGVscFRva2VucyIsInZhbHVlSGVscFRva2VuIiwiZmluZCIsImxsbVJlc3VsdCIsImRhdGFGZXRjaGVyIiwidXBkYXRlZFRva2VucyIsImtleVNwZWNpZmljVmFsdWUiLCJpZHgiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiQlQiLCJOQiIsInNlbGVjdGVkVmFsdWVzIiwidmFsdWUiLCJkZXNjcmlwdGlvbiIsInN1YkluZHgiLCJ2ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyIsInRodW1iQnV0dG9uRW5hYmxlZCIsInRodW1iRG93bkJ1dHRvblByZXNzZWQiLCJ0aHVtYlVwQnV0dG9uUHJlc3NlZCIsInNpbmdsZVNlbGVjdFRva2VuTGFiZWxzIiwic3BsaWNlIiwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0Iiwiam9pbiIsInNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcCIsInNob3dNZXNzYWdlU3RyaXAiLCJtZXNzYWdlU3RyaXBUZXh0IiwidGV4dCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJtYXAiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJvbnNhcGZvY3VzbGVhdmUiLCJvblRodW1iVXBQcmVzc2VkIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJvblRodW1iUHJlc3NlZCIsIm9uVGh1bWJEb3duUHJlc3NlZCIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCIkdG9wR29CdG4iLCJjcmVhdGVSZWZlcmVuY2UiLCJ0aHVtYlVwQnV0dG9uVG9rZW5pemVyIiwiVG9nZ2xlQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsImVuYWJsZWQiLCJiaW5kU3RhdGUiLCJwcmVzc2VkIiwiRkVTUkhlbHBlciIsInNldFNlbWFudGljU3RlcG5hbWUiLCJ0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIiLCJ0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSIsInRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUiLCJvdXRWQm94IiwiVkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJvbkdvQnV0dG9uUHJlc3MiLCJ2aXNpYmxlIiwiYWxpZ25JdGVtcyIsIkZsZXhBbGlnbkl0ZW1zIiwiQ2VudGVyIiwid3JhcCIsIkZsZXhXcmFwIiwiV3JhcCIsImp1c3RpZnlDb250ZW50IiwiRmxleEp1c3RpZnlDb250ZW50IiwiU3BhY2VCZXR3ZWVuIiwiQUlOb3RpY2UiLCJUb2tlbml6ZXIiLCJlZGl0YWJsZSIsImFuZCIsInJlbmRlck1vZGUiLCJUb2tlbml6ZXJSZW5kZXJNb2RlIiwiTG9vc2UiLCJjdHgiLCJvYmplY3QiLCJnZXRPYmplY3QiLCJUb2tlbiIsIml0ZW1zIiwibWFuZGF0b3J5IiwiaXNLZXlNYW5kYXRvcnkiLCJkZWxldGUiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwibmV3VG9rZW5zIiwiY29uY2F0IiwidXBkYXRlRmlsdGVySW5wdXQiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImNvZGVMaXN0IiwiSEJveCIsIlRyYW5zcGFyZW50IiwiJHNlYXJjaElucHV0IiwiZm9jdXMiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImVuYWJsZUZvcm1hdHRlZFRleHQiLCJzaG93Q2xvc2VCdXR0b24iLCJjbG9zZSIsIm5vdCIsImN1cnJlbnRJbnB1dFZhbHVlIiwiZ2V0VmFsdWUiLCJjdXJyZW50SW5wdXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwic2V0VmFsdWUiLCJjbGVhckFsbEZpbHRlcnMiLCJOb25lIiwidXBkYXRlVG9rZW5BcnJheSIsImNoYW5nZVR5cGUiLCJuZXdUb2tlblNwZWNpZmljVmFsdWVzIiwidG9rZW5LZXkiLCJ0Iiwic2V0U2VsZWN0ZWRWYWx1ZXMiLCJjbG9zZUlubmVyQ29udHJvbFBvcG92ZXIiLCJuZXdUb2tlbiIsImN1cnJWYWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUiLCJtYW5kYXRvcnlUb2tlbnMiLCJyZXF1aXJlZEtleXMiLCJnZXRLZXkiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJnZXRBZ2dyZWdhdGlvbiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJCYXJDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSwgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7XG5cdGFnZ3JlZ2F0aW9uLFxuXHRjcmVhdGVSZWZlcmVuY2UsXG5cdGRlZmluZVJlZmVyZW5jZSxcblx0ZGVmaW5lU3RhdGUsXG5cdGRlZmluZVVJNUNsYXNzLFxuXHRldmVudCxcblx0cHJvcGVydHksXG5cdHR5cGUgUHJvcGVydGllc09mXG59IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1Rva2VuXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4Qm94IGZyb20gXCJzYXAvbS9GbGV4Qm94XCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IFRva2VuaXplciBmcm9tIFwic2FwL20vVG9rZW5pemVyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIFBsYWNlbWVudFR5cGUsIFRva2VuaXplclJlbmRlck1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB7IGFuZCwgYmluZFN0YXRlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBFYXN5RmlsdGVySW5wdXQgZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJJbnB1dFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbHRlclRva2VuIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9Ub2tlblwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJcIjtcbmltcG9ydCBUb2dnbGVCdXR0b24gZnJvbSBcInNhcC9tL1RvZ2dsZUJ1dHRvblwiO1xuaW1wb3J0IFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbHRlciBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVhc3lGaWx0ZXJNZXRhZGF0YSwgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU3VjY2VzcyB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHsgQUlOb3RpY2UgfSBmcm9tIFwiLi9BSU5vdGljZVwiO1xuaW1wb3J0IHsgdHJpZ2dlclBYSW50ZWdyYXRpb24gfSBmcm9tIFwiLi9QWEZlZWRiYWNrXCI7XG5pbXBvcnQgRWFzeUZpbHRlclV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8vRm9yIGN1cnJlbnQgcmVsZWFzZSB3ZSBhcmUgaWdub3JpbmcgXCJBbGxcIiBhbmQgXCJBbnlcIlxuLy9XZSBjYW4gaW5jb3Jwb3JhdGUgdGhlc2UgdmFsdWVzIGluIGZ1dHVyZVxuZXhwb3J0IHR5cGUgQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW2Jvb2xlYW4sIGJvb2xlYW5dIHwgW3N0cmluZywgc3RyaW5nXSB8IFtudW1iZXIsIG51bWJlcl0gfCBbRGF0ZSwgRGF0ZV07XG5cbnR5cGUgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlID0gc3RyaW5nIHwgRGF0ZSB8IGJvb2xlYW4gfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvZGVMaXN0VHlwZSA9IHtcblx0dmFsdWU6IFByaW1pdGl2ZVR5cGU7XG5cdGRlc2NyaXB0aW9uOiBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbQ29kZUxpc3RUeXBlLCBDb2RlTGlzdFR5cGVdO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBDb2RlTGlzdFR5cGVbXTtcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9O1xuXG4vL1dlIHdpbGwgYmUgaGFuZGxpbmcgXCJBTExcIiBhbmQgXCJBTllcIiBhdCBsYXRlciBwb2ludCBvZiB0aW1lXG5leHBvcnQgdHlwZSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgbnVtYmVyW10gfCBEYXRlW107XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBUb2tlblR5cGUgPSBcIk1lbnVXaXRoQ2hlY2tCb3hcIiB8IFwiQ2FsZW5kYXJcIiB8IFwiVGltZVwiIHwgXCJWYWx1ZUhlbHBcIiB8IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIjtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdGJ1c3k6IGJvb2xlYW47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcblx0YnVzeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRva2VuRGVmaW5pdGlvbiA9IFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiB8IE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgVG9rZW5TZXR0ZXJzID0gXCJzZXRTZWxlY3RlZFZhbHVlc1wiO1xuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSA9IFByb3BlcnR5TWV0YWRhdGEgJlxuXHQoXG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdCk7XG5cbi8vIFdlIG5lZWQgdGhlIHRoaXJkIGFyZ3VlbWVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgY2hhbmNlIG9mIGNvbXBvc2l0ZSBrZXlzIHNjZW5hcmlvXG50eXBlIERhdGFGZXRjaGVyID0gKFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dmFsdWVPZkN1cnJlbnRQcm9wZXJ0eTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0bGxtUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXJSZXN1bHQ+XG4pID0+IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+O1xuXG5pbnRlcmZhY2UgRm9jdXNIYW5kbGluZ0NvbnRyb2wge1xuXHRvbnNhcGZvY3VzbGVhdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudCA9IFVJNUV2ZW50PFxuXHR7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB1bmtub3duW107XG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPT4gdm9pZDtcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvcikgPT4gdm9pZDtcblx0fSxcblx0RWFzeUZpbHRlckJhckNvbnRhaW5lclxuPjtcblxuLypcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGV4dGVuZHMgQ29udHJvbCB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcHBJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGVhc3lGaWx0ZXJMaWI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGZpbHRlckJhck1ldGFkYXRhPzogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0cmVjb21tZW5kZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImZ1bmN0aW9uXCIgfSlcblx0ZGF0YUZldGNoZXI/OiBEYXRhRmV0Y2hlcjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZWFzeUZpbHRlcklucHV0ITogUmVmPEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHR0b2tlbml6ZXIhOiBSZWY8VG9rZW5pemVyPjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRjb250ZW50PzogQ29udHJvbDtcblxuXHRAZXZlbnQoKVxuXHR0b2tlbnNDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0c2hvd1ZhbHVlSGVscD86IEV2ZW50SGFuZGxlcjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudD47XG5cblx0QGV2ZW50KClcblx0Y2xlYXJGaWx0ZXJzPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRwcml2YXRlIHJlc291cmNlQnVuZGxlITogUmVzb3VyY2VCdW5kbGU7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRzaG93UmVzdWx0OiBib29sZWFuO1xuXHRcdHRva2VuczogVG9rZW5EZWZpbml0aW9uW107XG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IGJvb2xlYW47XG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwPzogYm9vbGVhbjtcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ/OiBzdHJpbmc7XG5cdFx0bWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRzaG93TWVzc2FnZVN0cmlwPzogYm9vbGVhbjtcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZTtcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGJvb2xlYW47XG5cdFx0dGh1bWJEb3duQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0fT4gPSB7XG5cdFx0c2hvd1Jlc3VsdDogZmFsc2UsXG5cdFx0dG9rZW5zOiBbXSBhcyBUb2tlbkRlZmluaXRpb25bXSxcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogdHJ1ZSxcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA6IGZhbHNlLFxuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRtZXNzYWdlU3RyaXBUZXh0OiBcIlwiLFxuXHRcdHNob3dNZXNzYWdlU3RyaXA6IGZhbHNlLFxuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogdHJ1ZSxcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogZmFsc2UsXG5cdFx0dGh1bWJEb3duQnV0dG9uUHJlc3NlZDogZmFsc2Vcblx0fTtcblxuXHRwcml2YXRlIGlubmVyQ29udHJvbFBvcG92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgb2tCdXR0b24/OiBCdXR0b247XG5cblx0cHJpdmF0ZSBzaG93QWxsQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgdG9vbGJhcj86IE92ZXJmbG93VG9vbGJhcjtcblxuXHRwcml2YXRlIG1hbmRhdG9yeUtleU1hcD86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5cdC8vSWYgc2V0IHRvIHRydWUgdGhlIGVycm9yIHN0YXRlIGNhbiBiZSBzZWVuIG9uIHRoZSB0b2tlbnNcblx0cHJpdmF0ZSBpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gdHJ1ZTtcblxuXHRlYXN5ZmlsdGVyPzogUHJvbWlzZTx0eXBlb2YgRWFzeUZpbHRlciB8IHVuZGVmaW5lZD47XG5cblx0cHJpdmF0ZSByZXNvbHZlQ29udGVudFJlYWR5ITogKCkgPT4gdm9pZDtcblxuXHRwcml2YXRlIGlucHV0RmllbGRSZWFkeTogUHJvbWlzZTx2b2lkPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5ID0gcmVzb2x2ZTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogc3RyaW5nIHwgKCRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RWFzeUZpbHRlckJhckNvbnRhaW5lcj4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRzZXRFYXN5RmlsdGVyTGliKGVhc3lGaWx0ZXJMaWI6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlYXN5RmlsdGVyTGliXCIsIGVhc3lGaWx0ZXJMaWIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJMaWIpIHtcblx0XHRcdHRoaXMuZWFzeWZpbHRlciA9IGltcG9ydCh0aGlzLmVhc3lGaWx0ZXJMaWIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNldEFwcElkKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuYXBwSWQpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmlucHV0RmllbGRSZWFkeTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdFx0YXdhaXQgdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RmlsdGVyQmFyTWV0YWRhdGEoZmlsdGVyQmFyTWV0YWRhdGE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10pOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuZmlsdGVyQmFyTWV0YWRhdGEpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJNZXRhZGF0YVwiLCBmaWx0ZXJCYXJNZXRhZGF0YSwgdHJ1ZSk7XG5cdFx0XHQvLyBwb3B1bGF0ZSB0aGUgdG9rZW5zIHdpdGggZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSB0aGlzLmNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk7XG5cdFx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRva2Vucztcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0Ly8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdFx0Ly9vblRva2VuQ2hhbmdlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBpbml0aWFsIHNldCBvZiB0b2tlbnMgYXJlIHNldFxuXHRcdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHR9XG5cblx0aW5pdGlhbGl6ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR0aGlzLnJlc29sdmVDb250ZW50UmVhZHkoKTtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0dGhpcy5hZGREZXBlbmRlbnQodGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKTtcblx0XHR9XG5cdFx0Ly9XZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgZXJyb3IgdmFsdWVTdGF0ZU1lc3NhZ2UgYXMgc29vbiB0aGUgY29udHJvbCByZW5kZXJzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBzdGF0ZSwgb25jZSB0aGUgc3RhdGUgaXMgdXBkYXRlZCB0aGUgcHJldmlvdXMgb3ZlcnJpZGRlbiBkZWZhdWx0IHZhbHVlcyB3b3VsZCBiZSBnb25lIGZvcmV2ZXJcblx0Z2V0RGVmYXVsdFRva2VucygpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSA9IFtdO1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZvckVhY2goKGRhdGEpID0+IHtcblx0XHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBkYXRhLnJlcXVpcmVkO1xuXHRcdFx0aWYgKGlzUmVxdWlyZWQpIHtcblx0XHRcdFx0KHRoaXMubWFuZGF0b3J5S2V5TWFwIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KVtkYXRhLm5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0Ly9DaGVjayB3aGV0aGVyIHRoZSBrZXlzIGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlIGVsc2UgcHVzaCBpdCBhY3Jvc3Ncblx0XHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID8/IFtdLFxuXHRcdFx0XHRcdFx0dHlwZTogZGF0YS50eXBlLFxuXHRcdFx0XHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc1JlcXVpcmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoZTogVUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4pOiB2b2lkIHtcblx0XHR0aGlzLm9uR29QcmVzcyhlLmdldFBhcmFtZXRlcihcInF1ZXJ5XCIpKTtcblx0fVxuXG5cdC8vTWFraW5nIGl0IHB1YmxpYyBiZWNhdXNlIGluIGxpdmUgbW9kZSB0aGUgYXBwIGRldmVsb3BlciBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZXJyb3IgVmFsdWVTdGF0ZU1lc3NhZ2Vcblx0Ly9JbiBub24tbGl2ZSBtb2RlICwgd2UgYXJlIGFscmVhZHkgaW50ZXJuYWxseSBoYW5kbGluZyBpdCBvbiBldmVyeSB0aW1lIHRpbWUgYSB1c2VyIGNsaWNrcyBvbiBHTy9FbnRlciBidXR0b25zXG5cdHB1YmxpYyBjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRva2Vuc0luU3RhdGUgPSB0aGlzLmdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUoKTtcblx0XHRpZiAodG9rZW5zSW5TdGF0ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2Vuc0luU3RhdGUpO1xuXHRcdFx0dG9rZW5zPy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5FcnJvcik7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9NQU5EQVRPUllfVE9LRU5fRVJST1JcIikpO1xuXHRcdFx0XHR0b2tlbi5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcygpOiB2b2lkIHtcblx0XHRjb25zdCBlYXN5VG9rZW5zID0gdGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkgYXMgRWFzeUZpbHRlclRva2VuW107XG5cdFx0ZWFzeVRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSgpKTtcblx0fVxuXG5cdGFzeW5jIG9uR29QcmVzcyhtYWdpY1F1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIW1hZ2ljUXVlcnkpIHtcblx0XHRcdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblxuXHRcdC8vIENhbGwgQUkgc2VydmljZSB0byBnZXQgdGhlIGZpbHRlciBjcml0ZXJpYVxuXHRcdGNvbnN0IGVhc3lmaWx0ZXIgPSBhd2FpdCB0aGlzLmVhc3lmaWx0ZXI7XG5cdFx0aWYgKCFlYXN5ZmlsdGVyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KFwiYmVmb3JlUXVlcnlQcm9jZXNzaW5nXCIpO1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlck1ldGFkYXRhOiBFYXN5RmlsdGVyTWV0YWRhdGEgPSB7XG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0ZW50aXR5U2V0OiB0aGlzLmNvbnRleHRQYXRoLFxuXHRcdFx0ZmllbGRzOiB0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW11cblx0XHR9O1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlclJlc3VsdCA9IGF3YWl0IGVhc3lmaWx0ZXIuZWFzeUZpbHRlcihtYWdpY1F1ZXJ5LCBlYXN5RmlsdGVyTWV0YWRhdGEpO1xuXG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuc3VjY2Vzcykge1xuXHRcdFx0Ly9Pbmx5IGFkZCB0aGUgcmVjZW50IHF1ZXJ5IHdoZW4gdGhlIGNhbGwgaXMgc3VjY2Vzc1xuXHRcdFx0Ly9EbyBub3QgdHJhY2sgdGhlIHJlY2VudCBxdWVyaWVzIHdoZW4gdGhlIGlzSGlzdG9yeUVuYWJsZWQgaXMgc2V0IHRvIGZhbHNlXG5cdFx0XHQvL0l0IHdvdWxkIGJlIGEgdmlvbGF0aW9uIHRvIHVzZXJzIHByaXZhY3lcblx0XHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uYWRkUmVjZW50UXVlcnkobWFnaWNRdWVyeSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnZlcnNpb24gPT09IDEpIHtcblx0XHRcdFx0dGhpcy5oYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAyKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgYW5kIGFwcGx5IGl0IGRpcmVjdGx5IHRvIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZXJyb3Jcblx0XHRcdHRoaXMucmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcChlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpO1xuXHRcdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdlbmVyYXRpbmcgZmlsdGVyIGNyaXRlcmlhOiBcIiwgZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHR9XG5cblx0XHR0aGlzLmZpcmVFdmVudChcImFmdGVyUXVlcnlQcm9jZXNzaW5nXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSB0aGUgQUkgc2VydmljZSBmb3IgdmVyc2lvbiAxIG9mIHRoZSBlYXN5IGZpbHRlci5cblx0ICogQHBhcmFtIGVhc3lGaWx0ZXJSZXN1bHQgVGhlIHJlc3VsdCBmcm9tIHRoZSBBSSBzZXJ2aWNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZVYxU3VjY2VzcyhlYXN5RmlsdGVyUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXIuRWFzeUZpbHRlclJlc3VsdD4pOiB2b2lkIHtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBzaG93IGEgbWVzc2FnZSB0byB0aGUgdXNlciB0aGF0IHRoZSBmaWx0ZXIgY3JpdGVyaWEgaGFzIGJlZW4gZ2VuZXJhdGVkXG5cdFx0XHRMb2cuZGVidWcoXCJGaWx0ZXIgY3JpdGVyaWEgZ2VuZXJhdGVkOiBcIiwgSlNPTi5zdHJpbmdpZnkoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlciwgbnVsbCwgMikpO1xuXG5cdFx0XHRjb25zdCB0b2tlbnMgPSBbLi4udGhpcy5zdGF0ZS50b2tlbnNdLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmlzUmVxdWlyZWQpO1xuXG5cdFx0XHQvLyBDbGVhciB0aGUgcHJldmlvdXMgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgYW5kIGFwcGx5IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRcdEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhKFxuXHRcdFx0XHR0b2tlbnMsXG5cdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsXG5cdFx0XHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXSxcblx0XHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAuYmluZCh0aGlzKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly9XZSBvbmx5IGhhdmUgdG8gY2FsbCB0aGUgZGF0YUZldGNoZXIgb24gdGhlIFZIIHRva2VucyB3aGljaCBoYXZlIGJlZW4gYXNrZWQgYnkgdGhlIHVzZXJcblx0XHRcdC8vSW4gTWFkbmF0b3J5IHRva2VucyBjYXNlIHRoZSBkZWZhdWx0VmFsdWVzIGFyZSBhbHJlYWR5IGdpdmVuLCBzbyBubyBuZWVkIHRvIGNhbGwgZGF0YUZldGNoZXIgb24gaXRcblxuXHRcdFx0Y29uc3QgYWxsVmFsdWVIZWxwVG9rZW5zID0gdG9rZW5zLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIik7XG5cdFx0XHRjb25zdCByZXF1aXJlZFZhbHVlSGVscFRva2VucyA9IGFsbFZhbHVlSGVscFRva2Vucy5maWx0ZXIoKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdHJldHVybiBlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyPy5maW5kKChsbG1SZXN1bHQpID0+IGxsbVJlc3VsdC5uYW1lID09PSB2YWx1ZUhlbHBUb2tlbi5rZXkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICh0aGlzLmRhdGFGZXRjaGVyKSB7XG5cdFx0XHRcdChyZXF1aXJlZFZhbHVlSGVscFRva2VucyBhcyB1bmtub3duIGFzIFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbltdKS5mb3JFYWNoKGFzeW5jICh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGF0YUZldGNoZXI/Lihcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgYXMgdW5rbm93biBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdFx0XHRcdFx0ZWFzeUZpbHRlclJlc3VsdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSByZXN1bHQ7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIGRhdGFGZXRjaGVyIGlzIG5vdCB0aGVyZSwgdGhlbiBtb2NrIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gd2l0aCB0aGUgc2FtZSByZXN1bHQgY29taW5nIGZyb20gdGhlIExMTVxuXHRcdFx0XHRyZXF1aXJlZFZhbHVlSGVscFRva2Vucy5mb3JFYWNoKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmZvckVhY2goKGtleVNwZWNpZmljVmFsdWUsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcyA9IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBzdWJJbmR4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzW3N1YkluZHhdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdmFsdWUgYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRUb2tlbnMgPSB0aGlzLnZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2Vucyk7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0fVxuXHR9XG5cblx0Ly9ldmVyeSBzaW5nbGUgc2VsZWN0IG1lbnUgdHlwZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSB2YWx1ZSwgZWxzZSBzcGxpY2UgdG8gb25lIHZhbHVlIGFuZCB1cGRhdGUgdGhlICBtZXNzYWdlIHN0cmlwXG5cdHZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3Qgc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiKSB7XG5cdFx0XHRcdGlmICh0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5wdXNoKHRva2VuLmxhYmVsKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLnNwbGljZSgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc3RhdGUuc2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0ID0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfVkFMVUVfTUVTU0FHRVwiLCBbXG5cdFx0XHRcdGA8c3Ryb25nPiR7c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBcblx0XHRcdF0pO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0Y2xlYXJNZXNzYWdlU3RyaXAoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH1cblxuXHRzZXRNZXNzYWdlU3RyaXAodGV4dDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPSB0ZXh0O1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdH1cblxuXHRjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpOiBQb3BvdmVyIHtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gKFxuXHRcdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1pbm5lclBvcG92ZXJcIn1cblx0XHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQm90dG9tXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRmb290ZXI6IHRoaXMuZ2V0VG9vbGJhcigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciBhcyBQb3BvdmVyO1xuXHR9XG5cblx0Z2V0VG9vbGJhcigpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy50b29sYmFyKSB7XG5cdFx0XHRjb25zdCBva0J1dHRvbiA9IHRoaXMuZ2V0T2tCdXR0b24oKTtcblx0XHRcdGNvbnN0IHNob3dBbGxCdXR0b24gPSB0aGlzLmdldFNob3dBbGxCdXR0b24oKTtcblx0XHRcdHRoaXMudG9vbGJhciA9IChcblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhcj5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdFx0e29rQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHRcdHtzaG93QWxsQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L092ZXJmbG93VG9vbGJhcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvb2xiYXI7XG5cdH1cblxuXHRnZXRPa0J1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5va0J1dHRvbikge1xuXHRcdFx0dGhpcy5va0J1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX09LXCIpfSB0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5va0J1dHRvbjtcblx0fVxuXG5cdGdldFNob3dBbGxCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuc2hvd0FsbEJ1dHRvbikge1xuXHRcdFx0dGhpcy5zaG93QWxsQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfU0hPV19BTExfSVRFTVNcIil9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zaG93QWxsQnV0dG9uO1xuXHR9XG5cblx0Zm9ybWF0VG9rZW5zKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRva2Vucy5tYXAoKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLnRva2VuLFxuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly9NYWtpbmcgc3VyZSB0aGF0IG9ubHkgdGhlIGlkIHBhcnQgaXMgcGFzc2VkXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogdmFsdWUub3BlcmF0b3IsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiB2YWx1ZS5zZWxlY3RlZFZhbHVlcy5tYXAoKHZhbCkgPT4gdmFsLnZhbHVlKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9IGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBkZWVwQ2xvbmUodG9rZW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwidG9rZW5zXCIpKSB7XG5cdFx0XHRpZiAodGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQpIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHR0b2tlbnM6IHRoaXMuZm9ybWF0VG9rZW5zKHRoaXMuc3RhdGUudG9rZW5zIGFzIHVua25vd24gYXMgVG9rZW5EZWZpbml0aW9uW10pXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdGhpcy5zdGF0ZS50b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdGlmICghKHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID8/IGZhbHNlKSkge1xuXHRcdFx0XHR0aGlzLmNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly9SZXNldHRpbmcgdG8gZGVmYXVsdCB2YWx1ZXNcblx0XHR0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gdHJ1ZTtcblxuXHRcdC8vICBvbnNhcGZvY3VzbGVhdmUgbWV0aG9kIGluIHNhcC5tLlRva2VuaXplciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRpbmcgdGhlIHJlbmRlcm1vZGUgb2YgdG9rZW5pemVyIHRvIFwiTmFycm93XCIgZnJvbSBcImxvb3NlXCJcblx0XHQvLyAgSW4gdGhpcyBwcm9jZXNzIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3BvdmVyIGlzc3VlcyBoYXBwZW5pbmdcblx0XHQvLyAgU28gYXMgYSB0ZW1wb3JhcnkgZml4IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uXG5cdFx0KHRoaXMudG9rZW5pemVyPy5jdXJyZW50IGFzIEZvY3VzSGFuZGxpbmdDb250cm9sKS5vbnNhcGZvY3VzbGVhdmUgPSAoKTogdm9pZCA9PiB7fTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYlVwUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iVXBcIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iRG93blByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJ0aHVtYkRvd25cIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IGZhbHNlO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfRkVFREJBQ0tfU0VOVFwiKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IFZCb3gge1xuXHRcdGNvbnN0ICR0b3BHb0J0biA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgdGh1bWJVcEJ1dHRvblRva2VuaXplciA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iVXBcIik7XG5cdFx0Y29uc3QgdGh1bWJEb3duQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iRG93blwiKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IG91dFZCb3ggPSAoXG5cdFx0XHQ8VkJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8RWFzeUZpbHRlcklucHV0XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFZhbHVlc31cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5lYXN5RmlsdGVySW5wdXR9XG5cdFx0XHRcdFx0XHRlbnRlclByZXNzZWQ9e3RoaXMub25FbnRlclByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9haVwifVxuXHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRyZWY9eyR0b3BHb0J0bn1cblx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR09cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9XG5cdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkdvQnV0dG9uUHJlc3MuYmluZCh0aGlzKX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0cmVuZGVyVHlwZT1cIkJhcmVcIlxuXHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIil9XG5cdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdHdyYXA9e0ZsZXhXcmFwLldyYXB9XG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wXCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RmxleEJveCBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9IHJlbmRlclR5cGU9XCJCYXJlXCIgYWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfSB3cmFwPXtGbGV4V3JhcC5XcmFwfT5cblx0XHRcdFx0XHRcdDxBSU5vdGljZSByZXNvdXJjZUJ1bmRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZX0gLz5cblx0XHRcdFx0XHRcdDxUb2tlbml6ZXJcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbml6ZXJFZGl0YWJsZVwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUb2tlbml6ZXJcIn1cblx0XHRcdFx0XHRcdFx0dG9rZW5zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbnNcIil9XG5cdFx0XHRcdFx0XHRcdHJlbmRlck1vZGU9e1Rva2VuaXplclJlbmRlck1vZGUuTG9vc2V9XG5cdFx0XHRcdFx0XHRcdHJlZj17dGhpcy50b2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zOiAoaWR4OiBudW1iZXIsIGN0eDogQ29udGV4dCk6IFRva2VuID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9iamVjdCA9IGN0eC5nZXRPYmplY3QoKSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VG9rZW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RoaXMuc3RhdGUudG9rZW5zLmtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17dGhpcy5zdGF0ZS50b2tlbnMubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e3RoaXMuc3RhdGUudG9rZW5zLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWFuZGF0b3J5PXt0aGlzLmlzS2V5TWFuZGF0b3J5KG9iamVjdC5rZXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1c3k9e3RoaXMuc3RhdGUudG9rZW5zLmJ1c3l9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0b2tlbkluZGV4ID0gdGhpcy5zdGF0ZS50b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBvYmplY3Qua2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLmNvbmNhdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiVG9rZW5JbmZvXCIgdmFsdWU9e29iamVjdH0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cInBvcG92ZXJcIiB2YWx1ZT17dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiZWFzeUZpbHRlckJhckNvbnRhaW5lclwiIHZhbHVlPXt0aGlzfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9XCJjb2RlTGlzdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZpbmQoKGRhdGEpID0+IGRhdGEubmFtZSA9PT0gb2JqZWN0LmtleSk/LmNvZGVMaXN0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvVG9rZW4+XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvVG9rZW5pemVyPlxuXHRcdFx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uVG9rZW5pemVyfSwge3RodW1iRG93bkJ1dHRvblRva2VuaXplcn1cblx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9SRVNFVFwiKX1cblx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py4kc2VhcmNoSW5wdXQuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIiBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9PlxuXHRcdFx0XHRcdDxNZXNzYWdlU3RyaXBcblx0XHRcdFx0XHRcdHR5cGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFR5cGVcIil9XG5cdFx0XHRcdFx0XHR0ZXh0PXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJtZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHRcdDxIQm94IHZpc2libGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93TWVzc2FnZVN0cmlwXCIpLCBub3QoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1Jlc3VsdFwiKSkpfT5cblx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZX0sIHt0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlfVxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0PC9WQm94PlxuXHRcdCkgYXMgVkJveDtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJHRvcEdvQnRuLmN1cnJlbnQhLCBcInByZXNzXCIsIFwiZmU6YWk6c2VhcmNoXCIpO1xuXHRcdHJldHVybiBvdXRWQm94O1xuXHR9XG5cblx0YXN5bmMgb25Hb0J1dHRvblByZXNzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdGxldCBjdXJyZW50SW5wdXRWYWx1ZSA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgY3VycmVudElucHV0UGxhY2Vob2xkZXIgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRQbGFjZWhvbGRlcigpO1xuXG5cdFx0aWYgKGN1cnJlbnRJbnB1dFZhbHVlID09PSBcIlwiICYmIGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShjdXJyZW50SW5wdXRQbGFjZWhvbGRlciB8fCBcIlwiKTtcblx0XHRcdGN1cnJlbnRJbnB1dFZhbHVlID0gY3VycmVudElucHV0UGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMub25Hb1ByZXNzKGN1cnJlbnRJbnB1dFZhbHVlKTtcblx0fVxuXG5cdHJlc2V0U3RhdGUoY2xlYXJBbGxGaWx0ZXJzID0gdHJ1ZSk6IHZvaWQge1xuXHRcdGlmIChjbGVhckFsbEZpbHRlcnMpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiY2xlYXJGaWx0ZXJzXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblJlc2V0XCIpO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL1NldCB0aGUgVmFsdWUgU3RhdGVzIG9mIGFsbCB0aGUgVG9rZW5zIGJhY2sgdG8gTm9uZVxuXHRcdHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5Ob25lKSk7XG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgbnVsbCkpO1xuXHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTsgLy9jbGVhciB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0fVxuXG5cdC8vVGhlIGJlbG93IGNvZGUgdXBkYXRlcyB0aGUgZXhpc3Rpbmcgc3RhdGUgYnkgZmV0Y2hpbmcgdGhlIGtleSBhbmQgc2VsZWN0ZWRWYWx1ZXNcblx0dXBkYXRlVG9rZW5BcnJheShcblx0XHRjaGFuZ2VUeXBlOiBUb2tlblNldHRlcnMsXG5cdFx0bmV3VG9rZW5TcGVjaWZpY1ZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuS2V5OiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgdG9rZW5JbmRleCA9IG5ld1Rva2Vucy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSB0b2tlbktleSk7XG5cdFx0Y29uc3QgdG9rZW4gPSBuZXdUb2tlbnNbdG9rZW5JbmRleF07XG5cdFx0aWYgKHRva2VuSW5kZXggIT0gLTEpIHtcblx0XHRcdHN3aXRjaCAoY2hhbmdlVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic2V0U2VsZWN0ZWRWYWx1ZXNcIjpcblx0XHRcdFx0XHR0aGlzLnNldFNlbGVjdGVkVmFsdWVzKHRva2VuIGFzIFRva2VuRGVmaW5pdGlvbiwgbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcywgdG9rZW5JbmRleCwgbmV3VG9rZW5zIGFzIFRva2VuRGVmaW5pdGlvbltdKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcztcblx0XHRcdFx0XHQvL1JlbW92ZSB0aGUgdG9rZW4gZW50aXJlbHlcblx0XHRcdFx0XHRpZiAoIXRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSAmJiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU3BlY2lmeWluZyBhIHNldHRlciB0aGF0IGlzIG91dCBvZiB0aGUgYm91bmRhcnlcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBVcGRhdGUgdGhlIHN0YXRlIGJ5IGFzc2lnbmluZyB0aGUgbmV3IHRva2VucyBhcnJheVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW107XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSBuZXdUb2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsb3NlSW5uZXJDb250cm9sUG9wb3ZlcigpOiB2b2lkIHtcblx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXI/LmNsb3NlKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFNlbGVjdGVkVmFsdWVzKFxuXHRcdHRva2VuOiBUb2tlbkRlZmluaXRpb24sXG5cdFx0bmV3VG9rZW5TcGVjaWZpY1ZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuSW5kZXg6IG51bWJlcixcblx0XHRuZXdUb2tlbnM6IFRva2VuRGVmaW5pdGlvbltdXG5cdCk6IHZvaWQge1xuXHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdGlzS2V5TWFuZGF0b3J5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLm1hbmRhdG9yeUtleU1hcCkge1xuXHRcdFx0dGhpcy5tYW5kYXRvcnlLZXlNYXAgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubWFuZGF0b3J5S2V5TWFwW2tleV0gPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHRyZW1vdmVOb25NYW5kYXRvcnlUb2tlbnMoKTogdGhpcyB7XG5cdFx0Y29uc3QgbmV3VG9rZW46IFRva2VuRGVmaW5pdGlvbltdID0gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KTtcblx0XHR9KTtcblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VuO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dXBkYXRlRmlsdGVySW5wdXQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJWYWx1ZTogc3RyaW5nID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKSB8fCBcIlwiO1xuXHRcdGlmICh2YWx1ZSA9PT0gXCJ0b2tlblVwZGF0ZWRcIiAmJiBjdXJyVmFsdWUgIT09IFwiXCIpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UGxhY2Vob2xkZXIoY3VyclZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBcInRva2VuUmVzZXRcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHR9XG5cdH1cblxuXHRnZXRUb2tlbnNJbkluaXRpYWxTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgbWFuZGF0b3J5VG9rZW5zID0gbmV3VG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGlmICh0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1hbmRhdG9yeVRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogW10gfSkpO1xuXHR9XG5cblx0Z2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGNvbnN0IGlzS2V5TWFuZGF0b3J5ID0gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdFx0aWYgKGlzS2V5TWFuZGF0b3J5KSB7XG5cdFx0XHRcdHJldHVybiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogRWFzeUZpbHRlclRva2VuW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlcXVpcmVkS2V5cyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi5rZXkpO1xuXHRcdHJldHVybiB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5maWx0ZXIoKHRva2VuKSA9PiByZXF1aXJlZEtleXMuaW5jbHVkZXModG9rZW4uZ2V0S2V5KCkpKSBhc1xuXHRcdFx0fCBFYXN5RmlsdGVyVG9rZW5bXVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKHJtOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBFYXN5RmlsdGVyQmFyQ29udGFpbmVyKTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiA8c3BhbiByZWY9e2NvbnRyb2x9Pntjb250cm9sLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKX08L3NwYW4+O1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcURBO0VBQ0E7RUF3QkE7RUErQ0E7RUFxQkE7QUFDQTtBQUNBO0VBRkEsSUFJcUJBLHNCQUFzQixJQUFBQyxJQUFBLEdBRDFDQyxjQUFjLENBQUMsbURBQW1ELENBQUMsRUFBQUMsS0FBQSxHQUVsRUMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzVCRixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHNUJILFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQUc1QkosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFRLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzNCTCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVEsQ0FBQyxDQUFDLEVBQUFLLEtB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
858
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiZXZlbnQiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsInNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCIsImlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zIiwiaW5wdXRGaWVsZFJlYWR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXNvbHZlQ29udGVudFJlYWR5IiwiaW5pdGlhbGl6ZSIsImludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RWFzeUZpbHRlckxpYiIsImVhc3lGaWx0ZXJMaWIiLCJzZXRQcm9wZXJ0eSIsImVhc3lmaWx0ZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwic2V0QXBwSWQiLCJhcHBJZCIsImVhc3lGaWx0ZXJJbnB1dCIsImN1cnJlbnQiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJzZXRGaWx0ZXJCYXJNZXRhZGF0YSIsImZpbHRlckJhck1ldGFkYXRhIiwidG9rZW5zIiwiZ2V0RGVmYXVsdFRva2VucyIsImlubmVyQ29udHJvbFBvcG92ZXIiLCJjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scyIsImFkZERlcGVuZGVudCIsInN0YXRlIiwic2hvd1Jlc3VsdCIsImxlbmd0aCIsImlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCIsImluaXQiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtYW5kYXRvcnlLZXlNYXAiLCJmb3JFYWNoIiwiZGF0YSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsIm5hbWUiLCJwdXNoIiwia2V5IiwibGFiZWwiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiYnVzeSIsIm9uRW50ZXJQcmVzc2VkIiwiZSIsIm9uR29QcmVzcyIsImdldFBhcmFtZXRlciIsImNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQiLCJ0b2tlbnNJblN0YXRlIiwiZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSIsImdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSIsInRva2VuIiwiVmFsdWVTdGF0ZSIsIkVycm9yIiwiZ2V0VGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsImNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzIiwiZWFzeVRva2VucyIsInRva2VuaXplciIsImdldFRva2VucyIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCJtYWdpY1F1ZXJ5IiwicmVzZXRTdGF0ZSIsInRva2VuaXplckVkaXRhYmxlIiwiZmlyZUV2ZW50IiwiZWFzeUZpbHRlck1ldGFkYXRhIiwidmVyc2lvbiIsImVudGl0eVNldCIsImNvbnRleHRQYXRoIiwiZmllbGRzIiwiZWFzeUZpbHRlclJlc3VsdCIsImVhc3lGaWx0ZXIiLCJzdWNjZXNzIiwiaXNIaXN0b3J5RW5hYmxlZCIsImFkZFJlY2VudFF1ZXJ5IiwiaGFuZGxlVjFTdWNjZXNzIiwicmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zIiwic2V0TWVzc2FnZVN0cmlwIiwibWVzc2FnZSIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJtZXNzYWdlU3RyaXBUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiTG9nIiwiZXJyb3IiLCJmaWx0ZXIiLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhck1lc3NhZ2VTdHJpcCIsIkVhc3lGaWx0ZXJVdGlscyIsImZvcm1hdERhdGEiLCJiaW5kIiwiYWxsVmFsdWVIZWxwVG9rZW5zIiwicmVzdWx0IiwicmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMiLCJ2YWx1ZUhlbHBUb2tlbiIsImZpbmQiLCJsbG1SZXN1bHQiLCJkYXRhRmV0Y2hlciIsInVwZGF0ZWRUb2tlbnMiLCJrZXlTcGVjaWZpY1ZhbHVlIiwiaWR4Iiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwiTkIiLCJzZWxlY3RlZFZhbHVlcyIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJzdWJJbmR4IiwidmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXMiLCJ0aHVtYkJ1dHRvbkVuYWJsZWQiLCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkIiwidGh1bWJVcEJ1dHRvblByZXNzZWQiLCJzaW5nbGVTZWxlY3RUb2tlbkxhYmVscyIsInNwbGljZSIsInNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCIsImpvaW4iLCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAiLCJzaG93TWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwVGV4dCIsInRleHQiLCJfanN4IiwiUG9wb3ZlciIsImlkIiwiZ2V0SWQiLCJzaG93QXJyb3ciLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiUGxhY2VtZW50VHlwZSIsIkJvdHRvbSIsImNsYXNzIiwiY2hpbGRyZW4iLCJmb290ZXIiLCJnZXRUb29sYmFyIiwidG9vbGJhciIsIm9rQnV0dG9uIiwiZ2V0T2tCdXR0b24iLCJzaG93QWxsQnV0dG9uIiwiZ2V0U2hvd0FsbEJ1dHRvbiIsIk92ZXJmbG93VG9vbGJhciIsIl9qc3hzIiwiX0ZyYWdtZW50IiwiVG9vbGJhclNwYWNlciIsIkJ1dHRvbiIsIkJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwiZm9ybWF0VG9rZW5zIiwibWFwIiwidmFsIiwiZGVlcENsb25lIiwib25TdGF0ZUNoYW5nZSIsImNoYW5nZWRQcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwicmVzZXQiLCJvbnNhcGZvY3VzbGVhdmUiLCJvblRodW1iVXBQcmVzc2VkIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJvblRodW1iUHJlc3NlZCIsIm9uVGh1bWJEb3duUHJlc3NlZCIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCIkdG9wR29CdG4iLCJjcmVhdGVSZWZlcmVuY2UiLCJ0aHVtYlVwQnV0dG9uVG9rZW5pemVyIiwiVG9nZ2xlQnV0dG9uIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsImVuYWJsZWQiLCJiaW5kU3RhdGUiLCJwcmVzc2VkIiwiRkVTUkhlbHBlciIsInNldFNlbWFudGljU3RlcG5hbWUiLCJ0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIiLCJ0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSIsInRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUiLCJvdXRWQm94IiwiVkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJvbkdvQnV0dG9uUHJlc3MiLCJ2aXNpYmxlIiwiYWxpZ25JdGVtcyIsIkZsZXhBbGlnbkl0ZW1zIiwiQ2VudGVyIiwid3JhcCIsIkZsZXhXcmFwIiwiV3JhcCIsImp1c3RpZnlDb250ZW50IiwiRmxleEp1c3RpZnlDb250ZW50IiwiU3BhY2VCZXR3ZWVuIiwiQUlOb3RpY2UiLCJUb2tlbml6ZXIiLCJlZGl0YWJsZSIsImFuZCIsInJlbmRlck1vZGUiLCJUb2tlbml6ZXJSZW5kZXJNb2RlIiwiTG9vc2UiLCJjdHgiLCJvYmplY3QiLCJnZXRPYmplY3QiLCJUb2tlbiIsIml0ZW1zIiwibWFuZGF0b3J5IiwiaXNLZXlNYW5kYXRvcnkiLCJkZWxldGUiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwibmV3VG9rZW5zIiwiY29uY2F0IiwidXBkYXRlRmlsdGVySW5wdXQiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImNvZGVMaXN0IiwiSEJveCIsIlRyYW5zcGFyZW50IiwiJHNlYXJjaElucHV0IiwiZm9jdXMiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImVuYWJsZUZvcm1hdHRlZFRleHQiLCJzaG93Q2xvc2VCdXR0b24iLCJjbG9zZSIsIm5vdCIsImN1cnJlbnRJbnB1dFZhbHVlIiwiZ2V0VmFsdWUiLCJjdXJyZW50SW5wdXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwic2V0VmFsdWUiLCJjbGVhckFsbEZpbHRlcnMiLCJOb25lIiwidXBkYXRlVG9rZW5BcnJheSIsImNoYW5nZVR5cGUiLCJuZXdUb2tlblNwZWNpZmljVmFsdWVzIiwidG9rZW5LZXkiLCJ0Iiwic2V0U2VsZWN0ZWRWYWx1ZXMiLCJjbG9zZUlubmVyQ29udHJvbFBvcG92ZXIiLCJuZXdUb2tlbiIsImN1cnJWYWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUiLCJtYW5kYXRvcnlUb2tlbnMiLCJyZXF1aXJlZEtleXMiLCJnZXRLZXkiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJnZXRBZ2dyZWdhdGlvbiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJCYXJDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSwgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7XG5cdGFnZ3JlZ2F0aW9uLFxuXHRjcmVhdGVSZWZlcmVuY2UsXG5cdGRlZmluZVJlZmVyZW5jZSxcblx0ZGVmaW5lU3RhdGUsXG5cdGRlZmluZVVJNUNsYXNzLFxuXHRldmVudCxcblx0cHJvcGVydHksXG5cdHR5cGUgUHJvcGVydGllc09mXG59IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1Rva2VuXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4Qm94IGZyb20gXCJzYXAvbS9GbGV4Qm94XCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IFRva2VuaXplciBmcm9tIFwic2FwL20vVG9rZW5pemVyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIFBsYWNlbWVudFR5cGUsIFRva2VuaXplclJlbmRlck1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyBhbmQsIGJpbmRTdGF0ZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRWFzeUZpbHRlcklucHV0IGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVySW5wdXRcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXJUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgVG9nZ2xlQnV0dG9uIGZyb20gXCJzYXAvbS9Ub2dnbGVCdXR0b25cIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyIGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRWFzeUZpbHRlck1ldGFkYXRhLCBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTdWNjZXNzIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL3NoYXJlZFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyBBSU5vdGljZSB9IGZyb20gXCIuL0FJTm90aWNlXCI7XG5pbXBvcnQgeyB0cmlnZ2VyUFhJbnRlZ3JhdGlvbiB9IGZyb20gXCIuL1BYRmVlZGJhY2tcIjtcbmltcG9ydCBFYXN5RmlsdGVyVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuLy9Gb3IgY3VycmVudCByZWxlYXNlIHdlIGFyZSBpZ25vcmluZyBcIkFsbFwiIGFuZCBcIkFueVwiXG4vL1dlIGNhbiBpbmNvcnBvcmF0ZSB0aGVzZSB2YWx1ZXMgaW4gZnV0dXJlXG5leHBvcnQgdHlwZSBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbYm9vbGVhbiwgYm9vbGVhbl0gfCBbc3RyaW5nLCBzdHJpbmddIHwgW251bWJlciwgbnVtYmVyXSB8IFtEYXRlLCBEYXRlXTtcblxudHlwZSBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGUgPSBzdHJpbmcgfCBEYXRlIHwgYm9vbGVhbiB8IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ29kZUxpc3RUeXBlID0ge1xuXHR2YWx1ZTogUHJpbWl0aXZlVHlwZTtcblx0ZGVzY3JpcHRpb246IGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyA9IFtDb2RlTGlzdFR5cGUsIENvZGVMaXN0VHlwZV07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IENvZGVMaXN0VHlwZVtdO1xuXHRcdFx0bm9NYXRjaD86IGJvb2xlYW47XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH07XG5cbi8vV2Ugd2lsbCBiZSBoYW5kbGluZyBcIkFMTFwiIGFuZCBcIkFOWVwiIGF0IGxhdGVyIHBvaW50IG9mIHRpbWVcbmV4cG9ydCB0eXBlIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uID1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj47XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogc3RyaW5nW10gfCBib29sZWFuW10gfCBudW1iZXJbXSB8IERhdGVbXTtcblx0ICB9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI7XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogQmV0d2VlblNlbGVjdGVkVmFsdWVzO1xuXHQgIH07XG5cbmV4cG9ydCB0eXBlIFRva2VuVHlwZSA9IFwiTWVudVdpdGhDaGVja0JveFwiIHwgXCJDYWxlbmRhclwiIHwgXCJUaW1lXCIgfCBcIlZhbHVlSGVscFwiIHwgXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogXCJWYWx1ZUhlbHBcIjtcblx0YnVzeTogYm9vbGVhbjtcblx0aXNSZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBOb25WYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuXHRidXN5OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9rZW5EZWZpbml0aW9uID0gVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uIHwgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBUb2tlblNldHRlcnMgPSBcInNldFNlbGVjdGVkVmFsdWVzXCI7XG5cbmV4cG9ydCB0eXBlIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhID0gUHJvcGVydHlNZXRhZGF0YSAmXG5cdChcblx0XHR8IHtcblx0XHRcdFx0dHlwZTogXCJWYWx1ZUhlbHBcIjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlPzogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlPzogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0XHQgIH1cblx0KTtcblxuLy8gV2UgbmVlZCB0aGUgdGhpcmQgYXJndWVtZW50IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgYSBjaGFuY2Ugb2YgY29tcG9zaXRlIGtleXMgc2NlbmFyaW9cbnR5cGUgRGF0YUZldGNoZXIgPSAoXG5cdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHR2YWx1ZU9mQ3VycmVudFByb3BlcnR5OiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRsbG1SZXN1bHQ6IFN1Y2Nlc3M8RWFzeUZpbHRlclJlc3VsdD5cbikgPT4gUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT47XG5cbmludGVyZmFjZSBGb2N1c0hhbmRsaW5nQ29udHJvbCB7XG5cdG9uc2FwZm9jdXNsZWF2ZT86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50ID0gVUk1RXZlbnQ8XG5cdHtcblx0XHRrZXk6IHN0cmluZztcblx0XHR2YWx1ZXM6IHVua25vd25bXTtcblx0XHRyZXNvbHZlOiAodmFsdWU6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA9PiB2b2lkO1xuXHRcdHJlamVjdDogKHJlYXNvbj86IEVycm9yKSA9PiB2b2lkO1xuXHR9LFxuXHRFYXN5RmlsdGVyQmFyQ29udGFpbmVyXG4+O1xuXG4vKlxuICogRGVsaXZlcnkgZm9yIGJldGEgcmVsZWFzZSBmb3IgdGhlIGVhc3kgZmlsdGVyIGZlYXR1cmUuXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb250cm9scy5lYXN5RmlsdGVyLkVhc3lGaWx0ZXJCYXJDb250YWluZXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJCYXJDb250YWluZXIgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGFwcElkPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZWFzeUZpbHRlckxpYj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0ZmlsdGVyQmFyTWV0YWRhdGE/OiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRyZWNvbW1lbmRlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiZnVuY3Rpb25cIiB9KVxuXHRkYXRhRmV0Y2hlcj86IERhdGFGZXRjaGVyO1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRlYXN5RmlsdGVySW5wdXQhOiBSZWY8RW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlcklucHV0Pj47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHRva2VuaXplciE6IFJlZjxUb2tlbml6ZXI+O1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGNvbnRlbnQ/OiBDb250cm9sO1xuXG5cdEBldmVudCgpXG5cdHRva2Vuc0NoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyB0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdOyByZXNldDogYm9vbGVhbiB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0c2hvd1ZhbHVlSGVscD86IEV2ZW50SGFuZGxlcjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudD47XG5cblx0QGV2ZW50KClcblx0Y2xlYXJGaWx0ZXJzPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRwcml2YXRlIHJlc291cmNlQnVuZGxlITogUmVzb3VyY2VCdW5kbGU7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRzaG93UmVzdWx0OiBib29sZWFuO1xuXHRcdHRva2VuczogVG9rZW5EZWZpbml0aW9uW107XG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IGJvb2xlYW47XG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwPzogYm9vbGVhbjtcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ/OiBzdHJpbmc7XG5cdFx0bWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRzaG93TWVzc2FnZVN0cmlwPzogYm9vbGVhbjtcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZTtcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGJvb2xlYW47XG5cdFx0dGh1bWJEb3duQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0fT4gPSB7XG5cdFx0c2hvd1Jlc3VsdDogZmFsc2UsXG5cdFx0dG9rZW5zOiBbXSBhcyBUb2tlbkRlZmluaXRpb25bXSxcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogdHJ1ZSxcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA6IGZhbHNlLFxuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRtZXNzYWdlU3RyaXBUZXh0OiBcIlwiLFxuXHRcdHNob3dNZXNzYWdlU3RyaXA6IGZhbHNlLFxuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogdHJ1ZSxcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogZmFsc2UsXG5cdFx0dGh1bWJEb3duQnV0dG9uUHJlc3NlZDogZmFsc2Vcblx0fTtcblxuXHRwcml2YXRlIGlubmVyQ29udHJvbFBvcG92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgb2tCdXR0b24/OiBCdXR0b247XG5cblx0cHJpdmF0ZSBzaG93QWxsQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgdG9vbGJhcj86IE92ZXJmbG93VG9vbGJhcjtcblxuXHRwcml2YXRlIG1hbmRhdG9yeUtleU1hcD86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5cdC8vSWYgc2V0IHRvIHRydWUgdGhlIGVycm9yIHN0YXRlIGNhbiBiZSBzZWVuIG9uIHRoZSB0b2tlbnNcblx0cHJpdmF0ZSBpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gdHJ1ZTtcblxuXHRwcml2YXRlIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBpbnZpc2libGVNZXNzYWdlITogSW52aXNpYmxlTWVzc2FnZTtcblxuXHRlYXN5ZmlsdGVyPzogUHJvbWlzZTx0eXBlb2YgRWFzeUZpbHRlciB8IHVuZGVmaW5lZD47XG5cblx0cHJpdmF0ZSByZXNvbHZlQ29udGVudFJlYWR5ITogKCkgPT4gdm9pZDtcblxuXHRwcml2YXRlIGlucHV0RmllbGRSZWFkeTogUHJvbWlzZTx2b2lkPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5ID0gcmVzb2x2ZTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogc3RyaW5nIHwgKCRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RWFzeUZpbHRlckJhckNvbnRhaW5lcj4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdFx0dGhpcy5pbnZpc2libGVNZXNzYWdlID0gSW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpO1xuXHR9XG5cblx0c2V0RWFzeUZpbHRlckxpYihlYXN5RmlsdGVyTGliOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZWFzeUZpbHRlckxpYlwiLCBlYXN5RmlsdGVyTGliKTtcblx0XHRpZiAodGhpcy5lYXN5RmlsdGVyTGliKSB7XG5cdFx0XHR0aGlzLmVhc3lmaWx0ZXIgPSBpbXBvcnQodGhpcy5lYXN5RmlsdGVyTGliKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBzZXRBcHBJZChhcHBJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmFwcElkKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdFx0YXdhaXQgdGhpcy5pbnB1dEZpZWxkUmVhZHk7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQcm9wZXJ0eShcImFwcElkXCIsIGFwcElkLCB0cnVlKTtcblx0XHRcdGF3YWl0IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmluaXRTaGVsbEhpc3RvcnlQcm92aWRlcigpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZpbHRlckJhck1ldGFkYXRhKGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmZpbHRlckJhck1ldGFkYXRhKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiZmlsdGVyQmFyTWV0YWRhdGFcIiwgZmlsdGVyQmFyTWV0YWRhdGEsIHRydWUpO1xuXHRcdFx0Ly8gcG9wdWxhdGUgdGhlIHRva2VucyB3aXRoIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudCh0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0b2tlbnM7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdC8vL1dlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBlcnJvciB2YWx1ZVN0YXRlTWVzc2FnZSBhcyBzb29uIHRoZSBjb250cm9sIHJlbmRlcnNcblx0XHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnJlc291cmNlQnVuZGxlID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvbnRyb2xzXCIpITtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5KCk7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IHRoaXMuY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0fVxuXHRcdC8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL29uVG9rZW5DaGFuZ2UgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGluaXRpYWwgc2V0IG9mIHRva2VucyBhcmUgc2V0XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhdGUsIG9uY2UgdGhlIHN0YXRlIGlzIHVwZGF0ZWQgdGhlIHByZXZpb3VzIG92ZXJyaWRkZW4gZGVmYXVsdCB2YWx1ZXMgd291bGQgYmUgZ29uZSBmb3JldmVyXG5cdGdldERlZmF1bHRUb2tlbnMoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gPSBbXTtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5mb3JFYWNoKChkYXRhKSA9PiB7XG5cdFx0XHRjb25zdCBpc1JlcXVpcmVkID0gZGF0YS5yZXF1aXJlZDtcblx0XHRcdGlmIChpc1JlcXVpcmVkKSB7XG5cdFx0XHRcdCh0aGlzLm1hbmRhdG9yeUtleU1hcCBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPilbZGF0YS5uYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8vQ2hlY2sgd2hldGhlciB0aGUga2V5cyBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZSBlbHNlIHB1c2ggaXQgYWNyb3NzXG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPz8gW10sXG5cdFx0XHRcdFx0XHR0eXBlOiBkYXRhLnR5cGUsXG5cdFx0XHRcdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdFx0XHRcdGlzUmVxdWlyZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdG9uRW50ZXJQcmVzc2VkKGU6IFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+KTogdm9pZCB7XG5cdFx0dGhpcy5vbkdvUHJlc3MoZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSk7XG5cdH1cblxuXHQvL01ha2luZyBpdCBwdWJsaWMgYmVjYXVzZSBpbiBsaXZlIG1vZGUgdGhlIGFwcCBkZXZlbG9wZXIgY2FuIGRlY2lkZSB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIGVycm9yIFZhbHVlU3RhdGVNZXNzYWdlXG5cdC8vSW4gbm9uLWxpdmUgbW9kZSAsIHdlIGFyZSBhbHJlYWR5IGludGVybmFsbHkgaGFuZGxpbmcgaXQgb24gZXZlcnkgdGltZSB0aW1lIGEgdXNlciBjbGlja3Mgb24gR08vRW50ZXIgYnV0dG9uc1xuXHRwdWJsaWMgY2hlY2tJZkFsbE1hbmRhdG9yeVRva2Vuc0ZpbGxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCB0b2tlbnNJblN0YXRlID0gdGhpcy5nZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk7XG5cdFx0aWYgKHRva2Vuc0luU3RhdGUubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRjb25zdCB0b2tlbnMgPSB0aGlzLmdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnNJblN0YXRlKTtcblx0XHRcdHRva2Vucz8uZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlXCIsIFZhbHVlU3RhdGUuRXJyb3IpO1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVUZXh0XCIsIHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTUFOREFUT1JZX1RPS0VOX0VSUk9SXCIpKTtcblx0XHRcdFx0dG9rZW4ub3BlblZhbHVlU3RhdGVNZXNzYWdlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VBbGxNYW5kYXRvcnlWYWx1ZVN0YXRlTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWFzeVRva2VucyA9IHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpIGFzIEVhc3lGaWx0ZXJUb2tlbltdO1xuXHRcdGVhc3lUb2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHRhc3luYyBvbkdvUHJlc3MobWFnaWNRdWVyeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFtYWdpY1F1ZXJ5KSB7XG5cdFx0XHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cblx0XHQvLyBDYWxsIEFJIHNlcnZpY2UgdG8gZ2V0IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRjb25zdCBlYXN5ZmlsdGVyID0gYXdhaXQgdGhpcy5lYXN5ZmlsdGVyO1xuXHRcdGlmICghZWFzeWZpbHRlcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudChcImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJNZXRhZGF0YTogRWFzeUZpbHRlck1ldGFkYXRhID0ge1xuXHRcdFx0dmVyc2lvbjogMSxcblx0XHRcdGVudGl0eVNldDogdGhpcy5jb250ZXh0UGF0aCxcblx0XHRcdGZpZWxkczogdGhpcy5maWx0ZXJCYXJNZXRhZGF0YSBhcyBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdXG5cdFx0fTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJSZXN1bHQgPSBhd2FpdCBlYXN5ZmlsdGVyLmVhc3lGaWx0ZXIobWFnaWNRdWVyeSwgZWFzeUZpbHRlck1ldGFkYXRhKTtcblxuXHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LnN1Y2Nlc3MpIHtcblx0XHRcdC8vT25seSBhZGQgdGhlIHJlY2VudCBxdWVyeSB3aGVuIHRoZSBjYWxsIGlzIHN1Y2Nlc3Ncblx0XHRcdC8vRG8gbm90IHRyYWNrIHRoZSByZWNlbnQgcXVlcmllcyB3aGVuIHRoZSBpc0hpc3RvcnlFbmFibGVkIGlzIHNldCB0byBmYWxzZVxuXHRcdFx0Ly9JdCB3b3VsZCBiZSBhIHZpb2xhdGlvbiB0byB1c2VycyBwcml2YWN5XG5cdFx0XHRpZiAodGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmFkZFJlY2VudFF1ZXJ5KG1hZ2ljUXVlcnkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAxKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIGFuZCBhcHBseSBpdCBkaXJlY3RseSB0byB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGVycm9yXG5cdFx0XHR0aGlzLnJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpO1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHRcdHRoaXMuaW52aXNpYmxlTWVzc2FnZS5hbm5vdW5jZSh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZW5lcmF0aW5nIGZpbHRlciBjcml0ZXJpYTogXCIsIGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5maXJlRXZlbnQoXCJhZnRlclF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGZyb20gdGhlIEFJIHNlcnZpY2UgZm9yIHZlcnNpb24gMSBvZiB0aGUgZWFzeSBmaWx0ZXIuXG5cdCAqIEBwYXJhbSBlYXN5RmlsdGVyUmVzdWx0IFRoZSByZXN1bHQgZnJvbSB0aGUgQUkgc2VydmljZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyLkVhc3lGaWx0ZXJSZXN1bHQ+KTogdm9pZCB7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gc2hvdyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgdGhhdCB0aGUgZmlsdGVyIGNyaXRlcmlhIGhhcyBiZWVuIGdlbmVyYXRlZFxuXHRcdFx0TG9nLmRlYnVnKFwiRmlsdGVyIGNyaXRlcmlhIGdlbmVyYXRlZDogXCIsIEpTT04uc3RyaW5naWZ5KGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsIG51bGwsIDIpKTtcblxuXHRcdFx0Y29uc3QgdG9rZW5zID0gWy4uLnRoaXMuc3RhdGUudG9rZW5zXS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5pc1JlcXVpcmVkKTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGhlIHByZXZpb3VzIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBhcHBseSB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0XHRFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YShcblx0XHRcdFx0dG9rZW5zLFxuXHRcdFx0XHRlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyLFxuXHRcdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10sXG5cdFx0XHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwLmJpbmQodGhpcylcblx0XHRcdCk7XG5cblx0XHRcdC8vV2Ugb25seSBoYXZlIHRvIGNhbGwgdGhlIGRhdGFGZXRjaGVyIG9uIHRoZSBWSCB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFza2VkIGJ5IHRoZSB1c2VyXG5cdFx0XHQvL0luIE1hZG5hdG9yeSB0b2tlbnMgY2FzZSB0aGUgZGVmYXVsdFZhbHVlcyBhcmUgYWxyZWFkeSBnaXZlbiwgc28gbm8gbmVlZCB0byBjYWxsIGRhdGFGZXRjaGVyIG9uIGl0XG5cblx0XHRcdGNvbnN0IGFsbFZhbHVlSGVscFRva2VucyA9IHRva2Vucy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgPSBhbGxWYWx1ZUhlbHBUb2tlbnMuZmlsdGVyKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcj8uZmluZCgobGxtUmVzdWx0KSA9PiBsbG1SZXN1bHQubmFtZSA9PT0gdmFsdWVIZWxwVG9rZW4ua2V5KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5kYXRhRmV0Y2hlcikge1xuXHRcdFx0XHQocmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgYXMgdW5rbm93biBhcyBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb25bXSkuZm9yRWFjaChhc3luYyAodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFGZXRjaGVyPy4oXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXksXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIHVua25vd24gYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHRcdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gcmVzdWx0O1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdXBkYXRlZFRva2Vucztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9JZiBkYXRhRmV0Y2hlciBpcyBub3QgdGhlcmUsIHRoZW4gbW9jayB0aGUgdmFsdWUgYW5kIGRlc2NyaXB0aW9uIHdpdGggdGhlIHNhbWUgcmVzdWx0IGNvbWluZyBmcm9tIHRoZSBMTE1cblx0XHRcdFx0cmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMuZm9yRWFjaCgodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5idXN5ID0gZmFsc2U7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChrZXlTcGVjaWZpY1ZhbHVlLCBpZHgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChrZXlTcGVjaWZpY1ZhbHVlLm9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCB8fCBrZXlTcGVjaWZpY1ZhbHVlLm9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQikge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXMgPSBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjoga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjoga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgc3ViSW5keCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlc1tzdWJJbmR4XSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHZhbHVlIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkVG9rZW5zID0gdGhpcy52ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyh0b2tlbnMpO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdH1cblx0fVxuXG5cdC8vZXZlcnkgc2luZ2xlIHNlbGVjdCBtZW51IHR5cGUgc2hvdWxkIGhhdmUgb25seSBvbmUgdmFsdWUsIGVsc2Ugc3BsaWNlIHRvIG9uZSB2YWx1ZSBhbmQgdXBkYXRlIHRoZSAgbWVzc2FnZSBzdHJpcFxuXHR2ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIikge1xuXHRcdFx0XHRpZiAodG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1swXS5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMucHVzaCh0b2tlbi5sYWJlbCk7XG5cdFx0XHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1swXS5zZWxlY3RlZFZhbHVlcy5zcGxpY2UoMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnN0YXRlLnNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCA9IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU0lOR0xFX1ZBTFVFX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRgPHN0cm9uZz4ke3NpbmdsZVNlbGVjdFRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gXG5cdFx0XHRdKTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdGNsZWFyTWVzc2FnZVN0cmlwKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gdGV4dDtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHR9XG5cblx0Y3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTogUG9wb3ZlciB7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IChcblx0XHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItaW5uZXJQb3BvdmVyXCJ9XG5cdFx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0XHRzaG93SGVhZGVyPXt0cnVlfVxuXHRcdFx0XHRcdHBsYWNlbWVudD17UGxhY2VtZW50VHlwZS5Cb3R0b219XG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU1lZGl1bU1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Zm9vdGVyOiB0aGlzLmdldFRvb2xiYXIoKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdGdldFRvb2xiYXIoKTogT3ZlcmZsb3dUb29sYmFyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMudG9vbGJhcikge1xuXHRcdFx0Y29uc3Qgb2tCdXR0b24gPSB0aGlzLmdldE9rQnV0dG9uKCk7XG5cdFx0XHRjb25zdCBzaG93QWxsQnV0dG9uID0gdGhpcy5nZXRTaG93QWxsQnV0dG9uKCk7XG5cdFx0XHR0aGlzLnRvb2xiYXIgPSAoXG5cdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHRcdHtva0J1dHRvbn1cblx0XHRcdFx0XHRcdFx0XHR7c2hvd0FsbEJ1dHRvbn1cblx0XHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50b29sYmFyO1xuXHR9XG5cblx0Z2V0T2tCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMub2tCdXR0b24pIHtcblx0XHRcdHRoaXMub2tCdXR0b24gPSA8QnV0dG9uIHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9PS1wiKX0gdHlwZT17QnV0dG9uVHlwZS5FbXBoYXNpemVkfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub2tCdXR0b247XG5cdH1cblxuXHRnZXRTaG93QWxsQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLnNob3dBbGxCdXR0b24pIHtcblx0XHRcdHRoaXMuc2hvd0FsbEJ1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NIT1dfQUxMX0lURU1TXCIpfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2hvd0FsbEJ1dHRvbjtcblx0fVxuXG5cdGZvcm1hdFRva2Vucyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdHJldHVybiB0b2tlbnMubWFwKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi50b2tlbixcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vTWFraW5nIHN1cmUgdGhhdCBvbmx5IHRoZSBpZCBwYXJ0IGlzIHBhc3NlZFxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IHZhbHVlLm9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWUuc2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWwpID0+IHZhbC52YWx1ZSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZGVlcENsb25lKHRva2VuKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG9uU3RhdGVDaGFuZ2UoY2hhbmdlZFByb3BzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInRva2Vuc1wiKSkge1xuXHRcdFx0aWYgKHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkKSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwidG9rZW5zQ2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0dG9rZW5zOiB0aGlzLmZvcm1hdFRva2Vucyh0aGlzLnN0YXRlLnRva2VucyBhcyB1bmtub3duIGFzIFRva2VuRGVmaW5pdGlvbltdKSxcblx0XHRcdFx0XHRyZXNldDogdGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2Vuc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRoaXMuc3RhdGUudG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHRpZiAoISh0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA/PyBmYWxzZSkpIHtcblx0XHRcdFx0dGhpcy5jaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vUmVzZXR0aW5nIHRvIGRlZmF1bHQgdmFsdWVzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdFx0Ly8gIG9uc2FwZm9jdXNsZWF2ZSBtZXRob2QgaW4gc2FwLm0uVG9rZW5pemVyIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGluZyB0aGUgcmVuZGVybW9kZSBvZiB0b2tlbml6ZXIgdG8gXCJOYXJyb3dcIiBmcm9tIFwibG9vc2VcIlxuXHRcdC8vICBJbiB0aGlzIHByb2Nlc3MgdGhlcmUgYXJlIG11bHRpcGxlIHBvcG92ZXIgaXNzdWVzIGhhcHBlbmluZ1xuXHRcdC8vICBTbyBhcyBhIHRlbXBvcmFyeSBmaXggb3ZlcnJpZGluZyB0aGUgZnVuY3Rpb25cblx0XHQodGhpcy50b2tlbml6ZXI/LmN1cnJlbnQgYXMgRm9jdXNIYW5kbGluZ0NvbnRyb2wpLm9uc2FwZm9jdXNsZWF2ZSA9ICgpOiB2b2lkID0+IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iVXBQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwidGh1bWJVcFwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJEb3duUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iRG93blwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gZmFsc2U7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9GRUVEQkFDS19TRU5UXCIpKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVkJveCB7XG5cdFx0Y29uc3QgJHRvcEdvQnRuID0gY3JlYXRlUmVmZXJlbmNlPEJ1dHRvbj4oKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYlVwXCIpO1xuXHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYkRvd25cIik7XG5cdFx0Y29uc3Qgb3V0VkJveCA9IChcblx0XHRcdDxWQm94PlxuXHRcdFx0XHQ8RmxleEJveCByZW5kZXJUeXBlPVwiQmFyZVwiPlxuXHRcdFx0XHRcdDxFYXN5RmlsdGVySW5wdXRcblx0XHRcdFx0XHRcdHJlY29tbWVuZGVkVmFsdWVzPXt0aGlzLnJlY29tbWVuZGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0cmVmPXt0aGlzLmVhc3lGaWx0ZXJJbnB1dH1cblx0XHRcdFx0XHRcdGVudGVyUHJlc3NlZD17dGhpcy5vbkVudGVyUHJlc3NlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0cXVlcnlDaGFuZ2VkPXsoZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInF1ZXJ5XCIpIH0pO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdGxpdmVDaGFuZ2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQvPlxuXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2FpXCJ9XG5cdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdHJlZj17JHRvcEdvQnRufVxuXHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9HT1wiKX1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuRW1waGFzaXplZH1cblx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLm9uR29CdXR0b25QcmVzcy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRyZW5kZXJUeXBlPVwiQmFyZVwiXG5cdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1Jlc3VsdFwiKX1cblx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Ub3BcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxGbGV4Qm94IGNsYXNzPXtcInNhcEZlQ29udHJvbHNHYXA4cHhcIn0gcmVuZGVyVHlwZT1cIkJhcmVcIiBhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9IHdyYXA9e0ZsZXhXcmFwLldyYXB9PlxuXHRcdFx0XHRcdFx0PEFJTm90aWNlIHJlc291cmNlQnVuZGxlPXt0aGlzLnJlc291cmNlQnVuZGxlfSAvPlxuXHRcdFx0XHRcdFx0PFRva2VuaXplclxuXHRcdFx0XHRcdFx0XHRlZGl0YWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRva2VuaXplckVkaXRhYmxlXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1Rva2VuaXplclwifVxuXHRcdFx0XHRcdFx0XHR0b2tlbnM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRva2Vuc1wiKX1cblx0XHRcdFx0XHRcdFx0cmVuZGVyTW9kZT17VG9rZW5pemVyUmVuZGVyTW9kZS5Mb29zZX1cblx0XHRcdFx0XHRcdFx0cmVmPXt0aGlzLnRva2VuaXplcn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnM6IChpZHg6IG51bWJlciwgY3R4OiBDb250ZXh0KTogVG9rZW4gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gY3R4LmdldE9iamVjdCgpIGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxUb2tlblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGhpcy5zdGF0ZS50b2tlbnMua2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXt0aGlzLnN0YXRlLnRva2Vucy5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5zdGF0ZS50b2tlbnMua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYW5kYXRvcnk9e3RoaXMuaXNLZXlNYW5kYXRvcnkob2JqZWN0LmtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnVzeT17dGhpcy5zdGF0ZS50b2tlbnMuYnVzeX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWxldGU9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRva2VuSW5kZXggPSB0aGlzLnN0YXRlLnRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiB0b2tlbi5rZXkgPT09IG9iamVjdC5rZXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMuY29uY2F0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbnM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJUb2tlbkluZm9cIiB2YWx1ZT17b2JqZWN0fSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwicG9wb3ZlclwiIHZhbHVlPXt0aGlzLmlubmVyQ29udHJvbFBvcG92ZXJ9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJlYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIgdmFsdWU9e3RoaXN9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT1cImNvZGVMaXN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17dGhpcy5maWx0ZXJCYXJNZXRhZGF0YT8uZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSBvYmplY3Qua2V5KT8uY29kZUxpc3R9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9Ub2tlbj5cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9Ub2tlbml6ZXI+XG5cdFx0XHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25Ub2tlbml6ZXJ9LCB7dGh1bWJEb3duQnV0dG9uVG9rZW5pemVyfVxuXHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1JFU0VUXCIpfVxuXHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzZXRTdGF0ZSh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py4kc2VhcmNoSW5wdXQuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIiBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9PlxuXHRcdFx0XHRcdDxNZXNzYWdlU3RyaXBcblx0XHRcdFx0XHRcdHR5cGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFR5cGVcIil9XG5cdFx0XHRcdFx0XHR0ZXh0PXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJtZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHRcdDxIQm94IHZpc2libGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93TWVzc2FnZVN0cmlwXCIpLCBub3QoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1Jlc3VsdFwiKSkpfT5cblx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZX0sIHt0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlfVxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0PC9WQm94PlxuXHRcdCkgYXMgVkJveDtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJHRvcEdvQnRuLmN1cnJlbnQhLCBcInByZXNzXCIsIFwiZmU6YWk6c2VhcmNoXCIpO1xuXHRcdHJldHVybiBvdXRWQm94O1xuXHR9XG5cblx0YXN5bmMgb25Hb0J1dHRvblByZXNzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdGxldCBjdXJyZW50SW5wdXRWYWx1ZSA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgY3VycmVudElucHV0UGxhY2Vob2xkZXIgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRQbGFjZWhvbGRlcigpO1xuXG5cdFx0aWYgKGN1cnJlbnRJbnB1dFZhbHVlID09PSBcIlwiICYmIGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShjdXJyZW50SW5wdXRQbGFjZWhvbGRlciB8fCBcIlwiKTtcblx0XHRcdGN1cnJlbnRJbnB1dFZhbHVlID0gY3VycmVudElucHV0UGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMub25Hb1ByZXNzKGN1cnJlbnRJbnB1dFZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIHN0YXRlIG9mIHRoZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIHRvIGl0cyBpbml0aWFsIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICogLSBDbGVhcnMgYWxsIG5vbi1tYW5kYXRvcnkgdG9rZW5zIGFuZCByZXNldHMgbWFuZGF0b3J5IHRva2VucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlc1xuXHQgKiAtIFJlc2V0cyB0aGUgaW5wdXQgZmllbGQgdG8gaXRzIGRlZmF1bHQgcGxhY2Vob2xkZXIgdGV4dFxuXHQgKiAtIENsZWFycyBhbGwgZXJyb3IgdmFsdWUgc3RhdGVzIGFuZCBtZXNzYWdlcyBmcm9tIHRva2Vuc1xuXHQgKiAtIENsZWFycyBhbnkgZGlzcGxheWVkIG1lc3NhZ2Ugc3RyaXBzXG5cdCAqIC0gT3B0aW9uYWxseSBmaXJlcyB0aGUgY2xlYXJGaWx0ZXJzIGV2ZW50IHRvIG5vdGlmeSBjb25zdW1lcnNcblx0ICogQHBhcmFtIGNsZWFyQWxsRmlsdGVycyBJZiB0cnVlLCBmaXJlcyB0aGUgY2xlYXJGaWx0ZXJzIGV2ZW50IHRvIG5vdGlmeSBjb25zdW1lcnMgdGhhdCBmaWx0ZXJzIHNob3VsZCBiZSBjbGVhcmVkIGVsc2UganVzdCByZXNldHMgdGhlIHRva2VucyB3aXRob3V0IGZpcmluZyB0aGUgZXZlbnRcblx0ICogQHBhcmFtIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zIElmIHRydWUsIGluZGljYXRlcyB0aGF0IHRoZSByZXNldEJ1dHRvbiBpcyByZXN0b3JpbmcgdG9rZW5zIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzXG5cdCAqL1xuXG5cdHJlc2V0U3RhdGUoY2xlYXJBbGxGaWx0ZXJzID0gdHJ1ZSwgaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGlmIChjbGVhckFsbEZpbHRlcnMpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiY2xlYXJGaWx0ZXJzXCIpO1xuXHRcdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblJlc2V0XCIpO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL1NldCB0aGUgVmFsdWUgU3RhdGVzIG9mIGFsbCB0aGUgVG9rZW5zIGJhY2sgdG8gTm9uZVxuXHRcdHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5Ob25lKSk7XG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgbnVsbCkpO1xuXHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTsgLy9jbGVhciB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0fVxuXG5cdC8vVGhlIGJlbG93IGNvZGUgdXBkYXRlcyB0aGUgZXhpc3Rpbmcgc3RhdGUgYnkgZmV0Y2hpbmcgdGhlIGtleSBhbmQgc2VsZWN0ZWRWYWx1ZXNcblx0dXBkYXRlVG9rZW5BcnJheShcblx0XHRjaGFuZ2VUeXBlOiBUb2tlblNldHRlcnMsXG5cdFx0bmV3VG9rZW5TcGVjaWZpY1ZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuS2V5OiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgdG9rZW5JbmRleCA9IG5ld1Rva2Vucy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSB0b2tlbktleSk7XG5cdFx0Y29uc3QgdG9rZW4gPSBuZXdUb2tlbnNbdG9rZW5JbmRleF07XG5cdFx0aWYgKHRva2VuSW5kZXggIT0gLTEpIHtcblx0XHRcdHN3aXRjaCAoY2hhbmdlVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic2V0U2VsZWN0ZWRWYWx1ZXNcIjpcblx0XHRcdFx0XHR0aGlzLnNldFNlbGVjdGVkVmFsdWVzKHRva2VuIGFzIFRva2VuRGVmaW5pdGlvbiwgbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcywgdG9rZW5JbmRleCwgbmV3VG9rZW5zIGFzIFRva2VuRGVmaW5pdGlvbltdKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcztcblx0XHRcdFx0XHQvL1JlbW92ZSB0aGUgdG9rZW4gZW50aXJlbHlcblx0XHRcdFx0XHRpZiAoIXRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSAmJiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU3BlY2lmeWluZyBhIHNldHRlciB0aGF0IGlzIG91dCBvZiB0aGUgYm91bmRhcnlcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBVcGRhdGUgdGhlIHN0YXRlIGJ5IGFzc2lnbmluZyB0aGUgbmV3IHRva2VucyBhcnJheVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW107XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSBuZXdUb2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsb3NlSW5uZXJDb250cm9sUG9wb3ZlcigpOiB2b2lkIHtcblx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXI/LmNsb3NlKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFNlbGVjdGVkVmFsdWVzKFxuXHRcdHRva2VuOiBUb2tlbkRlZmluaXRpb24sXG5cdFx0bmV3VG9rZW5TcGVjaWZpY1ZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuSW5kZXg6IG51bWJlcixcblx0XHRuZXdUb2tlbnM6IFRva2VuRGVmaW5pdGlvbltdXG5cdCk6IHZvaWQge1xuXHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdGlzS2V5TWFuZGF0b3J5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLm1hbmRhdG9yeUtleU1hcCkge1xuXHRcdFx0dGhpcy5tYW5kYXRvcnlLZXlNYXAgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubWFuZGF0b3J5S2V5TWFwW2tleV0gPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHRyZW1vdmVOb25NYW5kYXRvcnlUb2tlbnMoKTogdGhpcyB7XG5cdFx0Y29uc3QgbmV3VG9rZW46IFRva2VuRGVmaW5pdGlvbltdID0gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KTtcblx0XHR9KTtcblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VuO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dXBkYXRlRmlsdGVySW5wdXQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJWYWx1ZTogc3RyaW5nID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKSB8fCBcIlwiO1xuXHRcdGlmICh2YWx1ZSA9PT0gXCJ0b2tlblVwZGF0ZWRcIiAmJiBjdXJyVmFsdWUgIT09IFwiXCIpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UGxhY2Vob2xkZXIoY3VyclZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBcInRva2VuUmVzZXRcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHR9XG5cdH1cblxuXHRnZXRUb2tlbnNJbkluaXRpYWxTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgbWFuZGF0b3J5VG9rZW5zID0gbmV3VG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGlmICh0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1hbmRhdG9yeVRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogW10gfSkpO1xuXHR9XG5cblx0Z2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGNvbnN0IGlzS2V5TWFuZGF0b3J5ID0gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdFx0aWYgKGlzS2V5TWFuZGF0b3J5KSB7XG5cdFx0XHRcdHJldHVybiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogRWFzeUZpbHRlclRva2VuW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlcXVpcmVkS2V5cyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi5rZXkpO1xuXHRcdHJldHVybiB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5maWx0ZXIoKHRva2VuKSA9PiByZXF1aXJlZEtleXMuaW5jbHVkZXModG9rZW4uZ2V0S2V5KCkpKSBhc1xuXHRcdFx0fCBFYXN5RmlsdGVyVG9rZW5bXVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKHJtOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBFYXN5RmlsdGVyQmFyQ29udGFpbmVyKTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiA8c3BhbiByZWY9e2NvbnRyb2x9Pntjb250cm9sLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKX08L3NwYW4+O1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNEQTtFQUNBO0VBd0JBO0VBK0NBO0VBcUJBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQxQ0MsY0FBYyxDQUFDLG1EQUFtRCxDQUFDLEVBQUFDLEtBQUEsR0FFbEVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc1QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBRzVCSCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FHNUJKLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQUksS0FBQSxHQUczQkwsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFRLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBRzNCTixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVcsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHOUJDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFFLE1BQUEsR0FHakJDLFdBQVcsQ0FBQztJQUFFVixJQUFJLEVBQUU7RUFBc0IsQ0FBQyxDQUFDLEVBQUFXLE1BQUEsR0FHNUNDLEtBQUssQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0FHUEQsS0FBSyxDQUFDLENBQUMsRUFBQUUsTUFBQSxHQUdQRixLQUFLLENBQUMsQ0FBQyxFQUFBRyxNQUFB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