@sapui5/sap.fe.controls 1.148.0 → 1.149.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/controls/.library +1 -1
  3. package/src/sap/fe/controls/AiNoticeHelper.js +26 -5
  4. package/src/sap/fe/controls/AiNoticeHelper.tsx +31 -3
  5. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +68 -44
  6. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +35 -4
  7. package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +103 -19
  8. package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +100 -7
  9. package/src/sap/fe/controls/easyFilter/Token.js +4 -4
  10. package/src/sap/fe/controls/easyFilter/innerControls/MenuWithSingleSelectFactory.js +2 -2
  11. package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +7 -3
  12. package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +5 -0
  13. package/src/sap/fe/controls/library.js +1 -1
  14. package/src/sap/fe/controls/messagebundle.properties +4 -0
  15. package/src/sap/fe/controls/messagebundle_ar.properties +9 -3
  16. package/src/sap/fe/controls/messagebundle_bg.properties +9 -3
  17. package/src/sap/fe/controls/messagebundle_ca.properties +9 -3
  18. package/src/sap/fe/controls/messagebundle_cnr.properties +9 -3
  19. package/src/sap/fe/controls/messagebundle_cs.properties +9 -3
  20. package/src/sap/fe/controls/messagebundle_cy.properties +9 -3
  21. package/src/sap/fe/controls/messagebundle_da.properties +9 -3
  22. package/src/sap/fe/controls/messagebundle_de.properties +9 -3
  23. package/src/sap/fe/controls/messagebundle_el.properties +9 -3
  24. package/src/sap/fe/controls/messagebundle_en.properties +9 -3
  25. package/src/sap/fe/controls/messagebundle_en_GB.properties +9 -3
  26. package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +6 -3
  27. package/src/sap/fe/controls/messagebundle_es.properties +9 -3
  28. package/src/sap/fe/controls/messagebundle_es_MX.properties +9 -3
  29. package/src/sap/fe/controls/messagebundle_et.properties +9 -3
  30. package/src/sap/fe/controls/messagebundle_fi.properties +9 -3
  31. package/src/sap/fe/controls/messagebundle_fr.properties +9 -3
  32. package/src/sap/fe/controls/messagebundle_fr_CA.properties +9 -3
  33. package/src/sap/fe/controls/messagebundle_hi.properties +9 -3
  34. package/src/sap/fe/controls/messagebundle_hr.properties +9 -3
  35. package/src/sap/fe/controls/messagebundle_hu.properties +7 -1
  36. package/src/sap/fe/controls/messagebundle_id.properties +9 -3
  37. package/src/sap/fe/controls/messagebundle_it.properties +9 -3
  38. package/src/sap/fe/controls/messagebundle_iw.properties +9 -3
  39. package/src/sap/fe/controls/messagebundle_ja.properties +9 -3
  40. package/src/sap/fe/controls/messagebundle_kk.properties +9 -3
  41. package/src/sap/fe/controls/messagebundle_ko.properties +9 -3
  42. package/src/sap/fe/controls/messagebundle_lt.properties +9 -3
  43. package/src/sap/fe/controls/messagebundle_lv.properties +9 -3
  44. package/src/sap/fe/controls/messagebundle_mk.properties +9 -3
  45. package/src/sap/fe/controls/messagebundle_ms.properties +9 -3
  46. package/src/sap/fe/controls/messagebundle_nl.properties +9 -3
  47. package/src/sap/fe/controls/messagebundle_no.properties +7 -1
  48. package/src/sap/fe/controls/messagebundle_pl.properties +7 -1
  49. package/src/sap/fe/controls/messagebundle_pt.properties +9 -3
  50. package/src/sap/fe/controls/messagebundle_pt_PT.properties +9 -3
  51. package/src/sap/fe/controls/messagebundle_ro.properties +9 -3
  52. package/src/sap/fe/controls/messagebundle_ru.properties +9 -3
  53. package/src/sap/fe/controls/messagebundle_sh.properties +9 -3
  54. package/src/sap/fe/controls/messagebundle_sk.properties +9 -3
  55. package/src/sap/fe/controls/messagebundle_sl.properties +9 -3
  56. package/src/sap/fe/controls/messagebundle_sr.properties +9 -3
  57. package/src/sap/fe/controls/messagebundle_sv.properties +9 -3
  58. package/src/sap/fe/controls/messagebundle_th.properties +10 -4
  59. package/src/sap/fe/controls/messagebundle_tr.properties +9 -3
  60. package/src/sap/fe/controls/messagebundle_uk.properties +9 -3
  61. package/src/sap/fe/controls/messagebundle_vi.properties +9 -3
  62. package/src/sap/fe/controls/messagebundle_zh_CN.properties +9 -3
  63. package/src/sap/fe/controls/messagebundle_zh_TW.properties +9 -3
  64. package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +2 -5
  65. package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +5 -8
  66. package/src/sap/fe/controls/themes/base/EasyFilter.less +8 -4
@@ -2,10 +2,10 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2026 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/ShellHistoryProvider", "sap/m/Button", "sap/m/CustomListItem", "sap/m/FlexBox", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Input", "sap/m/List", "sap/m/Popover", "sap/m/Text", "sap/m/Title", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/InvisibleMessage", "sap/ui/core/Lib", "sap/ui/core/library", "./PXFeedback", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, EventDelegateHook, jsx, ShellHistoryProvider, Button, CustomListItem, FlexBox, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Input, List, Popover, Text, Title, library, Control, CustomData, InvisibleMessage, Lib, coreLibrary, PXFeedback, _jsx, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/ShellHistoryProvider", "sap/m/Button", "sap/m/CustomListItem", "sap/m/FlexBox", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Input", "sap/m/List", "sap/m/Popover", "sap/m/Text", "sap/m/Title", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/InvisibleMessage", "sap/ui/core/InvisibleText", "sap/ui/core/Lib", "sap/ui/core/library", "./PXFeedback", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, EventDelegateHook, jsx, ShellHistoryProvider, Button, CustomListItem, FlexBox, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Input, List, Popover, Text, Title, library, Control, CustomData, InvisibleMessage, InvisibleText, Lib, coreLibrary, PXFeedback, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;
9
9
  var _exports = {};
10
10
  var triggerPXIntegration = PXFeedback.triggerPXIntegration;
11
11
  var ValueState = coreLibrary.ValueState;
@@ -23,6 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
23
23
  var defineUI5Class = ClassSupport.defineUI5Class;
24
24
  var defineState = ClassSupport.defineState;
25
25
  var aggregation = ClassSupport.aggregation;
26
+ var not = BindingToolkit.not;
26
27
  var lessThan = BindingToolkit.lessThan;
27
28
  var length = BindingToolkit.length;
28
29
  var equal = BindingToolkit.equal;
@@ -40,18 +41,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
40
41
  type: "string"
41
42
  }), _dec4 = property({
42
43
  type: "array"
43
- }), _dec5 = event(), _dec6 = event(), _dec7 = event(), _dec8 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
44
+ }), _dec5 = property({
45
+ type: "string"
46
+ }), _dec6 = event(), _dec7 = event(), _dec8 = event(), _dec9 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
44
47
  function EasyFilterInput(properties, others) {
45
48
  var _this;
46
49
  _this = _Control.call(this, properties, others) || this;
47
50
  _initializerDefineProperty(_this, "$searchInput", _descriptor, _this);
48
51
  _initializerDefineProperty(_this, "appId", _descriptor2, _this);
49
52
  _initializerDefineProperty(_this, "recommendedValues", _descriptor3, _this);
50
- _initializerDefineProperty(_this, "queryChanged", _descriptor4, _this);
51
- _initializerDefineProperty(_this, "enterPressed", _descriptor5, _this);
52
- _initializerDefineProperty(_this, "liveChange", _descriptor6, _this);
53
+ _initializerDefineProperty(_this, "ariaLabel", _descriptor4, _this);
54
+ _initializerDefineProperty(_this, "queryChanged", _descriptor5, _this);
55
+ _initializerDefineProperty(_this, "enterPressed", _descriptor6, _this);
56
+ _initializerDefineProperty(_this, "liveChange", _descriptor7, _this);
53
57
  _this.favoriteButtonClicked = false;
54
- _initializerDefineProperty(_this, "state", _descriptor7, _this);
58
+ _initializerDefineProperty(_this, "state", _descriptor8, _this);
55
59
  _this.initialize();
56
60
  return _this;
57
61
  }
@@ -75,6 +79,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
75
79
  _proto.getPlaceholder = function getPlaceholder() {
76
80
  return this.$searchInput.getPlaceholder();
77
81
  };
82
+ _proto.setAriaLabel = function setAriaLabel(value) {
83
+ this.setProperty("ariaLabel", value, true);
84
+ if (this.$ariaDescriptionText) {
85
+ this.$ariaDescriptionText.setText(value);
86
+ } else {
87
+ this.$ariaDescriptionText = new InvisibleText({
88
+ text: value
89
+ });
90
+ this.$ariaDescriptionText.toStatic();
91
+ this.$searchInput?.addAriaDescribedBy(this.$ariaDescriptionText.getId());
92
+ }
93
+ return this;
94
+ };
78
95
  _proto.initialize = function initialize() {
79
96
  this.state.recommendedQueries = this.recommendedValues ?? [];
80
97
  this.resourceBundle = Lib.getResourceBundleFor("sap.fe.controls");
@@ -91,9 +108,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
91
108
  this.$searchInput.closeValueStateMessage();
92
109
  };
93
110
  _proto.createInput = function createInput() {
111
+ // $ariaLabelText provides the field label via aria-labelledby (reads the placeholder text)
112
+ this.$ariaLabelText = new InvisibleText({
113
+ text: this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")
114
+ });
94
115
  this.$searchInput = _jsx(Input, {
95
116
  width: "100%",
96
- showClearIcon: true,
117
+ showClearIcon: not(bindState(this.state, "isQuerySuccessful")),
118
+ showValueHelp: bindState(this.state, "isQuerySuccessful"),
119
+ valueHelpIconSrc: bindState(this.state, "favoriteIconName"),
120
+ valueHelpRequest: () => {
121
+ this.onFavoriteIconPress();
122
+ },
97
123
  change: e => {
98
124
  this.fireEvent("queryChanged", {
99
125
  query: e.getParameter("value")
@@ -101,19 +127,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
101
127
  },
102
128
  liveChange: e => {
103
129
  this.state.queryChanged = true;
130
+ // When user starts typing, hide favorite icon and show X
131
+ this.state.isQuerySuccessful = false;
132
+ if (e.getParameter("value") === "") {
133
+ this.state.currentExecutedQuery = "";
134
+ this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
135
+ }
104
136
  this.fireEvent("liveChange");
105
137
  if (!e.getSource().getValue() && !(this.$favoritePopover?.isOpen() ?? false)) {
106
138
  this.openSuggestionPopover();
107
139
  }
108
- if (e.getParameter("value") === "") {
109
- this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
110
- }
111
140
  if (this.$searchInput.getValueState() === ValueState.Warning) {
112
141
  this.setAsValid();
113
142
  }
114
143
  },
115
144
  placeholder: this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")
116
145
  });
146
+
147
+ // aria-labelledby for field label (placeholder text), aria-describedby for mandatory hint (set later via setAriaLabel)
148
+ this.$ariaLabelText.toStatic();
149
+ this.$searchInput.addAriaLabelledBy(this.$ariaLabelText.getId());
117
150
  const favoritePopover = this.createFavoritePopover();
118
151
  this.$favoritePopover = favoritePopover;
119
152
  this.$searchInput.addDependent(favoritePopover);
@@ -217,8 +250,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
217
250
  this.state.recentQueries = recentQueries;
218
251
  }
219
252
  };
220
- _proto.onStateChange = function onStateChange() {
221
- let changedProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
253
+ _proto.onStateChange = function onStateChange(changedProps = []) {
222
254
  if (changedProps.includes("favoriteQueries") || changedProps.includes("recentQueries")) {
223
255
  this.shellHistoryProvider?.setFavoriteQueries(this.state.favoriteQueries);
224
256
  this.shellHistoryProvider?.setRecentQueries(this.state.recentQueries.map(query => query));
@@ -229,6 +261,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
229
261
  };
230
262
  });
231
263
  }
264
+ // Update favorite icon when query or favorites change
265
+ if (changedProps.includes("currentExecutedQuery") || changedProps.includes("favoriteQueries")) {
266
+ this.updateFavoriteIcon();
267
+ }
268
+ };
269
+ _proto.updateFavoriteIcon = function updateFavoriteIcon() {
270
+ const isFavorited = this.isCurrentQueryFavorited();
271
+ this.state.favoriteIconName = isFavorited ? "sap-icon://favorite" : "sap-icon://add-favorite";
272
+ this.state.favoriteIconEnabled = isFavorited || this.state.favoriteQueries.length < 5;
273
+ this.$searchInput?.toggleStyleClass("sapFEFavoriteIconDisabled", !this.state.favoriteIconEnabled);
274
+ const valueHelpBtn = this.$searchInput?.getDomRef()?.querySelector('[aria-label="Show Value Help"]');
275
+ if (valueHelpBtn) {
276
+ valueHelpBtn.title = this.state.favoriteIconEnabled ? this.resourceBundle.getText("M_EASY_FILTER_EMPTY_START") : this.resourceBundle.getText("M_EASY_FILTER_MAX_FAVORITE_REACHED");
277
+ }
232
278
  };
233
279
  _proto.initShellHistoryProvider = async function initShellHistoryProvider() {
234
280
  try {
@@ -445,6 +491,35 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
445
491
  }
446
492
  this.state.favoriteQueries = newFavorite;
447
493
  };
494
+ _proto.isCurrentQueryFavorited = function isCurrentQueryFavorited() {
495
+ const currentQuery = this.state.currentExecutedQuery.toLowerCase().trim();
496
+ return this.state.favoriteQueries.some(fav => fav.toLowerCase().trim() === currentQuery);
497
+ };
498
+ _proto.setQuerySuccess = function setQuerySuccess(query) {
499
+ this.state.currentExecutedQuery = query;
500
+ this.state.isQuerySuccessful = true;
501
+ this.updateFavoriteIcon();
502
+ };
503
+ _proto.setQueryFailure = function setQueryFailure() {
504
+ this.state.isQuerySuccessful = false;
505
+ this.state.currentExecutedQuery = "";
506
+ };
507
+ _proto.clearQueryStatus = function clearQueryStatus() {
508
+ this.state.isQuerySuccessful = false;
509
+ this.state.currentExecutedQuery = "";
510
+ };
511
+ _proto.onFavoriteIconPress = function onFavoriteIconPress() {
512
+ if (!this.state.favoriteIconEnabled) {
513
+ return;
514
+ }
515
+ // Toggle favorite status for the current query
516
+ const isFavorited = this.isCurrentQueryFavorited();
517
+ if (isFavorited) {
518
+ this.removeFromFavorites(this.state.currentExecutedQuery);
519
+ } else {
520
+ this.addToFavorites(this.state.currentExecutedQuery);
521
+ }
522
+ };
448
523
  EasyFilterInput.render = function render(rm, control) {
449
524
  return jsx.renderUsingRenderManager(rm, control, () => {
450
525
  return _jsx("span", {
@@ -470,22 +545,27 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
470
545
  enumerable: true,
471
546
  writable: true,
472
547
  initializer: null
473
- }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec5], {
548
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "ariaLabel", [_dec5], {
549
+ configurable: true,
550
+ enumerable: true,
551
+ writable: true,
552
+ initializer: null
553
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec6], {
474
554
  configurable: true,
475
555
  enumerable: true,
476
556
  writable: true,
477
557
  initializer: null
478
- }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "enterPressed", [_dec6], {
558
+ }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "enterPressed", [_dec7], {
479
559
  configurable: true,
480
560
  enumerable: true,
481
561
  writable: true,
482
562
  initializer: null
483
- }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "liveChange", [_dec7], {
563
+ }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "liveChange", [_dec8], {
484
564
  configurable: true,
485
565
  enumerable: true,
486
566
  writable: true,
487
567
  initializer: null
488
- }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec8], {
568
+ }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec9], {
489
569
  configurable: true,
490
570
  enumerable: true,
491
571
  writable: true,
@@ -496,11 +576,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
496
576
  recentQueries: [],
497
577
  recentQueriesWitFavorites: [],
498
578
  favoriteQueries: [],
499
- recommendedQueries: []
579
+ recommendedQueries: [],
580
+ currentExecutedQuery: "",
581
+ isQuerySuccessful: false,
582
+ favoriteIconName: "sap-icon://add-favorite",
583
+ favoriteIconEnabled: true
500
584
  };
501
585
  }
502
586
  }), _class2)) || _class);
503
587
  _exports = EasyFilterInput;
504
588
  return _exports;
505
589
  }, false);
506
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJmYXZvcml0ZUJ1dHRvbkNsaWNrZWQiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwicG9wb3ZlckludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJjcmVhdGVJbnB1dCIsInNldEFzSW52YWxpZCIsIm1lc3NhZ2UiLCJzZXRWYWx1ZVN0YXRlIiwiVmFsdWVTdGF0ZSIsIldhcm5pbmciLCJzZXRWYWx1ZVN0YXRlVGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsInNldEFzVmFsaWQiLCJOb25lIiwiY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSIsIl9qc3giLCJJbnB1dCIsIndpZHRoIiwic2hvd0NsZWFySWNvbiIsImNoYW5nZSIsImUiLCJmaXJlRXZlbnQiLCJxdWVyeSIsImdldFBhcmFtZXRlciIsImxpdmVDaGFuZ2UiLCJxdWVyeUNoYW5nZWQiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VGV4dCIsImdldFZhbHVlU3RhdGUiLCJwbGFjZWhvbGRlciIsImZhdm9yaXRlUG9wb3ZlciIsImNyZWF0ZUZhdm9yaXRlUG9wb3ZlciIsImFkZERlcGVuZGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmtleXVwIiwia2V5Iiwib25FbnRlclByZXNzZWQiLCJjbG9zZSIsIm9ua2V5ZG93biIsImxlbmd0aCIsInByZXZlbnREZWZhdWx0IiwicG9wb3ZlckNvbmFpbmVyIiwiZ2V0Q29udGVudCIsImNvbnRhaW5lckl0ZW1zIiwiZ2V0SXRlbXMiLCJmaW5kIiwiaXRlbSIsImlzRm9jdXNhYmxlIiwiZm9jdXMiLCJvbnRhcCIsIm9uZm9jdXNpbiIsInRhcmdldFRleHQiLCJ0YXJnZXQiLCJvdXRlclRleHQiLCJ0YXJnZXRJZCIsImlkIiwiaW5jbHVkZXMiLCJmYXZvcml0ZVF1ZXJpZXMiLCJmaWx0ZXIiLCJkYXRhIiwidG9Mb3dlckNhc2UiLCJyZWNlbnRRdWVyaWVzIiwib25BZnRlclJlbmRlcmluZyIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJzaGVsbEhpc3RvcnlQcm92aWRlciIsImluaXRTaGVsbEhpc3RvcnlQcm92aWRlciIsImdldEZhdm9yaXRlUXVlcmllcyIsImdldFJlY2VudFF1ZXJpZXMiLCJvcGVuQnkiLCJyZXF1ZXN0RmF2b3JpdGUiLCJtYWdpY1F1ZXJ5IiwiYWRkUmVjZW50UXVlcnkiLCJxdWVyeVN0cmluZyIsInJlcGxhY2UiLCJyZWNlbnRRdWVyeUluZGV4IiwiZmluZEluZGV4IiwiY29uY2F0Iiwic2xpY2UiLCJ1bnNoaWZ0Iiwib25TdGF0ZUNoYW5nZSIsImNoYW5nZWRQcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInNldEZhdm9yaXRlUXVlcmllcyIsInNldFJlY2VudFF1ZXJpZXMiLCJtYXAiLCJyZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzIiwicmVjZW50UXVlcnkiLCJ0ZXh0IiwiaXNGYXZvcml0ZSIsImZhdm9yaXRlUXVlcnkiLCJTaGVsbEhpc3RvcnlQcm92aWRlciIsImFwcElkIiwiZXJyb3IiLCJMb2ciLCJQb3BvdmVyIiwiZ2V0SWQiLCJzaG93SGVhZGVyIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJzaG93QXJyb3ciLCJpbml0aWFsRm9jdXMiLCJjbGFzcyIsInZpc2libGUiLCJlcXVhbCIsImJpbmRTdGF0ZSIsImNoaWxkcmVuIiwiY29udGVudCIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiQ29sdW1uIiwicmVuZGVyVHlwZSIsIml0ZW1zIiwiVGl0bGUiLCJ0aXRsZVN0eWxlIiwiVGl0bGVMZXZlbCIsIkg2IiwiSEJveCIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJjdHgiLCJCdXR0b24iLCJnZXRPYmplY3QiLCJwcmVzcyIsImJpbmQiLCJMaXN0Iiwibm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwidGl0bGUiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkV4dHJhU21hbGwiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsImRlc2NyaXB0aW9uIiwiQ3VzdG9tTGlzdEl0ZW0iLCJhcmlhTGFiZWxsZWRCeSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiX2pzeHMiLCJSb3ciLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIlRleHQiLCJ0b29sdGlwIiwid3JhcHBpbmciLCJpY29uIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiaW5kZXgiLCJpbmRleE9mIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwidGFwIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJtb2RlIiwiTGlzdE1vZGUiLCJEZWxldGUiLCJkZWxldGUiLCJlbmFibGVkIiwibGVzc1RoYW4iLCJyZW1vdmVGcm9tRmF2b3JpdGVzIiwiYWRkVG9GYXZvcml0ZXMiLCJuZXdGYXZvcml0ZSIsInBvcCIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsInJlZiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGJpbmRTdGF0ZSwgZXF1YWwsIGxlbmd0aCwgbGVzc1RoYW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVTdGF0ZSwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YsIHR5cGUgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFNoZWxsSGlzdG9yeVByb3ZpZGVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9TaGVsbEhpc3RvcnlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RCYXNlJERlbGV0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL0xpc3RCYXNlXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU3RhbmRhcmRMaXN0SXRlbSBmcm9tIFwic2FwL20vU3RhbmRhcmRMaXN0SXRlbVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4RGlyZWN0aW9uLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBMaXN0TW9kZSwgUGxhY2VtZW50VHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHR9PiA9IHtcblx0XHRxdWVyeUNoYW5nZWQ6IGZhbHNlLFxuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlY2VudFF1ZXJpZXM6IFtdLFxuXHRcdHJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXM6IFtdLFxuXHRcdGZhdm9yaXRlUXVlcmllczogW10gYXMgc3RyaW5nW10sXG5cdFx0cmVjb21tZW5kZWRRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e3RydWV9XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0XHRcdFx0XHRpZiAoIWUuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSAmJiAhKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0PjwvSW5wdXQ+XG5cdFx0KTtcblxuXHRcdGNvbnN0IGZhdm9yaXRlUG9wb3ZlciA9IHRoaXMuY3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyID0gZmF2b3JpdGVQb3BvdmVyO1xuXG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRGVwZW5kZW50KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGUua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgIT09IHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wb3ZlckNvbmFpbmVyID0gdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVySXRlbXMgPSAocG9wb3ZlckNvbmFpbmVyIGFzIEZsZXhCb3gpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29udGFpbmVySXRlbXM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNGb2N1c2FibGUoKSAmJiAoaXRlbS5mb2N1cygpLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcDogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fSxcblx0XHRcdG9uZm9jdXNpbjogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VGV4dCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm91dGVyVGV4dDtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0SWQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZDtcblx0XHRcdFx0c3dpdGNoIChlLmtleSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRlbGV0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldElkPy5pbmNsdWRlcyhcImVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIikpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gdGFyZ2V0VGV4dC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5wb3BvdmVySW52aXNpYmxlTWVzc2FnZT8uYW5ub3VuY2UoXG5cdFx0XHRcdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9FQVNZX0ZJTFRFUl9JTlBVVF9URVhUX0xJTktfUE9QT1ZFUl9BUklBXCIpLFxuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBvcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAmJiAoIXRoaXMuJGZhdm9yaXRlUG9wb3ZlciB8fCAhdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkpIHtcblx0XHRcdC8vIE9wZW4gdGhlIGVhc3kgZmlsdGVyIHBvcG92ZXJcblx0XHRcdGlmICghdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmluaXRTaGVsbEhpc3RvcnlQcm92aWRlcigpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5pc0hpc3RvcnlFbmFibGVkID0gdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSAoYXdhaXQgdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uZ2V0RmF2b3JpdGVRdWVyaWVzKCkpID8/IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gKGF3YWl0IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldFJlY2VudFF1ZXJpZXMoKSkgPz8gW107XG5cdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/Lm9wZW5CeSh0aGlzLiRzZWFyY2hJbnB1dCk7XG5cdFx0fVxuXHR9XG5cblx0cmVxdWVzdEZhdm9yaXRlKGU6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShlLmdldFNvdXJjZSgpLmdldFRleHQoKSk7XG5cdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuc3RhdGUucXVlcnlDaGFuZ2VkID0gZmFsc2U7XG5cdFx0bGV0IG1hZ2ljUXVlcnkgPSB0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKTtcblx0XHRpZiAobWFnaWNRdWVyeSA9PT0gXCJcIiAmJiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHRtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShtYWdpY1F1ZXJ5KTtcblx0XHR9XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlU3RhdGVUZXh0KFwiXCIpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlKFwiTm9uZVwiKTtcblx0XHR0aGlzLmZpcmVFdmVudChcImVudGVyUHJlc3NlZFwiLCB7IHF1ZXJ5OiBtYWdpY1F1ZXJ5IH0pO1xuXHR9XG5cblx0YWRkUmVjZW50UXVlcnkocXVlcnlTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyBiZWZvcmUgc3RvcmluZ1xuXHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdGNvbnN0IHJlY2VudFF1ZXJ5SW5kZXggPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmluZEluZGV4KChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdGlmIChxdWVyeVN0cmluZyAmJiByZWNlbnRRdWVyeUluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gW3F1ZXJ5U3RyaW5nXS5jb25jYXQodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzKTtcblx0XHRcdGlmICh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubGVuZ3RoID4gNSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuc2xpY2UoMCwgNSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChxdWVyeVN0cmluZykge1xuXHRcdFx0Y29uc3QgcmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeVN0cmluZz8udG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRyZWNlbnRRdWVyaWVzLnVuc2hpZnQocXVlcnlTdHJpbmcpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gcmVjZW50UXVlcmllcztcblx0XHR9XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJmYXZvcml0ZVF1ZXJpZXNcIikgfHwgY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwicmVjZW50UXVlcmllc1wiKSkge1xuXHRcdFx0dGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uc2V0RmF2b3JpdGVRdWVyaWVzKHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzKTtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldFJlY2VudFF1ZXJpZXModGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocXVlcnkpID0+IHF1ZXJ5KSk7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubWFwKChyZWNlbnRRdWVyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRleHQ6IHJlY2VudFF1ZXJ5LFxuXHRcdFx0XHRcdGlzRmF2b3JpdGU6ICEhdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmluZCgoZmF2b3JpdGVRdWVyeSkgPT4gZmF2b3JpdGVRdWVyeSA9PT0gcmVjZW50UXVlcnkpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXIgPSBhd2FpdCBTaGVsbEhpc3RvcnlQcm92aWRlci5nZXRJbnN0YW5jZSh0aGlzLmFwcElkID8/IFwiPHVua25vd25BcHA+XCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyBTaGVsbEhpc3RvcnlQcm92aWRlciBmb3IgZWFzeSBmaWx0ZXJcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1mYXZvcml0ZVBvcG92ZXJcIn1cblx0XHRcdFx0c2hvd0hlYWRlcj17ZmFsc2V9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9e2ZhbHNlfVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e3RoaXMuJHNlYXJjaElucHV0fVxuXHRcdFx0XHRjbGFzcz17XCJzYXBGRUNvbnRyb2xzUG9wb3ZlclwifVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwIHx8IGVxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxGbGV4Qm94IGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Db2x1bW59IGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn0gcmVuZGVyVHlwZT17XCJCYXJlXCJ9PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NVR0dFU1RJT05TX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjb21tZW5kZWRRdWVyaWVzXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwPXtGbGV4V3JhcC5XcmFwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luRW5kXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnJlcXVlc3RGYXZvcml0ZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0hCb3g+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZVN0eWxlPXtUaXRsZUxldmVsLkg2fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImZhdm9yaXRlUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9EYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZVRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE9e1s8Q3VzdG9tRGF0YSBrZXk9e1widGV4dFwifSB2YWx1ZT17Y3R4LmdldE9iamVjdCgpfSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKGN0eC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9mYXZvcml0ZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9SZXRhaW5pbmcgdGhlIGZvY3VzIG9uIHBvcG92ZXIgZG9lc24ndCBtYWtlIHRoZSBwb3BvdmVyIGNsb3NlIG9uIGV2ZXJ5IGludGVyYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gY3R4LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuaW5kZXhPZihxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcImZhdm9yaXRlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0xBU1RfVVNFRFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGlzdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGU9e0xpc3RNb2RlLkRlbGV0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoZTogTGlzdEJhc2UkRGVsZXRlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVlcnlTdHJpbmcgPSBlLmdldFBhcmFtZXRlcihcImxpc3RJdGVtXCIpPy5kYXRhKFwidGV4dFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcXVlcnlTdHJpbmcpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIGNvbXBhcmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gcXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0xBU1RfVVNFRF9USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5FeHRyYVNtYWxsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb249e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9SRUNFTlRfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogRmxleEJveCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkudGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKS50ZXh0fSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Sb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlclR5cGU9e1wiQmFyZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKS50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwic2FwLWljb246Ly9mYXZvcml0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwic2FwLWljb246Ly9hZGQtZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRklMTEVEX1NUQVJcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9FTVBUWV9TVEFSVFwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2xlc3NUaGFuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJpbmRTdGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJmYXZvcml0ZVF1ZXJpZXNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZEl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKS50ZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRmF2b3JpdGUgPSBjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc0Zhdm9yaXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXMocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFRvRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgd2hlbiBjbGlja2luZyBvbiBhZGQgZmF2b3JpdGUgYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkudGV4dC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwicmVjZW50XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0PlxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSBhcyBQb3BvdmVyO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcigoZGF0YSkgPT4gZGF0YS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkVG9GYXZvcml0ZXMocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld0Zhdm9yaXRlID0gW3F1ZXJ5XS5jb25jYXQodGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuY29uY2F0KCkpO1xuXHRcdGlmIChuZXdGYXZvcml0ZS5sZW5ndGggPiA1KSB7XG5cdFx0XHRuZXdGYXZvcml0ZS5wb3AoKTtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSBuZXdGYXZvcml0ZTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJJbnB1dCk6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8c3BhbiByZWY9e2NvbnRyb2x9IGNsYXNzPXtcInNhcEZFRWFzeUZpbHRlcklucHV0XCJ9PlxuXHRcdFx0XHRcdHtjb250cm9sLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMENxQkEsZUFBZSxJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsNENBQTRDLENBQUMsRUFBQUMsS0FBQSxHQUUzREMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSxhQUFhO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3RFQyxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHNUJELFFBQVEsQ0FBQztJQUFFSixJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUczQkMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR1BGLEtBQUssQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FhUEMsV0FBVyxDQUFDLENBQUMsRUFBQWYsSUFBQSxDQUFBZ0IsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBaUJkLFNBQUFuQixnQkFBWW9CLFVBQXVFLEVBQUVDLE1BQXlCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9HQSxLQUFBLEdBQUFILFFBQUEsQ0FBQUksSUFBQSxPQUFNSCxVQUFVLEVBQVlDLE1BQU0sQ0FBQztNQUFDRywwQkFBQSxDQUFBRixLQUFBLGtCQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxXQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFB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
590
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsImV2ZW50IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiZGVmaW5lU3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2wiLCJwcm9wZXJ0aWVzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsImZhdm9yaXRlQnV0dG9uQ2xpY2tlZCIsIl9kZXNjcmlwdG9yOCIsImluaXRpYWxpemUiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0VmFsdWUiLCIkc2VhcmNoSW5wdXQiLCJpc0hpc3RvcnlFbmFibGVkIiwic3RhdGUiLCJ2YWx1ZU9mIiwic2V0VmFsdWUiLCJ2YWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJzZXRBcmlhTGFiZWwiLCJzZXRQcm9wZXJ0eSIsIiRhcmlhRGVzY3JpcHRpb25UZXh0Iiwic2V0VGV4dCIsIkludmlzaWJsZVRleHQiLCJ0ZXh0IiwidG9TdGF0aWMiLCJhZGRBcmlhRGVzY3JpYmVkQnkiLCJnZXRJZCIsInJlY29tbWVuZGVkUXVlcmllcyIsInJlY29tbWVuZGVkVmFsdWVzIiwicmVzb3VyY2VCdW5kbGUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInBvcG92ZXJJbnZpc2libGVNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiY3JlYXRlSW5wdXQiLCJzZXRBc0ludmFsaWQiLCJtZXNzYWdlIiwic2V0VmFsdWVTdGF0ZSIsIlZhbHVlU3RhdGUiLCJXYXJuaW5nIiwic2V0VmFsdWVTdGF0ZVRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJzZXRBc1ZhbGlkIiwiTm9uZSIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCIkYXJpYUxhYmVsVGV4dCIsImdldFRleHQiLCJfanN4IiwiSW5wdXQiLCJ3aWR0aCIsInNob3dDbGVhckljb24iLCJub3QiLCJiaW5kU3RhdGUiLCJzaG93VmFsdWVIZWxwIiwidmFsdWVIZWxwSWNvblNyYyIsInZhbHVlSGVscFJlcXVlc3QiLCJvbkZhdm9yaXRlSWNvblByZXNzIiwiY2hhbmdlIiwiZSIsImZpcmVFdmVudCIsInF1ZXJ5IiwiZ2V0UGFyYW1ldGVyIiwibGl2ZUNoYW5nZSIsInF1ZXJ5Q2hhbmdlZCIsImlzUXVlcnlTdWNjZXNzZnVsIiwiY3VycmVudEV4ZWN1dGVkUXVlcnkiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VmFsdWVTdGF0ZSIsInBsYWNlaG9sZGVyIiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJmYXZvcml0ZVBvcG92ZXIiLCJjcmVhdGVGYXZvcml0ZVBvcG92ZXIiLCJhZGREZXBlbmRlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImtleSIsIm9uRW50ZXJQcmVzc2VkIiwiY2xvc2UiLCJvbmtleWRvd24iLCJsZW5ndGgiLCJwcmV2ZW50RGVmYXVsdCIsInBvcG92ZXJDb25haW5lciIsImdldENvbnRlbnQiLCJjb250YWluZXJJdGVtcyIsImdldEl0ZW1zIiwiZmluZCIsIml0ZW0iLCJpc0ZvY3VzYWJsZSIsImZvY3VzIiwib250YXAiLCJvbmZvY3VzaW4iLCJ0YXJnZXRUZXh0IiwidGFyZ2V0Iiwib3V0ZXJUZXh0IiwidGFyZ2V0SWQiLCJpZCIsImluY2x1ZGVzIiwiZmF2b3JpdGVRdWVyaWVzIiwiZmlsdGVyIiwiZGF0YSIsInRvTG93ZXJDYXNlIiwicmVjZW50UXVlcmllcyIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhbm5vdW5jZSIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwic2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJnZXRGYXZvcml0ZVF1ZXJpZXMiLCJnZXRSZWNlbnRRdWVyaWVzIiwib3BlbkJ5IiwicmVxdWVzdEZhdm9yaXRlIiwibWFnaWNRdWVyeSIsImFkZFJlY2VudFF1ZXJ5IiwicXVlcnlTdHJpbmciLCJyZXBsYWNlIiwicmVjZW50UXVlcnlJbmRleCIsImZpbmRJbmRleCIsImNvbmNhdCIsInNsaWNlIiwidW5zaGlmdCIsIm9uU3RhdGVDaGFuZ2UiLCJjaGFuZ2VkUHJvcHMiLCJzZXRGYXZvcml0ZVF1ZXJpZXMiLCJzZXRSZWNlbnRRdWVyaWVzIiwibWFwIiwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlcyIsInJlY2VudFF1ZXJ5IiwiaXNGYXZvcml0ZSIsImZhdm9yaXRlUXVlcnkiLCJ1cGRhdGVGYXZvcml0ZUljb24iLCJpc0Zhdm9yaXRlZCIsImlzQ3VycmVudFF1ZXJ5RmF2b3JpdGVkIiwiZmF2b3JpdGVJY29uTmFtZSIsImZhdm9yaXRlSWNvbkVuYWJsZWQiLCJ0b2dnbGVTdHlsZUNsYXNzIiwidmFsdWVIZWxwQnRuIiwiZ2V0RG9tUmVmIiwicXVlcnlTZWxlY3RvciIsInRpdGxlIiwiU2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJhcHBJZCIsImVycm9yIiwiTG9nIiwiUG9wb3ZlciIsInNob3dIZWFkZXIiLCJob3Jpem9udGFsU2Nyb2xsaW5nIiwicGxhY2VtZW50IiwiUGxhY2VtZW50VHlwZSIsIkJvdHRvbSIsInNob3dBcnJvdyIsImluaXRpYWxGb2N1cyIsImNsYXNzIiwidmlzaWJsZSIsImVxdWFsIiwiY2hpbGRyZW4iLCJjb250ZW50IiwiRmxleEJveCIsImRpcmVjdGlvbiIsIkZsZXhEaXJlY3Rpb24iLCJDb2x1bW4iLCJyZW5kZXJUeXBlIiwiaXRlbXMiLCJUaXRsZSIsInRpdGxlU3R5bGUiLCJUaXRsZUxldmVsIiwiSDYiLCJIQm94Iiwid3JhcCIsIkZsZXhXcmFwIiwiV3JhcCIsImN0eCIsIkJ1dHRvbiIsImdldE9iamVjdCIsInByZXNzIiwiYmluZCIsIkxpc3QiLCJub0RhdGEiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkV4dHJhU21hbGwiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsImRlc2NyaXB0aW9uIiwiQ3VzdG9tTGlzdEl0ZW0iLCJhcmlhTGFiZWxsZWRCeSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiX2pzeHMiLCJSb3ciLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIlRleHQiLCJ0b29sdGlwIiwid3JhcHBpbmciLCJpY29uIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiaW5kZXgiLCJpbmRleE9mIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwidGFwIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJtb2RlIiwiTGlzdE1vZGUiLCJEZWxldGUiLCJkZWxldGUiLCJlbmFibGVkIiwibGVzc1RoYW4iLCJyZW1vdmVGcm9tRmF2b3JpdGVzIiwiYWRkVG9GYXZvcml0ZXMiLCJuZXdGYXZvcml0ZSIsInBvcCIsImN1cnJlbnRRdWVyeSIsInRyaW0iLCJzb21lIiwiZmF2Iiwic2V0UXVlcnlTdWNjZXNzIiwic2V0UXVlcnlGYWlsdXJlIiwiY2xlYXJRdWVyeVN0YXR1cyIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsInJlZiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGJpbmRTdGF0ZSwgZXF1YWwsIGxlbmd0aCwgbGVzc1RoYW4sIG5vdCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVN0YXRlLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiwgdHlwZSBTdGF0ZU9mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEV2ZW50RGVsZWdhdGVIb29rIGZyb20gXCJzYXAvZmUvYmFzZS9FdmVudERlbGVnYXRlSG9va1wiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1NoZWxsSGlzdG9yeVByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ3VzdG9tTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0N1c3RvbUxpc3RJdGVtXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0JExpdmVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCB0eXBlIHsgTGlzdEJhc2UkRGVsZXRlRXZlbnQgfSBmcm9tIFwic2FwL20vTGlzdEJhc2VcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBTdGFuZGFyZExpc3RJdGVtIGZyb20gXCJzYXAvbS9TdGFuZGFyZExpc3RJdGVtXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhEaXJlY3Rpb24sIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIExpc3RNb2RlLCBQbGFjZW1lbnRUeXBlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcmlhTGFiZWw/OiBzdHJpbmc7XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSAkYXJpYUxhYmVsVGV4dD86IEludmlzaWJsZVRleHQ7XG5cblx0cHJpdmF0ZSAkYXJpYURlc2NyaXB0aW9uVGV4dD86IEludmlzaWJsZVRleHQ7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBzdHJpbmc7XG5cdFx0aXNRdWVyeVN1Y2Nlc3NmdWw6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVJY29uTmFtZTogc3RyaW5nO1xuXHRcdGZhdm9yaXRlSWNvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHF1ZXJ5Q2hhbmdlZDogZmFsc2UsXG5cdFx0aXNIaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0cmVjZW50UXVlcmllczogW10sXG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogW10sXG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXSxcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IFtdIGFzIHN0cmluZ1tdLFxuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBcIlwiLFxuXHRcdGlzUXVlcnlTdWNjZXNzZnVsOiBmYWxzZSxcblx0XHRmYXZvcml0ZUljb25OYW1lOiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCIsXG5cdFx0ZmF2b3JpdGVJY29uRW5hYmxlZDogdHJ1ZVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdHNldEFyaWFMYWJlbCh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImFyaWFMYWJlbFwiLCB2YWx1ZSwgdHJ1ZSk7XG5cdFx0aWYgKHRoaXMuJGFyaWFEZXNjcmlwdGlvblRleHQpIHtcblx0XHRcdHRoaXMuJGFyaWFEZXNjcmlwdGlvblRleHQuc2V0VGV4dCh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuJGFyaWFEZXNjcmlwdGlvblRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCh7IHRleHQ6IHZhbHVlIH0pO1xuXHRcdFx0dGhpcy4kYXJpYURlc2NyaXB0aW9uVGV4dC50b1N0YXRpYygpO1xuXHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmFkZEFyaWFEZXNjcmliZWRCeSh0aGlzLiRhcmlhRGVzY3JpcHRpb25UZXh0LmdldElkKCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdC8vICRhcmlhTGFiZWxUZXh0IHByb3ZpZGVzIHRoZSBmaWVsZCBsYWJlbCB2aWEgYXJpYS1sYWJlbGxlZGJ5IChyZWFkcyB0aGUgcGxhY2Vob2xkZXIgdGV4dClcblx0XHR0aGlzLiRhcmlhTGFiZWxUZXh0ID0gbmV3IEludmlzaWJsZVRleHQoeyB0ZXh0OiB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpIH0pO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e25vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc1F1ZXJ5U3VjY2Vzc2Z1bFwiKSl9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzUXVlcnlTdWNjZXNzZnVsXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBJY29uU3JjPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZUljb25OYW1lXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBSZXF1ZXN0PXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkZhdm9yaXRlSWNvblByZXNzKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdC8vIFdoZW4gdXNlciBzdGFydHMgdHlwaW5nLCBoaWRlIGZhdm9yaXRlIGljb24gYW5kIHNob3cgWFxuXHRcdFx0XHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSA9IFwiXCI7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdFx0aWYgKCFlLmdldFNvdXJjZSgpLmdldFZhbHVlKCkgJiYgISh0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpID8/IGZhbHNlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0Ly8gYXJpYS1sYWJlbGxlZGJ5IGZvciBmaWVsZCBsYWJlbCAocGxhY2Vob2xkZXIgdGV4dCksIGFyaWEtZGVzY3JpYmVkYnkgZm9yIG1hbmRhdG9yeSBoaW50IChzZXQgbGF0ZXIgdmlhIHNldEFyaWFMYWJlbClcblx0XHR0aGlzLiRhcmlhTGFiZWxUZXh0LnRvU3RhdGljKCk7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkQXJpYUxhYmVsbGVkQnkodGhpcy4kYXJpYUxhYmVsVGV4dC5nZXRJZCgpKTtcblxuXHRcdGNvbnN0IGZhdm9yaXRlUG9wb3ZlciA9IHRoaXMuY3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyID0gZmF2b3JpdGVQb3BvdmVyO1xuXG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRGVwZW5kZW50KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGUua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgIT09IHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wb3ZlckNvbmFpbmVyID0gdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVySXRlbXMgPSAocG9wb3ZlckNvbmFpbmVyIGFzIEZsZXhCb3gpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29udGFpbmVySXRlbXM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNGb2N1c2FibGUoKSAmJiAoaXRlbS5mb2N1cygpLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcDogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fSxcblx0XHRcdG9uZm9jdXNpbjogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VGV4dCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm91dGVyVGV4dDtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0SWQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZDtcblx0XHRcdFx0c3dpdGNoIChlLmtleSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRlbGV0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldElkPy5pbmNsdWRlcyhcImVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIikpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gdGFyZ2V0VGV4dC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5wb3BvdmVySW52aXNpYmxlTWVzc2FnZT8uYW5ub3VuY2UoXG5cdFx0XHRcdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9FQVNZX0ZJTFRFUl9JTlBVVF9URVhUX0xJTktfUE9QT1ZFUl9BUklBXCIpLFxuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBvcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAmJiAoIXRoaXMuJGZhdm9yaXRlUG9wb3ZlciB8fCAhdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkpIHtcblx0XHRcdC8vIE9wZW4gdGhlIGVhc3kgZmlsdGVyIHBvcG92ZXJcblx0XHRcdGlmICghdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmluaXRTaGVsbEhpc3RvcnlQcm92aWRlcigpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5pc0hpc3RvcnlFbmFibGVkID0gdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSAoYXdhaXQgdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uZ2V0RmF2b3JpdGVRdWVyaWVzKCkpID8/IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gKGF3YWl0IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldFJlY2VudFF1ZXJpZXMoKSkgPz8gW107XG5cdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/Lm9wZW5CeSh0aGlzLiRzZWFyY2hJbnB1dCk7XG5cdFx0fVxuXHR9XG5cblx0cmVxdWVzdEZhdm9yaXRlKGU6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShlLmdldFNvdXJjZSgpLmdldFRleHQoKSk7XG5cdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuc3RhdGUucXVlcnlDaGFuZ2VkID0gZmFsc2U7XG5cdFx0bGV0IG1hZ2ljUXVlcnkgPSB0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKTtcblx0XHRpZiAobWFnaWNRdWVyeSA9PT0gXCJcIiAmJiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHRtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShtYWdpY1F1ZXJ5KTtcblx0XHR9XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlU3RhdGVUZXh0KFwiXCIpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlKFwiTm9uZVwiKTtcblx0XHR0aGlzLmZpcmVFdmVudChcImVudGVyUHJlc3NlZFwiLCB7IHF1ZXJ5OiBtYWdpY1F1ZXJ5IH0pO1xuXHR9XG5cblx0YWRkUmVjZW50UXVlcnkocXVlcnlTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyBiZWZvcmUgc3RvcmluZ1xuXHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdGNvbnN0IHJlY2VudFF1ZXJ5SW5kZXggPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmluZEluZGV4KChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdGlmIChxdWVyeVN0cmluZyAmJiByZWNlbnRRdWVyeUluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gW3F1ZXJ5U3RyaW5nXS5jb25jYXQodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzKTtcblx0XHRcdGlmICh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubGVuZ3RoID4gNSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuc2xpY2UoMCwgNSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChxdWVyeVN0cmluZykge1xuXHRcdFx0Y29uc3QgcmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeVN0cmluZz8udG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRyZWNlbnRRdWVyaWVzLnVuc2hpZnQocXVlcnlTdHJpbmcpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gcmVjZW50UXVlcmllcztcblx0XHR9XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJmYXZvcml0ZVF1ZXJpZXNcIikgfHwgY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwicmVjZW50UXVlcmllc1wiKSkge1xuXHRcdFx0dGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uc2V0RmF2b3JpdGVRdWVyaWVzKHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzKTtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldFJlY2VudFF1ZXJpZXModGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocXVlcnkpID0+IHF1ZXJ5KSk7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubWFwKChyZWNlbnRRdWVyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRleHQ6IHJlY2VudFF1ZXJ5LFxuXHRcdFx0XHRcdGlzRmF2b3JpdGU6ICEhdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmluZCgoZmF2b3JpdGVRdWVyeSkgPT4gZmF2b3JpdGVRdWVyeSA9PT0gcmVjZW50UXVlcnkpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gVXBkYXRlIGZhdm9yaXRlIGljb24gd2hlbiBxdWVyeSBvciBmYXZvcml0ZXMgY2hhbmdlXG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcImN1cnJlbnRFeGVjdXRlZFF1ZXJ5XCIpIHx8IGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcImZhdm9yaXRlUXVlcmllc1wiKSkge1xuXHRcdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUZhdm9yaXRlSWNvbigpOiB2b2lkIHtcblx0XHRjb25zdCBpc0Zhdm9yaXRlZCA9IHRoaXMuaXNDdXJyZW50UXVlcnlGYXZvcml0ZWQoKTtcblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlSWNvbk5hbWUgPSBpc0Zhdm9yaXRlZCA/IFwic2FwLWljb246Ly9mYXZvcml0ZVwiIDogXCJzYXAtaWNvbjovL2FkZC1mYXZvcml0ZVwiO1xuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVJY29uRW5hYmxlZCA9IGlzRmF2b3JpdGVkIHx8IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmxlbmd0aCA8IDU7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnRvZ2dsZVN0eWxlQ2xhc3MoXCJzYXBGRUZhdm9yaXRlSWNvbkRpc2FibGVkXCIsICF0aGlzLnN0YXRlLmZhdm9yaXRlSWNvbkVuYWJsZWQpO1xuXHRcdGNvbnN0IHZhbHVlSGVscEJ0biA9IHRoaXMuJHNlYXJjaElucHV0Py5nZXREb21SZWYoKT8ucXVlcnlTZWxlY3RvcignW2FyaWEtbGFiZWw9XCJTaG93IFZhbHVlIEhlbHBcIl0nKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cdFx0aWYgKHZhbHVlSGVscEJ0bikge1xuXHRcdFx0dmFsdWVIZWxwQnRuLnRpdGxlID0gdGhpcy5zdGF0ZS5mYXZvcml0ZUljb25FbmFibGVkXG5cdFx0XHRcdD8gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9FTVBUWV9TVEFSVFwiKVxuXHRcdFx0XHQ6IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTUFYX0ZBVk9SSVRFX1JFQUNIRURcIik7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyID0gYXdhaXQgU2hlbGxIaXN0b3J5UHJvdmlkZXIuZ2V0SW5zdGFuY2UodGhpcy5hcHBJZCA/PyBcIjx1bmtub3duQXBwPlwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZm9yIGVhc3kgZmlsdGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk6IFBvcG92ZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZmF2b3JpdGVQb3BvdmVyXCJ9XG5cdFx0XHRcdHNob3dIZWFkZXI9e2ZhbHNlfVxuXHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXt0aGlzLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0Y2xhc3M9e1wic2FwRkVDb250cm9sc1BvcG92ZXJcIn1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMCB8fCBlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8RmxleEJveCBkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufSBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9IHJlbmRlclR5cGU9e1wiQmFyZVwifT5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TVUdHRVNUSU9OU19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e3RoaXMuc3RhdGUucmVjb21tZW5kZWRRdWVyaWVzLmxlbmd0aCA+IDB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY29tbWVuZGVkUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpbkVuZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5yZXF1ZXN0RmF2b3JpdGUuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckZhdm9yaXRlVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZVF1ZXJpZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25TaXplPXtJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckZhdm9yaXRlSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5CZWdpblwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKX0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiMTAwJVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLlJvd31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vZmF2b3JpdGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9GSUxMRURfU1RBUlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmluZGV4T2YocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQocXVlcnkpID0+IHF1ZXJ5ICE9PSBxdWVyeVN0cmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJmYXZvcml0ZVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9MQVNUX1VTRURcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb2RlPXtMaXN0TW9kZS5EZWxldGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbdGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZT17KGU6IExpc3RCYXNlJERlbGV0ZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXRlbSA9IGUuZ2V0UGFyYW1ldGVyKFwibGlzdEl0ZW1cIikgYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbS5mb2N1cygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHF1ZXJ5U3RyaW5nID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKT8uZGF0YShcInRleHRcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIGJlZm9yZSBjb21wYXJpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub0RhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9MQVNUX1VTRURfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfUkVDRU5UX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IEZsZXhCb3ggPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckxhc3RVc2VkSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoY3R4LmdldE9iamVjdCgpLnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YT17WzxDdXN0b21EYXRhIGtleT17XCJ0ZXh0XCJ9IHZhbHVlPXtjdHguZ2V0T2JqZWN0KCkudGV4dH0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17Y3R4LmdldE9iamVjdCgpLnRleHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcInNhcC1pY29uOi8vZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRU1QVFlfU1RBUlRcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXtsZXNzVGhhbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaW5kU3RhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiZmF2b3JpdGVRdWVyaWVzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ1XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBjdHguZ2V0T2JqZWN0KCkudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc0Zhdm9yaXRlID0gY3R4LmdldE9iamVjdCgpLmlzRmF2b3JpdGU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXNGYXZvcml0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hZGRUb0Zhdm9yaXRlcyhxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIHdoZW4gY2xpY2tpbmcgb24gYWRkIGZhdm9yaXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3R4LmdldE9iamVjdCgpLnRleHQucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInJlY2VudFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD5cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlRnJvbUZhdm9yaXRlcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoKGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHRwcml2YXRlIGFkZFRvRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdGYXZvcml0ZSA9IFtxdWVyeV0uY29uY2F0KHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmNvbmNhdCgpKTtcblx0XHRpZiAobmV3RmF2b3JpdGUubGVuZ3RoID4gNSkge1xuXHRcdFx0bmV3RmF2b3JpdGUucG9wKCk7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gbmV3RmF2b3JpdGU7XG5cdH1cblxuXHRwcml2YXRlIGlzQ3VycmVudFF1ZXJ5RmF2b3JpdGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRRdWVyeSA9IHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLnNvbWUoKGZhdikgPT4gZmF2LnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSBjdXJyZW50UXVlcnkpO1xuXHR9XG5cblx0cHVibGljIHNldFF1ZXJ5U3VjY2VzcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSA9IHF1ZXJ5O1xuXHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSB0cnVlO1xuXHRcdHRoaXMudXBkYXRlRmF2b3JpdGVJY29uKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UXVlcnlGYWlsdXJlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmN1cnJlbnRFeGVjdXRlZFF1ZXJ5ID0gXCJcIjtcblx0fVxuXG5cdHB1YmxpYyBjbGVhclF1ZXJ5U3RhdHVzKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmN1cnJlbnRFeGVjdXRlZFF1ZXJ5ID0gXCJcIjtcblx0fVxuXG5cdHByaXZhdGUgb25GYXZvcml0ZUljb25QcmVzcygpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuc3RhdGUuZmF2b3JpdGVJY29uRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBUb2dnbGUgZmF2b3JpdGUgc3RhdHVzIGZvciB0aGUgY3VycmVudCBxdWVyeVxuXHRcdGNvbnN0IGlzRmF2b3JpdGVkID0gdGhpcy5pc0N1cnJlbnRRdWVyeUZhdm9yaXRlZCgpO1xuXHRcdGlmIChpc0Zhdm9yaXRlZCkge1xuXHRcdFx0dGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZFRvRmF2b3JpdGVzKHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJJbnB1dCk6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8c3BhbiByZWY9e2NvbnRyb2x9IGNsYXNzPXtcInNhcEZFRWFzeUZpbHRlcklucHV0XCJ9PlxuXHRcdFx0XHRcdHtjb250cm9sLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTJDcUJBLGVBQWUsSUFBQUMsSUFBQSxHQURuQ0MsY0FBYyxDQUFDLDRDQUE0QyxDQUFDLEVBQUFDLEtBQUEsR0FFM0RDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsYUFBYTtJQUFFQyxRQUFRLEVBQUUsS0FBSztJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUd0RUMsUUFBUSxDQUFDO0lBQUVKLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBRzVCRCxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VBQVEsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHM0JGLFFBQVEsQ0FBQztJQUFFSixJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQU8sS0FBQSxHQUc1QkMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR1BGLEtBQUssQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FpQlBDLFdBQVcsQ0FBQyxDQUFDLEVBQUFoQixJQUFBLENBQUFpQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLFFBQUE7SUF5QmQsU0FBQXBCLGdCQUFZcUIsVUFBdUUsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDL0dBLEtBQUEsR0FBQUgsUUFBQSxDQUFBSSxJQUFBLE9BQU1ILFVBQVUsRUFBWUMsTUFBTSxDQUFDO01BQUNHLDBCQUFBLENBQUFGLEtBQUEsa0JBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLFdBQUFJLFlBQUEsRUFBQUosS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLHVCQUFBSyxZQUFBLEVBQUFMLEtBQUE7TUFBQUUs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