@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.
- package/package.json +1 -1
- package/src/sap/fe/controls/.library +1 -1
- package/src/sap/fe/controls/AiNoticeHelper.js +26 -5
- package/src/sap/fe/controls/AiNoticeHelper.tsx +31 -3
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +68 -44
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +35 -4
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +103 -19
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +100 -7
- package/src/sap/fe/controls/easyFilter/Token.js +4 -4
- package/src/sap/fe/controls/easyFilter/innerControls/MenuWithSingleSelectFactory.js +2 -2
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +7 -3
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +5 -0
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle.properties +4 -0
- package/src/sap/fe/controls/messagebundle_ar.properties +9 -3
- package/src/sap/fe/controls/messagebundle_bg.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ca.properties +9 -3
- package/src/sap/fe/controls/messagebundle_cnr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_cs.properties +9 -3
- package/src/sap/fe/controls/messagebundle_cy.properties +9 -3
- package/src/sap/fe/controls/messagebundle_da.properties +9 -3
- package/src/sap/fe/controls/messagebundle_de.properties +9 -3
- package/src/sap/fe/controls/messagebundle_el.properties +9 -3
- package/src/sap/fe/controls/messagebundle_en.properties +9 -3
- package/src/sap/fe/controls/messagebundle_en_GB.properties +9 -3
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +6 -3
- package/src/sap/fe/controls/messagebundle_es.properties +9 -3
- package/src/sap/fe/controls/messagebundle_es_MX.properties +9 -3
- package/src/sap/fe/controls/messagebundle_et.properties +9 -3
- package/src/sap/fe/controls/messagebundle_fi.properties +9 -3
- package/src/sap/fe/controls/messagebundle_fr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +9 -3
- package/src/sap/fe/controls/messagebundle_hi.properties +9 -3
- package/src/sap/fe/controls/messagebundle_hr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_hu.properties +7 -1
- package/src/sap/fe/controls/messagebundle_id.properties +9 -3
- package/src/sap/fe/controls/messagebundle_it.properties +9 -3
- package/src/sap/fe/controls/messagebundle_iw.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ja.properties +9 -3
- package/src/sap/fe/controls/messagebundle_kk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ko.properties +9 -3
- package/src/sap/fe/controls/messagebundle_lt.properties +9 -3
- package/src/sap/fe/controls/messagebundle_lv.properties +9 -3
- package/src/sap/fe/controls/messagebundle_mk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ms.properties +9 -3
- package/src/sap/fe/controls/messagebundle_nl.properties +9 -3
- package/src/sap/fe/controls/messagebundle_no.properties +7 -1
- package/src/sap/fe/controls/messagebundle_pl.properties +7 -1
- package/src/sap/fe/controls/messagebundle_pt.properties +9 -3
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ro.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ru.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sh.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sl.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sv.properties +9 -3
- package/src/sap/fe/controls/messagebundle_th.properties +10 -4
- package/src/sap/fe/controls/messagebundle_tr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_uk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_vi.properties +9 -3
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +9 -3
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +9 -3
- package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +2 -5
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +5 -8
- package/src/sap/fe/controls/themes/base/EasyFilter.less +8 -4
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Text", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/AINotice", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleMessage", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./ErrorMessageHandler", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, encodeXML, ClassSupport, jsx, Token, Button, FlexBox, Popover, Text, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, AINotice, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, InvisibleMessage, MessageType, FilterOperator, FESRHelper, ErrorMessageHandler, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20,
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19;
|
|
9
9
|
function __ui5_require_async(path) {
|
|
10
10
|
return new Promise((resolve, reject) => {
|
|
11
11
|
sap.ui.require([path], module => {
|
|
@@ -67,11 +67,11 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
67
67
|
type: "array"
|
|
68
68
|
}), _dec7 = property({
|
|
69
69
|
type: "function"
|
|
70
|
-
}), _dec8 = defineReference(), _dec9 = defineReference(),
|
|
70
|
+
}), _dec8 = defineReference(), _dec9 = defineReference(), _dec0 = aggregation({
|
|
71
71
|
type: "sap.ui.core.Control"
|
|
72
|
-
}),
|
|
72
|
+
}), _dec1 = aggregation({
|
|
73
73
|
type: "sap.ui.core.Control"
|
|
74
|
-
}),
|
|
74
|
+
}), _dec10 = event(), _dec11 = event(), _dec12 = event(), _dec13 = event(), _dec14 = event(), _dec15 = event(), _dec16 = event(), _dec17 = event(), _dec18 = event(), _dec19 = event(), _dec20 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
|
|
75
75
|
function EasyFilterBarContainer(properties, others) {
|
|
76
76
|
var _this;
|
|
77
77
|
_this = _Control.call(this, properties, others) || this;
|
|
@@ -84,25 +84,26 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
84
84
|
_initializerDefineProperty(_this, "easyFilterInput", _descriptor7, _this);
|
|
85
85
|
_initializerDefineProperty(_this, "tokenizer", _descriptor8, _this);
|
|
86
86
|
_initializerDefineProperty(_this, "content", _descriptor9, _this);
|
|
87
|
-
_initializerDefineProperty(_this, "aiNotice",
|
|
88
|
-
_initializerDefineProperty(_this, "tokensChanged",
|
|
89
|
-
_initializerDefineProperty(_this, "sortersChanged",
|
|
90
|
-
_initializerDefineProperty(_this, "groupLevelsChanged",
|
|
91
|
-
_initializerDefineProperty(_this, "queryChanged",
|
|
92
|
-
_initializerDefineProperty(_this, "showValueHelp",
|
|
93
|
-
_initializerDefineProperty(_this, "liveChange",
|
|
87
|
+
_initializerDefineProperty(_this, "aiNotice", _descriptor0, _this);
|
|
88
|
+
_initializerDefineProperty(_this, "tokensChanged", _descriptor1, _this);
|
|
89
|
+
_initializerDefineProperty(_this, "sortersChanged", _descriptor10, _this);
|
|
90
|
+
_initializerDefineProperty(_this, "groupLevelsChanged", _descriptor11, _this);
|
|
91
|
+
_initializerDefineProperty(_this, "queryChanged", _descriptor12, _this);
|
|
92
|
+
_initializerDefineProperty(_this, "showValueHelp", _descriptor13, _this);
|
|
93
|
+
_initializerDefineProperty(_this, "liveChange", _descriptor14, _this);
|
|
94
94
|
/** Fires when the user manually removes or edits a filter token. Does not fire when tokens are set by the AI search result. */
|
|
95
|
-
_initializerDefineProperty(_this, "tokensChangedByUser",
|
|
96
|
-
_initializerDefineProperty(_this, "clearFilters",
|
|
97
|
-
_initializerDefineProperty(_this, "beforeQueryProcessing",
|
|
98
|
-
_initializerDefineProperty(_this, "afterQueryProcessing",
|
|
99
|
-
_initializerDefineProperty(_this, "state",
|
|
95
|
+
_initializerDefineProperty(_this, "tokensChangedByUser", _descriptor15, _this);
|
|
96
|
+
_initializerDefineProperty(_this, "clearFilters", _descriptor16, _this);
|
|
97
|
+
_initializerDefineProperty(_this, "beforeQueryProcessing", _descriptor17, _this);
|
|
98
|
+
_initializerDefineProperty(_this, "afterQueryProcessing", _descriptor18, _this);
|
|
99
|
+
_initializerDefineProperty(_this, "state", _descriptor19, _this);
|
|
100
100
|
_this.shouldTokenChangeEventFired = true;
|
|
101
101
|
_this.isResettingToDefaultTokens = false;
|
|
102
102
|
_this.inputFieldReady = new Promise(resolve => {
|
|
103
103
|
_this.resolveContentReady = resolve;
|
|
104
104
|
});
|
|
105
105
|
_this.shouldMessageStripRemove = true;
|
|
106
|
+
_this.ariaLabelApplied = false;
|
|
106
107
|
_this.supportsSorting = true;
|
|
107
108
|
_this.supportsGrouping = true;
|
|
108
109
|
_this.initialize();
|
|
@@ -159,7 +160,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
// This method should be used before updating the state, once the state is updated the previous overridden default values would be gone forever
|
|
162
|
-
|
|
163
|
+
;
|
|
163
164
|
_proto.getDefaultTokens = function getDefaultTokens() {
|
|
164
165
|
const tokens = [];
|
|
165
166
|
if (!this.mandatoryKeyMap) {
|
|
@@ -193,13 +194,21 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
193
194
|
});
|
|
194
195
|
return tokens;
|
|
195
196
|
};
|
|
197
|
+
_proto.buildInputAriaLabel = function buildInputAriaLabel() {
|
|
198
|
+
const mandatoryFields = this.filterBarMetadata?.filter(f => f.required) ?? [];
|
|
199
|
+
if (mandatoryFields.length === 0) {
|
|
200
|
+
return "";
|
|
201
|
+
}
|
|
202
|
+
const fieldLabels = mandatoryFields.map(f => f.label).join(", ");
|
|
203
|
+
return this.resourceBundle.getText("M_EASY_FILTER_INPUT_REQUIRED_FIELDS", [fieldLabels]);
|
|
204
|
+
};
|
|
196
205
|
_proto.onEnterPressed = function onEnterPressed(e) {
|
|
197
206
|
this.onGoPress(e.getParameter("query"));
|
|
198
207
|
}
|
|
199
208
|
|
|
200
209
|
//Making it public because in live mode the app developer can decide whether to display the error ValueStateMessage
|
|
201
210
|
//In non-live mode , we are already internally handling it on every time time a user clicks on GO/Enter buttons
|
|
202
|
-
|
|
211
|
+
;
|
|
203
212
|
_proto.checkIfAllMandatoryTokensFilled = function checkIfAllMandatoryTokensFilled() {
|
|
204
213
|
const tokensInState = this.getUnSetMandatoryTokensInCurrentState();
|
|
205
214
|
if (tokensInState.length !== 0) {
|
|
@@ -246,6 +255,8 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
246
255
|
if (this.easyFilterInput.current?.isHistoryEnabled() ?? false) {
|
|
247
256
|
this.easyFilterInput.current?.addRecentQuery(magicQuery);
|
|
248
257
|
}
|
|
258
|
+
// Set query as successful in the input field
|
|
259
|
+
this.easyFilterInput.current?.setQuerySuccess(magicQuery);
|
|
249
260
|
if (easyFilterResult.data.version === 1) {
|
|
250
261
|
this.handleV1Success(easyFilterResult);
|
|
251
262
|
} else if (easyFilterResult.data.version === 2) {
|
|
@@ -253,6 +264,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
253
264
|
}
|
|
254
265
|
} else {
|
|
255
266
|
// error
|
|
267
|
+
this.easyFilterInput.current?.setQueryFailure();
|
|
256
268
|
this.removeNonMandatoryTokens();
|
|
257
269
|
this.setMessageStrip(easyFilterResult.message);
|
|
258
270
|
this.invisibleMessage.announce(this.resourceBundle.getText(easyFilterResult.message), InvisibleMessageMode.Assertive);
|
|
@@ -464,7 +476,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
464
476
|
}
|
|
465
477
|
|
|
466
478
|
//every single select menu type should have only one value, else splice to one value and update the message strip
|
|
467
|
-
|
|
479
|
+
;
|
|
468
480
|
_proto.verifySingleSelectTokenValues = function verifySingleSelectTokenValues(tokens) {
|
|
469
481
|
const singleSelectTokenLabels = [];
|
|
470
482
|
tokens.forEach(token => {
|
|
@@ -577,8 +589,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
577
589
|
}
|
|
578
590
|
});
|
|
579
591
|
};
|
|
580
|
-
_proto.onStateChange = function onStateChange() {
|
|
581
|
-
let changedProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
592
|
+
_proto.onStateChange = function onStateChange(changedProps = []) {
|
|
582
593
|
if (changedProps.includes("tokens")) {
|
|
583
594
|
if (this.shouldTokenChangeEventFired) {
|
|
584
595
|
this.fireEvent("tokensChanged", {
|
|
@@ -616,11 +627,12 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
616
627
|
this.isMandatoryCheckRequired = false;
|
|
617
628
|
this.shouldTokenChangeEventFired = true;
|
|
618
629
|
this.isResettingToDefaultTokens = false;
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
630
|
+
if (this.tokenizer?.current) {
|
|
631
|
+
// onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
|
|
632
|
+
// In this process there are multiple popover issues happening
|
|
633
|
+
// So as a temporary fix overriding the function
|
|
634
|
+
this.tokenizer.current.onsapfocusleave = () => {};
|
|
635
|
+
}
|
|
624
636
|
};
|
|
625
637
|
_proto.onThumbUpPressed = function onThumbUpPressed() {
|
|
626
638
|
this.state.thumbUpButtonPressed = true;
|
|
@@ -818,6 +830,9 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
818
830
|
})]
|
|
819
831
|
});
|
|
820
832
|
FESRHelper.setSemanticStepname($topGoBtn.current, "press", "fe:ai:search");
|
|
833
|
+
if (this.easyFilterInput.current) {
|
|
834
|
+
FESRHelper.setSemanticStepname(this.easyFilterInput.current, "enterPressed", "fe:ai:search");
|
|
835
|
+
}
|
|
821
836
|
return outVBox;
|
|
822
837
|
};
|
|
823
838
|
_proto.onGoButtonPress = async function onGoButtonPress() {
|
|
@@ -843,9 +858,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
843
858
|
* @param clearAllFilters If true, fires the clearFilters event to notify consumers that filters should be cleared else just resets the tokens without firing the event
|
|
844
859
|
* @param isResettingToDefaultTokens If true, indicates that the resetButton is restoring tokens to their default values
|
|
845
860
|
*/;
|
|
846
|
-
_proto.resetState = function resetState() {
|
|
847
|
-
let clearAllFilters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
848
|
-
let isResettingToDefaultTokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
861
|
+
_proto.resetState = function resetState(clearAllFilters = true, isResettingToDefaultTokens = false) {
|
|
849
862
|
if (clearAllFilters) {
|
|
850
863
|
this.fireEvent("clearFilters");
|
|
851
864
|
this.state.groupLevels = [];
|
|
@@ -862,6 +875,8 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
862
875
|
this.tokenizer.current?.getTokens().forEach(token => token.setProperty("valueState", ValueState.None));
|
|
863
876
|
this.tokenizer.current?.getTokens().forEach(token => token.setProperty("valueStateText", null));
|
|
864
877
|
this.clearMessageStrip(); //clear the message strip for validated filters
|
|
878
|
+
// Clear query success status
|
|
879
|
+
this.easyFilterInput.current?.clearQueryStatus();
|
|
865
880
|
};
|
|
866
881
|
_proto.clearFiltersAndTokens = function clearFiltersAndTokens() {
|
|
867
882
|
this.fireEvent("clearFilters");
|
|
@@ -870,7 +885,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
870
885
|
}
|
|
871
886
|
|
|
872
887
|
//The below code updates the existing state by fetching the key and selectedValues
|
|
873
|
-
|
|
888
|
+
;
|
|
874
889
|
_proto.updateTokenArray = function updateTokenArray(changeType, newTokenSpecificValues, tokenKey) {
|
|
875
890
|
const newTokens = this.state.tokens.map(token => ({
|
|
876
891
|
...token,
|
|
@@ -991,6 +1006,15 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
991
1006
|
const requiredKeys = tokens.map(token => token.key);
|
|
992
1007
|
return this.tokenizer.current?.getTokens().filter(token => requiredKeys.includes(token.getKey()));
|
|
993
1008
|
};
|
|
1009
|
+
_proto.onAfterRendering = function onAfterRendering() {
|
|
1010
|
+
if (!this.ariaLabelApplied && this.filterBarMetadata) {
|
|
1011
|
+
const ariaText = this.buildInputAriaLabel();
|
|
1012
|
+
if (ariaText) {
|
|
1013
|
+
this.easyFilterInput.current?.setAriaLabel(ariaText);
|
|
1014
|
+
}
|
|
1015
|
+
this.ariaLabelApplied = true;
|
|
1016
|
+
}
|
|
1017
|
+
};
|
|
994
1018
|
EasyFilterBarContainer.render = function render(rm, control) {
|
|
995
1019
|
return jsx.renderUsingRenderManager(rm, control, () => {
|
|
996
1020
|
return _jsx("span", {
|
|
@@ -1040,67 +1064,67 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
1040
1064
|
enumerable: true,
|
|
1041
1065
|
writable: true,
|
|
1042
1066
|
initializer: null
|
|
1043
|
-
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "content", [
|
|
1067
|
+
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec0], {
|
|
1044
1068
|
configurable: true,
|
|
1045
1069
|
enumerable: true,
|
|
1046
1070
|
writable: true,
|
|
1047
1071
|
initializer: null
|
|
1048
|
-
}),
|
|
1072
|
+
}), _descriptor0 = _applyDecoratedDescriptor(_class2.prototype, "aiNotice", [_dec1], {
|
|
1049
1073
|
configurable: true,
|
|
1050
1074
|
enumerable: true,
|
|
1051
1075
|
writable: true,
|
|
1052
1076
|
initializer: null
|
|
1053
|
-
}),
|
|
1077
|
+
}), _descriptor1 = _applyDecoratedDescriptor(_class2.prototype, "tokensChanged", [_dec10], {
|
|
1054
1078
|
configurable: true,
|
|
1055
1079
|
enumerable: true,
|
|
1056
1080
|
writable: true,
|
|
1057
1081
|
initializer: null
|
|
1058
|
-
}),
|
|
1082
|
+
}), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "sortersChanged", [_dec11], {
|
|
1059
1083
|
configurable: true,
|
|
1060
1084
|
enumerable: true,
|
|
1061
1085
|
writable: true,
|
|
1062
1086
|
initializer: null
|
|
1063
|
-
}),
|
|
1087
|
+
}), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "groupLevelsChanged", [_dec12], {
|
|
1064
1088
|
configurable: true,
|
|
1065
1089
|
enumerable: true,
|
|
1066
1090
|
writable: true,
|
|
1067
1091
|
initializer: null
|
|
1068
|
-
}),
|
|
1092
|
+
}), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec13], {
|
|
1069
1093
|
configurable: true,
|
|
1070
1094
|
enumerable: true,
|
|
1071
1095
|
writable: true,
|
|
1072
1096
|
initializer: null
|
|
1073
|
-
}),
|
|
1097
|
+
}), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "showValueHelp", [_dec14], {
|
|
1074
1098
|
configurable: true,
|
|
1075
1099
|
enumerable: true,
|
|
1076
1100
|
writable: true,
|
|
1077
1101
|
initializer: null
|
|
1078
|
-
}),
|
|
1102
|
+
}), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "liveChange", [_dec15], {
|
|
1079
1103
|
configurable: true,
|
|
1080
1104
|
enumerable: true,
|
|
1081
1105
|
writable: true,
|
|
1082
1106
|
initializer: null
|
|
1083
|
-
}),
|
|
1107
|
+
}), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "tokensChangedByUser", [_dec16], {
|
|
1084
1108
|
configurable: true,
|
|
1085
1109
|
enumerable: true,
|
|
1086
1110
|
writable: true,
|
|
1087
1111
|
initializer: null
|
|
1088
|
-
}),
|
|
1112
|
+
}), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "clearFilters", [_dec17], {
|
|
1089
1113
|
configurable: true,
|
|
1090
1114
|
enumerable: true,
|
|
1091
1115
|
writable: true,
|
|
1092
1116
|
initializer: null
|
|
1093
|
-
}),
|
|
1117
|
+
}), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "beforeQueryProcessing", [_dec18], {
|
|
1094
1118
|
configurable: true,
|
|
1095
1119
|
enumerable: true,
|
|
1096
1120
|
writable: true,
|
|
1097
1121
|
initializer: null
|
|
1098
|
-
}),
|
|
1122
|
+
}), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "afterQueryProcessing", [_dec19], {
|
|
1099
1123
|
configurable: true,
|
|
1100
1124
|
enumerable: true,
|
|
1101
1125
|
writable: true,
|
|
1102
1126
|
initializer: null
|
|
1103
|
-
}),
|
|
1127
|
+
}), _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec20], {
|
|
1104
1128
|
configurable: true,
|
|
1105
1129
|
enumerable: true,
|
|
1106
1130
|
writable: true,
|
|
@@ -1125,4 +1149,4 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
|
|
|
1125
1149
|
_exports = EasyFilterBarContainer;
|
|
1126
1150
|
return _exports;
|
|
1127
1151
|
}, false);
|
|
1128
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiX2RlYzEyIiwiZXZlbnQiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJfZGVjMjAiLCJfZGVjMjEiLCJfZGVjMjIiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJfZGVzY3JpcHRvcjE4IiwiX2Rlc2NyaXB0b3IxOSIsIl9kZXNjcmlwdG9yMjAiLCJfZGVzY3JpcHRvcjIxIiwic2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkIiwiaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMiLCJpbnB1dEZpZWxkUmVhZHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVDb250ZW50UmVhZHkiLCJzaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUiLCJzdXBwb3J0c1NvcnRpbmciLCJzdXBwb3J0c0dyb3VwaW5nIiwiaW5pdGlhbGl6ZSIsImludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RWFzeUZpbHRlckxpYiIsImVhc3lGaWx0ZXJMaWIiLCJzZXRQcm9wZXJ0eSIsImVhc3lmaWx0ZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwic2V0QXBwSWQiLCJhcHBJZCIsImVhc3lGaWx0ZXJJbnB1dCIsImN1cnJlbnQiLCJzZXRGaWx0ZXJCYXJNZXRhZGF0YSIsImZpbHRlckJhck1ldGFkYXRhIiwidG9rZW5zIiwiZ2V0RGVmYXVsdFRva2VucyIsImlubmVyQ29udHJvbFBvcG92ZXIiLCJjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scyIsImFkZERlcGVuZGVudCIsInN0YXRlIiwic2hvd1Jlc3VsdCIsImxlbmd0aCIsImlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCIsImluaXQiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtYW5kYXRvcnlLZXlNYXAiLCJmb3JFYWNoIiwiZGF0YSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsIm5hbWUiLCJwdXNoIiwia2V5IiwibGFiZWwiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiYnVzeSIsIm9uRW50ZXJQcmVzc2VkIiwiZSIsIm9uR29QcmVzcyIsImdldFBhcmFtZXRlciIsImNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQiLCJ0b2tlbnNJblN0YXRlIiwiZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSIsImdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSIsInRva2VuIiwiVmFsdWVTdGF0ZSIsIkVycm9yIiwiZ2V0VGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsImNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzIiwiZWFzeVRva2VucyIsInRva2VuaXplciIsImdldFRva2VucyIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCJtYWdpY1F1ZXJ5IiwicmVzZXRTdGF0ZSIsInRva2VuaXplckVkaXRhYmxlIiwiZmlyZUV2ZW50IiwiZWFzeUZpbHRlck1ldGFkYXRhIiwidmVyc2lvbiIsImVudGl0eVNldCIsImNvbnRleHRQYXRoIiwiZmllbGRzIiwiZWFzeUZpbHRlclJlc3VsdCIsImVhc3lGaWx0ZXIiLCJzdWNjZXNzIiwiaXNIaXN0b3J5RW5hYmxlZCIsImFkZFJlY2VudFF1ZXJ5IiwiaGFuZGxlVjFTdWNjZXNzIiwicmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zIiwic2V0TWVzc2FnZVN0cmlwIiwibWVzc2FnZSIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJtZXNzYWdlU3RyaXBUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiZ3JvdXBMZXZlbHMiLCJMb2ciLCJlcnJvciIsImZpbHRlciIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyTWVzc2FnZVN0cmlwIiwiRWFzeUZpbHRlclV0aWxzIiwiZm9ybWF0RGF0YSIsImJpbmQiLCJhbGxWYWx1ZUhlbHBUb2tlbnMiLCJyZXN1bHQiLCJyZXF1aXJlZFZhbHVlSGVscFRva2VucyIsInZhbHVlSGVscFRva2VuIiwiZmluZCIsImxsbVJlc3VsdCIsImRhdGFGZXRjaGVyIiwidXBkYXRlZFRva2VucyIsImtleVNwZWNpZmljVmFsdWUiLCJpZHgiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiQlQiLCJOQiIsInNlbGVjdGVkVmFsdWVzIiwidmFsdWUiLCJkZXNjcmlwdGlvbiIsInN1YkluZHgiLCJ2ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyIsInNvcnRlcnMiLCJ2YWxpZGF0ZVNvcnRFeHByZXNzaW9ucyIsInRodW1iQnV0dG9uRW5hYmxlZCIsInRodW1iRG93bkJ1dHRvblByZXNzZWQiLCJ0aHVtYlVwQnV0dG9uUHJlc3NlZCIsImFwcGx5R3JvdXBMZXZlbHMiLCJzaG93VW5zdXBwb3J0ZWRDYXBhYmlsaXRpZXNXYXJuaW5nIiwiaGFzU29ydGVyc0Zyb21MTE0iLCJoYXNHcm91cExldmVsc0Zyb21MTE0iLCJzb3J0aW5nVW5zdXBwb3J0ZWQiLCJncm91cGluZ1Vuc3VwcG9ydGVkIiwiYXBwZW5kTWVzc2FnZVN0cmlwIiwic2V0UGVyc29uYWxpemF0aW9uU3VwcG9ydCIsInNvcnRpbmciLCJncm91cGluZyIsIm1ldGFkYXRhIiwicmVzb2x2ZUZpZWxkIiwiZ3JvdXBEZWYiLCJwcm9wZXJ0eU5hbWUiLCJyZXNvbHZlUHJvcGVydHlOYW1lIiwiZmllbGQiLCJmIiwiZW5kc1dpdGgiLCJ3YXJuaW5nIiwiZXJyb3JIYW5kbGVyIiwiRXJyb3JNZXNzYWdlSGFuZGxlciIsImlzR3JvdXBhYmxlIiwiaXNHcm91cGFibGVQcm9wZXJ0eSIsImhhc0Vycm9ycyIsImVuY29kZVhNTCIsImdldEVycm9yTWVzc2FnZSIsImZpcnN0R3JvdXBhYmxlRGVmIiwiZmlyc3RHcm91cGFibGVMYWJlbCIsInNvcnRFeHByZXNzaW9ucyIsIm5vblNvcnRhYmxlRmllbGRzIiwidmFsaWRTb3J0ZXJzIiwic29ydEV4cHJlc3Npb24iLCJmaWVsZE1ldGFkYXRhIiwiZmllbGROYW1lIiwic3BsaXQiLCJwb3AiLCJzb3J0YWJsZSIsIm1hcCIsImRlc2NlbmRpbmciLCJqb2luIiwic2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMiLCJzcGxpY2UiLCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQiLCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAiLCJzaG93TWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwVGV4dCIsImNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUiLCJ0ZXh0Iiwic2V0TWVzc2FnZVN0cmlwV2l0aFR5cGUiLCJjb21iaW5lZCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJyZXNldCIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsImFpTm90aWNlQ29udHJvbCIsImFpTm90aWNlIiwiY2xvbmUiLCJBSU5vdGljZSIsIlZCb3giLCJUZXh0Iiwib3V0VkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJnZXRRdWVyeSIsIm9uR29CdXR0b25QcmVzcyIsInZpc2libGUiLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJUb2tlbml6ZXIiLCJlZGl0YWJsZSIsImFuZCIsInJlbmRlck1vZGUiLCJUb2tlbml6ZXJSZW5kZXJNb2RlIiwiTG9vc2UiLCJjdHgiLCJvYmplY3QiLCJnZXRPYmplY3QiLCJUb2tlbiIsIml0ZW1zIiwibWFuZGF0b3J5IiwiaXNLZXlNYW5kYXRvcnkiLCJkZWxldGUiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwibmV3VG9rZW5zIiwiY29uY2F0IiwidXBkYXRlRmlsdGVySW5wdXQiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImNvZGVMaXN0IiwiSEJveCIsIlRyYW5zcGFyZW50IiwiJHNlYXJjaElucHV0IiwiZm9jdXMiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImVuYWJsZUZvcm1hdHRlZFRleHQiLCJzaG93Q2xvc2VCdXR0b24iLCJjbG9zZSIsIm5vdCIsImN1cnJlbnRJbnB1dFZhbHVlIiwiZ2V0VmFsdWUiLCJjdXJyZW50SW5wdXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwic2V0VmFsdWUiLCJjbGVhckFsbEZpbHRlcnMiLCJOb25lIiwiY2xlYXJGaWx0ZXJzQW5kVG9rZW5zIiwidXBkYXRlVG9rZW5BcnJheSIsImNoYW5nZVR5cGUiLCJuZXdUb2tlblNwZWNpZmljVmFsdWVzIiwidG9rZW5LZXkiLCJ0Iiwic2V0U2VsZWN0ZWRWYWx1ZXMiLCJjbG9zZUlubmVyQ29udHJvbFBvcG92ZXIiLCJoYXNTb3J0ZXJzIiwibmV3VG9rZW4iLCJoYXNHcm91cExldmVscyIsIm5vdGlmeUV4dGVybmFsVGFibGVTdGF0ZUNoYW5nZSIsInNldFF1ZXJ5IiwiY3VyclZhbHVlIiwic2V0UGxhY2Vob2xkZXIiLCJnZXRUb2tlbnNJbkluaXRpYWxTdGF0ZSIsIm1hbmRhdG9yeVRva2VucyIsInJlcXVpcmVkS2V5cyIsImdldEtleSIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsImdldEFnZ3JlZ2F0aW9uIiwiQ29udHJvbCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhckNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZW5jb2RlWE1MIGZyb20gXCJzYXAvYmFzZS9zZWN1cml0eS9lbmNvZGVYTUxcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRhZ2dyZWdhdGlvbixcblx0Y3JlYXRlUmVmZXJlbmNlLFxuXHRkZWZpbmVSZWZlcmVuY2UsXG5cdGRlZmluZVN0YXRlLFxuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXZlbnQsXG5cdHByb3BlcnR5LFxuXHR0eXBlIFByb3BlcnRpZXNPZlxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9Ub2tlblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gXCJzYXAvbS9Ub2tlbml6ZXJcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBGbGV4QWxpZ25JdGVtcywgRmxleEp1c3RpZnlDb250ZW50LCBGbGV4V3JhcCwgUGxhY2VtZW50VHlwZSwgVG9rZW5pemVyUmVuZGVyTW9kZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUsIFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB7IGFuZCwgYmluZFN0YXRlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBBSU5vdGljZSBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL0FJTm90aWNlXCI7XG5pbXBvcnQgRWFzeUZpbHRlcklucHV0IGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVySW5wdXRcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXJUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgVG9nZ2xlQnV0dG9uIGZyb20gXCJzYXAvbS9Ub2dnbGVCdXR0b25cIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyIGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRWFzeUZpbHRlck1ldGFkYXRhLCBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTdWNjZXNzIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL3NoYXJlZFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgRXJyb3JNZXNzYWdlSGFuZGxlciBmcm9tIFwiLi9FcnJvck1lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyB0cmlnZ2VyUFhJbnRlZ3JhdGlvbiB9IGZyb20gXCIuL1BYRmVlZGJhY2tcIjtcbmltcG9ydCBFYXN5RmlsdGVyVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuLy9Gb3IgY3VycmVudCByZWxlYXNlIHdlIGFyZSBpZ25vcmluZyBcIkFsbFwiIGFuZCBcIkFueVwiXG4vL1dlIGNhbiBpbmNvcnBvcmF0ZSB0aGVzZSB2YWx1ZXMgaW4gZnV0dXJlXG5leHBvcnQgdHlwZSBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbYm9vbGVhbiwgYm9vbGVhbl0gfCBbc3RyaW5nLCBzdHJpbmddIHwgW251bWJlciwgbnVtYmVyXSB8IFtEYXRlLCBEYXRlXTtcblxudHlwZSBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGUgPSBzdHJpbmcgfCBEYXRlIHwgYm9vbGVhbiB8IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ29kZUxpc3RUeXBlID0ge1xuXHR2YWx1ZTogUHJpbWl0aXZlVHlwZTtcblx0ZGVzY3JpcHRpb246IGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyA9IFtDb2RlTGlzdFR5cGUsIENvZGVMaXN0VHlwZV07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IENvZGVMaXN0VHlwZVtdO1xuXHRcdFx0bm9NYXRjaD86IGJvb2xlYW47XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH07XG5cbi8vV2Ugd2lsbCBiZSBoYW5kbGluZyBcIkFMTFwiIGFuZCBcIkFOWVwiIGF0IGxhdGVyIHBvaW50IG9mIHRpbWVcbmV4cG9ydCB0eXBlIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uID1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj47XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogc3RyaW5nW10gfCBib29sZWFuW10gfCBudW1iZXJbXSB8IERhdGVbXTtcblx0ICB9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI7XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogQmV0d2VlblNlbGVjdGVkVmFsdWVzO1xuXHQgIH07XG5cbmV4cG9ydCB0eXBlIFRva2VuVHlwZSA9IFwiTWVudVdpdGhDaGVja0JveFwiIHwgXCJDYWxlbmRhclwiIHwgXCJUaW1lXCIgfCBcIlZhbHVlSGVscFwiIHwgXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogXCJWYWx1ZUhlbHBcIjtcblx0YnVzeTogYm9vbGVhbjtcblx0aXNSZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBOb25WYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuXHRidXN5OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9rZW5EZWZpbml0aW9uID0gVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uIHwgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBTb3J0RGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGRlc2NlbmRpbmc6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUb2tlblNldHRlcnMgPSBcInNldFNlbGVjdGVkVmFsdWVzXCI7XG5cbmV4cG9ydCB0eXBlIEdyb3VwTGV2ZWxEZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhID0gUHJvcGVydHlNZXRhZGF0YSAmXG5cdChcblx0XHR8IHtcblx0XHRcdFx0dHlwZTogXCJWYWx1ZUhlbHBcIjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlPzogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlPzogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0XHQgIH1cblx0KTtcblxuLy8gV2UgbmVlZCB0aGUgdGhpcmQgYXJndWVtZW50IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgYSBjaGFuY2Ugb2YgY29tcG9zaXRlIGtleXMgc2NlbmFyaW9cbnR5cGUgRGF0YUZldGNoZXIgPSAoXG5cdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHR2YWx1ZU9mQ3VycmVudFByb3BlcnR5OiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRsbG1SZXN1bHQ6IFN1Y2Nlc3M8RWFzeUZpbHRlclJlc3VsdD5cbikgPT4gUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT47XG5cbmludGVyZmFjZSBGb2N1c0hhbmRsaW5nQ29udHJvbCB7XG5cdG9uc2FwZm9jdXNsZWF2ZT86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50ID0gVUk1RXZlbnQ8XG5cdHtcblx0XHRrZXk6IHN0cmluZztcblx0XHR2YWx1ZXM6IHVua25vd25bXTtcblx0XHRyZXNvbHZlOiAodmFsdWU6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA9PiB2b2lkO1xuXHRcdHJlamVjdDogKHJlYXNvbj86IEVycm9yKSA9PiB2b2lkO1xuXHR9LFxuXHRFYXN5RmlsdGVyQmFyQ29udGFpbmVyXG4+O1xuXG4vKlxuICogRGVsaXZlcnkgZm9yIGJldGEgcmVsZWFzZSBmb3IgdGhlIGVhc3kgZmlsdGVyIGZlYXR1cmUuXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb250cm9scy5lYXN5RmlsdGVyLkVhc3lGaWx0ZXJCYXJDb250YWluZXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJCYXJDb250YWluZXIgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGFwcElkPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZWFzeUZpbHRlckxpYj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0ZmlsdGVyQmFyTWV0YWRhdGE/OiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRyZWNvbW1lbmRlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiZnVuY3Rpb25cIiB9KVxuXHRkYXRhRmV0Y2hlcj86IERhdGFGZXRjaGVyO1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRlYXN5RmlsdGVySW5wdXQhOiBSZWY8RW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlcklucHV0Pj47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHRva2VuaXplciE6IFJlZjxUb2tlbml6ZXI+O1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGNvbnRlbnQ/OiBDb250cm9sO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGFpTm90aWNlPzogQ29udHJvbDtcblxuXHRAZXZlbnQoKVxuXHR0b2tlbnNDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXTsgcmVzZXQ6IGJvb2xlYW4gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHNvcnRlcnNDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgc29ydGVyczogU29ydERlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0Z3JvdXBMZXZlbHNDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgZ3JvdXBMZXZlbHM6IEdyb3VwTGV2ZWxEZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHF1ZXJ5Q2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHNob3dWYWx1ZUhlbHA/OiBFdmVudEhhbmRsZXI8RWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQ+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHQvKiogRmlyZXMgd2hlbiB0aGUgdXNlciBtYW51YWxseSByZW1vdmVzIG9yIGVkaXRzIGEgZmlsdGVyIHRva2VuLiBEb2VzIG5vdCBmaXJlIHdoZW4gdG9rZW5zIGFyZSBzZXQgYnkgdGhlIEFJIHNlYXJjaCByZXN1bHQuICovXG5cdEBldmVudCgpXG5cdHRva2Vuc0NoYW5nZWRCeVVzZXI/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyB0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRjbGVhckZpbHRlcnM/OiBFdmVudEhhbmRsZXI7XG5cblx0QGV2ZW50KClcblx0YmVmb3JlUXVlcnlQcm9jZXNzaW5nPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGFmdGVyUXVlcnlQcm9jZXNzaW5nPzogRXZlbnRIYW5kbGVyO1xuXG5cdHByaXZhdGUgcmVzb3VyY2VCdW5kbGUhOiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRAZGVmaW5lU3RhdGUoKVxuXHRwcm90ZWN0ZWQgc3RhdGU6IFN0YXRlT2Y8e1xuXHRcdHNob3dSZXN1bHQ6IGJvb2xlYW47XG5cdFx0dG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXTtcblx0XHRzb3J0ZXJzOiBTb3J0RGVmaW5pdGlvbltdO1xuXHRcdGdyb3VwTGV2ZWxzOiBHcm91cExldmVsRGVmaW5pdGlvbltdO1xuXHRcdHRva2VuaXplckVkaXRhYmxlOiBib29sZWFuO1xuXHRcdHNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcD86IGJvb2xlYW47XG5cdFx0c2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdG1lc3NhZ2VTdHJpcFRleHQ/OiBzdHJpbmc7XG5cdFx0c2hvd01lc3NhZ2VTdHJpcD86IGJvb2xlYW47XG5cdFx0bWVzc2FnZVN0cmlwVHlwZTogTWVzc2FnZVR5cGU7XG5cdFx0dGh1bWJCdXR0b25FbmFibGVkOiBib29sZWFuO1xuXHRcdHRodW1iVXBCdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHNob3dSZXN1bHQ6IGZhbHNlLFxuXHRcdHRva2VuczogW10gYXMgVG9rZW5EZWZpbml0aW9uW10sXG5cdFx0c29ydGVyczogW10gYXMgU29ydERlZmluaXRpb25bXSxcblx0XHRncm91cExldmVsczogW10gYXMgR3JvdXBMZXZlbERlZmluaXRpb25bXSxcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogdHJ1ZSxcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA6IGZhbHNlLFxuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRtZXNzYWdlU3RyaXBUZXh0OiBcIlwiLFxuXHRcdHNob3dNZXNzYWdlU3RyaXA6IGZhbHNlLFxuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogdHJ1ZSxcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogZmFsc2UsXG5cdFx0dGh1bWJEb3duQnV0dG9uUHJlc3NlZDogZmFsc2Vcblx0fTtcblxuXHRwcml2YXRlIGlubmVyQ29udHJvbFBvcG92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgb2tCdXR0b24/OiBCdXR0b247XG5cblx0cHJpdmF0ZSBzaG93QWxsQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgdG9vbGJhcj86IE92ZXJmbG93VG9vbGJhcjtcblxuXHRwcml2YXRlIG1hbmRhdG9yeUtleU1hcD86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5cdC8vSWYgc2V0IHRvIHRydWUgdGhlIGVycm9yIHN0YXRlIGNhbiBiZSBzZWVuIG9uIHRoZSB0b2tlbnNcblx0cHJpdmF0ZSBpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gdHJ1ZTtcblxuXHRwcml2YXRlIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBpbnZpc2libGVNZXNzYWdlITogSW52aXNpYmxlTWVzc2FnZTtcblxuXHRlYXN5ZmlsdGVyPzogUHJvbWlzZTx0eXBlb2YgRWFzeUZpbHRlciB8IHVuZGVmaW5lZD47XG5cblx0cHJpdmF0ZSByZXNvbHZlQ29udGVudFJlYWR5ITogKCkgPT4gdm9pZDtcblxuXHRwcml2YXRlIGlucHV0RmllbGRSZWFkeTogUHJvbWlzZTx2b2lkPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5ID0gcmVzb2x2ZTtcblx0fSk7XG5cblx0cHJpdmF0ZSBzaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSB0cnVlO1xuXG5cdHByaXZhdGUgc3VwcG9ydHNTb3J0aW5nID0gdHJ1ZTtcblxuXHRwcml2YXRlIHN1cHBvcnRzR3JvdXBpbmcgPSB0cnVlO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJCYXJDb250YWluZXI+KSwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMgYXMgc3RyaW5nLCBvdGhlcnMpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZSgpO1xuXHRcdHRoaXMuaW52aXNpYmxlTWVzc2FnZSA9IEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKTtcblx0fVxuXG5cdHNldEVhc3lGaWx0ZXJMaWIoZWFzeUZpbHRlckxpYjogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVhc3lGaWx0ZXJMaWJcIiwgZWFzeUZpbHRlckxpYik7XG5cdFx0aWYgKHRoaXMuZWFzeUZpbHRlckxpYikge1xuXHRcdFx0dGhpcy5lYXN5ZmlsdGVyID0gaW1wb3J0KHRoaXMuZWFzeUZpbHRlckxpYik7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgc2V0QXBwSWQoYXBwSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5hcHBJZCkge1xuXHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShcImFwcElkXCIsIGFwcElkLCB0cnVlKTtcblx0XHRcdGF3YWl0IHRoaXMuaW5wdXRGaWVsZFJlYWR5O1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RmlsdGVyQmFyTWV0YWRhdGEoZmlsdGVyQmFyTWV0YWRhdGE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10pOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuZmlsdGVyQmFyTWV0YWRhdGEpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJNZXRhZGF0YVwiLCBmaWx0ZXJCYXJNZXRhZGF0YSwgdHJ1ZSk7XG5cdFx0XHQvLyBwb3B1bGF0ZSB0aGUgdG9rZW5zIHdpdGggZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSB0aGlzLmNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk7XG5cdFx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRva2Vucztcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0Ly8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdFx0Ly9vblRva2VuQ2hhbmdlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBpbml0aWFsIHNldCBvZiB0b2tlbnMgYXJlIHNldFxuXHRcdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHR9XG5cblx0aW5pdGlhbGl6ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR0aGlzLnJlc29sdmVDb250ZW50UmVhZHkoKTtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0dGhpcy5hZGREZXBlbmRlbnQodGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKTtcblx0XHR9XG5cdFx0Ly9XZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgZXJyb3IgdmFsdWVTdGF0ZU1lc3NhZ2UgYXMgc29vbiB0aGUgY29udHJvbCByZW5kZXJzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBzdGF0ZSwgb25jZSB0aGUgc3RhdGUgaXMgdXBkYXRlZCB0aGUgcHJldmlvdXMgb3ZlcnJpZGRlbiBkZWZhdWx0IHZhbHVlcyB3b3VsZCBiZSBnb25lIGZvcmV2ZXJcblx0Z2V0RGVmYXVsdFRva2VucygpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSA9IFtdO1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZvckVhY2goKGRhdGEpID0+IHtcblx0XHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBkYXRhLnJlcXVpcmVkO1xuXHRcdFx0aWYgKGlzUmVxdWlyZWQpIHtcblx0XHRcdFx0KHRoaXMubWFuZGF0b3J5S2V5TWFwIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KVtkYXRhLm5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0Ly9DaGVjayB3aGV0aGVyIHRoZSBrZXlzIGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlIGVsc2UgcHVzaCBpdCBhY3Jvc3Ncblx0XHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID8/IFtdLFxuXHRcdFx0XHRcdFx0dHlwZTogZGF0YS50eXBlLFxuXHRcdFx0XHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc1JlcXVpcmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoZTogVUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4pOiB2b2lkIHtcblx0XHR0aGlzLm9uR29QcmVzcyhlLmdldFBhcmFtZXRlcihcInF1ZXJ5XCIpKTtcblx0fVxuXG5cdC8vTWFraW5nIGl0IHB1YmxpYyBiZWNhdXNlIGluIGxpdmUgbW9kZSB0aGUgYXBwIGRldmVsb3BlciBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZXJyb3IgVmFsdWVTdGF0ZU1lc3NhZ2Vcblx0Ly9JbiBub24tbGl2ZSBtb2RlICwgd2UgYXJlIGFscmVhZHkgaW50ZXJuYWxseSBoYW5kbGluZyBpdCBvbiBldmVyeSB0aW1lIHRpbWUgYSB1c2VyIGNsaWNrcyBvbiBHTy9FbnRlciBidXR0b25zXG5cdHB1YmxpYyBjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRva2Vuc0luU3RhdGUgPSB0aGlzLmdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUoKTtcblx0XHRpZiAodG9rZW5zSW5TdGF0ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2Vuc0luU3RhdGUpO1xuXHRcdFx0dG9rZW5zPy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5FcnJvcik7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9NQU5EQVRPUllfVE9LRU5fRVJST1JcIikpO1xuXHRcdFx0XHR0b2tlbi5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcygpOiB2b2lkIHtcblx0XHRjb25zdCBlYXN5VG9rZW5zID0gdGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkgYXMgRWFzeUZpbHRlclRva2VuW107XG5cdFx0ZWFzeVRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSgpKTtcblx0fVxuXG5cdGFzeW5jIG9uR29QcmVzcyhtYWdpY1F1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIW1hZ2ljUXVlcnkpIHtcblx0XHRcdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblxuXHRcdC8vIENhbGwgQUkgc2VydmljZSB0byBnZXQgdGhlIGZpbHRlciBjcml0ZXJpYVxuXHRcdGNvbnN0IGVhc3lmaWx0ZXIgPSBhd2FpdCB0aGlzLmVhc3lmaWx0ZXI7XG5cdFx0aWYgKCFlYXN5ZmlsdGVyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KFwiYmVmb3JlUXVlcnlQcm9jZXNzaW5nXCIpO1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlck1ldGFkYXRhOiBFYXN5RmlsdGVyTWV0YWRhdGEgPSB7XG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0ZW50aXR5U2V0OiB0aGlzLmNvbnRleHRQYXRoLFxuXHRcdFx0ZmllbGRzOiB0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW11cblx0XHR9O1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlclJlc3VsdCA9IGF3YWl0IGVhc3lmaWx0ZXIuZWFzeUZpbHRlcihtYWdpY1F1ZXJ5LCBlYXN5RmlsdGVyTWV0YWRhdGEpO1xuXG5cdFx0Ly9XZSBzaG91bGQgbm90IGNoYW5nZSB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdGhlIGZpcnN0IHRpbWUgd2hlbiB0aGUgR08gYnV0dG9uIGlzIHByZXNzZWQsIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIGluIHRoZSBFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YSBtZXRob2Rcblx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IGZhbHNlO1xuXHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LnN1Y2Nlc3MpIHtcblx0XHRcdC8vT25seSBhZGQgdGhlIHJlY2VudCBxdWVyeSB3aGVuIHRoZSBjYWxsIGlzIHN1Y2Nlc3Ncblx0XHRcdC8vRG8gbm90IHRyYWNrIHRoZSByZWNlbnQgcXVlcmllcyB3aGVuIHRoZSBpc0hpc3RvcnlFbmFibGVkIGlzIHNldCB0byBmYWxzZVxuXHRcdFx0Ly9JdCB3b3VsZCBiZSBhIHZpb2xhdGlvbiB0byB1c2VycyBwcml2YWN5XG5cdFx0XHRpZiAodGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmFkZFJlY2VudFF1ZXJ5KG1hZ2ljUXVlcnkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAxKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIGFuZCBhcHBseSBpdCBkaXJlY3RseSB0byB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGVycm9yXG5cdFx0XHR0aGlzLnJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpO1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHRcdHRoaXMuaW52aXNpYmxlTWVzc2FnZS5hbm5vdW5jZSh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHR0aGlzLnN0YXRlLmdyb3VwTGV2ZWxzID0gW107XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZW5lcmF0aW5nIGZpbHRlciBjcml0ZXJpYTogXCIsIGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5maXJlRXZlbnQoXCJhZnRlclF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGZyb20gdGhlIEFJIHNlcnZpY2UgZm9yIHZlcnNpb24gMSBvZiB0aGUgZWFzeSBmaWx0ZXIuXG5cdCAqIEBwYXJhbSBlYXN5RmlsdGVyUmVzdWx0IFRoZSByZXN1bHQgZnJvbSB0aGUgQUkgc2VydmljZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyLkVhc3lGaWx0ZXJSZXN1bHQ+KTogdm9pZCB7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gc2hvdyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgdGhhdCB0aGUgZmlsdGVyIGNyaXRlcmlhIGhhcyBiZWVuIGdlbmVyYXRlZFxuXHRcdFx0TG9nLmRlYnVnKFwiRmlsdGVyIGNyaXRlcmlhIGdlbmVyYXRlZDogXCIsIEpTT04uc3RyaW5naWZ5KGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsIG51bGwsIDIpKTtcblxuXHRcdFx0Y29uc3QgdG9rZW5zID0gWy4uLnRoaXMuc3RhdGUudG9rZW5zXS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5pc1JlcXVpcmVkKTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGhlIHByZXZpb3VzIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBhcHBseSB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0XHRFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YShcblx0XHRcdFx0dG9rZW5zLFxuXHRcdFx0XHRlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyLFxuXHRcdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10sXG5cdFx0XHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwLmJpbmQodGhpcylcblx0XHRcdCk7XG5cblx0XHRcdC8vV2Ugb25seSBoYXZlIHRvIGNhbGwgdGhlIGRhdGFGZXRjaGVyIG9uIHRoZSBWSCB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFza2VkIGJ5IHRoZSB1c2VyXG5cdFx0XHQvL0luIE1hZG5hdG9yeSB0b2tlbnMgY2FzZSB0aGUgZGVmYXVsdFZhbHVlcyBhcmUgYWxyZWFkeSBnaXZlbiwgc28gbm8gbmVlZCB0byBjYWxsIGRhdGFGZXRjaGVyIG9uIGl0XG5cblx0XHRcdGNvbnN0IGFsbFZhbHVlSGVscFRva2VucyA9IHRva2Vucy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgPSBhbGxWYWx1ZUhlbHBUb2tlbnMuZmlsdGVyKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcj8uZmluZCgobGxtUmVzdWx0KSA9PiBsbG1SZXN1bHQubmFtZSA9PT0gdmFsdWVIZWxwVG9rZW4ua2V5KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5kYXRhRmV0Y2hlcikge1xuXHRcdFx0XHQocmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgYXMgdW5rbm93biBhcyBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb25bXSkuZm9yRWFjaChhc3luYyAodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFGZXRjaGVyPy4oXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXksXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIHVua25vd24gYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHRcdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHQvL1dlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuIHRoZSBHTyBidXR0b24gaXMgcHJlc3NlZCwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgaW4gdGhlIEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhIG1ldGhvZFxuXHRcdFx0XHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSByZXN1bHQ7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIGRhdGFGZXRjaGVyIGlzIG5vdCB0aGVyZSwgdGhlbiBtb2NrIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gd2l0aCB0aGUgc2FtZSByZXN1bHQgY29taW5nIGZyb20gdGhlIExMTVxuXHRcdFx0XHRyZXF1aXJlZFZhbHVlSGVscFRva2Vucy5mb3JFYWNoKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmZvckVhY2goKGtleVNwZWNpZmljVmFsdWUsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcyA9IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBzdWJJbmR4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzW3N1YkluZHhdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdmFsdWUgYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRUb2tlbnMgPSB0aGlzLnZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2Vucyk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBzdG9yZSBzb3J0IGV4cHJlc3Npb25zIChhcHBsaWVkIHRvIHRhYmxlIGRpcmVjdGx5LCBub3Qgc2hvd24gYXMgdG9rZW5zKVxuXHRcdFx0dGhpcy5zdGF0ZS5zb3J0ZXJzID0gdGhpcy5zdXBwb3J0c1NvcnRpbmcgPyB0aGlzLnZhbGlkYXRlU29ydEV4cHJlc3Npb25zKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5zb3J0ZXJzKSA6IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHMgPSB0aGlzLnN1cHBvcnRzR3JvdXBpbmcgPyB0aGlzLmFwcGx5R3JvdXBMZXZlbHMoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmdyb3VwTGV2ZWxzKSA6IFtdO1xuXG5cdFx0dGhpcy5zaG93VW5zdXBwb3J0ZWRDYXBhYmlsaXRpZXNXYXJuaW5nKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5zb3J0ZXJzLCBlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZ3JvdXBMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIGEgd2FybmluZyB3aGVuIHRoZSBhcHAgZG9lcyBub3Qgc3VwcG9ydCB0aGUgTExNJ3Mgc29ydC9ncm91cCBleHByZXNzaW9ucy5cblx0ICogQHBhcmFtIHNvcnRlcnMgU29ydCBleHByZXNzaW9ucyBmcm9tIHRoZSBMTE0uXG5cdCAqIEBwYXJhbSBncm91cExldmVscyBHcm91cCBsZXZlbHMgZnJvbSB0aGUgTExNLlxuXHQgKi9cblx0cHJpdmF0ZSBzaG93VW5zdXBwb3J0ZWRDYXBhYmlsaXRpZXNXYXJuaW5nKFxuXHRcdHNvcnRlcnM6IEVhc3lGaWx0ZXIuRWFzeUZpbHRlclNvcnRFeHByZXNzaW9uW10gfCB1bmRlZmluZWQsXG5cdFx0Z3JvdXBMZXZlbHM6IEVhc3lGaWx0ZXIuRWFzeUZpbHRlckdyb3VwTGV2ZWxEZWZpbml0aW9uW10gfCB1bmRlZmluZWRcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgaGFzU29ydGVyc0Zyb21MTE0gPSBzb3J0ZXJzICYmIHNvcnRlcnMubGVuZ3RoID4gMDtcblx0XHRjb25zdCBoYXNHcm91cExldmVsc0Zyb21MTE0gPSBncm91cExldmVscyAmJiBncm91cExldmVscy5sZW5ndGggPiAwO1xuXHRcdGNvbnN0IHNvcnRpbmdVbnN1cHBvcnRlZCA9ICF0aGlzLnN1cHBvcnRzU29ydGluZyAmJiBoYXNTb3J0ZXJzRnJvbUxMTTtcblx0XHRjb25zdCBncm91cGluZ1Vuc3VwcG9ydGVkID0gIXRoaXMuc3VwcG9ydHNHcm91cGluZyAmJiBoYXNHcm91cExldmVsc0Zyb21MTE07XG5cblx0XHRpZiAoc29ydGluZ1Vuc3VwcG9ydGVkICYmIGdyb3VwaW5nVW5zdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU09SVElOR19BTkRfR1JPVVBJTkdfTk9UX1NVUFBPUlRFRFwiKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0fSBlbHNlIGlmIChzb3J0aW5nVW5zdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU09SVElOR19OT1RfU1VQUE9SVEVEXCIpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9IGVsc2UgaWYgKGdyb3VwaW5nVW5zdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR1JPVVBJTkdfTk9UX1NVUFBPUlRFRFwiKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgd2hldGhlciB0aGUgYXBwIHN1cHBvcnRzIHNvcnRpbmcgYW5kIGdyb3VwaW5nIGJhc2VkIG9uIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncy5cblx0ICogQHBhcmFtIHNvcnRpbmcgV2hldGhlciB0aGUgYXBwIHN1cHBvcnRzIHNvcnRpbmcuXG5cdCAqIEBwYXJhbSBncm91cGluZyBXaGV0aGVyIHRoZSBhcHAgc3VwcG9ydHMgZ3JvdXBpbmcuXG5cdCAqL1xuXHRwdWJsaWMgc2V0UGVyc29uYWxpemF0aW9uU3VwcG9ydChzb3J0aW5nOiBib29sZWFuLCBncm91cGluZzogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuc3VwcG9ydHNTb3J0aW5nID0gc29ydGluZztcblx0XHR0aGlzLnN1cHBvcnRzR3JvdXBpbmcgPSBncm91cGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiAgVmFsaWRhdGVzIGFuZCB0cmlnZ2VycyB0aGUgZ3JvdXBMZXZlbHNDaGFuZ2VkIGZ1bmN0aW9uLCB3aGljaCB3YXJucyBhYm91dCBub24tZ3JvdXBhYmxlIGZpZWxkcy5cblx0ICogQHBhcmFtIGdyb3VwTGV2ZWxzIFRoZSBncm91cCBsZXZlbHMgdG8gdmFsaWRhdGUgYW5kIGFwcGx5XG5cdCAqIEByZXR1cm5zIEdyb3VwTGV2ZWxEZWZpbml0aW9uW10gQW4gYXJyYXkgb2YgdmFsaWQgZ3JvdXAgbGV2ZWwgZGVmaW5pdGlvbnMgdG8gYmUgYXBwbGllZFxuXHQgKi9cblx0cHJpdmF0ZSBhcHBseUdyb3VwTGV2ZWxzKGdyb3VwTGV2ZWxzOiBHcm91cExldmVsRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkKTogR3JvdXBMZXZlbERlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW107XG5cblx0XHRpZiAoIW1ldGFkYXRhIHx8ICFncm91cExldmVscyB8fCBncm91cExldmVscy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNvbHZlRmllbGQgPSAoZ3JvdXBEZWY6IEdyb3VwTGV2ZWxEZWZpbml0aW9uKTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gRWFzeUZpbHRlclV0aWxzLnJlc29sdmVQcm9wZXJ0eU5hbWUoZ3JvdXBEZWYua2V5KTtcblx0XHRcdGNvbnN0IGZpZWxkID0gbWV0YWRhdGEuZmluZCgoZikgPT4gZi5uYW1lID09PSBncm91cERlZi5rZXkgfHwgZi5uYW1lLmVuZHNXaXRoKGAvJHtwcm9wZXJ0eU5hbWV9YCkpO1xuXHRcdFx0aWYgKCFmaWVsZCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhgRWFzeUZpbHRlckJhckNvbnRhaW5lcjogZ3JvdXAga2V5IFwiJHtncm91cERlZi5rZXl9XCIgbm90IGZvdW5kIGluIGZpbHRlciBiYXIgbWV0YWRhdGEsIHNraXBwaW5nYCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmllbGQ7XG5cdFx0fTtcblxuXHRcdGlmIChncm91cExldmVscy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IG5ldyBFcnJvck1lc3NhZ2VIYW5kbGVyKCk7XG5cdFx0XHRjb25zdCBmaWVsZCA9IHJlc29sdmVGaWVsZChncm91cExldmVsc1swXSk7XG5cdFx0XHRpZiAoIWZpZWxkKSByZXR1cm4gW107XG5cdFx0XHRjb25zdCBpc0dyb3VwYWJsZSA9IGVycm9ySGFuZGxlci5pc0dyb3VwYWJsZVByb3BlcnR5KGZpZWxkKTtcblx0XHRcdGlmIChlcnJvckhhbmRsZXIuaGFzRXJyb3JzKCkpIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAoZW5jb2RlWE1MKGVycm9ySGFuZGxlci5nZXRFcnJvck1lc3NhZ2UoKSksIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGlzR3JvdXBhYmxlID8gW2dyb3VwTGV2ZWxzWzBdXSA6IFtdO1xuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGdyb3VwIGxldmVsczogZmluZCB0aGUgZmlyc3QgdmFsaWQgZ3JvdXBhYmxlIGZpZWxkXG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gbmV3IEVycm9yTWVzc2FnZUhhbmRsZXIoKTtcblx0XHRsZXQgZmlyc3RHcm91cGFibGVEZWY6IEdyb3VwTGV2ZWxEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdGxldCBmaXJzdEdyb3VwYWJsZUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGdyb3VwRGVmIG9mIGdyb3VwTGV2ZWxzKSB7XG5cdFx0XHRjb25zdCBmaWVsZCA9IHJlc29sdmVGaWVsZChncm91cERlZik7XG5cdFx0XHRpZiAoIWZpZWxkKSBjb250aW51ZTtcblx0XHRcdGlmIChlcnJvckhhbmRsZXIuaXNHcm91cGFibGVQcm9wZXJ0eShmaWVsZCkpIHtcblx0XHRcdFx0aWYgKCFmaXJzdEdyb3VwYWJsZURlZikge1xuXHRcdFx0XHRcdGZpcnN0R3JvdXBhYmxlRGVmID0gZ3JvdXBEZWY7XG5cdFx0XHRcdFx0Zmlyc3RHcm91cGFibGVMYWJlbCA9IGZpZWxkLmxhYmVsID8/IGZpZWxkLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZmlyc3RHcm91cGFibGVEZWYpIHtcblx0XHRcdGNvbnN0IHdhcm5pbmcgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX01VTFRJUExFX0dST1VQX1dBUk5JTkdcIiwgW2ZpcnN0R3JvdXBhYmxlTGFiZWxdKTtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKGVuY29kZVhNTCh3YXJuaW5nKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0XHRyZXR1cm4gW2ZpcnN0R3JvdXBhYmxlRGVmXTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZmllbGRzIGFyZSBub24tZ3JvdXBhYmxlXG5cdFx0aWYgKGVycm9ySGFuZGxlci5oYXNFcnJvcnMoKSkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAoZW5jb2RlWE1MKGVycm9ySGFuZGxlci5nZXRFcnJvck1lc3NhZ2UoKSksIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIHNvcnQgZXhwcmVzc2lvbnMgZnJvbSB0aGUgQUkgcmVzdWx0IGFuZCByZXR1cm5zIHZhbGlkIHNvcnQgZGVmaW5pdGlvbnMuXG5cdCAqIEBwYXJhbSBzb3J0RXhwcmVzc2lvbnMgVGhlIHNvcnQgZXhwcmVzc2lvbnMgZnJvbSB0aGUgQUJBUCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0ZWQgc29ydCBkZWZpbml0aW9ucy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgdmFsaWRhdGVTb3J0RXhwcmVzc2lvbnMoc29ydEV4cHJlc3Npb25zPzogRWFzeUZpbHRlci5FYXN5RmlsdGVyU29ydEV4cHJlc3Npb25bXSk6IFNvcnREZWZpbml0aW9uW10ge1xuXHRcdGlmICghc29ydEV4cHJlc3Npb25zIHx8IHNvcnRFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCBub25Tb3J0YWJsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGNvbnN0IHZhbGlkU29ydGVycyA9IHNvcnRFeHByZXNzaW9uc1xuXHRcdFx0LmZpbHRlcigoc29ydEV4cHJlc3Npb24pID0+IHtcblx0XHRcdFx0Ly8gVmFsaWRhdGUgdGhhdCB0aGUgZmllbGQgZXhpc3RzIGluIG1ldGFkYXRhIGFuZCBpcyBzb3J0YWJsZVxuXHRcdFx0XHRjb25zdCBmaWVsZE1ldGFkYXRhID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YT8uZmluZCgoZmllbGQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZE5hbWUgPSBmaWVsZC5uYW1lLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmllbGROYW1lID09PSBzb3J0RXhwcmVzc2lvbi5rZXkgfHwgZmllbGQubmFtZSA9PT0gc29ydEV4cHJlc3Npb24ua2V5O1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoIWZpZWxkTWV0YWRhdGEpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZmllbGRNZXRhZGF0YS5zb3J0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUZpZWxkcy5wdXNoKGZpZWxkTWV0YWRhdGEubGFiZWwgPz8gc29ydEV4cHJlc3Npb24ua2V5KTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pXG5cdFx0XHQubWFwKChzb3J0RXhwcmVzc2lvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzb3J0RXhwcmVzc2lvbi5rZXkuc3BsaXQoXCIvXCIpLnBvcCgpID8/IHNvcnRFeHByZXNzaW9uLmtleTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRrZXk6IHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRkZXNjZW5kaW5nOiBzb3J0RXhwcmVzc2lvbi5kZXNjZW5kaW5nXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdC8vIFNob3cgd2FybmluZyBtZXNzYWdlIGZvciBub24tc29ydGFibGUgZmllbGRzXG5cdFx0aWYgKG5vblNvcnRhYmxlRmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX05PTl9TT1JUQUJMRVwiLCBbbm9uU29ydGFibGVGaWVsZHMuam9pbihcIiwgXCIpXSk7XG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2VTdHJpcChtZXNzYWdlLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsaWRTb3J0ZXJzO1xuXHR9XG5cblx0Ly9ldmVyeSBzaW5nbGUgc2VsZWN0IG1lbnUgdHlwZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSB2YWx1ZSwgZWxzZSBzcGxpY2UgdG8gb25lIHZhbHVlIGFuZCB1cGRhdGUgdGhlICBtZXNzYWdlIHN0cmlwXG5cdHZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3Qgc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiKSB7XG5cdFx0XHRcdGlmICh0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5wdXNoKHRva2VuLmxhYmVsKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLnNwbGljZSgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc3RhdGUuc2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0ID0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfVkFMVUVfTUVTU0FHRVwiLCBbXG5cdFx0XHRcdGA8c3Ryb25nPiR7c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBcblx0XHRcdF0pO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0Y2xlYXJNZXNzYWdlU3RyaXAoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuc2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gdGV4dDtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwV2l0aFR5cGUodGV4dDogc3RyaW5nLCB0eXBlOiBNZXNzYWdlVHlwZSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwKHRleHQpO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IHR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGV4aXN0aW5nIG1lc3NhZ2Ugc3RyaXAgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC5cblx0ICogQHBhcmFtIHRleHQgVGhlIG1lc3NhZ2UgdGV4dCB0byBhcHBlbmQuXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSBtZXNzYWdlIHR5cGUgZm9yIHRoaXMgbWVzc2FnZS5cblx0ICovXG5cdGFwcGVuZE1lc3NhZ2VTdHJpcCh0ZXh0OiBzdHJpbmcsIHR5cGU6IE1lc3NhZ2VUeXBlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29tYmluZWQgPSB0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgJiYgdGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID8gYCR7dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0fTxicj4ke3RleHR9YCA6IHRleHQ7XG5cdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXBXaXRoVHlwZShjb21iaW5lZCwgdHlwZSk7XG5cdH1cblxuXHRjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpOiBQb3BvdmVyIHtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gKFxuXHRcdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1pbm5lclBvcG92ZXJcIn1cblx0XHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQm90dG9tXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRmb290ZXI6IHRoaXMuZ2V0VG9vbGJhcigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciBhcyBQb3BvdmVyO1xuXHR9XG5cblx0Z2V0VG9vbGJhcigpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy50b29sYmFyKSB7XG5cdFx0XHRjb25zdCBva0J1dHRvbiA9IHRoaXMuZ2V0T2tCdXR0b24oKTtcblx0XHRcdGNvbnN0IHNob3dBbGxCdXR0b24gPSB0aGlzLmdldFNob3dBbGxCdXR0b24oKTtcblx0XHRcdHRoaXMudG9vbGJhciA9IChcblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhcj5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdFx0e29rQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHRcdHtzaG93QWxsQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L092ZXJmbG93VG9vbGJhcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvb2xiYXI7XG5cdH1cblxuXHRnZXRPa0J1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5va0J1dHRvbikge1xuXHRcdFx0dGhpcy5va0J1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX09LXCIpfSB0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5va0J1dHRvbjtcblx0fVxuXG5cdGdldFNob3dBbGxCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuc2hvd0FsbEJ1dHRvbikge1xuXHRcdFx0dGhpcy5zaG93QWxsQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfU0hPV19BTExfSVRFTVNcIil9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zaG93QWxsQnV0dG9uO1xuXHR9XG5cblx0Zm9ybWF0VG9rZW5zKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRva2Vucy5tYXAoKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLnRva2VuLFxuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly9NYWtpbmcgc3VyZSB0aGF0IG9ubHkgdGhlIGlkIHBhcnQgaXMgcGFzc2VkXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogdmFsdWUub3BlcmF0b3IsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiB2YWx1ZS5zZWxlY3RlZFZhbHVlcy5tYXAoKHZhbCkgPT4gdmFsLnZhbHVlKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9IGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBkZWVwQ2xvbmUodG9rZW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwidG9rZW5zXCIpKSB7XG5cdFx0XHRpZiAodGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQpIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHR0b2tlbnM6IHRoaXMuZm9ybWF0VG9rZW5zKHRoaXMuc3RhdGUudG9rZW5zIGFzIHVua25vd24gYXMgVG9rZW5EZWZpbml0aW9uW10pLFxuXHRcdFx0XHRcdHJlc2V0OiB0aGlzLmlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdGhpcy5zdGF0ZS50b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdGlmICghKHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID8/IGZhbHNlKSkge1xuXHRcdFx0XHR0aGlzLmNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBUaGUgdXNlciBoYXMgYWNrbm93bGVkZ2VkIHRoZSBtZXNzYWdlIHN0cmlwIGFuZCB1bmRlcnN0b29kIHRoZSBpc3N1ZS5cblx0XHRcdFx0ICogV2hlbiB0aGUgdG9rZW5zIGFyZSB1cGRhdGVkIG5leHQgdGltZSwgZGlzcGxheWluZyB0aGUgbWVzc2FnZSBzdHJpcCBhZ2FpbiBzZXJ2ZXMgbm8gcHVycG9zZS5cblx0XHRcdFx0ICogQWRkaXRpb25hbGx5LCBvbmNlIHRoZSB0b2tlbnMgYXJlIHVwZGF0ZWQsIHRoZSBpbnB1dCBmaWVsZCB0ZXh0IGlzIHJlbW92ZWRcblx0XHRcdFx0ICogcmVuZGVyaW5nIHRoZSBtZXNzYWdlIHN0cmlwIGlycmVsZXZhbnQuIEhvd2V2ZXIsIHRoZSBtZXNzYWdlIHN0cmlwIGlzIGRpc3BsYXllZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRoZSBcIkdvXCIgYnV0dG9uIGlzIHByZXNzZWQuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXBGb3JTaW5nbGVWYWx1ZSgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJzb3J0ZXJzXCIpKSB7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcInNvcnRlcnNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0c29ydGVyczogdGhpcy5zdGF0ZS5zb3J0ZXJzXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZ3JvdXBMZXZlbHNcIikpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiZ3JvdXBMZXZlbHNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0Z3JvdXBMZXZlbHM6IHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHNcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvL1Jlc2V0dGluZyB0byBkZWZhdWx0IHZhbHVlc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gZmFsc2U7XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSB0cnVlO1xuXHRcdHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZTtcblxuXHRcdC8vICBvbnNhcGZvY3VzbGVhdmUgbWV0aG9kIGluIHNhcC5tLlRva2VuaXplciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRpbmcgdGhlIHJlbmRlcm1vZGUgb2YgdG9rZW5pemVyIHRvIFwiTmFycm93XCIgZnJvbSBcImxvb3NlXCJcblx0XHQvLyAgSW4gdGhpcyBwcm9jZXNzIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3BvdmVyIGlzc3VlcyBoYXBwZW5pbmdcblx0XHQvLyAgU28gYXMgYSB0ZW1wb3JhcnkgZml4IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uXG5cdFx0KHRoaXMudG9rZW5pemVyPy5jdXJyZW50IGFzIEZvY3VzSGFuZGxpbmdDb250cm9sKS5vbnNhcGZvY3VzbGVhdmUgPSAoKTogdm9pZCA9PiB7fTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYlVwUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iVXBcIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iRG93blByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJ0aHVtYkRvd25cIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IGZhbHNlO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfRkVFREJBQ0tfU0VOVFwiKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IFZCb3gge1xuXHRcdGNvbnN0ICR0b3BHb0J0biA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgdGh1bWJVcEJ1dHRvblRva2VuaXplciA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iVXBcIik7XG5cdFx0Y29uc3QgdGh1bWJEb3duQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iRG93blwiKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvbnRyb2xzXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IGFpTm90aWNlQ29udHJvbCA9IHRoaXMuYWlOb3RpY2UgPyAoXG5cdFx0XHR0aGlzLmFpTm90aWNlLmNsb25lKClcblx0XHQpIDogKFxuXHRcdFx0PEFJTm90aWNlIHR5cGU9XCJCdXR0b25cIj5cblx0XHRcdFx0PFZCb3g+XG5cdFx0XHRcdFx0PFRleHQgY2xhc3M9XCJzYXBGZUNvbnRyb2xzQWlQb3BvdmVyVGV4dDFcIiB0ZXh0PXtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9OT1RJQ0VfQUlfUE9QT1ZFUl9URVhUXzFcIil9IC8+XG5cdFx0XHRcdFx0PFRleHQgY2xhc3M9XCJzYXBGZUNvbnRyb2xzQWlQb3BvdmVyVGV4dDJcIiB0ZXh0PXtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9OT1RJQ0VfQUlfUE9QT1ZFUl9URVhUXzJcIil9IC8+XG5cdFx0XHRcdDwvVkJveD5cblx0XHRcdDwvQUlOb3RpY2U+XG5cdFx0KTtcblx0XHRjb25zdCBvdXRWQm94ID0gKFxuXHRcdFx0PFZCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PEVhc3lGaWx0ZXJJbnB1dFxuXHRcdFx0XHRcdFx0cmVjb21tZW5kZWRWYWx1ZXM9e3RoaXMucmVjb21tZW5kZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHRyZWY9e3RoaXMuZWFzeUZpbHRlcklucHV0fVxuXHRcdFx0XHRcdFx0ZW50ZXJQcmVzc2VkPXt0aGlzLm9uRW50ZXJQcmVzc2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0XHRxdWVyeUNoYW5nZWQ9eyhlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwicXVlcnlDaGFuZ2VkXCIsIHsgcXVlcnk6IGUuZ2V0UGFyYW1ldGVyKFwicXVlcnlcIikgfSk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0bGl2ZUNoYW5nZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiLCB7IHF1ZXJ5OiB0aGlzLmdldFF1ZXJ5KCkgfSk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vYWlcIn1cblx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5CZWdpblwifVxuXHRcdFx0XHRcdFx0cmVmPXskdG9wR29CdG59XG5cdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0dPXCIpfVxuXHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5FbXBoYXNpemVkfVxuXHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMub25Hb0J1dHRvblByZXNzLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdHJlbmRlclR5cGU9XCJCYXJlXCJcblx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93UmVzdWx0XCIpfVxuXHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHR3cmFwPXtGbGV4V3JhcC5XcmFwfVxuXHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpblRvcFwifVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PEZsZXhCb3ggY2xhc3M9e1wic2FwRmVDb250cm9sc0dhcDhweFwifSByZW5kZXJUeXBlPVwiQmFyZVwiIGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn0gd3JhcD17RmxleFdyYXAuV3JhcH0+XG5cdFx0XHRcdFx0XHR7YWlOb3RpY2VDb250cm9sfVxuXHRcdFx0XHRcdFx0PFRva2VuaXplclxuXHRcdFx0XHRcdFx0XHRlZGl0YWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRva2VuaXplckVkaXRhYmxlXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1Rva2VuaXplclwifVxuXHRcdFx0XHRcdFx0XHR0b2tlbnM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRva2Vuc1wiKX1cblx0XHRcdFx0XHRcdFx0cmVuZGVyTW9kZT17VG9rZW5pemVyUmVuZGVyTW9kZS5Mb29zZX1cblx0XHRcdFx0XHRcdFx0cmVmPXt0aGlzLnRva2VuaXplcn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnM6IChpZHg6IG51bWJlciwgY3R4OiBDb250ZXh0KTogVG9rZW4gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gY3R4LmdldE9iamVjdCgpIGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxUb2tlblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGhpcy5zdGF0ZS50b2tlbnMua2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXt0aGlzLnN0YXRlLnRva2Vucy5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5zdGF0ZS50b2tlbnMua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYW5kYXRvcnk9e3RoaXMuaXNLZXlNYW5kYXRvcnkob2JqZWN0LmtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnVzeT17dGhpcy5zdGF0ZS50b2tlbnMuYnVzeX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWxldGU9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRva2VuSW5kZXggPSB0aGlzLnN0YXRlLnRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiB0b2tlbi5rZXkgPT09IG9iamVjdC5rZXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMuY29uY2F0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbnM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkQnlVc2VyXCIsIHsgdG9rZW5zOiBbLi4udGhpcy5zdGF0ZS50b2tlbnNdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJUb2tlbkluZm9cIiB2YWx1ZT17b2JqZWN0fSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwicG9wb3ZlclwiIHZhbHVlPXt0aGlzLmlubmVyQ29udHJvbFBvcG92ZXJ9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJlYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIgdmFsdWU9e3RoaXN9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT1cImNvZGVMaXN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17dGhpcy5maWx0ZXJCYXJNZXRhZGF0YT8uZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSBvYmplY3Qua2V5KT8uY29kZUxpc3R9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9Ub2tlbj5cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9Ub2tlbml6ZXI+XG5cdFx0XHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25Ub2tlbml6ZXJ9LCB7dGh1bWJEb3duQnV0dG9uVG9rZW5pemVyfVxuXHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1JFU0VUXCIpfVxuXHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzZXRTdGF0ZSh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py4kc2VhcmNoSW5wdXQuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxWQm94IHJlbmRlclR5cGU9XCJCYXJlXCIgY2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wIHNhcEZlQ29udHJvbHNHYXA4cHhcIn0+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD48L01lc3NhZ2VTdHJpcD5cblx0XHRcdFx0XHQ8RmxleEJveCByZW5kZXJUeXBlPVwiQmFyZVwiIGNsYXNzPXtcInNhcEZlQ29udHJvbHNHYXA4cHhcIn0+XG5cdFx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHRcdHR5cGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFR5cGVcIil9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRcdHNob3dJY29uPXt0cnVlfVxuXHRcdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRcdGNsb3NlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93TWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHRcdFx0PEhCb3ggdmlzaWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIiksIG5vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93UmVzdWx0XCIpKSl9PlxuXHRcdFx0XHRcdFx0XHR7dGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGV9LCB7dGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZX1cblx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDwvVkJveD5cblx0XHRcdDwvVkJveD5cblx0XHQpIGFzIFZCb3g7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKCR0b3BHb0J0bi5jdXJyZW50ISwgXCJwcmVzc1wiLCBcImZlOmFpOnNlYXJjaFwiKTtcblx0XHRyZXR1cm4gb3V0VkJveDtcblx0fVxuXG5cdGFzeW5jIG9uR29CdXR0b25QcmVzcygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblx0XHRsZXQgY3VycmVudElucHV0VmFsdWUgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpO1xuXHRcdGNvbnN0IGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0UGxhY2Vob2xkZXIoKTtcblxuXHRcdGlmIChjdXJyZW50SW5wdXRWYWx1ZSA9PT0gXCJcIiAmJiBjdXJyZW50SW5wdXRQbGFjZWhvbGRlciAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSkge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoY3VycmVudElucHV0UGxhY2Vob2xkZXIgfHwgXCJcIik7XG5cdFx0XHRjdXJyZW50SW5wdXRWYWx1ZSA9IGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLm9uR29QcmVzcyhjdXJyZW50SW5wdXRWYWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgRWFzeUZpbHRlckJhckNvbnRhaW5lciB0byBpdHMgaW5pdGlhbCBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6XG5cdCAqIC0gQ2xlYXJzIGFsbCBub24tbWFuZGF0b3J5IHRva2VucyBhbmQgcmVzZXRzIG1hbmRhdG9yeSB0b2tlbnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXNcblx0ICogLSBSZXNldHMgdGhlIGlucHV0IGZpZWxkIHRvIGl0cyBkZWZhdWx0IHBsYWNlaG9sZGVyIHRleHRcblx0ICogLSBDbGVhcnMgYWxsIGVycm9yIHZhbHVlIHN0YXRlcyBhbmQgbWVzc2FnZXMgZnJvbSB0b2tlbnNcblx0ICogLSBDbGVhcnMgYW55IGRpc3BsYXllZCBtZXNzYWdlIHN0cmlwc1xuXHQgKiAtIE9wdGlvbmFsbHkgZmlyZXMgdGhlIGNsZWFyRmlsdGVycyBldmVudCB0byBub3RpZnkgY29uc3VtZXJzXG5cdCAqIEBwYXJhbSBjbGVhckFsbEZpbHRlcnMgSWYgdHJ1ZSwgZmlyZXMgdGhlIGNsZWFyRmlsdGVycyBldmVudCB0byBub3RpZnkgY29uc3VtZXJzIHRoYXQgZmlsdGVycyBzaG91bGQgYmUgY2xlYXJlZCBlbHNlIGp1c3QgcmVzZXRzIHRoZSB0b2tlbnMgd2l0aG91dCBmaXJpbmcgdGhlIGV2ZW50XG5cdCAqIEBwYXJhbSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyBJZiB0cnVlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzZXRCdXR0b24gaXMgcmVzdG9yaW5nIHRva2VucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlc1xuXHQgKi9cblxuXHRyZXNldFN0YXRlKGNsZWFyQWxsRmlsdGVycyA9IHRydWUsIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zID0gZmFsc2UpOiB2b2lkIHtcblx0XHRpZiAoY2xlYXJBbGxGaWx0ZXJzKSB7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImNsZWFyRmlsdGVyc1wiKTtcblx0XHRcdHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHMgPSBbXTtcblx0XHRcdHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2Vucztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS5zb3J0ZXJzID0gW107XG5cdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0aGlzLmdldERlZmF1bHRUb2tlbnMoKTtcblx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5SZXNldFwiKTtcblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblx0XHR0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA9IHRydWU7XG5cdFx0Ly9TZXQgdGhlIFZhbHVlIFN0YXRlcyBvZiBhbGwgdGhlIFRva2VucyBiYWNrIHRvIE5vbmVcblx0XHR0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlXCIsIFZhbHVlU3RhdGUuTm9uZSkpO1xuXHRcdHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVUZXh0XCIsIG51bGwpKTtcblx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7IC8vY2xlYXIgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdH1cblxuXHRjbGVhckZpbHRlcnNBbmRUb2tlbnMoKTogdm9pZCB7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJjbGVhckZpbHRlcnNcIik7XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IFtdO1xuXHR9XG5cblx0Ly9UaGUgYmVsb3cgY29kZSB1cGRhdGVzIHRoZSBleGlzdGluZyBzdGF0ZSBieSBmZXRjaGluZyB0aGUga2V5IGFuZCBzZWxlY3RlZFZhbHVlc1xuXHR1cGRhdGVUb2tlbkFycmF5KFxuXHRcdGNoYW5nZVR5cGU6IFRva2VuU2V0dGVycyxcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5LZXk6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCB0b2tlbkluZGV4ID0gbmV3VG9rZW5zLmZpbmRJbmRleCgodCkgPT4gdC5rZXkgPT09IHRva2VuS2V5KTtcblx0XHRjb25zdCB0b2tlbiA9IG5ld1Rva2Vuc1t0b2tlbkluZGV4XTtcblx0XHRpZiAodG9rZW5JbmRleCAhPSAtMSkge1xuXHRcdFx0c3dpdGNoIChjaGFuZ2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJzZXRTZWxlY3RlZFZhbHVlc1wiOlxuXHRcdFx0XHRcdHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModG9rZW4gYXMgVG9rZW5EZWZpbml0aW9uLCBuZXdUb2tlblNwZWNpZmljVmFsdWVzLCB0b2tlbkluZGV4LCBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW10pO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdFx0XHRcdC8vUmVtb3ZlIHRoZSB0b2tlbiBlbnRpcmVseVxuXHRcdFx0XHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTcGVjaWZ5aW5nIGEgc2V0dGVyIHRoYXQgaXMgb3V0IG9mIHRoZSBib3VuZGFyeVwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIFVwZGF0ZSB0aGUgc3RhdGUgYnkgYXNzaWduaW5nIHRoZSBuZXcgdG9rZW5zIGFycmF5XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IG5ld1Rva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwidG9rZW5zQ2hhbmdlZEJ5VXNlclwiLCB7IHRva2VuczogWy4uLnRoaXMuc3RhdGUudG9rZW5zXSB9KTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyKCk6IHZvaWQge1xuXHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcj8uY2xvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXMoXG5cdFx0dG9rZW46IFRva2VuRGVmaW5pdGlvbixcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5JbmRleDogbnVtYmVyLFxuXHRcdG5ld1Rva2VuczogVG9rZW5EZWZpbml0aW9uW11cblx0KTogdm9pZCB7XG5cdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0aXNLZXlNYW5kYXRvcnkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5kYXRvcnlLZXlNYXBba2V5XSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBzdGF0ZSBoYXMgc29ydCBkZWZpbml0aW9ucyBmcm9tIHRoZSBlYXN5IGZpbHRlci5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY3VycmVudCBzdGF0ZSBjb250YWlucyBvbmUgb3IgbW9yZSBzb3J0ZXJzLlxuXHQgKi9cblx0cHJpdmF0ZSBoYXNTb3J0ZXJzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLnNvcnRlcnMubGVuZ3RoID4gMDtcblx0fVxuXG5cdHJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpOiB0aGlzIHtcblx0XHRjb25zdCBuZXdUb2tlbjogVG9rZW5EZWZpbml0aW9uW10gPSB0aGlzLnN0YXRlLnRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdH0pO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRoYXNHcm91cExldmVscygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5ncm91cExldmVscy5sZW5ndGggPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5vdGlmaWVzIHRoZSBjb250YWluZXIgdGhhdCBhbiBleHRlcm5hbCB0YWJsZSBzdGF0ZSBjaGFuZ2UgKHNvcnQgb3IgZ3JvdXApIGhhcyBiZWVuIGRldGVjdGVkLlxuXHQgKiBJZiB0aGUgY29udGFpbmVyIGN1cnJlbnRseSBoYXMgYWN0aXZlIHNvcnRlcnMgb3IgZ3JvdXAgbGV2ZWxzLCB0aGUgZmlsdGVyIGlucHV0IGlzIG1hcmtlZCBkaXJ0eVxuXHQgKiBiZWNhdXNlIHRoZSBleHRlcm5hbCBjaGFuZ2UgbWFrZXMgdGhlIGVhc3kgZmlsdGVyIHJlc3VsdCBpbmNvbnNpc3RlbnQuXG5cdCAqL1xuXHRub3RpZnlFeHRlcm5hbFRhYmxlU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzU29ydGVycygpIHx8IHRoaXMuaGFzR3JvdXBMZXZlbHMoKSkge1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHR9XG5cdH1cblxuXHRnZXRRdWVyeSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpID8/IFwiXCI7XG5cdH1cblxuXHRnZXRUb2tlbnMoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdHJldHVybiBbLi4udGhpcy5zdGF0ZS50b2tlbnNdO1xuXHR9XG5cblx0c2V0UXVlcnkocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKHF1ZXJ5KTtcblx0fVxuXG5cdHVwZGF0ZUZpbHRlcklucHV0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyVmFsdWU6IHN0cmluZyA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCkgfHwgXCJcIjtcblx0XHRpZiAodmFsdWUgPT09IFwidG9rZW5VcGRhdGVkXCIgJiYgY3VyclZhbHVlICE9PSBcIlwiKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFBsYWNlaG9sZGVyKGN1cnJWYWx1ZSk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ0b2tlblJlc2V0XCIpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UGxhY2Vob2xkZXIodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbLi4udG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc10gfSkpO1xuXHRcdGNvbnN0IG1hbmRhdG9yeVRva2VucyA9IG5ld1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBtYW5kYXRvcnlUb2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFtdIH0pKTtcblx0fVxuXG5cdGdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLnRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRjb25zdCBpc0tleU1hbmRhdG9yeSA9IHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KTtcblx0XHRcdGlmIChpc0tleU1hbmRhdG9yeSkge1xuXHRcdFx0XHRyZXR1cm4gdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUodG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IEVhc3lGaWx0ZXJUb2tlbltdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZXF1aXJlZEtleXMgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4ua2V5KTtcblx0XHRyZXR1cm4gdGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZmlsdGVyKCh0b2tlbikgPT4gcmVxdWlyZWRLZXlzLmluY2x1ZGVzKHRva2VuLmdldEtleSgpKSkgYXNcblx0XHRcdHwgRWFzeUZpbHRlclRva2VuW11cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0c3RhdGljIHJlbmRlcihybTogUmVuZGVyTWFuYWdlciwgY29udHJvbDogRWFzeUZpbHRlckJhckNvbnRhaW5lcik6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gPHNwYW4gcmVmPXtjb250cm9sfT57Y29udHJvbC5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIil9PC9zcGFuPjtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtFQUNBO0VBd0JBO0VBd0RBO0VBcUJBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQxQ0MsY0FBYyxDQUFDLG1EQUFtRCxDQUFDLEVBQUFDLEtBQUEsR0FFbEVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc1QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBRzVCSCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FHNUJKLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQUksS0FBQSxHQUczQkwsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFRLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBRzNCTixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVcsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHOUJDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFFLE1BQUEsR0FHakJDLFdBQVcsQ0FBQztJQUFFVixJQUFJLEVBQUU7RUFBc0IsQ0FBQyxD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
|
|
1152
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMwIiwiYWdncmVnYXRpb24iLCJfZGVjMSIsIl9kZWMxMCIsImV2ZW50IiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiZGVmaW5lU3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2wiLCJwcm9wZXJ0aWVzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMCIsIl9kZXNjcmlwdG9yMSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJzaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQiLCJpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyIsImlucHV0RmllbGRSZWFkeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzb2x2ZUNvbnRlbnRSZWFkeSIsInNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSIsImFyaWFMYWJlbEFwcGxpZWQiLCJzdXBwb3J0c1NvcnRpbmciLCJzdXBwb3J0c0dyb3VwaW5nIiwiaW5pdGlhbGl6ZSIsImludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RWFzeUZpbHRlckxpYiIsImVhc3lGaWx0ZXJMaWIiLCJzZXRQcm9wZXJ0eSIsImVhc3lmaWx0ZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwic2V0QXBwSWQiLCJhcHBJZCIsImVhc3lGaWx0ZXJJbnB1dCIsImN1cnJlbnQiLCJzZXRGaWx0ZXJCYXJNZXRhZGF0YSIsImZpbHRlckJhck1ldGFkYXRhIiwidG9rZW5zIiwiZ2V0RGVmYXVsdFRva2VucyIsImlubmVyQ29udHJvbFBvcG92ZXIiLCJjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scyIsImFkZERlcGVuZGVudCIsInN0YXRlIiwic2hvd1Jlc3VsdCIsImxlbmd0aCIsImlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCIsImluaXQiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtYW5kYXRvcnlLZXlNYXAiLCJmb3JFYWNoIiwiZGF0YSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsIm5hbWUiLCJwdXNoIiwia2V5IiwibGFiZWwiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiYnVzeSIsImJ1aWxkSW5wdXRBcmlhTGFiZWwiLCJtYW5kYXRvcnlGaWVsZHMiLCJmaWx0ZXIiLCJmIiwiZmllbGRMYWJlbHMiLCJtYXAiLCJqb2luIiwiZ2V0VGV4dCIsIm9uRW50ZXJQcmVzc2VkIiwiZSIsIm9uR29QcmVzcyIsImdldFBhcmFtZXRlciIsImNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQiLCJ0b2tlbnNJblN0YXRlIiwiZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSIsImdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSIsInRva2VuIiwiVmFsdWVTdGF0ZSIsIkVycm9yIiwib3BlblZhbHVlU3RhdGVNZXNzYWdlIiwiY2xvc2VBbGxNYW5kYXRvcnlWYWx1ZVN0YXRlTWVzc2FnZXMiLCJlYXN5VG9rZW5zIiwidG9rZW5pemVyIiwiZ2V0VG9rZW5zIiwiY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSIsIm1hZ2ljUXVlcnkiLCJyZXNldFN0YXRlIiwidG9rZW5pemVyRWRpdGFibGUiLCJmaXJlRXZlbnQiLCJlYXN5RmlsdGVyTWV0YWRhdGEiLCJ2ZXJzaW9uIiwiZW50aXR5U2V0IiwiY29udGV4dFBhdGgiLCJmaWVsZHMiLCJlYXN5RmlsdGVyUmVzdWx0IiwiZWFzeUZpbHRlciIsInN1Y2Nlc3MiLCJpc0hpc3RvcnlFbmFibGVkIiwiYWRkUmVjZW50UXVlcnkiLCJzZXRRdWVyeVN1Y2Nlc3MiLCJoYW5kbGVWMVN1Y2Nlc3MiLCJzZXRRdWVyeUZhaWx1cmUiLCJyZW1vdmVOb25NYW5kYXRvcnlUb2tlbnMiLCJzZXRNZXNzYWdlU3RyaXAiLCJtZXNzYWdlIiwiYW5ub3VuY2UiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsIm1lc3NhZ2VTdHJpcFR5cGUiLCJNZXNzYWdlVHlwZSIsIldhcm5pbmciLCJncm91cExldmVscyIsIkxvZyIsImVycm9yIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiY2xlYXJNZXNzYWdlU3RyaXAiLCJFYXN5RmlsdGVyVXRpbHMiLCJmb3JtYXREYXRhIiwiYmluZCIsImFsbFZhbHVlSGVscFRva2VucyIsInJlc3VsdCIsInJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zIiwidmFsdWVIZWxwVG9rZW4iLCJmaW5kIiwibGxtUmVzdWx0IiwiZGF0YUZldGNoZXIiLCJ1cGRhdGVkVG9rZW5zIiwia2V5U3BlY2lmaWNWYWx1ZSIsImlkeCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJCVCIsIk5CIiwic2VsZWN0ZWRWYWx1ZXMiLCJ2YWx1ZSIsImRlc2NyaXB0aW9uIiwic3ViSW5keCIsInZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzIiwic29ydGVycyIsInZhbGlkYXRlU29ydEV4cHJlc3Npb25zIiwidGh1bWJCdXR0b25FbmFibGVkIiwidGh1bWJEb3duQnV0dG9uUHJlc3NlZCIsInRodW1iVXBCdXR0b25QcmVzc2VkIiwiYXBwbHlHcm91cExldmVscyIsInNob3dVbnN1cHBvcnRlZENhcGFiaWxpdGllc1dhcm5pbmciLCJoYXNTb3J0ZXJzRnJvbUxMTSIsImhhc0dyb3VwTGV2ZWxzRnJvbUxMTSIsInNvcnRpbmdVbnN1cHBvcnRlZCIsImdyb3VwaW5nVW5zdXBwb3J0ZWQiLCJhcHBlbmRNZXNzYWdlU3RyaXAiLCJzZXRQZXJzb25hbGl6YXRpb25TdXBwb3J0Iiwic29ydGluZyIsImdyb3VwaW5nIiwibWV0YWRhdGEiLCJyZXNvbHZlRmllbGQiLCJncm91cERlZiIsInByb3BlcnR5TmFtZSIsInJlc29sdmVQcm9wZXJ0eU5hbWUiLCJmaWVsZCIsImVuZHNXaXRoIiwid2FybmluZyIsImVycm9ySGFuZGxlciIsIkVycm9yTWVzc2FnZUhhbmRsZXIiLCJpc0dyb3VwYWJsZSIsImlzR3JvdXBhYmxlUHJvcGVydHkiLCJoYXNFcnJvcnMiLCJlbmNvZGVYTUwiLCJnZXRFcnJvck1lc3NhZ2UiLCJmaXJzdEdyb3VwYWJsZURlZiIsImZpcnN0R3JvdXBhYmxlTGFiZWwiLCJzb3J0RXhwcmVzc2lvbnMiLCJub25Tb3J0YWJsZUZpZWxkcyIsInZhbGlkU29ydGVycyIsInNvcnRFeHByZXNzaW9uIiwiZmllbGRNZXRhZGF0YSIsImZpZWxkTmFtZSIsInNwbGl0IiwicG9wIiwic29ydGFibGUiLCJkZXNjZW5kaW5nIiwic2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMiLCJzcGxpY2UiLCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQiLCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAiLCJzaG93TWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwVGV4dCIsImNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUiLCJ0ZXh0Iiwic2V0TWVzc2FnZVN0cmlwV2l0aFR5cGUiLCJjb21iaW5lZCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiaW5jbHVkZXMiLCJyZXNldCIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsImFpTm90aWNlQ29udHJvbCIsImFpTm90aWNlIiwiY2xvbmUiLCJBSU5vdGljZSIsIlZCb3giLCJUZXh0Iiwib3V0VkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJnZXRRdWVyeSIsIm9uR29CdXR0b25QcmVzcyIsInZpc2libGUiLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJUb2tlbml6ZXIiLCJlZGl0YWJsZSIsImFuZCIsInJlbmRlck1vZGUiLCJUb2tlbml6ZXJSZW5kZXJNb2RlIiwiTG9vc2UiLCJjdHgiLCJvYmplY3QiLCJnZXRPYmplY3QiLCJUb2tlbiIsIml0ZW1zIiwibWFuZGF0b3J5IiwiaXNLZXlNYW5kYXRvcnkiLCJkZWxldGUiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwibmV3VG9rZW5zIiwiY29uY2F0IiwidXBkYXRlRmlsdGVySW5wdXQiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImNvZGVMaXN0IiwiSEJveCIsIlRyYW5zcGFyZW50IiwiJHNlYXJjaElucHV0IiwiZm9jdXMiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImVuYWJsZUZvcm1hdHRlZFRleHQiLCJzaG93Q2xvc2VCdXR0b24iLCJjbG9zZSIsIm5vdCIsImN1cnJlbnRJbnB1dFZhbHVlIiwiZ2V0VmFsdWUiLCJjdXJyZW50SW5wdXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwic2V0VmFsdWUiLCJjbGVhckFsbEZpbHRlcnMiLCJOb25lIiwiY2xlYXJRdWVyeVN0YXR1cyIsImNsZWFyRmlsdGVyc0FuZFRva2VucyIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwiaGFzU29ydGVycyIsIm5ld1Rva2VuIiwiaGFzR3JvdXBMZXZlbHMiLCJub3RpZnlFeHRlcm5hbFRhYmxlU3RhdGVDaGFuZ2UiLCJzZXRRdWVyeSIsImN1cnJWYWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUiLCJtYW5kYXRvcnlUb2tlbnMiLCJyZXF1aXJlZEtleXMiLCJnZXRLZXkiLCJvbkFmdGVyUmVuZGVyaW5nIiwiYXJpYVRleHQiLCJzZXRBcmlhTGFiZWwiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJnZXRBZ2dyZWdhdGlvbiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJCYXJDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGVuY29kZVhNTCBmcm9tIFwic2FwL2Jhc2Uvc2VjdXJpdHkvZW5jb2RlWE1MXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBTdGF0ZU9mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YWdncmVnYXRpb24sXG5cdGNyZWF0ZVJlZmVyZW5jZSxcblx0ZGVmaW5lUmVmZXJlbmNlLFxuXHRkZWZpbmVTdGF0ZSxcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV2ZW50LFxuXHRwcm9wZXJ0eSxcblx0dHlwZSBQcm9wZXJ0aWVzT2Zcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRva2VuaXplciBmcm9tIFwic2FwL20vVG9rZW5pemVyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIFBsYWNlbWVudFR5cGUsIFRva2VuaXplclJlbmRlck1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyBhbmQsIGJpbmRTdGF0ZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQUlOb3RpY2UgZnJvbSBcInNhcC9mZS9jb250cm9scy9BSU5vdGljZVwiO1xuaW1wb3J0IEVhc3lGaWx0ZXJJbnB1dCBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvRWFzeUZpbHRlcklucHV0XCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyVG9rZW4gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1Rva2VuXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IFRvZ2dsZUJ1dHRvbiBmcm9tIFwic2FwL20vVG9nZ2xlQnV0dG9uXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbHRlciBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVhc3lGaWx0ZXJNZXRhZGF0YSwgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU3VjY2VzcyB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IEVycm9yTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4vRXJyb3JNZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgdHJpZ2dlclBYSW50ZWdyYXRpb24gfSBmcm9tIFwiLi9QWEZlZWRiYWNrXCI7XG5pbXBvcnQgRWFzeUZpbHRlclV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8vRm9yIGN1cnJlbnQgcmVsZWFzZSB3ZSBhcmUgaWdub3JpbmcgXCJBbGxcIiBhbmQgXCJBbnlcIlxuLy9XZSBjYW4gaW5jb3Jwb3JhdGUgdGhlc2UgdmFsdWVzIGluIGZ1dHVyZVxuZXhwb3J0IHR5cGUgQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW2Jvb2xlYW4sIGJvb2xlYW5dIHwgW3N0cmluZywgc3RyaW5nXSB8IFtudW1iZXIsIG51bWJlcl0gfCBbRGF0ZSwgRGF0ZV07XG5cbnR5cGUgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlID0gc3RyaW5nIHwgRGF0ZSB8IGJvb2xlYW4gfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvZGVMaXN0VHlwZSA9IHtcblx0dmFsdWU6IFByaW1pdGl2ZVR5cGU7XG5cdGRlc2NyaXB0aW9uOiBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbQ29kZUxpc3RUeXBlLCBDb2RlTGlzdFR5cGVdO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBDb2RlTGlzdFR5cGVbXTtcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9O1xuXG4vL1dlIHdpbGwgYmUgaGFuZGxpbmcgXCJBTExcIiBhbmQgXCJBTllcIiBhdCBsYXRlciBwb2ludCBvZiB0aW1lXG5leHBvcnQgdHlwZSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgbnVtYmVyW10gfCBEYXRlW107XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBUb2tlblR5cGUgPSBcIk1lbnVXaXRoQ2hlY2tCb3hcIiB8IFwiQ2FsZW5kYXJcIiB8IFwiVGltZVwiIHwgXCJWYWx1ZUhlbHBcIiB8IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIjtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdGJ1c3k6IGJvb2xlYW47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcblx0YnVzeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRva2VuRGVmaW5pdGlvbiA9IFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiB8IE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgU29ydERlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9rZW5TZXR0ZXJzID0gXCJzZXRTZWxlY3RlZFZhbHVlc1wiO1xuXG5leHBvcnQgdHlwZSBHcm91cExldmVsRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSA9IFByb3BlcnR5TWV0YWRhdGEgJlxuXHQoXG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdCk7XG5cbi8vIFdlIG5lZWQgdGhlIHRoaXJkIGFyZ3VlbWVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgY2hhbmNlIG9mIGNvbXBvc2l0ZSBrZXlzIHNjZW5hcmlvXG50eXBlIERhdGFGZXRjaGVyID0gKFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dmFsdWVPZkN1cnJlbnRQcm9wZXJ0eTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0bGxtUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXJSZXN1bHQ+XG4pID0+IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+O1xuXG5pbnRlcmZhY2UgRm9jdXNIYW5kbGluZ0NvbnRyb2wge1xuXHRvbnNhcGZvY3VzbGVhdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudCA9IFVJNUV2ZW50PFxuXHR7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB1bmtub3duW107XG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPT4gdm9pZDtcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvcikgPT4gdm9pZDtcblx0fSxcblx0RWFzeUZpbHRlckJhckNvbnRhaW5lclxuPjtcblxuLypcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGV4dGVuZHMgQ29udHJvbCB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcHBJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGVhc3lGaWx0ZXJMaWI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGZpbHRlckJhck1ldGFkYXRhPzogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0cmVjb21tZW5kZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImZ1bmN0aW9uXCIgfSlcblx0ZGF0YUZldGNoZXI/OiBEYXRhRmV0Y2hlcjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZWFzeUZpbHRlcklucHV0ITogUmVmPEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHR0b2tlbml6ZXIhOiBSZWY8VG9rZW5pemVyPjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRjb250ZW50PzogQ29udHJvbDtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRhaU5vdGljZT86IENvbnRyb2w7XG5cblx0QGV2ZW50KClcblx0dG9rZW5zQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW107IHJlc2V0OiBib29sZWFuIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzb3J0ZXJzQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHNvcnRlcnM6IFNvcnREZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdGdyb3VwTGV2ZWxzQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IGdyb3VwTGV2ZWxzOiBHcm91cExldmVsRGVmaW5pdGlvbltdIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRxdWVyeUNoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzaG93VmFsdWVIZWxwPzogRXZlbnRIYW5kbGVyPEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50PjtcblxuXHRAZXZlbnQoKVxuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0LyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgbWFudWFsbHkgcmVtb3ZlcyBvciBlZGl0cyBhIGZpbHRlciB0b2tlbi4gRG9lcyBub3QgZmlyZSB3aGVuIHRva2VucyBhcmUgc2V0IGJ5IHRoZSBBSSBzZWFyY2ggcmVzdWx0LiAqL1xuXHRAZXZlbnQoKVxuXHR0b2tlbnNDaGFuZ2VkQnlVc2VyPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0Y2xlYXJGaWx0ZXJzPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRwcml2YXRlIHJlc291cmNlQnVuZGxlITogUmVzb3VyY2VCdW5kbGU7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRzaG93UmVzdWx0OiBib29sZWFuO1xuXHRcdHRva2VuczogVG9rZW5EZWZpbml0aW9uW107XG5cdFx0c29ydGVyczogU29ydERlZmluaXRpb25bXTtcblx0XHRncm91cExldmVsczogR3JvdXBMZXZlbERlZmluaXRpb25bXTtcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRtZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdHNob3dNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlO1xuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHR9PiA9IHtcblx0XHRzaG93UmVzdWx0OiBmYWxzZSxcblx0XHR0b2tlbnM6IFtdIGFzIFRva2VuRGVmaW5pdGlvbltdLFxuXHRcdHNvcnRlcnM6IFtdIGFzIFNvcnREZWZpbml0aW9uW10sXG5cdFx0Z3JvdXBMZXZlbHM6IFtdIGFzIEdyb3VwTGV2ZWxEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IHRydWUsXG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0bWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRzaG93TWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IHRydWUsXG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGZhbHNlLFxuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGZhbHNlXG5cdH07XG5cblx0cHJpdmF0ZSBpbm5lckNvbnRyb2xQb3BvdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIG9rQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgc2hvd0FsbEJ1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHRvb2xiYXI/OiBPdmVyZmxvd1Rvb2xiYXI7XG5cblx0cHJpdmF0ZSBtYW5kYXRvcnlLZXlNYXA/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblxuXHQvL0lmIHNldCB0byB0cnVlIHRoZSBlcnJvciBzdGF0ZSBjYW4gYmUgc2VlbiBvbiB0aGUgdG9rZW5zXG5cdHByaXZhdGUgaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cblx0cHJpdmF0ZSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaW52aXNpYmxlTWVzc2FnZSE6IEludmlzaWJsZU1lc3NhZ2U7XG5cblx0ZWFzeWZpbHRlcj86IFByb21pc2U8dHlwZW9mIEVhc3lGaWx0ZXIgfCB1bmRlZmluZWQ+O1xuXG5cdHByaXZhdGUgcmVzb2x2ZUNvbnRlbnRSZWFkeSE6ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBpbnB1dEZpZWxkUmVhZHk6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdHRoaXMucmVzb2x2ZUNvbnRlbnRSZWFkeSA9IHJlc29sdmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gdHJ1ZTtcblxuXHRwcml2YXRlIGFyaWFMYWJlbEFwcGxpZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN1cHBvcnRzU29ydGluZyA9IHRydWU7XG5cblx0cHJpdmF0ZSBzdXBwb3J0c0dyb3VwaW5nID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPiksIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzIGFzIHN0cmluZywgb3RoZXJzKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR0aGlzLmludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdH1cblxuXHRzZXRFYXN5RmlsdGVyTGliKGVhc3lGaWx0ZXJMaWI6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlYXN5RmlsdGVyTGliXCIsIGVhc3lGaWx0ZXJMaWIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJMaWIpIHtcblx0XHRcdHRoaXMuZWFzeWZpbHRlciA9IGltcG9ydCh0aGlzLmVhc3lGaWx0ZXJMaWIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNldEFwcElkKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuYXBwSWQpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmlucHV0RmllbGRSZWFkeTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZpbHRlckJhck1ldGFkYXRhKGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmZpbHRlckJhck1ldGFkYXRhKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiZmlsdGVyQmFyTWV0YWRhdGFcIiwgZmlsdGVyQmFyTWV0YWRhdGEsIHRydWUpO1xuXHRcdFx0Ly8gcG9wdWxhdGUgdGhlIHRva2VucyB3aXRoIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudCh0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0b2tlbnM7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdC8vL1dlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBlcnJvciB2YWx1ZVN0YXRlTWVzc2FnZSBhcyBzb29uIHRoZSBjb250cm9sIHJlbmRlcnNcblx0XHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnJlc291cmNlQnVuZGxlID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvbnRyb2xzXCIpITtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5KCk7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IHRoaXMuY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0fVxuXHRcdC8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL29uVG9rZW5DaGFuZ2UgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGluaXRpYWwgc2V0IG9mIHRva2VucyBhcmUgc2V0XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhdGUsIG9uY2UgdGhlIHN0YXRlIGlzIHVwZGF0ZWQgdGhlIHByZXZpb3VzIG92ZXJyaWRkZW4gZGVmYXVsdCB2YWx1ZXMgd291bGQgYmUgZ29uZSBmb3JldmVyXG5cdGdldERlZmF1bHRUb2tlbnMoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gPSBbXTtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5mb3JFYWNoKChkYXRhKSA9PiB7XG5cdFx0XHRjb25zdCBpc1JlcXVpcmVkID0gZGF0YS5yZXF1aXJlZDtcblx0XHRcdGlmIChpc1JlcXVpcmVkKSB7XG5cdFx0XHRcdCh0aGlzLm1hbmRhdG9yeUtleU1hcCBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPilbZGF0YS5uYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8vQ2hlY2sgd2hldGhlciB0aGUga2V5cyBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZSBlbHNlIHB1c2ggaXQgYWNyb3NzXG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPz8gW10sXG5cdFx0XHRcdFx0XHR0eXBlOiBkYXRhLnR5cGUsXG5cdFx0XHRcdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdFx0XHRcdGlzUmVxdWlyZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRJbnB1dEFyaWFMYWJlbCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1hbmRhdG9yeUZpZWxkcyA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZpbHRlcigoZikgPT4gZi5yZXF1aXJlZCkgPz8gW107XG5cdFx0aWYgKG1hbmRhdG9yeUZpZWxkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCBmaWVsZExhYmVscyA9IG1hbmRhdG9yeUZpZWxkcy5tYXAoKGYpID0+IGYubGFiZWwpLmpvaW4oXCIsIFwiKTtcblx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9JTlBVVF9SRVFVSVJFRF9GSUVMRFNcIiwgW2ZpZWxkTGFiZWxzXSk7XG5cdH1cblxuXHRvbkVudGVyUHJlc3NlZChlOiBVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlcklucHV0Pik6IHZvaWQge1xuXHRcdHRoaXMub25Hb1ByZXNzKGUuZ2V0UGFyYW1ldGVyKFwicXVlcnlcIikpO1xuXHR9XG5cblx0Ly9NYWtpbmcgaXQgcHVibGljIGJlY2F1c2UgaW4gbGl2ZSBtb2RlIHRoZSBhcHAgZGV2ZWxvcGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IHRoZSBlcnJvciBWYWx1ZVN0YXRlTWVzc2FnZVxuXHQvL0luIG5vbi1saXZlIG1vZGUgLCB3ZSBhcmUgYWxyZWFkeSBpbnRlcm5hbGx5IGhhbmRsaW5nIGl0IG9uIGV2ZXJ5IHRpbWUgdGltZSBhIHVzZXIgY2xpY2tzIG9uIEdPL0VudGVyIGJ1dHRvbnNcblx0cHVibGljIGNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdG9rZW5zSW5TdGF0ZSA9IHRoaXMuZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpO1xuXHRcdGlmICh0b2tlbnNJblN0YXRlLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUodG9rZW5zSW5TdGF0ZSk7XG5cdFx0XHR0b2tlbnM/LmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLkVycm9yKTtcblx0XHRcdFx0dG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX01BTkRBVE9SWV9UT0tFTl9FUlJPUlwiKSk7XG5cdFx0XHRcdHRva2VuLm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSgpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHVibGljIGNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGVhc3lUb2tlbnMgPSB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKSBhcyBFYXN5RmlsdGVyVG9rZW5bXTtcblx0XHRlYXN5VG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5jbG9zZVZhbHVlU3RhdGVNZXNzYWdlKCkpO1xuXHR9XG5cblx0YXN5bmMgb25Hb1ByZXNzKG1hZ2ljUXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghbWFnaWNRdWVyeSkge1xuXHRcdFx0dGhpcy5yZXNldFN0YXRlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXG5cdFx0Ly8gQ2FsbCBBSSBzZXJ2aWNlIHRvIGdldCB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0Y29uc3QgZWFzeWZpbHRlciA9IGF3YWl0IHRoaXMuZWFzeWZpbHRlcjtcblx0XHRpZiAoIWVhc3lmaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJiZWZvcmVRdWVyeVByb2Nlc3NpbmdcIik7XG5cblx0XHRjb25zdCBlYXN5RmlsdGVyTWV0YWRhdGE6IEVhc3lGaWx0ZXJNZXRhZGF0YSA9IHtcblx0XHRcdHZlcnNpb246IDEsXG5cdFx0XHRlbnRpdHlTZXQ6IHRoaXMuY29udGV4dFBhdGgsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXVxuXHRcdH07XG5cblx0XHRjb25zdCBlYXN5RmlsdGVyUmVzdWx0ID0gYXdhaXQgZWFzeWZpbHRlci5lYXN5RmlsdGVyKG1hZ2ljUXVlcnksIGVhc3lGaWx0ZXJNZXRhZGF0YSk7XG5cblx0XHQvL1dlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuIHRoZSBHTyBidXR0b24gaXMgcHJlc3NlZCwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgaW4gdGhlIEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhIG1ldGhvZFxuXHRcdHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gZmFsc2U7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuc3VjY2Vzcykge1xuXHRcdFx0Ly9Pbmx5IGFkZCB0aGUgcmVjZW50IHF1ZXJ5IHdoZW4gdGhlIGNhbGwgaXMgc3VjY2Vzc1xuXHRcdFx0Ly9EbyBub3QgdHJhY2sgdGhlIHJlY2VudCBxdWVyaWVzIHdoZW4gdGhlIGlzSGlzdG9yeUVuYWJsZWQgaXMgc2V0IHRvIGZhbHNlXG5cdFx0XHQvL0l0IHdvdWxkIGJlIGEgdmlvbGF0aW9uIHRvIHVzZXJzIHByaXZhY3lcblx0XHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uYWRkUmVjZW50UXVlcnkobWFnaWNRdWVyeSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBTZXQgcXVlcnkgYXMgc3VjY2Vzc2Z1bCBpbiB0aGUgaW5wdXQgZmllbGRcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFF1ZXJ5U3VjY2VzcyhtYWdpY1F1ZXJ5KTtcblx0XHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMSkge1xuXHRcdFx0XHR0aGlzLmhhbmRsZVYxU3VjY2VzcyhlYXN5RmlsdGVyUmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnZlcnNpb24gPT09IDIpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gdGhlIGZpbHRlciBhbmQgYXBwbHkgaXQgZGlyZWN0bHkgdG8gdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBlcnJvclxuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UXVlcnlGYWlsdXJlKCk7XG5cdFx0XHR0aGlzLnJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpO1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHRcdHRoaXMuaW52aXNpYmxlTWVzc2FnZS5hbm5vdW5jZSh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHR0aGlzLnN0YXRlLmdyb3VwTGV2ZWxzID0gW107XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZW5lcmF0aW5nIGZpbHRlciBjcml0ZXJpYTogXCIsIGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5maXJlRXZlbnQoXCJhZnRlclF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGZyb20gdGhlIEFJIHNlcnZpY2UgZm9yIHZlcnNpb24gMSBvZiB0aGUgZWFzeSBmaWx0ZXIuXG5cdCAqIEBwYXJhbSBlYXN5RmlsdGVyUmVzdWx0IFRoZSByZXN1bHQgZnJvbSB0aGUgQUkgc2VydmljZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyLkVhc3lGaWx0ZXJSZXN1bHQ+KTogdm9pZCB7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gc2hvdyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgdGhhdCB0aGUgZmlsdGVyIGNyaXRlcmlhIGhhcyBiZWVuIGdlbmVyYXRlZFxuXHRcdFx0TG9nLmRlYnVnKFwiRmlsdGVyIGNyaXRlcmlhIGdlbmVyYXRlZDogXCIsIEpTT04uc3RyaW5naWZ5KGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsIG51bGwsIDIpKTtcblxuXHRcdFx0Y29uc3QgdG9rZW5zID0gWy4uLnRoaXMuc3RhdGUudG9rZW5zXS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5pc1JlcXVpcmVkKTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGhlIHByZXZpb3VzIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBhcHBseSB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0XHRFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YShcblx0XHRcdFx0dG9rZW5zLFxuXHRcdFx0XHRlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyLFxuXHRcdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10sXG5cdFx0XHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwLmJpbmQodGhpcylcblx0XHRcdCk7XG5cblx0XHRcdC8vV2Ugb25seSBoYXZlIHRvIGNhbGwgdGhlIGRhdGFGZXRjaGVyIG9uIHRoZSBWSCB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFza2VkIGJ5IHRoZSB1c2VyXG5cdFx0XHQvL0luIE1hZG5hdG9yeSB0b2tlbnMgY2FzZSB0aGUgZGVmYXVsdFZhbHVlcyBhcmUgYWxyZWFkeSBnaXZlbiwgc28gbm8gbmVlZCB0byBjYWxsIGRhdGFGZXRjaGVyIG9uIGl0XG5cblx0XHRcdGNvbnN0IGFsbFZhbHVlSGVscFRva2VucyA9IHRva2Vucy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgPSBhbGxWYWx1ZUhlbHBUb2tlbnMuZmlsdGVyKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcj8uZmluZCgobGxtUmVzdWx0KSA9PiBsbG1SZXN1bHQubmFtZSA9PT0gdmFsdWVIZWxwVG9rZW4ua2V5KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5kYXRhRmV0Y2hlcikge1xuXHRcdFx0XHQocmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgYXMgdW5rbm93biBhcyBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb25bXSkuZm9yRWFjaChhc3luYyAodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFGZXRjaGVyPy4oXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXksXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIHVua25vd24gYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHRcdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHQvL1dlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuIHRoZSBHTyBidXR0b24gaXMgcHJlc3NlZCwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgaW4gdGhlIEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhIG1ldGhvZFxuXHRcdFx0XHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSByZXN1bHQ7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIGRhdGFGZXRjaGVyIGlzIG5vdCB0aGVyZSwgdGhlbiBtb2NrIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gd2l0aCB0aGUgc2FtZSByZXN1bHQgY29taW5nIGZyb20gdGhlIExMTVxuXHRcdFx0XHRyZXF1aXJlZFZhbHVlSGVscFRva2Vucy5mb3JFYWNoKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmZvckVhY2goKGtleVNwZWNpZmljVmFsdWUsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcyA9IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBzdWJJbmR4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzW3N1YkluZHhdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdmFsdWUgYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRUb2tlbnMgPSB0aGlzLnZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2Vucyk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBzdG9yZSBzb3J0IGV4cHJlc3Npb25zIChhcHBsaWVkIHRvIHRhYmxlIGRpcmVjdGx5LCBub3Qgc2hvd24gYXMgdG9rZW5zKVxuXHRcdFx0dGhpcy5zdGF0ZS5zb3J0ZXJzID0gdGhpcy5zdXBwb3J0c1NvcnRpbmcgPyB0aGlzLnZhbGlkYXRlU29ydEV4cHJlc3Npb25zKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5zb3J0ZXJzKSA6IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHMgPSB0aGlzLnN1cHBvcnRzR3JvdXBpbmcgPyB0aGlzLmFwcGx5R3JvdXBMZXZlbHMoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmdyb3VwTGV2ZWxzKSA6IFtdO1xuXG5cdFx0dGhpcy5zaG93VW5zdXBwb3J0ZWRDYXBhYmlsaXRpZXNXYXJuaW5nKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5zb3J0ZXJzLCBlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZ3JvdXBMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIGEgd2FybmluZyB3aGVuIHRoZSBhcHAgZG9lcyBub3Qgc3VwcG9ydCB0aGUgTExNJ3Mgc29ydC9ncm91cCBleHByZXNzaW9ucy5cblx0ICogQHBhcmFtIHNvcnRlcnMgU29ydCBleHByZXNzaW9ucyBmcm9tIHRoZSBMTE0uXG5cdCAqIEBwYXJhbSBncm91cExldmVscyBHcm91cCBsZXZlbHMgZnJvbSB0aGUgTExNLlxuXHQgKi9cblx0cHJpdmF0ZSBzaG93VW5zdXBwb3J0ZWRDYXBhYmlsaXRpZXNXYXJuaW5nKFxuXHRcdHNvcnRlcnM6IEVhc3lGaWx0ZXIuRWFzeUZpbHRlclNvcnRFeHByZXNzaW9uW10gfCB1bmRlZmluZWQsXG5cdFx0Z3JvdXBMZXZlbHM6IEVhc3lGaWx0ZXIuRWFzeUZpbHRlckdyb3VwTGV2ZWxEZWZpbml0aW9uW10gfCB1bmRlZmluZWRcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgaGFzU29ydGVyc0Zyb21MTE0gPSBzb3J0ZXJzICYmIHNvcnRlcnMubGVuZ3RoID4gMDtcblx0XHRjb25zdCBoYXNHcm91cExldmVsc0Zyb21MTE0gPSBncm91cExldmVscyAmJiBncm91cExldmVscy5sZW5ndGggPiAwO1xuXHRcdGNvbnN0IHNvcnRpbmdVbnN1cHBvcnRlZCA9ICF0aGlzLnN1cHBvcnRzU29ydGluZyAmJiBoYXNTb3J0ZXJzRnJvbUxMTTtcblx0XHRjb25zdCBncm91cGluZ1Vuc3VwcG9ydGVkID0gIXRoaXMuc3VwcG9ydHNHcm91cGluZyAmJiBoYXNHcm91cExldmVsc0Zyb21MTE07XG5cblx0XHRpZiAoc29ydGluZ1Vuc3VwcG9ydGVkICYmIGdyb3VwaW5nVW5zdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU09SVElOR19BTkRfR1JPVVBJTkdfTk9UX1NVUFBPUlRFRFwiKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0fSBlbHNlIGlmIChzb3J0aW5nVW5zdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU09SVElOR19OT1RfU1VQUE9SVEVEXCIpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9IGVsc2UgaWYgKGdyb3VwaW5nVW5zdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR1JPVVBJTkdfTk9UX1NVUFBPUlRFRFwiKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgd2hldGhlciB0aGUgYXBwIHN1cHBvcnRzIHNvcnRpbmcgYW5kIGdyb3VwaW5nIGJhc2VkIG9uIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncy5cblx0ICogQHBhcmFtIHNvcnRpbmcgV2hldGhlciB0aGUgYXBwIHN1cHBvcnRzIHNvcnRpbmcuXG5cdCAqIEBwYXJhbSBncm91cGluZyBXaGV0aGVyIHRoZSBhcHAgc3VwcG9ydHMgZ3JvdXBpbmcuXG5cdCAqL1xuXHRwdWJsaWMgc2V0UGVyc29uYWxpemF0aW9uU3VwcG9ydChzb3J0aW5nOiBib29sZWFuLCBncm91cGluZzogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuc3VwcG9ydHNTb3J0aW5nID0gc29ydGluZztcblx0XHR0aGlzLnN1cHBvcnRzR3JvdXBpbmcgPSBncm91cGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiAgVmFsaWRhdGVzIGFuZCB0cmlnZ2VycyB0aGUgZ3JvdXBMZXZlbHNDaGFuZ2VkIGZ1bmN0aW9uLCB3aGljaCB3YXJucyBhYm91dCBub24tZ3JvdXBhYmxlIGZpZWxkcy5cblx0ICogQHBhcmFtIGdyb3VwTGV2ZWxzIFRoZSBncm91cCBsZXZlbHMgdG8gdmFsaWRhdGUgYW5kIGFwcGx5XG5cdCAqIEByZXR1cm5zIEdyb3VwTGV2ZWxEZWZpbml0aW9uW10gQW4gYXJyYXkgb2YgdmFsaWQgZ3JvdXAgbGV2ZWwgZGVmaW5pdGlvbnMgdG8gYmUgYXBwbGllZFxuXHQgKi9cblx0cHJpdmF0ZSBhcHBseUdyb3VwTGV2ZWxzKGdyb3VwTGV2ZWxzOiBHcm91cExldmVsRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkKTogR3JvdXBMZXZlbERlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW107XG5cblx0XHRpZiAoIW1ldGFkYXRhIHx8ICFncm91cExldmVscyB8fCBncm91cExldmVscy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNvbHZlRmllbGQgPSAoZ3JvdXBEZWY6IEdyb3VwTGV2ZWxEZWZpbml0aW9uKTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gRWFzeUZpbHRlclV0aWxzLnJlc29sdmVQcm9wZXJ0eU5hbWUoZ3JvdXBEZWYua2V5KTtcblx0XHRcdGNvbnN0IGZpZWxkID0gbWV0YWRhdGEuZmluZCgoZikgPT4gZi5uYW1lID09PSBncm91cERlZi5rZXkgfHwgZi5uYW1lLmVuZHNXaXRoKGAvJHtwcm9wZXJ0eU5hbWV9YCkpO1xuXHRcdFx0aWYgKCFmaWVsZCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhgRWFzeUZpbHRlckJhckNvbnRhaW5lcjogZ3JvdXAga2V5IFwiJHtncm91cERlZi5rZXl9XCIgbm90IGZvdW5kIGluIGZpbHRlciBiYXIgbWV0YWRhdGEsIHNraXBwaW5nYCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmllbGQ7XG5cdFx0fTtcblxuXHRcdGlmIChncm91cExldmVscy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IG5ldyBFcnJvck1lc3NhZ2VIYW5kbGVyKCk7XG5cdFx0XHRjb25zdCBmaWVsZCA9IHJlc29sdmVGaWVsZChncm91cExldmVsc1swXSk7XG5cdFx0XHRpZiAoIWZpZWxkKSByZXR1cm4gW107XG5cdFx0XHRjb25zdCBpc0dyb3VwYWJsZSA9IGVycm9ySGFuZGxlci5pc0dyb3VwYWJsZVByb3BlcnR5KGZpZWxkKTtcblx0XHRcdGlmIChlcnJvckhhbmRsZXIuaGFzRXJyb3JzKCkpIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAoZW5jb2RlWE1MKGVycm9ySGFuZGxlci5nZXRFcnJvck1lc3NhZ2UoKSksIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGlzR3JvdXBhYmxlID8gW2dyb3VwTGV2ZWxzWzBdXSA6IFtdO1xuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGdyb3VwIGxldmVsczogZmluZCB0aGUgZmlyc3QgdmFsaWQgZ3JvdXBhYmxlIGZpZWxkXG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gbmV3IEVycm9yTWVzc2FnZUhhbmRsZXIoKTtcblx0XHRsZXQgZmlyc3RHcm91cGFibGVEZWY6IEdyb3VwTGV2ZWxEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdGxldCBmaXJzdEdyb3VwYWJsZUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGdyb3VwRGVmIG9mIGdyb3VwTGV2ZWxzKSB7XG5cdFx0XHRjb25zdCBmaWVsZCA9IHJlc29sdmVGaWVsZChncm91cERlZik7XG5cdFx0XHRpZiAoIWZpZWxkKSBjb250aW51ZTtcblx0XHRcdGlmIChlcnJvckhhbmRsZXIuaXNHcm91cGFibGVQcm9wZXJ0eShmaWVsZCkpIHtcblx0XHRcdFx0aWYgKCFmaXJzdEdyb3VwYWJsZURlZikge1xuXHRcdFx0XHRcdGZpcnN0R3JvdXBhYmxlRGVmID0gZ3JvdXBEZWY7XG5cdFx0XHRcdFx0Zmlyc3RHcm91cGFibGVMYWJlbCA9IGZpZWxkLmxhYmVsID8/IGZpZWxkLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZmlyc3RHcm91cGFibGVEZWYpIHtcblx0XHRcdGNvbnN0IHdhcm5pbmcgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX01VTFRJUExFX0dST1VQX1dBUk5JTkdcIiwgW2ZpcnN0R3JvdXBhYmxlTGFiZWxdKTtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKGVuY29kZVhNTCh3YXJuaW5nKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0XHRyZXR1cm4gW2ZpcnN0R3JvdXBhYmxlRGVmXTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZmllbGRzIGFyZSBub24tZ3JvdXBhYmxlXG5cdFx0aWYgKGVycm9ySGFuZGxlci5oYXNFcnJvcnMoKSkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAoZW5jb2RlWE1MKGVycm9ySGFuZGxlci5nZXRFcnJvck1lc3NhZ2UoKSksIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIHNvcnQgZXhwcmVzc2lvbnMgZnJvbSB0aGUgQUkgcmVzdWx0IGFuZCByZXR1cm5zIHZhbGlkIHNvcnQgZGVmaW5pdGlvbnMuXG5cdCAqIEBwYXJhbSBzb3J0RXhwcmVzc2lvbnMgVGhlIHNvcnQgZXhwcmVzc2lvbnMgZnJvbSB0aGUgQUJBUCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0ZWQgc29ydCBkZWZpbml0aW9ucy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgdmFsaWRhdGVTb3J0RXhwcmVzc2lvbnMoc29ydEV4cHJlc3Npb25zPzogRWFzeUZpbHRlci5FYXN5RmlsdGVyU29ydEV4cHJlc3Npb25bXSk6IFNvcnREZWZpbml0aW9uW10ge1xuXHRcdGlmICghc29ydEV4cHJlc3Npb25zIHx8IHNvcnRFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCBub25Tb3J0YWJsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGNvbnN0IHZhbGlkU29ydGVycyA9IHNvcnRFeHByZXNzaW9uc1xuXHRcdFx0LmZpbHRlcigoc29ydEV4cHJlc3Npb24pID0+IHtcblx0XHRcdFx0Ly8gVmFsaWRhdGUgdGhhdCB0aGUgZmllbGQgZXhpc3RzIGluIG1ldGFkYXRhIGFuZCBpcyBzb3J0YWJsZVxuXHRcdFx0XHRjb25zdCBmaWVsZE1ldGFkYXRhID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YT8uZmluZCgoZmllbGQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZE5hbWUgPSBmaWVsZC5uYW1lLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmllbGROYW1lID09PSBzb3J0RXhwcmVzc2lvbi5rZXkgfHwgZmllbGQubmFtZSA9PT0gc29ydEV4cHJlc3Npb24ua2V5O1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoIWZpZWxkTWV0YWRhdGEpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZmllbGRNZXRhZGF0YS5zb3J0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUZpZWxkcy5wdXNoKGZpZWxkTWV0YWRhdGEubGFiZWwgPz8gc29ydEV4cHJlc3Npb24ua2V5KTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pXG5cdFx0XHQubWFwKChzb3J0RXhwcmVzc2lvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzb3J0RXhwcmVzc2lvbi5rZXkuc3BsaXQoXCIvXCIpLnBvcCgpID8/IHNvcnRFeHByZXNzaW9uLmtleTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRrZXk6IHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRkZXNjZW5kaW5nOiBzb3J0RXhwcmVzc2lvbi5kZXNjZW5kaW5nXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdC8vIFNob3cgd2FybmluZyBtZXNzYWdlIGZvciBub24tc29ydGFibGUgZmllbGRzXG5cdFx0aWYgKG5vblNvcnRhYmxlRmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX05PTl9TT1JUQUJMRVwiLCBbbm9uU29ydGFibGVGaWVsZHMuam9pbihcIiwgXCIpXSk7XG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2VTdHJpcChtZXNzYWdlLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsaWRTb3J0ZXJzO1xuXHR9XG5cblx0Ly9ldmVyeSBzaW5nbGUgc2VsZWN0IG1lbnUgdHlwZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSB2YWx1ZSwgZWxzZSBzcGxpY2UgdG8gb25lIHZhbHVlIGFuZCB1cGRhdGUgdGhlICBtZXNzYWdlIHN0cmlwXG5cdHZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3Qgc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiKSB7XG5cdFx0XHRcdGlmICh0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5wdXNoKHRva2VuLmxhYmVsKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLnNwbGljZSgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc3RhdGUuc2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0ID0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfVkFMVUVfTUVTU0FHRVwiLCBbXG5cdFx0XHRcdGA8c3Ryb25nPiR7c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBcblx0XHRcdF0pO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0Y2xlYXJNZXNzYWdlU3RyaXAoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuc2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gdGV4dDtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwV2l0aFR5cGUodGV4dDogc3RyaW5nLCB0eXBlOiBNZXNzYWdlVHlwZSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwKHRleHQpO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IHR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGV4aXN0aW5nIG1lc3NhZ2Ugc3RyaXAgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC5cblx0ICogQHBhcmFtIHRleHQgVGhlIG1lc3NhZ2UgdGV4dCB0byBhcHBlbmQuXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSBtZXNzYWdlIHR5cGUgZm9yIHRoaXMgbWVzc2FnZS5cblx0ICovXG5cdGFwcGVuZE1lc3NhZ2VTdHJpcCh0ZXh0OiBzdHJpbmcsIHR5cGU6IE1lc3NhZ2VUeXBlKTogdm9pZCB7XG5cdFx0Y29uc3QgY29tYmluZWQgPSB0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgJiYgdGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID8gYCR7dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0fTxicj4ke3RleHR9YCA6IHRleHQ7XG5cdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXBXaXRoVHlwZShjb21iaW5lZCwgdHlwZSk7XG5cdH1cblxuXHRjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpOiBQb3BvdmVyIHtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gKFxuXHRcdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1pbm5lclBvcG92ZXJcIn1cblx0XHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQm90dG9tXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRmb290ZXI6IHRoaXMuZ2V0VG9vbGJhcigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciBhcyBQb3BvdmVyO1xuXHR9XG5cblx0Z2V0VG9vbGJhcigpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy50b29sYmFyKSB7XG5cdFx0XHRjb25zdCBva0J1dHRvbiA9IHRoaXMuZ2V0T2tCdXR0b24oKTtcblx0XHRcdGNvbnN0IHNob3dBbGxCdXR0b24gPSB0aGlzLmdldFNob3dBbGxCdXR0b24oKTtcblx0XHRcdHRoaXMudG9vbGJhciA9IChcblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhcj5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdFx0e29rQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHRcdHtzaG93QWxsQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L092ZXJmbG93VG9vbGJhcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvb2xiYXI7XG5cdH1cblxuXHRnZXRPa0J1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5va0J1dHRvbikge1xuXHRcdFx0dGhpcy5va0J1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX09LXCIpfSB0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5va0J1dHRvbjtcblx0fVxuXG5cdGdldFNob3dBbGxCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuc2hvd0FsbEJ1dHRvbikge1xuXHRcdFx0dGhpcy5zaG93QWxsQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfU0hPV19BTExfSVRFTVNcIil9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zaG93QWxsQnV0dG9uO1xuXHR9XG5cblx0Zm9ybWF0VG9rZW5zKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRva2Vucy5tYXAoKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLnRva2VuLFxuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly9NYWtpbmcgc3VyZSB0aGF0IG9ubHkgdGhlIGlkIHBhcnQgaXMgcGFzc2VkXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogdmFsdWUub3BlcmF0b3IsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiB2YWx1ZS5zZWxlY3RlZFZhbHVlcy5tYXAoKHZhbCkgPT4gdmFsLnZhbHVlKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9IGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBkZWVwQ2xvbmUodG9rZW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwidG9rZW5zXCIpKSB7XG5cdFx0XHRpZiAodGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQpIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHR0b2tlbnM6IHRoaXMuZm9ybWF0VG9rZW5zKHRoaXMuc3RhdGUudG9rZW5zIGFzIHVua25vd24gYXMgVG9rZW5EZWZpbml0aW9uW10pLFxuXHRcdFx0XHRcdHJlc2V0OiB0aGlzLmlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdGhpcy5zdGF0ZS50b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdGlmICghKHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID8/IGZhbHNlKSkge1xuXHRcdFx0XHR0aGlzLmNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBUaGUgdXNlciBoYXMgYWNrbm93bGVkZ2VkIHRoZSBtZXNzYWdlIHN0cmlwIGFuZCB1bmRlcnN0b29kIHRoZSBpc3N1ZS5cblx0XHRcdFx0ICogV2hlbiB0aGUgdG9rZW5zIGFyZSB1cGRhdGVkIG5leHQgdGltZSwgZGlzcGxheWluZyB0aGUgbWVzc2FnZSBzdHJpcCBhZ2FpbiBzZXJ2ZXMgbm8gcHVycG9zZS5cblx0XHRcdFx0ICogQWRkaXRpb25hbGx5LCBvbmNlIHRoZSB0b2tlbnMgYXJlIHVwZGF0ZWQsIHRoZSBpbnB1dCBmaWVsZCB0ZXh0IGlzIHJlbW92ZWRcblx0XHRcdFx0ICogcmVuZGVyaW5nIHRoZSBtZXNzYWdlIHN0cmlwIGlycmVsZXZhbnQuIEhvd2V2ZXIsIHRoZSBtZXNzYWdlIHN0cmlwIGlzIGRpc3BsYXllZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRoZSBcIkdvXCIgYnV0dG9uIGlzIHByZXNzZWQuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXBGb3JTaW5nbGVWYWx1ZSgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJzb3J0ZXJzXCIpKSB7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcInNvcnRlcnNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0c29ydGVyczogdGhpcy5zdGF0ZS5zb3J0ZXJzXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZ3JvdXBMZXZlbHNcIikpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiZ3JvdXBMZXZlbHNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0Z3JvdXBMZXZlbHM6IHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHNcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvL1Jlc2V0dGluZyB0byBkZWZhdWx0IHZhbHVlc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gZmFsc2U7XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSB0cnVlO1xuXHRcdHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZTtcblxuXHRcdGlmICh0aGlzLnRva2VuaXplcj8uY3VycmVudCkge1xuXHRcdFx0Ly8gIG9uc2FwZm9jdXNsZWF2ZSBtZXRob2QgaW4gc2FwLm0uVG9rZW5pemVyIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGluZyB0aGUgcmVuZGVybW9kZSBvZiB0b2tlbml6ZXIgdG8gXCJOYXJyb3dcIiBmcm9tIFwibG9vc2VcIlxuXHRcdFx0Ly8gIEluIHRoaXMgcHJvY2VzcyB0aGVyZSBhcmUgbXVsdGlwbGUgcG9wb3ZlciBpc3N1ZXMgaGFwcGVuaW5nXG5cdFx0XHQvLyAgU28gYXMgYSB0ZW1wb3JhcnkgZml4IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uXG5cdFx0XHQodGhpcy50b2tlbml6ZXIuY3VycmVudCBhcyBGb2N1c0hhbmRsaW5nQ29udHJvbCkub25zYXBmb2N1c2xlYXZlID0gKCk6IHZvaWQgPT4ge307XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iVXBQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwidGh1bWJVcFwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJEb3duUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iRG93blwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gZmFsc2U7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9GRUVEQkFDS19TRU5UXCIpKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVkJveCB7XG5cdFx0Y29uc3QgJHRvcEdvQnRuID0gY3JlYXRlUmVmZXJlbmNlPEJ1dHRvbj4oKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYlVwXCIpO1xuXHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYkRvd25cIik7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgYWlOb3RpY2VDb250cm9sID0gdGhpcy5haU5vdGljZSA/IChcblx0XHRcdHRoaXMuYWlOb3RpY2UuY2xvbmUoKVxuXHRcdCkgOiAoXG5cdFx0XHQ8QUlOb3RpY2UgdHlwZT1cIkJ1dHRvblwiPlxuXHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHQ8VGV4dCBjbGFzcz1cInNhcEZlQ29udHJvbHNBaVBvcG92ZXJUZXh0MVwiIHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX05PVElDRV9BSV9QT1BPVkVSX1RFWFRfMVwiKX0gLz5cblx0XHRcdFx0XHQ8VGV4dCBjbGFzcz1cInNhcEZlQ29udHJvbHNBaVBvcG92ZXJUZXh0MlwiIHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX05PVElDRV9BSV9QT1BPVkVSX1RFWFRfMlwiKX0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9BSU5vdGljZT5cblx0XHQpO1xuXHRcdGNvbnN0IG91dFZCb3ggPSAoXG5cdFx0XHQ8VkJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8RWFzeUZpbHRlcklucHV0XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFZhbHVlc31cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5lYXN5RmlsdGVySW5wdXR9XG5cdFx0XHRcdFx0XHRlbnRlclByZXNzZWQ9e3RoaXMub25FbnRlclByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIsIHsgcXVlcnk6IHRoaXMuZ2V0UXVlcnkoKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9haVwifVxuXHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRyZWY9eyR0b3BHb0J0bn1cblx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR09cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9XG5cdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkdvQnV0dG9uUHJlc3MuYmluZCh0aGlzKX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0cmVuZGVyVHlwZT1cIkJhcmVcIlxuXHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIil9XG5cdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdHdyYXA9e0ZsZXhXcmFwLldyYXB9XG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wXCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RmxleEJveCBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9IHJlbmRlclR5cGU9XCJCYXJlXCIgYWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfSB3cmFwPXtGbGV4V3JhcC5XcmFwfT5cblx0XHRcdFx0XHRcdHthaU5vdGljZUNvbnRyb2x9XG5cdFx0XHRcdFx0XHQ8VG9rZW5pemVyXG5cdFx0XHRcdFx0XHRcdGVkaXRhYmxlPXthbmQoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidG9rZW5pemVyRWRpdGFibGVcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVG9rZW5pemVyXCJ9XG5cdFx0XHRcdFx0XHRcdHRva2Vucz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidG9rZW5zXCIpfVxuXHRcdFx0XHRcdFx0XHRyZW5kZXJNb2RlPXtUb2tlbml6ZXJSZW5kZXJNb2RlLkxvb3NlfVxuXHRcdFx0XHRcdFx0XHRyZWY9e3RoaXMudG9rZW5pemVyfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdHRva2VuczogKGlkeDogbnVtYmVyLCBjdHg6IENvbnRleHQpOiBUb2tlbiA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvYmplY3QgPSBjdHguZ2V0T2JqZWN0KCkgYXMgVG9rZW5EZWZpbml0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFRva2VuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aGlzLnN0YXRlLnRva2Vucy5rZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9e3RoaXMuc3RhdGUudG9rZW5zLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXt0aGlzLnN0YXRlLnRva2Vucy5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1hbmRhdG9yeT17dGhpcy5pc0tleU1hbmRhdG9yeShvYmplY3Qua2V5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidXN5PXt0aGlzLnN0YXRlLnRva2Vucy5idXN5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdG9rZW5JbmRleCA9IHRoaXMuc3RhdGUudG9rZW5zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmtleSA9PT0gb2JqZWN0LmtleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5jb25jYXQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2Vucztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInRva2Vuc0NoYW5nZWRCeVVzZXJcIiwgeyB0b2tlbnM6IFsuLi50aGlzLnN0YXRlLnRva2Vuc10gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cIlRva2VuSW5mb1wiIHZhbHVlPXtvYmplY3R9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJwb3BvdmVyXCIgdmFsdWU9e3RoaXMuaW5uZXJDb250cm9sUG9wb3Zlcn0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cImVhc3lGaWx0ZXJCYXJDb250YWluZXJcIiB2YWx1ZT17dGhpc30gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PVwiY29kZUxpc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXt0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5maW5kKChkYXRhKSA9PiBkYXRhLm5hbWUgPT09IG9iamVjdC5rZXkpPy5jb2RlTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1Rva2VuPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L1Rva2VuaXplcj5cblx0XHRcdFx0XHRcdDxIQm94PlxuXHRcdFx0XHRcdFx0XHR7dGh1bWJVcEJ1dHRvblRva2VuaXplcn0sIHt0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUkVTRVRcIil9XG5cdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXNldFN0YXRlKHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LiRzZWFyY2hJbnB1dC5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PFZCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIiBjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Ub3Agc2FwRmVDb250cm9sc0dhcDhweFwifT5cblx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHR0ZXh0PXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCIgY2xhc3M9e1wic2FwRmVDb250cm9sc0dhcDhweFwifT5cblx0XHRcdFx0XHRcdDxNZXNzYWdlU3RyaXBcblx0XHRcdFx0XHRcdFx0dHlwZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVHlwZVwiKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVGV4dFwiKX1cblx0XHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdFx0XHQ8SEJveCB2aXNpYmxlPXthbmQoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKSwgbm90KGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIikpKX0+XG5cdFx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZX0sIHt0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlfVxuXHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9WQm94PlxuXHRcdCkgYXMgVkJveDtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJHRvcEdvQnRuLmN1cnJlbnQhLCBcInByZXNzXCIsIFwiZmU6YWk6c2VhcmNoXCIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50KSB7XG5cdFx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudCwgXCJlbnRlclByZXNzZWRcIiwgXCJmZTphaTpzZWFyY2hcIik7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRWQm94O1xuXHR9XG5cblx0YXN5bmMgb25Hb0J1dHRvblByZXNzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdGxldCBjdXJyZW50SW5wdXRWYWx1ZSA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgY3VycmVudElucHV0UGxhY2Vob2xkZXIgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRQbGFjZWhvbGRlcigpO1xuXG5cdFx0aWYgKGN1cnJlbnRJbnB1dFZhbHVlID09PSBcIlwiICYmIGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShjdXJyZW50SW5wdXRQbGFjZWhvbGRlciB8fCBcIlwiKTtcblx0XHRcdGN1cnJlbnRJbnB1dFZhbHVlID0gY3VycmVudElucHV0UGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMub25Hb1ByZXNzKGN1cnJlbnRJbnB1dFZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIHN0YXRlIG9mIHRoZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIHRvIGl0cyBpbml0aWFsIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICogLSBDbGVhcnMgYWxsIG5vbi1tYW5kYXRvcnkgdG9rZW5zIGFuZCByZXNldHMgbWFuZGF0b3J5IHRva2VucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlc1xuXHQgKiAtIFJlc2V0cyB0aGUgaW5wdXQgZmllbGQgdG8gaXRzIGRlZmF1bHQgcGxhY2Vob2xkZXIgdGV4dFxuXHQgKiAtIENsZWFycyBhbGwgZXJyb3IgdmFsdWUgc3RhdGVzIGFuZCBtZXNzYWdlcyBmcm9tIHRva2Vuc1xuXHQgKiAtIENsZWFycyBhbnkgZGlzcGxheWVkIG1lc3NhZ2Ugc3RyaXBzXG5cdCAqIC0gT3B0aW9uYWxseSBmaXJlcyB0aGUgY2xlYXJGaWx0ZXJzIGV2ZW50IHRvIG5vdGlmeSBjb25zdW1lcnNcblx0ICogQHBhcmFtIGNsZWFyQWxsRmlsdGVycyBJZiB0cnVlLCBmaXJlcyB0aGUgY2xlYXJGaWx0ZXJzIGV2ZW50IHRvIG5vdGlmeSBjb25zdW1lcnMgdGhhdCBmaWx0ZXJzIHNob3VsZCBiZSBjbGVhcmVkIGVsc2UganVzdCByZXNldHMgdGhlIHRva2VucyB3aXRob3V0IGZpcmluZyB0aGUgZXZlbnRcblx0ICogQHBhcmFtIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zIElmIHRydWUsIGluZGljYXRlcyB0aGF0IHRoZSByZXNldEJ1dHRvbiBpcyByZXN0b3JpbmcgdG9rZW5zIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzXG5cdCAqL1xuXG5cdHJlc2V0U3RhdGUoY2xlYXJBbGxGaWx0ZXJzID0gdHJ1ZSwgaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGlmIChjbGVhckFsbEZpbHRlcnMpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiY2xlYXJGaWx0ZXJzXCIpO1xuXHRcdFx0dGhpcy5zdGF0ZS5ncm91cExldmVscyA9IFtdO1xuXHRcdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnNvcnRlcnMgPSBbXTtcblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblJlc2V0XCIpO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL1NldCB0aGUgVmFsdWUgU3RhdGVzIG9mIGFsbCB0aGUgVG9rZW5zIGJhY2sgdG8gTm9uZVxuXHRcdHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5Ob25lKSk7XG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgbnVsbCkpO1xuXHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTsgLy9jbGVhciB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0XHQvLyBDbGVhciBxdWVyeSBzdWNjZXNzIHN0YXR1c1xuXHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmNsZWFyUXVlcnlTdGF0dXMoKTtcblx0fVxuXG5cdGNsZWFyRmlsdGVyc0FuZFRva2VucygpOiB2b2lkIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImNsZWFyRmlsdGVyc1wiKTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gW107XG5cdH1cblxuXHQvL1RoZSBiZWxvdyBjb2RlIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIHN0YXRlIGJ5IGZldGNoaW5nIHRoZSBrZXkgYW5kIHNlbGVjdGVkVmFsdWVzXG5cdHVwZGF0ZVRva2VuQXJyYXkoXG5cdFx0Y2hhbmdlVHlwZTogVG9rZW5TZXR0ZXJzLFxuXHRcdG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHR0b2tlbktleTogc3RyaW5nXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbLi4udG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc10gfSkpO1xuXHRcdGNvbnN0IHRva2VuSW5kZXggPSBuZXdUb2tlbnMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gdG9rZW5LZXkpO1xuXHRcdGNvbnN0IHRva2VuID0gbmV3VG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdGlmICh0b2tlbkluZGV4ICE9IC0xKSB7XG5cdFx0XHRzd2l0Y2ggKGNoYW5nZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInNldFNlbGVjdGVkVmFsdWVzXCI6XG5cdFx0XHRcdFx0dGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh0b2tlbiBhcyBUb2tlbkRlZmluaXRpb24sIG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXMsIHRva2VuSW5kZXgsIG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXSk7XG5cdFx0XHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0XHRcdFx0Ly9SZW1vdmUgdGhlIHRva2VuIGVudGlyZWx5XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdExvZy5lcnJvcihcIlNwZWNpZnlpbmcgYSBzZXR0ZXIgdGhhdCBpcyBvdXQgb2YgdGhlIGJvdW5kYXJ5XCIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBzdGF0ZSBieSBhc3NpZ25pbmcgdGhlIG5ldyB0b2tlbnMgYXJyYXlcblx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zIGFzIFRva2VuRGVmaW5pdGlvbltdO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gbmV3VG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkQnlVc2VyXCIsIHsgdG9rZW5zOiBbLi4udGhpcy5zdGF0ZS50b2tlbnNdIH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBjbG9zZUlubmVyQ29udHJvbFBvcG92ZXIoKTogdm9pZCB7XG5cdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyPy5jbG9zZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyhcblx0XHR0b2tlbjogVG9rZW5EZWZpbml0aW9uLFxuXHRcdG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHR0b2tlbkluZGV4OiBudW1iZXIsXG5cdFx0bmV3VG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXVxuXHQpOiB2b2lkIHtcblx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcztcblx0XHRpZiAoIXRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSAmJiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRpc0tleU1hbmRhdG9yeShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm1hbmRhdG9yeUtleU1hcFtrZXldID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGhhcyBzb3J0IGRlZmluaXRpb25zIGZyb20gdGhlIGVhc3kgZmlsdGVyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXJyZW50IHN0YXRlIGNvbnRhaW5zIG9uZSBvciBtb3JlIHNvcnRlcnMuXG5cdCAqL1xuXHRwcml2YXRlIGhhc1NvcnRlcnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuc29ydGVycy5sZW5ndGggPiAwO1xuXHR9XG5cblx0cmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk6IHRoaXMge1xuXHRcdGNvbnN0IG5ld1Rva2VuOiBUb2tlbkRlZmluaXRpb25bXSA9IHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGhhc0dyb3VwTGV2ZWxzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmdyb3VwTGV2ZWxzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZpZXMgdGhlIGNvbnRhaW5lciB0aGF0IGFuIGV4dGVybmFsIHRhYmxlIHN0YXRlIGNoYW5nZSAoc29ydCBvciBncm91cCkgaGFzIGJlZW4gZGV0ZWN0ZWQuXG5cdCAqIElmIHRoZSBjb250YWluZXIgY3VycmVudGx5IGhhcyBhY3RpdmUgc29ydGVycyBvciBncm91cCBsZXZlbHMsIHRoZSBmaWx0ZXIgaW5wdXQgaXMgbWFya2VkIGRpcnR5XG5cdCAqIGJlY2F1c2UgdGhlIGV4dGVybmFsIGNoYW5nZSBtYWtlcyB0aGUgZWFzeSBmaWx0ZXIgcmVzdWx0IGluY29uc2lzdGVudC5cblx0ICovXG5cdG5vdGlmeUV4dGVybmFsVGFibGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNTb3J0ZXJzKCkgfHwgdGhpcy5oYXNHcm91cExldmVscygpKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldFF1ZXJ5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCkgPz8gXCJcIjtcblx0fVxuXG5cdGdldFRva2VucygpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLnN0YXRlLnRva2Vuc107XG5cdH1cblxuXHRzZXRRdWVyeShxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUocXVlcnkpO1xuXHR9XG5cblx0dXBkYXRlRmlsdGVySW5wdXQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJWYWx1ZTogc3RyaW5nID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKSB8fCBcIlwiO1xuXHRcdGlmICh2YWx1ZSA9PT0gXCJ0b2tlblVwZGF0ZWRcIiAmJiBjdXJyVmFsdWUgIT09IFwiXCIpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UGxhY2Vob2xkZXIoY3VyclZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBcInRva2VuUmVzZXRcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHR9XG5cdH1cblxuXHRnZXRUb2tlbnNJbkluaXRpYWxTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgbWFuZGF0b3J5VG9rZW5zID0gbmV3VG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGlmICh0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1hbmRhdG9yeVRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogW10gfSkpO1xuXHR9XG5cblx0Z2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGNvbnN0IGlzS2V5TWFuZGF0b3J5ID0gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdFx0aWYgKGlzS2V5TWFuZGF0b3J5KSB7XG5cdFx0XHRcdHJldHVybiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogRWFzeUZpbHRlclRva2VuW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlcXVpcmVkS2V5cyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi5rZXkpO1xuXHRcdHJldHVybiB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5maWx0ZXIoKHRva2VuKSA9PiByZXF1aXJlZEtleXMuaW5jbHVkZXModG9rZW4uZ2V0S2V5KCkpKSBhc1xuXHRcdFx0fCBFYXN5RmlsdGVyVG9rZW5bXVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5hcmlhTGFiZWxBcHBsaWVkICYmIHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0IGFyaWFUZXh0ID0gdGhpcy5idWlsZElucHV0QXJpYUxhYmVsKCk7XG5cdFx0XHRpZiAoYXJpYVRleHQpIHtcblx0XHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0QXJpYUxhYmVsKGFyaWFUZXh0KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYXJpYUxhYmVsQXBwbGllZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIHJlbmRlcihybTogUmVuZGVyTWFuYWdlciwgY29udHJvbDogRWFzeUZpbHRlckJhckNvbnRhaW5lcik6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gPHNwYW4gcmVmPXtjb250cm9sfT57Y29udHJvbC5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIil9PC9zcGFuPjtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtFQUNBO0VBd0JBO0VBd0RBO0VBcUJBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQxQ0MsY0FBYyxDQUFDLG1EQUFtRCxDQUFDLEVBQUFDLEtBQUEsR0FFbEVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMs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SUFBQTdWLGFBQUEsR0FBQXlWLHlCQUFBLENBQUEvVyxPQUFBLENBQUE2QyxTQUFBLGlCQUFBckQsTUFBQTtJQUFBd1gsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE1VixhQUFBLEdBQUF3Vix5QkFBQSxDQUFBL1csT0FBQSxDQUFBNkMsU0FBQSwwQkFBQXBELE1BQUE7SUFBQXVYLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBM1YsYUFBQSxHQUFBdVYseUJBQUEsQ0FBQS9XLE9BQUEsQ0FBQTZDLFNBQUEsbUJBQUFuRCxNQUFBO0lBQUFzWCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTFWLGFBQUEsR0FBQXNWLHlCQUFBLENBQUEvVyxPQUFBLENBQUE2QyxTQUFBLDRCQUFBbEQsTUFBQTtJQUFBcVgsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF6VixhQUFBLEdBQUFxVix5QkFBQSxDQUFBL1csT0FBQSxDQUFBNkMsU0FBQSwyQkFBQWpELE1BQUE7SUFBQW9YLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBeFYsYUFBQSxHQUFBb1YseUJBQUEsQ0FBQS9XLE9BQUEsQ0FBQTZDLFNBQUEsWUFBQWhELE1BQUE7SUFBQW1YLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BK0VyRDtRQUNKcFQsVUFBVSxFQUFFLEtBQUs7UUFDakJOLE1BQU0sRUFBRSxFQUF1QjtRQUMvQjJHLE9BQU8sRUFBRSxFQUFzQjtRQUMvQjdCLFdBQVcsRUFBRSxFQUE0QjtRQUN6Q3hCLGlCQUFpQixFQUFFLElBQUk7UUFDdkJrRywyQkFBMkIsRUFBRSxLQUFLO1FBQ2xDRCwyQkFBMkIsRUFBRSxFQUFFO1FBQy9CRyxnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCRCxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCOUUsZ0JBQWdCLEVBQUVDLFdBQVcsQ0FBQy9CLEtBQUs7UUFDbkNnRSxrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCRSxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCRCxzQkFBc0IsRUFBRTtNQUN6QixDQUFDO0lBQUE7RUFBQSxJQUFBdkssT0FBQSxNQUFBRCxNQUFBO0VBQUEyQyxRQUFBLEdBQUF6RSxzQkFBQTtFQUFBLE9BQUF5RSxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|