@sapui5/sap.fe.macros 1.140.0 → 1.141.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/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -3,6 +3,7 @@ import Log from "sap/base/Log";
|
|
|
3
3
|
import merge from "sap/base/util/merge";
|
|
4
4
|
import type { PropertiesOf } from "sap/fe/base/ClassSupport";
|
|
5
5
|
import { aggregation, defineUI5Class, event, mixin, property, xmlEventHandler } from "sap/fe/base/ClassSupport";
|
|
6
|
+
import { controllerExtensionHandler } from "sap/fe/base/HookSupport";
|
|
6
7
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
7
8
|
import type { ControlState, LegacyFilterBarState, NavigationParameter } from "sap/fe/core/controllerextensions/ViewState";
|
|
8
9
|
import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
@@ -25,7 +26,7 @@ import { NavType } from "sap/fe/navigation/library";
|
|
|
25
26
|
import type { default as ListReportController } from "sap/fe/templates/ListReport/ListReportController.controller";
|
|
26
27
|
import type Input from "sap/m/Input";
|
|
27
28
|
import type { Input$ValueHelpRequestEventParameters } from "sap/m/Input";
|
|
28
|
-
import type { default as Event
|
|
29
|
+
import type { default as Event } from "sap/ui/base/Event";
|
|
29
30
|
import type { $ControlSettings } from "sap/ui/core/Control";
|
|
30
31
|
import UI5Element from "sap/ui/core/Element";
|
|
31
32
|
import type View from "sap/ui/core/mvc/View";
|
|
@@ -37,7 +38,7 @@ import type Control from "sap/ui/mdc/Control";
|
|
|
37
38
|
import type ValueHelp from "sap/ui/mdc/ValueHelp";
|
|
38
39
|
import type { ConditionObject } from "sap/ui/mdc/condition/Condition";
|
|
39
40
|
import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
|
|
40
|
-
import type { FilterBarBase$SearchEvent } from "sap/ui/mdc/filterbar/FilterBarBase";
|
|
41
|
+
import type { FilterBarBase$FiltersChangedEvent, FilterBarBase$SearchEvent } from "sap/ui/mdc/filterbar/FilterBarBase";
|
|
41
42
|
import type { Filter as StateUtilFilter } from "sap/ui/mdc/p13n/StateUtil";
|
|
42
43
|
import StateUtil from "sap/ui/mdc/p13n/StateUtil";
|
|
43
44
|
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
@@ -141,6 +142,15 @@ type LRViewData = {
|
|
|
141
142
|
variantManagement?: boolean | string;
|
|
142
143
|
};
|
|
143
144
|
|
|
145
|
+
/**
|
|
146
|
+
* The key type includes 'boolean' to support legacy scenarios where 'dataLoaded' may be present at the parent level as a boolean,
|
|
147
|
+
* as well as at instance level as an object with a 'dataLoaded' property. This ensures compatibility with both usages.
|
|
148
|
+
*/
|
|
149
|
+
type AdditionalStates = {
|
|
150
|
+
dataLoaded?: boolean;
|
|
151
|
+
[key: string]: { dataLoaded?: boolean } | boolean | undefined;
|
|
152
|
+
};
|
|
153
|
+
|
|
144
154
|
interface FilterBarAPI extends FilterBarAPIStateHandler {}
|
|
145
155
|
|
|
146
156
|
/**
|
|
@@ -168,6 +178,34 @@ class FilterBarAPI extends MacroAPI {
|
|
|
168
178
|
|
|
169
179
|
_bSearchTriggered = false;
|
|
170
180
|
|
|
181
|
+
private _hasPendingFilters = true;
|
|
182
|
+
|
|
183
|
+
@controllerExtensionHandler("viewState", "retrieveAdditionalStates")
|
|
184
|
+
public retrieveAdditionalStates(additionalStates: AdditionalStates): void {
|
|
185
|
+
additionalStates[this.getId()] = { dataLoaded: !this._hasPendingFilters };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@controllerExtensionHandler("viewState", "applyAdditionalStates")
|
|
189
|
+
public applyAdditionalStates(additionalStates: AdditionalStates): void {
|
|
190
|
+
const instanceState = additionalStates[this.getId()];
|
|
191
|
+
let instanceDataLoaded: boolean | undefined;
|
|
192
|
+
if (typeof instanceState === "object" && instanceState !== null) {
|
|
193
|
+
instanceDataLoaded = instanceState.dataLoaded;
|
|
194
|
+
} else {
|
|
195
|
+
instanceDataLoaded = undefined;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const parentDataLoaded =
|
|
199
|
+
"dataLoaded" in additionalStates && typeof additionalStates.dataLoaded === "boolean" ? additionalStates.dataLoaded : undefined;
|
|
200
|
+
|
|
201
|
+
if (parentDataLoaded === true || instanceDataLoaded === true) {
|
|
202
|
+
this.triggerSearch();
|
|
203
|
+
}
|
|
204
|
+
if (parentDataLoaded === false || instanceDataLoaded === false) {
|
|
205
|
+
(this.content as { _bSearchTriggered?: boolean })._bSearchTriggered = false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
171
209
|
async waitForInitialState(): Promise<void> {
|
|
172
210
|
return this._initialStatePromise.promise;
|
|
173
211
|
}
|
|
@@ -692,11 +730,15 @@ class FilterBarAPI extends MacroAPI {
|
|
|
692
730
|
this.telemetry?.onSearch(eventParameters, conditions);
|
|
693
731
|
this.fireEvent("internalSearch", merge({ conditions: conditions }, eventParameters));
|
|
694
732
|
this.fireEvent("search", merge({ reason: eventParameters.reason }, preparedEventParameters));
|
|
733
|
+
this._hasPendingFilters = false;
|
|
734
|
+
if (!this.liveMode) {
|
|
735
|
+
this.getPageController()?.getExtensionAPI().updateAppState();
|
|
736
|
+
}
|
|
695
737
|
}
|
|
696
738
|
}
|
|
697
739
|
|
|
698
740
|
@xmlEventHandler()
|
|
699
|
-
handleFilterChanged(oEvent:
|
|
741
|
+
handleFilterChanged(oEvent: FilterBarBase$FiltersChangedEvent): void {
|
|
700
742
|
const filterBar = oEvent.getSource() as FilterBar | undefined;
|
|
701
743
|
const oEventParameters = oEvent.getParameters();
|
|
702
744
|
if (filterBar) {
|
|
@@ -705,6 +747,10 @@ class FilterBarAPI extends MacroAPI {
|
|
|
705
747
|
this.telemetry?.onFiltersChanged(this._getFilterBarReason(filterBar));
|
|
706
748
|
this.fireEvent("internalFilterChanged", merge({ conditions: oConditions }, oEventParameters));
|
|
707
749
|
this.fireEvent("filterChanged", eventParameters);
|
|
750
|
+
// Set hasPendingFilters to true only if conditionsBased is true
|
|
751
|
+
if (oEventParameters?.conditionsBased) {
|
|
752
|
+
this._hasPendingFilters = true;
|
|
753
|
+
}
|
|
708
754
|
}
|
|
709
755
|
}
|
|
710
756
|
|
|
@@ -200,7 +200,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
|
|
|
200
200
|
useSemanticDateRange: oParameters.bUseSemanticDateRange,
|
|
201
201
|
settings: oParameters.oSettings,
|
|
202
202
|
visualFilter: oParameters.visualFilter,
|
|
203
|
-
editMode: `{internal>/${sInFilterBarId}/filterFields/${oParameters.sPropertyName}/editMode}
|
|
203
|
+
editMode: `{internal>/${sInFilterBarId}/filterFields/${oParameters.sPropertyName}/editMode}`,
|
|
204
|
+
label: oParameters.label
|
|
204
205
|
});
|
|
205
206
|
try {
|
|
206
207
|
const oMetaModel = oParameters.oMetaModel;
|
|
@@ -630,7 +631,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
|
|
|
630
631
|
bUseSemanticDateRange: sUseSemanticDateRange,
|
|
631
632
|
oSettings: oSelectionField?.settings ?? {},
|
|
632
633
|
visualFilter: oSelectionField?.visualFilter,
|
|
633
|
-
view
|
|
634
|
+
view,
|
|
635
|
+
label: oSelectionField?.label
|
|
634
636
|
};
|
|
635
637
|
return DelegateUtil.doesValueHelpExist(oParameters);
|
|
636
638
|
}).then(async function (bValueHelpExists) {
|
|
@@ -713,4 +715,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
|
|
|
713
715
|
};
|
|
714
716
|
return ODataFilterBarDelegate;
|
|
715
717
|
}, false);
|
|
716
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YUZpbHRlckJhckRlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FIiwiU0VBUkNIX1BST1BFUlRZX05BTUUiLCJWQUxVRV9IRUxQX1RZUEUiLCJGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkiLCJfdGVtcGxhdGVFZGl0U3RhdGUiLCJzSWRQcmVmaXgiLCJtZXRhTW9kZWwiLCJvTW9kaWZpZXIiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwidGhpcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwiRGVsZWdhdGVVdGlsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJ1bmRlZmluZWQiLCJmaW5hbGx5IiwiZGVzdHJveSIsIl90ZW1wbGF0ZUN1c3RvbUZpbHRlciIsIm9GaWx0ZXJCYXIiLCJvU2VsZWN0aW9uRmllbGRJbmZvIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRvY3VtZW50UmVmVGV4dCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwib0l0ZW1Nb2RlbCIsIlRlbXBsYXRlTW9kZWwiLCJjb250ZXh0UGF0aCIsIml0ZW0iLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9PcHRpb25zIiwiY29udHJvbGxlciIsInZpZXciLCJfZ2V0UHJvcGVydHlQYXRoIiwic0NvbmRpdGlvblBhdGgiLCJGaWx0ZXJVdGlscyIsImdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoIiwiX2ZpbmRTZWxlY3Rpb25GaWVsZCIsImFTZWxlY3Rpb25GaWVsZHMiLCJzRmxleE5hbWUiLCJmaW5kIiwib1NlbGVjdGlvbkZpZWxkIiwiY29uZGl0aW9uUGF0aCIsInJlcGxhY2VBbGwiLCJhdmFpbGFiaWxpdHkiLCJfZ2VuZXJhdGVJZFByZWZpeCIsInNGaWx0ZXJCYXJJZCIsInNDb250cm9sVHlwZSIsInNOYXZpZ2F0aW9uUHJlZml4IiwiZ2VuZXJhdGUiLCJfdGVtcGxhdGVWYWx1ZUhlbHAiLCJvU2V0dGluZ3MiLCJvUGFyYW1ldGVycyIsImlkUHJlZml4Iiwic1ZoSWRQcmVmaXgiLCJjb25kaXRpb25Nb2RlbCIsIm5hdmlnYXRpb25QcmVmaXgiLCJmaWx0ZXJGaWVsZFZhbHVlSGVscCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwibWV0YVBhdGgiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJlcXVlc3RHcm91cElkIiwianNvbk1vZGVsIiwibWVyZ2VPYmplY3RzIiwidGFyZ2V0UGF0aCIsIkZpZWxkSGVscGVyIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImlzWE1MIiwidmFsdWVIZWxwWE1MU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRWYWx1ZUhlbHBUZW1wbGF0ZSIsImdldE1vZGVsIiwidmFsdWVIZWxwWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRoZW4iLCJhVkhFbGVtZW50cyIsInNBZ2dyZWdhdGlvbk5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiZWx0IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJvQ29udHJvbCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ2YWx1ZUhlbHAiLCJfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQiLCJzUHJvcGVydHlQYXRoIiwiYURlcGVuZGVudHMiLCJnZXRBZ2dyZWdhdGlvbiIsImkiLCJsZW5ndGgiLCJvRmlsdGVyRmllbGQiLCJpc0EiLCJzRGF0YVByb3BlcnR5IiwiZ2V0UHJvcGVydHlLZXkiLCJzRmlsdGVyRmllbGRJZCIsImdldElkIiwiaW5kZXhPZiIsIl90ZW1wbGF0ZUZpbHRlckZpZWxkIiwic0luRmlsdGVyQmFySWQiLCJwYWdlTW9kZWwiLCJ2aElkUHJlZml4IiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5TmFtZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZWRpdE1vZGUiLCJvVmlzdWFsRmlsdGVyIiwiY29udmVydGVyQ29udGV4dCIsIl9hZGRQcm9wZXJ0eUluZm8iLCJvUGFyZW50Q29udHJvbCIsIm1Qcm9wZXJ0eUJhZyIsInNQcm9wZXJ0eUluZm9OYW1lIiwic1Byb3BlcnR5SW5mb0tleSIsIktleUhlbHBlciIsImdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgiLCJyZXBsYWNlIiwibW9kaWZpZXIiLCJkZWxlZ2F0ZSIsImdldFByb3BlcnR5IiwiYVByb3BlcnR5SW5mbyIsImhhc1Byb3BlcnR5SW5mbyIsInNvbWUiLCJwcm9wIiwia2V5IiwibmFtZSIsImVudGl0eVR5cGVQYXRoIiwicGF5bG9hZCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsImZpbHRlckZpZWxkIiwiZ2V0RmlsdGVyRmllbGQiLCJwcm9wZXJ0eUluZm8iLCJidWlsZFByb3BlcnlJbmZvIiwiX3VwZGF0ZVByb3BlcnR5SW5mbyIsImVycm9yTXNnIiwid2FybmluZyIsInByb3BlcnR5QmFnIiwicGFyZW50Q29udHJvbCIsInByb3BlcnR5SW5mb0ZvckZpbHRlckJhciIsInByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iaiIsIkpTT04iLCJwYXJzZSIsInB1c2giLCJzdHJpbmdpZnkiLCJjdXN0b21EYXRhTm9kZSIsInJldHJpZXZlQ3VzdG9tRGF0YU5vZGUiLCJzZXRBdHRyaWJ1dGUiLCJfcHJvcGVydHlJbmZvIiwiZm9ybWF0UHJvcGVydHlJbmZvIiwic2V0UHJvcGVydHkiLCJhZGRJdGVtIiwiX2FkZFAxM25JdGVtIiwibW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRzIiwiX2FkZEZsZXhJdGVtIiwicmVtb3ZlSXRlbSIsIm9GaWx0ZXJGaWVsZFByb3BlcnR5IiwiZG9SZW1vdmVJdGVtIiwiZmlsdGVyRmllbGRQcm9wZXJ0eSIsImRhdGEiLCJhZGRDb25kaXRpb24iLCJyZW1vdmVDb25kaXRpb24iLCJwcm9wZXJ0eUluZm9Gcm9tQ0QiLCJjbGVhckZpbHRlcnMiLCJvRmlsdGVyQ29udHJvbCIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsIlN0YXRlSGVscGVyIiwiY2xlYXJGaWx0ZXJWYWx1ZXMiLCJmZXRjaE1vZGVsIiwib01vZGVsIiwiZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5Iiwib0VudGl0eVR5cGUiLCJnZXRPYmplY3QiLCJpbmNsdWRlSGlkZGVuIiwib0NvbnZlcnRlckNvbnRleHQiLCJzRW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJtRmlsdGVyRmllbGRzIiwiZ2V0Q29udmVydGVkRmlsdGVyRmllbGRzIiwiZ2V0QXBwQ29tcG9uZW50IiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwib0ZpbHRlckZpZWxkSW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRlbXBsYXRlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsInJlc29sdmVQYXRoIiwidGFyZ2V0Iiwic1RhcmdldFByb3BlcnR5UHJlZml4IiwiQ29tbW9uSGVscGVyIiwiZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgiLCJzUHJvcGVydHkiLCJzZWxlY3Rpb25GaWVsZHMiLCJVSSIsIlNlbGVjdGlvbkZpZWxkcyIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsIl9pc0ZpbHRlckFkYXB0YWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiYVBhcmFtZXRlckZpZWxkcyIsInByb2Nlc3NlZEZpZWxkcyIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJwcm9jZXNzZWRGaWVsZHNLZXlzIiwib1Byb3BzIiwiZmlsdGVyIiwib1Byb3AiLCJpbmNsdWRlcyIsIm9GUiIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJpRmlsdGVyRmllbGRJbmRleCIsIm9TZWxGaWVsZCIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsInBhdGgiLCJ0b29sdGlwIiwicmVtb3ZlRnJvbUFwcFN0YXRlIiwiaGFzVmFsdWVIZWxwIiwib1Byb3BlcnR5Iiwib1Byb3BlcnR5Q29udGV4dCIsImJSZW1vdmVGcm9tQXBwU3RhdGUiLCJvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbiIsIm9GaWx0ZXJEZWZhdWx0VmFsdWUiLCJnZXRNb2RlbFR5cGUiLCIkVHlwZSIsImRlZmF1bHRGaWx0ZXJDb25kaXRpb25zIiwiZmllbGRQYXRoIiwib3BlcmF0b3IiLCJ2YWx1ZXMiLCJmaWx0ZXJFeHByZXNzaW9uIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsInZpc2libGUiLCJwcm9wSW5mbyIsImxhYmVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJ0eXBlQ29uZmlnIiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsImdldExvY2FsaXplZFRleHQiLCJpc1BhcmFtZXRlciIsInNldEN1c3RvbURhdGEiLCJnZXRMaW5lSXRlbVF1YWxpZmllckZyb21UYWJsZSIsImFubm90YXRpb25QYXRocyIsImdldE1ldGFQYXRoIiwic3BsaXQiLCJWaXN1YWxpemF0aW9ucyIsInZpc3VhbGl6YXRpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJtZXRhUGF0aHMiLCJmaWx0ZXJGaWVsZEluZm8iLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiaXNJbkZpbHRlckZhY2V0cyIsImlzU2VsZWN0aW9uRmllbGQiLCJfaXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyIsImZpbHRlckZhY2V0IiwiZmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJEYXRhIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJBZGFwdGF0aW9uSGlkZGVuIiwiZmlsdGVyRmllbGRLZXkiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic0ZsZXhQcm9wZXJ0eU5hbWUiLCJvQXBwQ29tcG9uZW50IiwiYklzWE1MIiwidHlwZSIsInNOYXZpZ2F0aW9uUGF0aCIsImdldE5hdmlnYXRpb25QYXRoIiwic1VzZVNlbWFudGljRGF0ZVJhbmdlIiwic0JpbmRpbmdQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzUmV0cmlldmVkRW50aXR5VHlwZVBhdGgiLCJzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJlbmRzV2l0aCIsInByb3BlcnR5IiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJqb2luIiwiZ2V0UGF0aCIsInNWYWx1ZUhlbHBUeXBlIiwiZG9lc1ZhbHVlSGVscEV4aXN0IiwiYlZhbHVlSGVscEV4aXN0cyIsImxvY2FsSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldENhY2hlZFByb3BlcnRpZXMiLCJ3aW5kb3ciLCJFbGVtZW50IiwiZ2V0Q3VzdG9tRGF0YSIsIl9zZXRDYWNoZWRQcm9wZXJ0aWVzIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwibG9jYWxHcm91cExhYmVsIiwib0dyb3VwIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJmZXRjaFByb3BlcnRpZXMiLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm9zIiwiZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzIiwiZ2V0VHlwZU1hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RmllbGRHcm91cFR5cGUsXG5cdEZpbHRlckZhY2V0cyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFNlbGVjdGlvbkZpZWxkc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciwgUHJlcHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0UHJvcGVydHlJbmZvIGFzIEZFUHJvcGVydHlJbmZvLFxuXHRGaWx0ZXJGaWVsZCxcblx0UHJvcGVydHlJbmZvRXh0ZXJuYWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMsIHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldE1vZGVsVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvUHJvcGVydHlJbmZvXCI7XG5pbXBvcnQgeyBnZXRWYWx1ZUhlbHBUZW1wbGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IFN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgTURDRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuXG50eXBlIE1vZGlmaWVyRWxlbWVudCA9IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50IHwgRWxlbWVudFtdO1xudHlwZSBOdWxsYWJsZU1vZGlmaWVyRWxlbWVudCA9IHZvaWQgfCBNb2RpZmllckVsZW1lbnQgfCBudWxsO1xuY29uc3QgT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEZpbHRlckJhckRlbGVnYXRlKSBhcyB0eXBlb2YgRmlsdGVyQmFyRGVsZWdhdGUgJiB7XG5cdGFwaVZlcnNpb246IG51bWJlcjtcblx0X2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMoc2VsZWN0aW9uRmllbGRzOiBTZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBib29sZWFuO1xuXHRfZmluZFNlbGVjdGlvbkZpZWxkKGFTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNGbGV4TmFtZTogc3RyaW5nKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQ7XG5cdGNsZWFyRmlsdGVycyhvRmlsdGVyQ29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTx2b2lkPjtcblx0Z2V0VHlwZU1hcCgpOiB0eXBlb2YgVHlwZU1hcDtcblx0ZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wpOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+O1xuXHRmZXRjaFByb3BlcnRpZXMoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+O1xuXHRfaXNGaWx0ZXJBZGFwdGFibGUoXG5cdFx0ZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eSxcblx0XHRzZWxlY3Rpb25GaWVsZHM/OiBTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmFjZXRzPzogRmlsdGVyRmFjZXRzXG5cdCk6IGJvb2xlYW47XG5cdGZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGg6IHN0cmluZywgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCk6IFByb3BlcnR5SW5mb1tdO1xuXHRfdGVtcGxhdGVDdXN0b21GaWx0ZXIoXG5cdFx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdFx0b1NlbGVjdGlvbkZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyXG5cdCk6IFByb21pc2U8TW9kaWZpZXJFbGVtZW50Pjtcblx0X2FkZFAxM25JdGVtKHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsIG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0X2FkZEZsZXhJdGVtKFxuXHRcdHNGbGV4UHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCB1bmRlZmluZWQsXG5cdFx0b0FwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCxcblx0XHR2aWV3PzogVmlld1xuXHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0YWRkSXRlbShcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnPzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0YWRkQ29uZGl0aW9uKFxuXHRcdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cblx0KTogUHJvbWlzZTx2b2lkIHwgbnVsbD47XG5cdHJlbW92ZUl0ZW0oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRvRmlsdGVyRmllbGRQcm9wZXJ0eTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IG51bGw+O1xuXHRyZW1vdmVDb25kaXRpb24oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjtcblx0XHR9XG5cdCk6IFByb21pc2U8dm9pZCB8IG51bGw+O1xufTtcbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYXBpVmVyc2lvbiA9IDI7XG5jb25zdCBFRElUX1NUQVRFX1BST1BFUlRZX05BTUUgPSBcIiRlZGl0U3RhdGVcIixcblx0U0VBUkNIX1BST1BFUlRZX05BTUUgPSBcIiRzZWFyY2hcIixcblx0VkFMVUVfSEVMUF9UWVBFID0gXCJGaWx0ZXJGaWVsZFZhbHVlSGVscFwiLFxuXHRGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkgPSBcInNhcF9mZV9GaWx0ZXJCYXJEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIjtcblxuLy8gRm9yIG9uZSBzaW5nbGUgZW50cnkgaW4gVUkuU2VsZWN0aW9uRmllbGRzXG50eXBlIEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCA9IHtcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIF90ZW1wbGF0ZUVkaXRTdGF0ZShcblx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBzSWRQcmVmaXgsXG5cdFx0XHRpc0RyYWZ0Q29sbGFib3JhdGl2ZTogTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0Ly9cInRoaXMuaTE4blwiOiBSZXNvdXJjZU1vZGVsLmdldE1vZGVsKCksIFRPRE86IFRvIGJlIGNoZWNrZWQgd2h5IHRoaXMgaXMgbmVlZGVkLCBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGxcblx0XHRcdFx0dGhpczogb1RoaXNcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0XCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5EcmFmdEVkaXRTdGF0ZVwiLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHR1bmRlZmluZWQsXG5cdFx0b01vZGlmaWVyXG5cdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0b1RoaXMuZGVzdHJveSgpO1xuXHR9KTtcbn1cblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fdGVtcGxhdGVDdXN0b21GaWx0ZXIgPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRzSWRQcmVmaXg6IHN0cmluZyxcblx0b1NlbGVjdGlvbkZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8TW9kaWZpZXJFbGVtZW50PiB7XG5cdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0ZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIsIG9Nb2RpZmllcik7XG5cblx0aWYgKG9TZWxlY3Rpb25GaWVsZEluZm8uYW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIGlmIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25fZXh0ZW5kZWQgPSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiAmIHsgRG9jdW1lbnRhdGlvblJlZj86IHN0cmluZyB9O1xuXHRcdGNvbnN0IGNvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob1NlbGVjdGlvbkZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRkYXRhTW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5Pihjb250ZXh0KSxcblx0XHRcdGRvY3VtZW50UmVmVGV4dCA9IChcblx0XHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZFxuXHRcdFx0KT8uRG9jdW1lbnRhdGlvblJlZj8udG9TdHJpbmcoKTtcblx0XHRvU2VsZWN0aW9uRmllbGRJbmZvLmRvY3VtZW50UmVmVGV4dCA9IGRvY3VtZW50UmVmVGV4dDtcblx0fVxuXG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogc0lkUHJlZml4XG5cdFx0fSksXG5cdFx0b0l0ZW1Nb2RlbCA9IG5ldyBUZW1wbGF0ZU1vZGVsKG9TZWxlY3Rpb25GaWVsZEluZm8sIG9NZXRhTW9kZWwpLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGghKSxcblx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRpdGVtOiBvSXRlbU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdGl0ZW06IG9JdGVtTW9kZWxcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQmFyKSxcblx0XHRvQ29udHJvbGxlciA9IG9WaWV3ID8gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIDogdW5kZWZpbmVkLFxuXHRcdG9PcHRpb25zID0ge1xuXHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXIgPyBvQ29udHJvbGxlciA6IHVuZGVmaW5lZCxcblx0XHRcdHZpZXc6IG9WaWV3XG5cdFx0fTtcblxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXIuQ3VzdG9tRmlsdGVyXCIsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMsIG9Nb2RpZmllcikuZmluYWxseShcblx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdFx0XHRvSXRlbU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdCk7XG59O1xuZnVuY3Rpb24gX2dldFByb3BlcnR5UGF0aChzQ29uZGl0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEZpbHRlclV0aWxzLmdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKHNDb25kaXRpb25QYXRoKTtcbn1cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2ZpbmRTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChhU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzRmxleE5hbWU6IHN0cmluZyk6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGFTZWxlY3Rpb25GaWVsZHMuZmluZChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQob1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGggPT09IHNGbGV4TmFtZSB8fCBvU2VsZWN0aW9uRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlQWxsKC9cXCovZywgXCJcIikgPT09IHNGbGV4TmFtZSkgJiZcblx0XHRcdG9TZWxlY3Rpb25GaWVsZC5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCJcblx0XHQpO1xuXHR9KTtcbn07XG5mdW5jdGlvbiBfZ2VuZXJhdGVJZFByZWZpeChzRmlsdGVyQmFySWQ6IHN0cmluZywgc0NvbnRyb2xUeXBlOiBzdHJpbmcsIHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNOYXZpZ2F0aW9uUHJlZml4ID8gZ2VuZXJhdGUoW3NGaWx0ZXJCYXJJZCwgc0NvbnRyb2xUeXBlLCBzTmF2aWdhdGlvblByZWZpeF0pIDogZ2VuZXJhdGUoW3NGaWx0ZXJCYXJJZCwgc0NvbnRyb2xUeXBlXSk7XG59XG5hc3luYyBmdW5jdGlvbiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdG9TZXR0aW5nczoge1xuXHRcdGlzWE1MOiBib29sZWFuO1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdFx0XHRjb250ZXh0UGF0aDogQ29udGV4dDtcblx0XHR9O1xuXHRcdG1vZGVsczoge1xuXHRcdFx0bWV0YVBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0Y29udGV4dFBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdH07XG5cdH0sXG5cdG9QYXJhbWV0ZXJzOiB7XG5cdFx0c1ZoSWRQcmVmaXg6IHN0cmluZztcblx0XHRzTmF2aWdhdGlvblByZWZpeD86IHN0cmluZztcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW47XG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcjtcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudDtcblx0XHR2aWV3PzogVmlldztcblx0fVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG9UaGlzID0ge1xuXHRcdGlkUHJlZml4OiBvUGFyYW1ldGVycy5zVmhJZFByZWZpeCxcblx0XHRjb25kaXRpb25Nb2RlbDogXCIkZmlsdGVyc1wiLFxuXHRcdG5hdmlnYXRpb25QcmVmaXg6IG9QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4ID8gYC8ke29QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4fWAgOiBcIlwiLFxuXHRcdGZpbHRlckZpZWxkVmFsdWVIZWxwOiB0cnVlLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlOiBvUGFyYW1ldGVycy5iVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0bWV0YVBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGgsXG5cdFx0Y29udGV4dFBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGgsXG5cdFx0dXNlTXVsdGlWYWx1ZUZpZWxkOiBmYWxzZSxcblx0XHRyZXF1aXJlc1ZhbGlkYXRpb246IGZhbHNlLFxuXHRcdGNvbGxhYm9yYXRpb25FbmFibGVkOiBmYWxzZSxcblx0XHRyZXF1ZXN0R3JvdXBJZDogdW5kZWZpbmVkXG5cdH07XG5cdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwob1RoaXMpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBtZXJnZU9iamVjdHMoe30sIG9TZXR0aW5ncywge1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0dGhpczoganNvbk1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdH0sXG5cdFx0bW9kZWxzOiB7XG5cdFx0XHR0aGlzOiBvVGhpc1xuXHRcdH1cblx0fSkgYXMgUHJlcHJvY2Vzc29yU2V0dGluZ3M7XG5cdGNvbnN0IHRhcmdldFBhdGggPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGgpO1xuXG5cdGlmIChvU2V0dGluZ3MuaXNYTUwpIHtcblx0XHRsZXQgdmFsdWVIZWxwWE1MU3RyaW5nID0ganN4LnJlbmRlckFzWE1MPHN0cmluZyB8IHVuZGVmaW5lZD4oXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHRnZXRWYWx1ZUhlbHBUZW1wbGF0ZShvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLm1ldGFQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0UGF0aCksIG9UaGlzKSBhc1xuXHRcdFx0XHRcdHwgc3RyaW5nXG5cdFx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpO1xuXHRcdGlmICh2YWx1ZUhlbHBYTUxTdHJpbmcpIHtcblx0XHRcdGlmIChvU2V0dGluZ3MuaXNYTUwpIHtcblx0XHRcdFx0dmFsdWVIZWxwWE1MU3RyaW5nID0gYDxyb290PiR7dmFsdWVIZWxwWE1MU3RyaW5nfTwvcm9vdD5gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdmFsdWVIZWxwWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZUhlbHBYTUxTdHJpbmcsIFwidGV4dC94bWxcIik7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQodmFsdWVIZWxwWE1MLmZpcnN0RWxlbWVudENoaWxkLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIHtcblx0XHRcdFx0XHRpc1hNTDogb1NldHRpbmdzLmlzWE1MXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChhVkhFbGVtZW50czogTW9kaWZpZXJFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdFx0aWYgKGFWSEVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQWdncmVnYXRpb25OYW1lID0gXCJkZXBlbmRlbnRzXCI7XG5cdFx0XHRcdFx0XHQvL1NvbWUgZmlsdGVyIGZpZWxkcyBoYXZlIHRoZSBQZXJzaXN0ZW5jZVByb3ZpZGVyIGFnZ3JlZ2F0aW9uIGJlc2lkZXMgdGhlIEZWSCA6XG5cdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhVkhFbGVtZW50cykpIHtcblx0XHRcdFx0XHRcdFx0YVZIRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWx0OiBFbGVtZW50IHwgVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0LCAwKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0IGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGFWSEVsZW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMudmlldyBhcyB1bmtub3duIGFzIEVsZW1lbnRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIGFWSEVsZW1lbnRzIGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBEZWxlZ2F0ZVV0aWwuaXNWYWx1ZUhlbHBSZXF1aXJlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGpzb25Nb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCB2YWx1ZUhlbHAgPSBnZXRWYWx1ZUhlbHBUZW1wbGF0ZShvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLm1ldGFQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0UGF0aCksIG9UaGlzKSBhc1xuXHRcdFx0fCBWYWx1ZUhlbHBcblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGlmICh2YWx1ZUhlbHApIHtcblx0XHRcdGNvbnN0IHNBZ2dyZWdhdGlvbk5hbWUgPSBcImRlcGVuZGVudHNcIjtcblx0XHRcdC8vU29tZSBmaWx0ZXIgZmllbGRzIGhhdmUgdGhlIFBlcnNpc3RlbmNlUHJvdmlkZXIgYWdncmVnYXRpb24gYmVzaWRlcyB0aGUgRlZIIDpcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlSGVscCkpIHtcblx0XHRcdFx0dmFsdWVIZWxwLmZvckVhY2goZnVuY3Rpb24gKGVsdDogRWxlbWVudCB8IFVJNUVsZW1lbnQpIHtcblx0XHRcdFx0XHRpZiAob1BhcmFtZXRlcnMub01vZGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1BhcmFtZXRlcnMub0NvbnRyb2wsIHNBZ2dyZWdhdGlvbk5hbWUsIGVsdCwgMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIGVsdCBhcyBVSTVFbGVtZW50LCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAob1BhcmFtZXRlcnMub01vZGlmaWVyKSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgdmFsdWVIZWxwLCAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIHZhbHVlSGVscCwgMCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuYXN5bmMgZnVuY3Rpb24gX2FkZFhNTEN1c3RvbUZpbHRlckZpZWxkKFxuXHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRzUHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8VUk1RWxlbWVudCB8IEVsZW1lbnQgfCB2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgYURlcGVuZGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUob01vZGlmaWVyLmdldEFnZ3JlZ2F0aW9uKG9GaWx0ZXJCYXIsIFwiZGVwZW5kZW50c1wiKSk7XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGFEZXBlbmRlbnRzICYmIGFEZXBlbmRlbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPD0gYURlcGVuZGVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckZpZWxkID0gYURlcGVuZGVudHNbaV07XG5cdFx0XHRcdGlmIChvRmlsdGVyRmllbGQgJiYgKG9GaWx0ZXJGaWVsZCBhcyBVSTVFbGVtZW50KS5pc0E8TURDRmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSAob0ZpbHRlckZpZWxkIGFzIE1EQ0ZpbHRlckZpZWxkKS5nZXRQcm9wZXJ0eUtleSgpLFxuXHRcdFx0XHRcdFx0c0ZpbHRlckZpZWxkSWQgPSAob0ZpbHRlckZpZWxkIGFzIE1EQ0ZpbHRlckZpZWxkKS5nZXRJZCgpO1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlQYXRoID09PSBzRGF0YVByb3BlcnR5ICYmIHNGaWx0ZXJGaWVsZElkLmluZGV4T2YoXCJDdXN0b21GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJGaWVsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkZpbHRlciBDYW5ub3QgYmUgYWRkZWRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3RlbXBsYXRlRmlsdGVyRmllbGQoXG5cdG9TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG9QYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c0luRmlsdGVyQmFySWQ/OiBzdHJpbmcsXG5cdHBhZ2VNb2RlbD86IEpTT05Nb2RlbFxuKTogUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudCB8IEVsZW1lbnRbXT4ge1xuXHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdGlkUHJlZml4OiBvUGFyYW1ldGVycy5zSWRQcmVmaXgsXG5cdFx0dmhJZFByZWZpeDogb1BhcmFtZXRlcnMuc1ZoSWRQcmVmaXgsXG5cdFx0cHJvcGVydHlQYXRoOiBvUGFyYW1ldGVycy5zUHJvcGVydHlOYW1lLFxuXHRcdG5hdmlnYXRpb25QcmVmaXg6IG9QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4ID8gYC8ke29QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4fWAgOiBcIlwiLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlOiBvUGFyYW1ldGVycy5iVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0c2V0dGluZ3M6IG9QYXJhbWV0ZXJzLm9TZXR0aW5ncyxcblx0XHR2aXN1YWxGaWx0ZXI6IG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlcixcblx0XHRlZGl0TW9kZTogYHtpbnRlcm5hbD4vJHtzSW5GaWx0ZXJCYXJJZH0vZmlsdGVyRmllbGRzLyR7b1BhcmFtZXRlcnMuc1Byb3BlcnR5TmFtZX0vZWRpdE1vZGV9YFxuXHR9KTtcblx0dHJ5IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhcmFtZXRlcnMub01ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBvVmlzdWFsRmlsdGVyID0gbmV3IFRlbXBsYXRlTW9kZWwob1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyIGFzIG9iamVjdCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gbWVyZ2VPYmplY3RzKHt9LCBvU2V0dGluZ3MsIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlci5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlcixcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBwYWdlTW9kZWxcblx0XHRcdH1cblx0XHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblxuXHRcdHJldHVybiBhd2FpdCBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmludGVybmFsLmZpbHRlckZpZWxkLkZpbHRlckZpZWxkVGVtcGxhdGVcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7XG5cdFx0XHRpc1hNTDogISFvU2V0dGluZ3MuaXNYTUxcblx0XHR9KTtcblx0fSBmaW5hbGx5IHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX2FkZFByb3BlcnR5SW5mbyhcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9LFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Ly8ga2V5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIG5hbWVcblx0XHRjb25zdCBzUHJvcGVydHlJbmZvS2V5ID0gS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIipcIiwgXCJcIik7XG5cdFx0aWYgKG1Qcm9wZXJ0eUJhZyAmJiAhbVByb3BlcnR5QmFnLm1vZGlmaWVyKSB7XG5cdFx0XHR0aHJvdyBcIkZpbHRlckJhciBEZWxlZ2F0ZSBtZXRob2QgY2FsbGVkIHdpdGhvdXQgbW9kaWZpZXIuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVsZWdhdGUgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RmlsdGVyQmFyRGVsZWdhdGU+KG9QYXJlbnRDb250cm9sLCBcImRlbGVnYXRlXCIpO1xuXHRcdGNvbnN0IGFQcm9wZXJ0eUluZm8gPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RkVQcm9wZXJ0eUluZm9bXT4ob1BhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIpO1xuXHRcdC8vV2UgZG8gbm90IGdldCBwcm9wZXJ0eUluZm8gaW4gY2FzZSBvZiB0YWJsZSBmaWx0ZXJzXG5cdFx0aWYgKGFQcm9wZXJ0eUluZm8pIHtcblx0XHRcdGNvbnN0IGhhc1Byb3BlcnR5SW5mbyA9IGFQcm9wZXJ0eUluZm8uc29tZShmdW5jdGlvbiAocHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHByb3Aua2V5ID09PSBzUHJvcGVydHlJbmZvS2V5IHx8IHByb3AubmFtZSA9PT0gc1Byb3BlcnR5SW5mb0tleTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBkZWxlZ2F0ZS5wYXlsb2FkLmVudGl0eVR5cGVQYXRoO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0bVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5SW5mb05hbWUsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBGaWx0ZXJVdGlscy5idWlsZFByb3BlcnlJbmZvKGZpbHRlckZpZWxkISwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGF3YWl0IF91cGRhdGVQcm9wZXJ0eUluZm8oXG5cdFx0XHRcdFx0YVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm9bXSxcblx0XHRcdFx0XHRtUHJvcGVydHlCYWcsXG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvIGFzIHVua25vd24gYXMgUHJvcGVydHlJbmZvLFxuXHRcdFx0XHRcdG9QYXJlbnRDb250cm9sXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvck1zZykge1xuXHRcdExvZy53YXJuaW5nKGAke29QYXJlbnRDb250cm9sLmdldElkKCl9IDogJHtlcnJvck1zZ31gKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvKFxuXHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mb1tdLFxuXHRwcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSxcblx0ZmlsdGVyRmllbGQ6IFByb3BlcnR5SW5mbyxcblx0cGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0cGFyZW50Q29udHJvbCxcblx0XHRcImZlRmlsdGVySW5mb1wiLFxuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyXG5cdCk7XG5cdGlmIChwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgJiYgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmogPSBKU09OLnBhcnNlKHByb3BlcnR5SW5mb0ZvckZpbHRlckJhcikgYXMgUHJvcGVydHlJbmZvW107XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iaik7XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyID0gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0XHRjb25zdCBjdXN0b21EYXRhTm9kZSA9IGF3YWl0IERlbGVnYXRlVXRpbC5yZXRyaWV2ZUN1c3RvbURhdGFOb2RlKHBhcmVudENvbnRyb2wsIFwiZmVGaWx0ZXJJbmZvXCIsIHByb3BlcnR5QmFnLm1vZGlmaWVyKTtcblx0XHRjdXN0b21EYXRhTm9kZVswXS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIpO1xuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKHBhcmVudENvbnRyb2wsIFwiY3VzdG9tRGF0YVwiLCBjdXN0b21EYXRhTm9kZVswXSwgMCk7XG5cdH1cblxuXHQvLyBDdXN0b20gZGF0YSBpcyBzZXQgdG8gdGhlIHBhcmVudCBjb250cm9sIHRvIHN0b3JlIHRoZSBwcm9wZXJ0eUluZm9cblx0cHJvcGVydHlJbmZvLnB1c2goZmlsdGVyRmllbGQpO1xuXHQvL3JlbW92ZSB1bndhbnRlZCBwcm9wZXJ0eSBmcm9tIHRoZSBwcm9wZXJ0eUluZm9cblx0Y29uc3QgX3Byb3BlcnR5SW5mbyA9IEZpbHRlclV0aWxzLmZvcm1hdFByb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm8gYXMgRkVQcm9wZXJ0eUluZm9bXSk7XG5cdC8vVXBkYXRlIHRoZSBwcm9wZXJ0eUluZm8gaW4gdGhlIHBhcmVudCBjb250cm9sXG5cdHByb3BlcnR5QmFnLm1vZGlmaWVyLnNldFByb3BlcnR5KHBhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIsIF9wcm9wZXJ0eUluZm8pO1xufVxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGZpbHRlciBmaWVsZCBpbiBzdGFuZGFsb25lIG1vZGUgLyBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzIG9mIHRoZSBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyB0aGUgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHRoZSBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgZmlsdGVyIGZpZWxkIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRtUHJvcGVydHlCYWc/OiB7IHZpZXc6IFZpZXc7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdGlmICghbVByb3BlcnR5QmFnKSB7XG5cdFx0Ly8gSW52b2tlZCBkdXJpbmcgcnVudGltZS5cblx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0oc1Byb3BlcnR5SW5mb05hbWUsIG9QYXJlbnRDb250cm9sKTtcblx0fVxuXHRjb25zdCBtb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRhd2FpdCBfYWRkUHJvcGVydHlJbmZvKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcsIG9NZXRhTW9kZWwsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0fVxuXHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0oXG5cdFx0c1Byb3BlcnR5SW5mb05hbWUsXG5cdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0b01ldGFNb2RlbCxcblx0XHRtb2RpZmllcixcblx0XHRtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZy52aWV3XG5cdCk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgZmlsdGVyIGZpZWxkIGluIHN0YW5kYWxvbmUgLyBwZXJzb25hbGl6YXRpb24gZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgcmVtb3ZlZFxuICogQHBhcmFtIG9GaWx0ZXJGaWVsZFByb3BlcnR5IE9iamVjdCBvZiB0aGUgZmlsdGVyIGZpZWxkIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQgYXMgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIEZsZXggQVBJXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgZnJvbSBGbGV4IEFQSVxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHByb21pc2VcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5yZW1vdmVJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRvRmlsdGVyRmllbGRQcm9wZXJ0eTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfVxuKTogUHJvbWlzZTxib29sZWFuIHwgbnVsbD4ge1xuXHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IGZpbHRlckZpZWxkUHJvcGVydHkgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHkob0ZpbHRlckZpZWxkUHJvcGVydHksIFwicHJvcGVydHlLZXlcIik7XG5cdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBmaWx0ZXJGaWVsZFByb3BlcnR5IGFzIHN0cmluZyk7XG5cdH1cblx0aWYgKFxuXHRcdHR5cGVvZiBvRmlsdGVyRmllbGRQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIiAmJlxuXHRcdChvRmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBVSTVFbGVtZW50KS5pc0EgJiZcblx0XHQob0ZpbHRlckZpZWxkUHJvcGVydHkgYXMgVUk1RWxlbWVudCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKVxuXHQpIHtcblx0XHRpZiAoKG9GaWx0ZXJGaWVsZFByb3BlcnR5IGFzIFVJNUVsZW1lbnQpLmRhdGEoXCJpc1Nsb3RcIikgPT09IFwidHJ1ZVwiICYmIG1Qcm9wZXJ0eUJhZykge1xuXHRcdFx0Ly8gSW5zZXJ0aW5nIGludG8gdGhlIG1vZGlmaWVyIGNyZWF0ZXMgYSBjaGFuZ2UgZnJvbSBmbGV4IGFsc28gZmlsdGVyIGlzIGJlZW4gcmVtb3ZlZCBoZW5jZSBwcm9taXNlIGlzIHJlc29sdmVkIHRvIGZhbHNlXG5cdFx0XHRtb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyZW50Q29udHJvbCwgXCJkZXBlbmRlbnRzXCIsIG9GaWx0ZXJGaWVsZFByb3BlcnR5KTtcblx0XHRcdGRvUmVtb3ZlSXRlbSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiBpbiBzdGFuZGFsb25lIC8gcGVyc29uYWxpemF0aW9uIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgaW5zdGFuY2UgdG8gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyBhZGRlZFxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFkZGVkIGFzIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYWRkQ29uZGl0aW9uID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cbik6IFByb21pc2U8dm9pZCB8IG51bGw+IHtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIGZyb20gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyByZW1vdmVkXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgcmVtb3ZlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLnJlbW92ZUNvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnOiB7XG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7XG5cdH1cbik6IFByb21pc2U8dm9pZCB8IG51bGw+IHtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb0Zyb21DRCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFwic2FwX2ZlX0ZpbHRlckJhckRlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiLFxuXHRcdFx0bW9kaWZpZXJcblx0XHQpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvRnJvbUNEKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG4vKipcbiAqIENsZWFycyBhbGwgaW5wdXQgdmFsdWVzIG9mIHZpc2libGUgZmlsdGVyIGZpZWxkcyBpbiB0aGUgZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvRmlsdGVyQ29udHJvbCBJbnN0YW5jZSBvZiB0aGUgRmlsdGVyQmFyIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuY2xlYXJGaWx0ZXJzID0gYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgZmlsdGVyQmFyQVBJID0gb0ZpbHRlckNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdHJldHVybiBTdGF0ZUhlbHBlci5jbGVhckZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkgYXMgTWFjcm9BUEkpO1xufTtcbi8qKlxuICogQ3JlYXRlcyB0aGUgZmlsdGVyIGZpZWxkIGluIHRoZSB0YWJsZSBhZGFwdGF0aW9uIG9mIHRoZSBGaWx0ZXJCYXIuXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIGVudGl0eSB0eXBlIGZvciB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIG5lZWRzIHRvIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBJbnN0YW5jZSBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgZmlsdGVyIGZpZWxkIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXJcbik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+IHtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9QYXJlbnRDb250cm9sKVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChvTW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0oXG5cdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0b01vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiTW9kZWwgY291bGQgbm90IGJlIHJlc29sdmVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk7XG59O1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkgPSBmdW5jdGlvbiAoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0Y29uc3QgaW5jbHVkZUhpZGRlbiA9IG9GaWx0ZXJDb250cm9sLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkZpbHRlckJhclwiKSA/IHRydWUgOiB1bmRlZmluZWQ7XG5cdGlmICghb0ZpbHRlckNvbnRyb2wgfHwgIW9FbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKTtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCk7XG5cblx0Y29uc3QgbUZpbHRlckZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhcblx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRzRW50aXR5VHlwZVBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRvTWV0YU1vZGVsLFxuXHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvRmlsdGVyQ29udHJvbClcblx0KTtcblx0bGV0IGFGZXRjaGVkUHJvcGVydGllczogRkVQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRtRmlsdGVyRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKSB7XG5cdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblx0XHRpZiAoc0Fubm90YXRpb25QYXRoICYmICFvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCkucmVzb2x2ZVBhdGg8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkudGFyZ2V0O1xuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UHJlZml4ID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9NZXRhTW9kZWwsIHNBbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBzQW5ub3RhdGlvblBhdGgucmVwbGFjZShgJHtzVGFyZ2V0UHJvcGVydHlQcmVmaXh9L2AsIFwiXCIpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM7XG5cdFx0XHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckFkYXB0YWJsZShvRmlsdGVyRmllbGRJbmZvLCBvUHJvcGVydHlBbm5vdGF0aW9ucywgc2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGYWNldHMpICYmXG5cdFx0XHRcdGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNUYXJnZXRQcm9wZXJ0eVByZWZpeCwgX2dldFByb3BlcnR5UGF0aChzUHJvcGVydHkpLCB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9GaWx0ZXJGaWVsZEluZm8gYXMgUHJvcGVydHlJbmZvKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9DdXN0b20gRmlsdGVyc1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob0ZpbHRlckZpZWxkSW5mbyBhcyBQcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgYVBhcmFtZXRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgcHJvY2Vzc2VkRmllbGRzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhhRmV0Y2hlZFByb3BlcnRpZXMgYXMgRmlsdGVyRmllbGRbXSwgb0NvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBwcm9jZXNzZWRGaWVsZHNLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BzOiBGRVByb3BlcnR5SW5mbykge1xuXHRcdGlmIChvUHJvcHMua2V5KSB7XG5cdFx0XHRwcm9jZXNzZWRGaWVsZHNLZXlzLnB1c2gob1Byb3BzLmtleSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBhRmV0Y2hlZFByb3BlcnRpZXMuZmlsdGVyKGZ1bmN0aW9uIChvUHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRyZXR1cm4gcHJvY2Vzc2VkRmllbGRzS2V5cy5pbmNsdWRlcyhvUHJvcC5rZXkhKTtcblx0fSk7XG5cblx0Y29uc3Qgb0ZSID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoLCBvTWV0YU1vZGVsKSxcblx0XHRtQWxsb3dlZEV4cHJlc3Npb25zID0gb0ZSLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcblx0Ly9PYmplY3Qua2V5cyhwcm9jZXNzZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKHNGaWx0ZXJGaWVsZEtleTogc3RyaW5nKSB7XG5cdHByb2Nlc3NlZEZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcCwgaUZpbHRlckZpZWxkSW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IG9TZWxGaWVsZCA9IGFGZXRjaGVkUHJvcGVydGllc1tpRmlsdGVyRmllbGRJbmRleF07XG5cdFx0aWYgKCFvU2VsRmllbGQgfHwgIW9TZWxGaWVsZC5jb25kaXRpb25QYXRoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBfZ2V0UHJvcGVydHlQYXRoKG9TZWxGaWVsZC5jb25kaXRpb25QYXRoKTtcblx0XHQvL2ZldGNoQmFzaWNcblx0XHRvUHJvcCA9IE9iamVjdC5hc3NpZ24ob1Byb3AsIHtcblx0XHRcdGdyb3VwOiBvU2VsRmllbGQuZ3JvdXAsXG5cdFx0XHRncm91cExhYmVsOiBvU2VsRmllbGQuZ3JvdXBMYWJlbCxcblx0XHRcdHBhdGg6IG9TZWxGaWVsZC5jb25kaXRpb25QYXRoLFxuXHRcdFx0dG9vbHRpcDogbnVsbCxcblx0XHRcdHJlbW92ZUZyb21BcHBTdGF0ZTogZmFsc2UsXG5cdFx0XHRoYXNWYWx1ZUhlbHA6IGZhbHNlXG5cdFx0fSk7XG5cblx0XHQvL2ZldGNoUHJvcEluZm9cblx0XHRpZiAob1NlbEZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvU2VsRmllbGQuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NBbm5vdGF0aW9uUGF0aH1AYCksXG5cdFx0XHRcdG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBbm5vdGF0aW9uUGF0aCk7XG5cblx0XHRcdGNvbnN0IGJSZW1vdmVGcm9tQXBwU3RhdGUgPVxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdO1xuXG5cdFx0XHRjb25zdCBzVGFyZ2V0UHJvcGVydHlQcmVmaXggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01ldGFNb2RlbCwgb1NlbEZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IHNBbm5vdGF0aW9uUGF0aC5yZXBsYWNlKGAke3NUYXJnZXRQcm9wZXJ0eVByZWZpeH0vYCwgXCJcIik7XG5cdFx0XHRsZXQgb0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb247XG5cdFx0XHRsZXQgb0ZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGlmIChvUHJvcGVydHlDb250ZXh0ICYmIGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNUYXJnZXRQcm9wZXJ0eVByZWZpeCwgX2dldFByb3BlcnR5UGF0aChzUHJvcGVydHkpLCB0cnVlKSkge1xuXHRcdFx0XHRvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIl07XG5cdFx0XHRcdGlmIChvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9GaWx0ZXJEZWZhdWx0VmFsdWUgPSBvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbltgJCR7Z2V0TW9kZWxUeXBlKG9Qcm9wZXJ0eS4kVHlwZSl9YF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvUHJvcCA9IE9iamVjdC5hc3NpZ24ob1Byb3AsIHtcblx0XHRcdFx0XHR0b29sdGlwOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVpY2tJbmZvXCJdIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRyZW1vdmVGcm9tQXBwU3RhdGU6IGJSZW1vdmVGcm9tQXBwU3RhdGUsXG5cdFx0XHRcdFx0aGFzVmFsdWVIZWxwOiBoYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBvUHJvcGVydHlDb250ZXh0IH0pLFxuXHRcdFx0XHRcdGRlZmF1bHRGaWx0ZXJDb25kaXRpb25zOiBvRmlsdGVyRGVmYXVsdFZhbHVlXG5cdFx0XHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFBhdGg6IG9TZWxGaWVsZC5jb25kaXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlczogW29GaWx0ZXJEZWZhdWx0VmFsdWVdXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ICBdXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2Jhc2VcblxuXHRcdGlmIChvUHJvcCkge1xuXHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5UGF0aF0gJiYgbUFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHlQYXRoXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9Qcm9wLmZpbHRlckV4cHJlc3Npb24gPSBDb21tb25VdGlscy5nZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKG1BbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Byb3AuZmlsdGVyRXhwcmVzc2lvbiA9IFwiYXV0b1wiO1xuXHRcdFx0fVxuXG5cdFx0XHRvUHJvcCA9IE9iamVjdC5hc3NpZ24ob1Byb3AsIHtcblx0XHRcdFx0dmlzaWJsZTogb1NlbEZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCJcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHByb2Nlc3NlZEZpZWxkc1tpRmlsdGVyRmllbGRJbmRleF0gPSBvUHJvcDtcblx0fSk7XG5cdHByb2Nlc3NlZEZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wSW5mbzogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHQvLyBrZXkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgbmFtZVxuXHRcdHByb3BJbmZvLmtleSA9IHByb3BJbmZvLm5hbWU7XG5cdFx0aWYgKHByb3BJbmZvLnBhdGggPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRwcm9wSW5mby5sYWJlbCA9IGdldFJlc291cmNlTW9kZWwob0ZpbHRlckNvbnRyb2wpLmdldFRleHQoXCJGSUxURVJCQVJfRURJVElOR19TVEFUVVNcIik7XG5cdFx0fVxuXHRcdHByb3BJbmZvLnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcEluZm8uZGF0YVR5cGUsIHByb3BJbmZvLmZvcm1hdE9wdGlvbnMsIHByb3BJbmZvLmNvbnN0cmFpbnRzKTtcblx0XHRwcm9wSW5mby5sYWJlbCA9IGdldExvY2FsaXplZFRleHQocHJvcEluZm8ubGFiZWwhLCBvRmlsdGVyQ29udHJvbCkgfHwgXCJcIjtcblx0XHRpZiAocHJvcEluZm8uaXNQYXJhbWV0ZXIpIHtcblx0XHRcdGFQYXJhbWV0ZXJGaWVsZHMucHVzaChwcm9wSW5mby5uYW1lKTtcblx0XHR9XG5cdH0pO1xuXG5cdGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NlZEZpZWxkcztcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEob0ZpbHRlckNvbnRyb2wsIFwicGFyYW1ldGVyc1wiLCBhUGFyYW1ldGVyRmllbGRzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzIGFzIFByb3BlcnR5SW5mb1tdO1xufTtcblxuZnVuY3Rpb24gZ2V0TGluZUl0ZW1RdWFsaWZpZXJGcm9tVGFibGUob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKG9Db250cm9sLmlzQTxFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdGNvbnN0IGFubm90YXRpb25QYXRocyA9IG9Db250cm9sLmdldE1ldGFQYXRoKCkuc3BsaXQoXCIjXCIpWzBdLnNwbGl0KFwiL1wiKTtcblx0XHRzd2l0Y2ggKGFubm90YXRpb25QYXRoc1thbm5vdGF0aW9uUGF0aHMubGVuZ3RoIC0gMV0pIHtcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YDpcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnR9YDpcblx0XHRcdFx0cmV0dXJuIG9NZXRhTW9kZWxcblx0XHRcdFx0XHQuZ2V0T2JqZWN0KG9Db250cm9sLmdldE1ldGFQYXRoKCkpXG5cdFx0XHRcdFx0LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXN1YWxpemF0aW9uOiB7ICRBbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+XG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YClcblx0XHRcdFx0XHQpLiRBbm5vdGF0aW9uUGF0aDtcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA6XG5cdFx0XHRcdGNvbnN0IG1ldGFQYXRocyA9IG9Db250cm9sLmdldE1ldGFQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRyZXR1cm4gbWV0YVBhdGhzW21ldGFQYXRocy5sZW5ndGggLSAxXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJBZGFwdGFibGUgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdHByb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5LFxuXHRzZWxlY3Rpb25GaWVsZHM/OiBTZWxlY3Rpb25GaWVsZHMsXG5cdGZpbHRlckZhY2V0cz86IEZpbHRlckZhY2V0c1xuKTogYm9vbGVhbiB7XG5cdGxldCBpc0luRmlsdGVyRmFjZXRzOiBib29sZWFuO1xuXHRjb25zdCBpc1NlbGVjdGlvbkZpZWxkID0gc2VsZWN0aW9uRmllbGRzID8gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyhzZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbykgOiBmYWxzZTtcblx0aWYgKGZpbHRlckZhY2V0cykge1xuXHRcdGlzSW5GaWx0ZXJGYWNldHMgPSBmaWx0ZXJGYWNldHMuc29tZShmdW5jdGlvbiAoZmlsdGVyRmFjZXQ6IFJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwID0gZmlsdGVyRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0cmV0dXJuIGZpZWxkR3JvdXA/LkRhdGEuc29tZShmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdC8vIHdlIGV4cGVjdCBkYXRhRmllbGQgdG8gYmUgRGF0YUZpZWxkVHlwZXMgKGhhdmluZyBhIFZhbHVlKSBpbnNpZGUgRmllbGRHcm91cHMgaW5zaWRlIEZpbHRlckZhY2V0c1xuXHRcdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUucGF0aCA9PT0gZmlsdGVyRmllbGRJbmZvLmtleSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGRhdGFGaWVsZCB0eXBlcyBoYXZpbmcgbm8gVmFsdWUgKERhdGFGaWVsZEZvckFubm90YXRpb25UeXBlcywgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcywgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyksIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2ssIGJ1dCB0aGlzIHNob3VsZCBub3Qgb2NjdXIgYW55d2F5XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlzSW5GaWx0ZXJGYWNldHMgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNTZWxlY3Rpb25GaWVsZCB8fCBpc0luRmlsdGVyRmFjZXRzIHx8ICFwcm9wZXJ0eUFubm90YXRpb25zLmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlbjtcbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoc2VsZWN0aW9uRmllbGRzOiBTZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBib29sZWFuIHtcblx0Y29uc3QgZmlsdGVyRmllbGRLZXkgPSBmaWx0ZXJGaWVsZEluZm8ua2V5Py5pbmRleE9mKFwiOjpcIikgPiAwID8gZmlsdGVyRmllbGRJbmZvLmtleT8ucmVwbGFjZShcIjo6XCIsIFwiL1wiKSA6IGZpbHRlckZpZWxkSW5mby5rZXk7XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHMuc29tZShmdW5jdGlvbiAoc2VsZWN0aW9uRmllbGQ6IEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCkge1xuXHRcdGlmIChzZWxlY3Rpb25GaWVsZC52YWx1ZSA9PT0gZmlsdGVyRmllbGRLZXkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdHNGbGV4UHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCB1bmRlZmluZWQsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB8IHVuZGVmaW5lZCxcblx0dmlldz86IFZpZXcgfCB1bmRlZmluZWRcbik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgc0ZpbHRlckJhcklkID0gb01vZGlmaWVyID8gb01vZGlmaWVyLmdldElkKG9QYXJlbnRDb250cm9sKSA6IG9QYXJlbnRDb250cm9sLmdldElkKCksXG5cdFx0c0lkUHJlZml4ID0gb01vZGlmaWVyID8gXCJcIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdGFTZWxlY3Rpb25GaWVsZHMgPSBGaWx0ZXJVdGlscy5nZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMoXG5cdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRvTW9kaWZpZXIsXG5cdFx0XHRvTW9kaWZpZXIgPyB1bmRlZmluZWQgOiBnZXRMaW5lSXRlbVF1YWxpZmllckZyb21UYWJsZShvUGFyZW50Q29udHJvbC5nZXRQYXJlbnQoKSEsIG9NZXRhTW9kZWwpXG5cdFx0KSxcblx0XHRvU2VsZWN0aW9uRmllbGQgPSBPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9maW5kU2VsZWN0aW9uRmllbGQoYVNlbGVjdGlvbkZpZWxkcywgc0ZsZXhQcm9wZXJ0eU5hbWUpLFxuXHRcdHNQcm9wZXJ0eVBhdGggPSBfZ2V0UHJvcGVydHlQYXRoKHNGbGV4UHJvcGVydHlOYW1lKSxcblx0XHRiSXNYTUwgPSAhIW9Nb2RpZmllciAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChzRmxleFByb3BlcnR5TmFtZSA9PT0gRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FKSB7XG5cdFx0cmV0dXJuIF90ZW1wbGF0ZUVkaXRTdGF0ZShfZ2VuZXJhdGVJZFByZWZpeChzRmlsdGVyQmFySWQsIGAke3NJZFByZWZpeH1GaWx0ZXJGaWVsZGApLCBvTWV0YU1vZGVsLCBvTW9kaWZpZXIpO1xuXHR9IGVsc2UgaWYgKHNGbGV4UHJvcGVydHlOYW1lID09PSBTRUFSQ0hfUFJPUEVSVFlfTkFNRSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH0gZWxzZSBpZiAob1NlbGVjdGlvbkZpZWxkPy50ZW1wbGF0ZSkge1xuXHRcdHJldHVybiBPRGF0YUZpbHRlckJhckRlbGVnYXRlLl90ZW1wbGF0ZUN1c3RvbUZpbHRlcihcblx0XHRcdG9QYXJlbnRDb250cm9sIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wsXG5cdFx0XHRfZ2VuZXJhdGVJZFByZWZpeChzRmlsdGVyQmFySWQsIGAke3NJZFByZWZpeH1gKSxcblx0XHRcdG9TZWxlY3Rpb25GaWVsZCxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvTW9kaWZpZXIhXG5cdFx0KTtcblx0fVxuXG5cdGlmIChvU2VsZWN0aW9uRmllbGQ/LnR5cGUgPT09IFwiU2xvdFwiICYmIG9Nb2RpZmllcikge1xuXHRcdHJldHVybiBfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQob1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCwgb01vZGlmaWVyLCBzUHJvcGVydHlQYXRoKTtcblx0fVxuXG5cdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChzUHJvcGVydHlQYXRoKTtcblx0bGV0IHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nO1xuXHRsZXQgc1VzZVNlbWFudGljRGF0ZVJhbmdlO1xuXHRsZXQgb1NldHRpbmdzOiB7XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRjb250ZXh0UGF0aDogQ29udGV4dDtcblx0XHRcdHByb3BlcnR5OiBDb250ZXh0O1xuXHRcdH07XG5cdFx0bW9kZWxzOiB7XG5cdFx0XHRjb250ZXh0UGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRwcm9wZXJ0eT86IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0bWV0YVBhdGg/OiBPRGF0YU1ldGFNb2RlbDtcblx0XHR9O1xuXHRcdGlzWE1MOiBib29sZWFuO1xuXHR9O1xuXHRsZXQgc0JpbmRpbmdQYXRoO1xuXHRsZXQgb1BhcmFtZXRlcnM6IHtcblx0XHRtZXRhUGF0aDogc3RyaW5nO1xuXHRcdHNQcm9wZXJ0eU5hbWU6IHN0cmluZztcblx0XHRzQmluZGluZ1BhdGg6IHN0cmluZztcblx0XHRzVmFsdWVIZWxwVHlwZTogc3RyaW5nO1xuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdHNJZFByZWZpeDogc3RyaW5nO1xuXHRcdG9TZXR0aW5nczogdW5rbm93bjtcblx0XHRzVmhJZFByZWZpeDogc3RyaW5nO1xuXHRcdHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nO1xuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbjtcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdG9Db250cm9sOiBVSTVFbGVtZW50O1xuXHRcdHZpc3VhbEZpbHRlcj86IHVua25vd247XG5cdFx0dmlldz86IFZpZXc7XG5cdH07XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKG9TZWxlY3Rpb25GaWVsZD8uaXNQYXJhbWV0ZXIpIHtcblx0XHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb1NlbGVjdGlvbkZpZWxkLmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRyZXR1cm4gc0Fubm90YXRpb25QYXRoLnN1YnN0cmluZygwLCBzQW5ub3RhdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvUGFyZW50Q29udHJvbCwgXCJlbnRpdHlUeXBlXCIsIG9Nb2RpZmllcik7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoc1JldHJpZXZlZEVudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCA9IHNSZXRyaWV2ZWRFbnRpdHlUeXBlUGF0aCE7XG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvUGFyZW50Q29udHJvbCwgXCJ1c2VTZW1hbnRpY0RhdGVSYW5nZVwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHNSZXRyaWV2ZWRVc2VTZW1hbnRpY0RhdGVSYW5nZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRzVXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2U7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGggKyBzUHJvcGVydHlQYXRoKSE7XG5cdFx0XHRsZXQgc0luRmlsdGVyQmFySWQgPSBvTW9kaWZpZXIgPyBvTW9kaWZpZXIuZ2V0SWQob1BhcmVudENvbnRyb2wpIDogb1BhcmVudENvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlmIChzSW5GaWx0ZXJCYXJJZC5lbmRzV2l0aChcIi1jb250ZW50XCIpKSB7XG5cdFx0XHRcdC8vIC1jb250ZW50IGlzIG9ubHkgYWRkZWQgd2hlbiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBkaXJlY3RseSBpbiB0aGUgZmlsdGVyIGJhclxuXHRcdFx0XHRzSW5GaWx0ZXJCYXJJZCA9IHNJbkZpbHRlckJhcklkLnN1YnN0cmluZygwLCBzSW5GaWx0ZXJCYXJJZC5sYXN0SW5kZXhPZihcIi1jb250ZW50XCIpKTtcblx0XHRcdFx0Ly8gQnkgdXNpbmcgdGhlIGlkIG9mIHRoZSBwYXJlbnQgY29udHJvbCwgd2UgY2FuIGdldCB0aGUgY29ycmVjdCBpZFByZWZpeCBmb3IgdGhlIHZhbHVlIGhlbHBcblx0XHRcdH1cblx0XHRcdG9TZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVR5cGVQYXRoKSEsXG5cdFx0XHRcdFx0cHJvcGVydHk6IG9Qcm9wZXJ0eUNvbnRleHRcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0cHJvcGVydHk6IG9NZXRhTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0aXNYTUw6IGJJc1hNTFxuXHRcdFx0fTtcblx0XHRcdHNCaW5kaW5nUGF0aCA9IGAvJHtNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aClcblx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHQuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKVxuXHRcdFx0XHQuam9pbihcIi9cIil9YDtcblx0XHRcdG9QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRtZXRhUGF0aDogb1Byb3BlcnR5Q29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRcdHNQcm9wZXJ0eU5hbWU6IHNQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdHNCaW5kaW5nUGF0aDogc0JpbmRpbmdQYXRoLFxuXHRcdFx0XHRzVmFsdWVIZWxwVHlwZTogc0lkUHJlZml4ICsgVkFMVUVfSEVMUF9UWVBFLFxuXHRcdFx0XHRvQ29udHJvbDogb1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdG9NZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdG9Nb2RpZmllcjogb01vZGlmaWVyLFxuXHRcdFx0XHRzSWRQcmVmaXg6IF9nZW5lcmF0ZUlkUHJlZml4KHNJbkZpbHRlckJhcklkLCBgJHtzSWRQcmVmaXh9RmlsdGVyRmllbGRgLCBzTmF2aWdhdGlvblBhdGgpLFxuXHRcdFx0XHRzVmhJZFByZWZpeDogX2dlbmVyYXRlSWRQcmVmaXgoc0luRmlsdGVyQmFySWQsIHNJZFByZWZpeCArIFZBTFVFX0hFTFBfVFlQRSksXG5cdFx0XHRcdHNOYXZpZ2F0aW9uUHJlZml4OiBzTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogc1VzZVNlbWFudGljRGF0ZVJhbmdlIGFzIHVua25vd24gYXMgYm9vbGVhbixcblx0XHRcdFx0b1NldHRpbmdzOiBvU2VsZWN0aW9uRmllbGQ/LnNldHRpbmdzID8/IHt9LFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXI6IG9TZWxlY3Rpb25GaWVsZD8udmlzdWFsRmlsdGVyLFxuXHRcdFx0XHR2aWV3XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmRvZXNWYWx1ZUhlbHBFeGlzdChvUGFyYW1ldGVycyk7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoYlZhbHVlSGVscEV4aXN0czogYm9vbGVhbikge1xuXHRcdFx0aWYgKCFiVmFsdWVIZWxwRXhpc3RzKSB7XG5cdFx0XHRcdHJldHVybiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCkhLFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5wcm9wZXJ0eVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg6IG9NZXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwibG9jYWxJZFwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGxvY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHBhZ2VNb2RlbDtcblx0XHRcdGlmIChvUGFyYW1ldGVycy52aXN1YWxGaWx0ZXIpIHtcblx0XHRcdFx0Ly9OZWVkIHRvIHNldCB0aGUgY29udmVydGVyY29udGV4dCBhcyBwYWdlTW9kZWwgaW4gc2V0dGluZ3MgZm9yIEJ1aWxkaW5nQmxvY2sgMi4wXG5cdFx0XHRcdHBhZ2VNb2RlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1BhcmVudENvbnRyb2wpLmdldENvbnRyb2xsZXIoKS5fZ2V0UGFnZU1vZGVsKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gX3RlbXBsYXRlRmlsdGVyRmllbGQob1NldHRpbmdzLCBvUGFyYW1ldGVycywgbG9jYWxJZCwgcGFnZU1vZGVsKTtcblx0XHR9KTtcbn07XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQpOiBudWxsIHwgUHJvcGVydHlJbmZvW10gfCB1bmRlZmluZWQge1xuXHQvLyBwcm9wZXJ0aWVzIGFyZSBub3QgY2FjaGVkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdGlmIChvRmlsdGVyQmFyIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8UHJvcGVydHlJbmZvW10+KG9GaWx0ZXJCYXIsIEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSk7XG59XG5mdW5jdGlvbiBfc2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQsIGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiB2b2lkIHtcblx0Ly8gZG8gbm90IGNhY2hlIGR1cmluZyB0ZW1wbGF0aW5nLCBlbHNlIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgY2FjaGVkIHZpZXdcblx0aWYgKG9GaWx0ZXJCYXIgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybjtcblx0fVxuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvRmlsdGVyQmFyLCBGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVksIGFGZXRjaGVkUHJvcGVydGllcyBhcyB1bmtub3duIGFzIHN0cmluZyk7XG59XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2xcbik6IENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10ge1xuXHRsZXQgYUZldGNoZWRQcm9wZXJ0aWVzID0gX2dldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhcik7XG5cdGxldCBsb2NhbEdyb3VwTGFiZWw7XG5cblx0aWYgKCFhRmV0Y2hlZFByb3BlcnRpZXMpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBPRGF0YUZpbHRlckJhckRlbGVnYXRlLmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGgsIG9NZXRhTW9kZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvR3JvdXA6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRsb2NhbEdyb3VwTGFiZWwgPSBudWxsO1xuXHRcdFx0aWYgKG9Hcm91cC5ncm91cExhYmVsKSB7XG5cdFx0XHRcdGxvY2FsR3JvdXBMYWJlbCA9IGdldExvY2FsaXplZFRleHQob0dyb3VwLmdyb3VwTGFiZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0XHRvR3JvdXAuZ3JvdXBMYWJlbCA9IGxvY2FsR3JvdXBMYWJlbCA9PT0gbnVsbCA/IG9Hcm91cC5ncm91cExhYmVsIDogbG9jYWxHcm91cExhYmVsO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0X3NldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhciwgYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0fVxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IGF3YWl0IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhciBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sKTtcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEoZmlsdGVyQmFyLCBcImZlRmlsdGVySW5mb1wiLCBwcm9wZXJ0eUluZm9zKTtcblx0aWYgKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5mb3JtYXRQcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvcyBhcyBQcm9wZXJ0eUluZm9bXSkgYXMgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRmaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KGZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIpITtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKGZpbHRlckJhciBhcyBGaWx0ZXJCYXIpLnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdGlmICghbW9kZWwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShlbnRpdHlUeXBlUGF0aCwgbW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsIGZpbHRlckJhcik7XG5cdH0pO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IHR5cGVvZiBUeXBlTWFwIHtcblx0cmV0dXJuIFR5cGVNYXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyREEsTUFBTUEsc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FzRGpFO0VBQ0RILHNCQUFzQixDQUFDSSxVQUFVLEdBQUcsQ0FBQztFQUNyQyxNQUFNQyx3QkFBd0IsR0FBRyxZQUFZ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
|
|
718
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YUZpbHRlckJhckRlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FIiwiU0VBUkNIX1BST1BFUlRZX05BTUUiLCJWQUxVRV9IRUxQX1RZUEUiLCJGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkiLCJfdGVtcGxhdGVFZGl0U3RhdGUiLCJzSWRQcmVmaXgiLCJtZXRhTW9kZWwiLCJvTW9kaWZpZXIiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwidGhpcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwiRGVsZWdhdGVVdGlsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJ1bmRlZmluZWQiLCJmaW5hbGx5IiwiZGVzdHJveSIsIl90ZW1wbGF0ZUN1c3RvbUZpbHRlciIsIm9GaWx0ZXJCYXIiLCJvU2VsZWN0aW9uRmllbGRJbmZvIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRvY3VtZW50UmVmVGV4dCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwib0l0ZW1Nb2RlbCIsIlRlbXBsYXRlTW9kZWwiLCJjb250ZXh0UGF0aCIsIml0ZW0iLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9PcHRpb25zIiwiY29udHJvbGxlciIsInZpZXciLCJfZ2V0UHJvcGVydHlQYXRoIiwic0NvbmRpdGlvblBhdGgiLCJGaWx0ZXJVdGlscyIsImdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoIiwiX2ZpbmRTZWxlY3Rpb25GaWVsZCIsImFTZWxlY3Rpb25GaWVsZHMiLCJzRmxleE5hbWUiLCJmaW5kIiwib1NlbGVjdGlvbkZpZWxkIiwiY29uZGl0aW9uUGF0aCIsInJlcGxhY2VBbGwiLCJhdmFpbGFiaWxpdHkiLCJfZ2VuZXJhdGVJZFByZWZpeCIsInNGaWx0ZXJCYXJJZCIsInNDb250cm9sVHlwZSIsInNOYXZpZ2F0aW9uUHJlZml4IiwiZ2VuZXJhdGUiLCJfdGVtcGxhdGVWYWx1ZUhlbHAiLCJvU2V0dGluZ3MiLCJvUGFyYW1ldGVycyIsImlkUHJlZml4Iiwic1ZoSWRQcmVmaXgiLCJjb25kaXRpb25Nb2RlbCIsIm5hdmlnYXRpb25QcmVmaXgiLCJmaWx0ZXJGaWVsZFZhbHVlSGVscCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwibWV0YVBhdGgiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJlcXVlc3RHcm91cElkIiwianNvbk1vZGVsIiwibWVyZ2VPYmplY3RzIiwidGFyZ2V0UGF0aCIsIkZpZWxkSGVscGVyIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImlzWE1MIiwidmFsdWVIZWxwWE1MU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRWYWx1ZUhlbHBUZW1wbGF0ZSIsImdldE1vZGVsIiwidmFsdWVIZWxwWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRoZW4iLCJhVkhFbGVtZW50cyIsInNBZ2dyZWdhdGlvbk5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiZWx0IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJvQ29udHJvbCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ2YWx1ZUhlbHAiLCJfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQiLCJzUHJvcGVydHlQYXRoIiwiYURlcGVuZGVudHMiLCJnZXRBZ2dyZWdhdGlvbiIsImkiLCJsZW5ndGgiLCJvRmlsdGVyRmllbGQiLCJpc0EiLCJzRGF0YVByb3BlcnR5IiwiZ2V0UHJvcGVydHlLZXkiLCJzRmlsdGVyRmllbGRJZCIsImdldElkIiwiaW5kZXhPZiIsIl90ZW1wbGF0ZUZpbHRlckZpZWxkIiwic0luRmlsdGVyQmFySWQiLCJwYWdlTW9kZWwiLCJ2aElkUHJlZml4IiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5TmFtZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZWRpdE1vZGUiLCJsYWJlbCIsIm9WaXN1YWxGaWx0ZXIiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2FkZFByb3BlcnR5SW5mbyIsIm9QYXJlbnRDb250cm9sIiwibVByb3BlcnR5QmFnIiwic1Byb3BlcnR5SW5mb05hbWUiLCJzUHJvcGVydHlJbmZvS2V5IiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsInJlcGxhY2UiLCJtb2RpZmllciIsImRlbGVnYXRlIiwiZ2V0UHJvcGVydHkiLCJhUHJvcGVydHlJbmZvIiwiaGFzUHJvcGVydHlJbmZvIiwic29tZSIsInByb3AiLCJrZXkiLCJuYW1lIiwiZW50aXR5VHlwZVBhdGgiLCJwYXlsb2FkIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsImFwcENvbXBvbmVudCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsInByb3BlcnR5SW5mbyIsImJ1aWxkUHJvcGVyeUluZm8iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwiZXJyb3JNc2ciLCJ3YXJuaW5nIiwicHJvcGVydHlCYWciLCJwYXJlbnRDb250cm9sIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqIiwiSlNPTiIsInBhcnNlIiwicHVzaCIsInN0cmluZ2lmeSIsImN1c3RvbURhdGFOb2RlIiwicmV0cmlldmVDdXN0b21EYXRhTm9kZSIsInNldEF0dHJpYnV0ZSIsIl9wcm9wZXJ0eUluZm8iLCJmb3JtYXRQcm9wZXJ0eUluZm8iLCJzZXRQcm9wZXJ0eSIsImFkZEl0ZW0iLCJfYWRkUDEzbkl0ZW0iLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldHMiLCJfYWRkRmxleEl0ZW0iLCJyZW1vdmVJdGVtIiwib0ZpbHRlckZpZWxkUHJvcGVydHkiLCJkb1JlbW92ZUl0ZW0iLCJmaWx0ZXJGaWVsZFByb3BlcnR5IiwiZGF0YSIsImFkZENvbmRpdGlvbiIsInJlbW92ZUNvbmRpdGlvbiIsInByb3BlcnR5SW5mb0Zyb21DRCIsImNsZWFyRmlsdGVycyIsIm9GaWx0ZXJDb250cm9sIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwiU3RhdGVIZWxwZXIiLCJjbGVhckZpbHRlclZhbHVlcyIsImZldGNoTW9kZWwiLCJvTW9kZWwiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJvRW50aXR5VHlwZSIsImdldE9iamVjdCIsImluY2x1ZGVIaWRkZW4iLCJvQ29udmVydGVyQ29udGV4dCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsIm1GaWx0ZXJGaWVsZHMiLCJnZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMiLCJnZXRBcHBDb21wb25lbnQiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJvRmlsdGVyRmllbGRJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGVtcGxhdGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImdldENvbnZlcnRlZFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJzVGFyZ2V0UHJvcGVydHlQcmVmaXgiLCJDb21tb25IZWxwZXIiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInNlbGVjdGlvbkZpZWxkcyIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiX2lzRmlsdGVyQWRhcHRhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJhUGFyYW1ldGVyRmllbGRzIiwicHJvY2Vzc2VkRmllbGRzIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsInByb2Nlc3NlZEZpZWxkc0tleXMiLCJvUHJvcHMiLCJmaWx0ZXIiLCJvUHJvcCIsImluY2x1ZGVzIiwib0ZSIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsImlGaWx0ZXJGaWVsZEluZGV4Iiwib1NlbEZpZWxkIiwiZ3JvdXAiLCJncm91cExhYmVsIiwicGF0aCIsInRvb2x0aXAiLCJyZW1vdmVGcm9tQXBwU3RhdGUiLCJoYXNWYWx1ZUhlbHAiLCJvUHJvcGVydHkiLCJvUHJvcGVydHlDb250ZXh0IiwiYlJlbW92ZUZyb21BcHBTdGF0ZSIsIm9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uIiwib0ZpbHRlckRlZmF1bHRWYWx1ZSIsImdldE1vZGVsVHlwZSIsIiRUeXBlIiwiZGVmYXVsdEZpbHRlckNvbmRpdGlvbnMiLCJmaWVsZFBhdGgiLCJvcGVyYXRvciIsInZhbHVlcyIsImZpbHRlckV4cHJlc3Npb24iLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwidmlzaWJsZSIsInByb3BJbmZvIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJ0eXBlQ29uZmlnIiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsImdldExvY2FsaXplZFRleHQiLCJpc1BhcmFtZXRlciIsInNldEN1c3RvbURhdGEiLCJnZXRMaW5lSXRlbVF1YWxpZmllckZyb21UYWJsZSIsImFubm90YXRpb25QYXRocyIsImdldE1ldGFQYXRoIiwic3BsaXQiLCJWaXN1YWxpemF0aW9ucyIsInZpc3VhbGl6YXRpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJtZXRhUGF0aHMiLCJmaWx0ZXJGaWVsZEluZm8iLCJwcm9wZXJ0eUFubm90YXRpb25zIiwiaXNJbkZpbHRlckZhY2V0cyIsImlzU2VsZWN0aW9uRmllbGQiLCJfaXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyIsImZpbHRlckZhY2V0IiwiZmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJEYXRhIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJBZGFwdGF0aW9uSGlkZGVuIiwiZmlsdGVyRmllbGRLZXkiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic0ZsZXhQcm9wZXJ0eU5hbWUiLCJvQXBwQ29tcG9uZW50IiwiYklzWE1MIiwidHlwZSIsInNOYXZpZ2F0aW9uUGF0aCIsImdldE5hdmlnYXRpb25QYXRoIiwic1VzZVNlbWFudGljRGF0ZVJhbmdlIiwic0JpbmRpbmdQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzUmV0cmlldmVkRW50aXR5VHlwZVBhdGgiLCJzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJlbmRzV2l0aCIsInByb3BlcnR5IiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJqb2luIiwiZ2V0UGF0aCIsInNWYWx1ZUhlbHBUeXBlIiwiZG9lc1ZhbHVlSGVscEV4aXN0IiwiYlZhbHVlSGVscEV4aXN0cyIsImxvY2FsSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldENhY2hlZFByb3BlcnRpZXMiLCJ3aW5kb3ciLCJFbGVtZW50IiwiZ2V0Q3VzdG9tRGF0YSIsIl9zZXRDYWNoZWRQcm9wZXJ0aWVzIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwibG9jYWxHcm91cExhYmVsIiwib0dyb3VwIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJmZXRjaFByb3BlcnRpZXMiLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm9zIiwiZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzIiwiZ2V0VHlwZU1hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RmllbGRHcm91cFR5cGUsXG5cdEZpbHRlckZhY2V0cyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFNlbGVjdGlvbkZpZWxkc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciwgUHJlcHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0UHJvcGVydHlJbmZvIGFzIEZFUHJvcGVydHlJbmZvLFxuXHRGaWx0ZXJGaWVsZCxcblx0UHJvcGVydHlJbmZvRXh0ZXJuYWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMsIHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldE1vZGVsVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvUHJvcGVydHlJbmZvXCI7XG5pbXBvcnQgeyBnZXRWYWx1ZUhlbHBUZW1wbGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IFN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgTURDRmlsdGVyRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyRmllbGRcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuXG50eXBlIE1vZGlmaWVyRWxlbWVudCA9IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50IHwgRWxlbWVudFtdO1xudHlwZSBOdWxsYWJsZU1vZGlmaWVyRWxlbWVudCA9IHZvaWQgfCBNb2RpZmllckVsZW1lbnQgfCBudWxsO1xuY29uc3QgT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEZpbHRlckJhckRlbGVnYXRlKSBhcyB0eXBlb2YgRmlsdGVyQmFyRGVsZWdhdGUgJiB7XG5cdGFwaVZlcnNpb246IG51bWJlcjtcblx0X2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMoc2VsZWN0aW9uRmllbGRzOiBTZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBib29sZWFuO1xuXHRfZmluZFNlbGVjdGlvbkZpZWxkKGFTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNGbGV4TmFtZTogc3RyaW5nKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQ7XG5cdGNsZWFyRmlsdGVycyhvRmlsdGVyQ29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTx2b2lkPjtcblx0Z2V0VHlwZU1hcCgpOiB0eXBlb2YgVHlwZU1hcDtcblx0ZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wpOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+O1xuXHRmZXRjaFByb3BlcnRpZXMoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+O1xuXHRfaXNGaWx0ZXJBZGFwdGFibGUoXG5cdFx0ZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eSxcblx0XHRzZWxlY3Rpb25GaWVsZHM/OiBTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmFjZXRzPzogRmlsdGVyRmFjZXRzXG5cdCk6IGJvb2xlYW47XG5cdGZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGg6IHN0cmluZywgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCk6IFByb3BlcnR5SW5mb1tdO1xuXHRfdGVtcGxhdGVDdXN0b21GaWx0ZXIoXG5cdFx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdFx0b1NlbGVjdGlvbkZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyXG5cdCk6IFByb21pc2U8TW9kaWZpZXJFbGVtZW50Pjtcblx0X2FkZFAxM25JdGVtKHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsIG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0X2FkZEZsZXhJdGVtKFxuXHRcdHNGbGV4UHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCB1bmRlZmluZWQsXG5cdFx0b0FwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCxcblx0XHR2aWV3PzogVmlld1xuXHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0YWRkSXRlbShcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnPzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0YWRkQ29uZGl0aW9uKFxuXHRcdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cblx0KTogUHJvbWlzZTx2b2lkIHwgbnVsbD47XG5cdHJlbW92ZUl0ZW0oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRvRmlsdGVyRmllbGRQcm9wZXJ0eTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IG51bGw+O1xuXHRyZW1vdmVDb25kaXRpb24oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjtcblx0XHR9XG5cdCk6IFByb21pc2U8dm9pZCB8IG51bGw+O1xufTtcbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYXBpVmVyc2lvbiA9IDI7XG5jb25zdCBFRElUX1NUQVRFX1BST1BFUlRZX05BTUUgPSBcIiRlZGl0U3RhdGVcIixcblx0U0VBUkNIX1BST1BFUlRZX05BTUUgPSBcIiRzZWFyY2hcIixcblx0VkFMVUVfSEVMUF9UWVBFID0gXCJGaWx0ZXJGaWVsZFZhbHVlSGVscFwiLFxuXHRGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkgPSBcInNhcF9mZV9GaWx0ZXJCYXJEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIjtcblxuLy8gRm9yIG9uZSBzaW5nbGUgZW50cnkgaW4gVUkuU2VsZWN0aW9uRmllbGRzXG50eXBlIEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCA9IHtcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIF90ZW1wbGF0ZUVkaXRTdGF0ZShcblx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBzSWRQcmVmaXgsXG5cdFx0XHRpc0RyYWZ0Q29sbGFib3JhdGl2ZTogTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0Ly9cInRoaXMuaTE4blwiOiBSZXNvdXJjZU1vZGVsLmdldE1vZGVsKCksIFRPRE86IFRvIGJlIGNoZWNrZWQgd2h5IHRoaXMgaXMgbmVlZGVkLCBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGxcblx0XHRcdFx0dGhpczogb1RoaXNcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0XCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5EcmFmdEVkaXRTdGF0ZVwiLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHR1bmRlZmluZWQsXG5cdFx0b01vZGlmaWVyXG5cdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0b1RoaXMuZGVzdHJveSgpO1xuXHR9KTtcbn1cblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fdGVtcGxhdGVDdXN0b21GaWx0ZXIgPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRzSWRQcmVmaXg6IHN0cmluZyxcblx0b1NlbGVjdGlvbkZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8TW9kaWZpZXJFbGVtZW50PiB7XG5cdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0ZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIsIG9Nb2RpZmllcik7XG5cblx0aWYgKG9TZWxlY3Rpb25GaWVsZEluZm8uYW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIGlmIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb25fZXh0ZW5kZWQgPSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiAmIHsgRG9jdW1lbnRhdGlvblJlZj86IHN0cmluZyB9O1xuXHRcdGNvbnN0IGNvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob1NlbGVjdGlvbkZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRkYXRhTW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5Pihjb250ZXh0KSxcblx0XHRcdGRvY3VtZW50UmVmVGV4dCA9IChcblx0XHRcdFx0ZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zLkNvbW1vbiBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZFxuXHRcdFx0KT8uRG9jdW1lbnRhdGlvblJlZj8udG9TdHJpbmcoKTtcblx0XHRvU2VsZWN0aW9uRmllbGRJbmZvLmRvY3VtZW50UmVmVGV4dCA9IGRvY3VtZW50UmVmVGV4dDtcblx0fVxuXG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogc0lkUHJlZml4XG5cdFx0fSksXG5cdFx0b0l0ZW1Nb2RlbCA9IG5ldyBUZW1wbGF0ZU1vZGVsKG9TZWxlY3Rpb25GaWVsZEluZm8sIG9NZXRhTW9kZWwpLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGghKSxcblx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRpdGVtOiBvSXRlbU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdGl0ZW06IG9JdGVtTW9kZWxcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQmFyKSxcblx0XHRvQ29udHJvbGxlciA9IG9WaWV3ID8gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIDogdW5kZWZpbmVkLFxuXHRcdG9PcHRpb25zID0ge1xuXHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXIgPyBvQ29udHJvbGxlciA6IHVuZGVmaW5lZCxcblx0XHRcdHZpZXc6IG9WaWV3XG5cdFx0fTtcblxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXIuQ3VzdG9tRmlsdGVyXCIsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMsIG9Nb2RpZmllcikuZmluYWxseShcblx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdFx0XHRvSXRlbU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdCk7XG59O1xuZnVuY3Rpb24gX2dldFByb3BlcnR5UGF0aChzQ29uZGl0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIEZpbHRlclV0aWxzLmdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKHNDb25kaXRpb25QYXRoKTtcbn1cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2ZpbmRTZWxlY3Rpb25GaWVsZCA9IGZ1bmN0aW9uIChhU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzRmxleE5hbWU6IHN0cmluZyk6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGFTZWxlY3Rpb25GaWVsZHMuZmluZChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQob1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGggPT09IHNGbGV4TmFtZSB8fCBvU2VsZWN0aW9uRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlQWxsKC9cXCovZywgXCJcIikgPT09IHNGbGV4TmFtZSkgJiZcblx0XHRcdG9TZWxlY3Rpb25GaWVsZC5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCJcblx0XHQpO1xuXHR9KTtcbn07XG5mdW5jdGlvbiBfZ2VuZXJhdGVJZFByZWZpeChzRmlsdGVyQmFySWQ6IHN0cmluZywgc0NvbnRyb2xUeXBlOiBzdHJpbmcsIHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNOYXZpZ2F0aW9uUHJlZml4ID8gZ2VuZXJhdGUoW3NGaWx0ZXJCYXJJZCwgc0NvbnRyb2xUeXBlLCBzTmF2aWdhdGlvblByZWZpeF0pIDogZ2VuZXJhdGUoW3NGaWx0ZXJCYXJJZCwgc0NvbnRyb2xUeXBlXSk7XG59XG5hc3luYyBmdW5jdGlvbiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdG9TZXR0aW5nczoge1xuXHRcdGlzWE1MOiBib29sZWFuO1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdFx0XHRjb250ZXh0UGF0aDogQ29udGV4dDtcblx0XHR9O1xuXHRcdG1vZGVsczoge1xuXHRcdFx0bWV0YVBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0Y29udGV4dFBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdH07XG5cdH0sXG5cdG9QYXJhbWV0ZXJzOiB7XG5cdFx0c1ZoSWRQcmVmaXg6IHN0cmluZztcblx0XHRzTmF2aWdhdGlvblByZWZpeD86IHN0cmluZztcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW47XG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcjtcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudDtcblx0XHR2aWV3PzogVmlldztcblx0fVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG9UaGlzID0ge1xuXHRcdGlkUHJlZml4OiBvUGFyYW1ldGVycy5zVmhJZFByZWZpeCxcblx0XHRjb25kaXRpb25Nb2RlbDogXCIkZmlsdGVyc1wiLFxuXHRcdG5hdmlnYXRpb25QcmVmaXg6IG9QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4ID8gYC8ke29QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4fWAgOiBcIlwiLFxuXHRcdGZpbHRlckZpZWxkVmFsdWVIZWxwOiB0cnVlLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlOiBvUGFyYW1ldGVycy5iVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0bWV0YVBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGgsXG5cdFx0Y29udGV4dFBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGgsXG5cdFx0dXNlTXVsdGlWYWx1ZUZpZWxkOiBmYWxzZSxcblx0XHRyZXF1aXJlc1ZhbGlkYXRpb246IGZhbHNlLFxuXHRcdGNvbGxhYm9yYXRpb25FbmFibGVkOiBmYWxzZSxcblx0XHRyZXF1ZXN0R3JvdXBJZDogdW5kZWZpbmVkXG5cdH07XG5cdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwob1RoaXMpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBtZXJnZU9iamVjdHMoe30sIG9TZXR0aW5ncywge1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0dGhpczoganNvbk1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdH0sXG5cdFx0bW9kZWxzOiB7XG5cdFx0XHR0aGlzOiBvVGhpc1xuXHRcdH1cblx0fSkgYXMgUHJlcHJvY2Vzc29yU2V0dGluZ3M7XG5cdGNvbnN0IHRhcmdldFBhdGggPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGgpO1xuXG5cdGlmIChvU2V0dGluZ3MuaXNYTUwpIHtcblx0XHRsZXQgdmFsdWVIZWxwWE1MU3RyaW5nID0ganN4LnJlbmRlckFzWE1MPHN0cmluZyB8IHVuZGVmaW5lZD4oXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHRnZXRWYWx1ZUhlbHBUZW1wbGF0ZShvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLm1ldGFQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0UGF0aCksIG9UaGlzKSBhc1xuXHRcdFx0XHRcdHwgc3RyaW5nXG5cdFx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpO1xuXHRcdGlmICh2YWx1ZUhlbHBYTUxTdHJpbmcpIHtcblx0XHRcdGlmIChvU2V0dGluZ3MuaXNYTUwpIHtcblx0XHRcdFx0dmFsdWVIZWxwWE1MU3RyaW5nID0gYDxyb290PiR7dmFsdWVIZWxwWE1MU3RyaW5nfTwvcm9vdD5gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdmFsdWVIZWxwWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZUhlbHBYTUxTdHJpbmcsIFwidGV4dC94bWxcIik7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQodmFsdWVIZWxwWE1MLmZpcnN0RWxlbWVudENoaWxkLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIHtcblx0XHRcdFx0XHRpc1hNTDogb1NldHRpbmdzLmlzWE1MXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChhVkhFbGVtZW50czogTW9kaWZpZXJFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdFx0aWYgKGFWSEVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQWdncmVnYXRpb25OYW1lID0gXCJkZXBlbmRlbnRzXCI7XG5cdFx0XHRcdFx0XHQvL1NvbWUgZmlsdGVyIGZpZWxkcyBoYXZlIHRoZSBQZXJzaXN0ZW5jZVByb3ZpZGVyIGFnZ3JlZ2F0aW9uIGJlc2lkZXMgdGhlIEZWSCA6XG5cdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhVkhFbGVtZW50cykpIHtcblx0XHRcdFx0XHRcdFx0YVZIRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWx0OiBFbGVtZW50IHwgVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0LCAwKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0IGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGFWSEVsZW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMudmlldyBhcyB1bmtub3duIGFzIEVsZW1lbnRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIGFWSEVsZW1lbnRzIGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBEZWxlZ2F0ZVV0aWwuaXNWYWx1ZUhlbHBSZXF1aXJlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGpzb25Nb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCB2YWx1ZUhlbHAgPSBnZXRWYWx1ZUhlbHBUZW1wbGF0ZShvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLm1ldGFQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGFyZ2V0UGF0aCksIG9UaGlzKSBhc1xuXHRcdFx0fCBWYWx1ZUhlbHBcblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGlmICh2YWx1ZUhlbHApIHtcblx0XHRcdGNvbnN0IHNBZ2dyZWdhdGlvbk5hbWUgPSBcImRlcGVuZGVudHNcIjtcblx0XHRcdC8vU29tZSBmaWx0ZXIgZmllbGRzIGhhdmUgdGhlIFBlcnNpc3RlbmNlUHJvdmlkZXIgYWdncmVnYXRpb24gYmVzaWRlcyB0aGUgRlZIIDpcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlSGVscCkpIHtcblx0XHRcdFx0dmFsdWVIZWxwLmZvckVhY2goZnVuY3Rpb24gKGVsdDogRWxlbWVudCB8IFVJNUVsZW1lbnQpIHtcblx0XHRcdFx0XHRpZiAob1BhcmFtZXRlcnMub01vZGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1BhcmFtZXRlcnMub0NvbnRyb2wsIHNBZ2dyZWdhdGlvbk5hbWUsIGVsdCwgMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIGVsdCBhcyBVSTVFbGVtZW50LCAwLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAob1BhcmFtZXRlcnMub01vZGlmaWVyKSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgdmFsdWVIZWxwLCAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLmluc2VydEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUsIHZhbHVlSGVscCwgMCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuYXN5bmMgZnVuY3Rpb24gX2FkZFhNTEN1c3RvbUZpbHRlckZpZWxkKFxuXHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRzUHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8VUk1RWxlbWVudCB8IEVsZW1lbnQgfCB2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgYURlcGVuZGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUob01vZGlmaWVyLmdldEFnZ3JlZ2F0aW9uKG9GaWx0ZXJCYXIsIFwiZGVwZW5kZW50c1wiKSk7XG5cdFx0bGV0IGk7XG5cdFx0aWYgKGFEZXBlbmRlbnRzICYmIGFEZXBlbmRlbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPD0gYURlcGVuZGVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckZpZWxkID0gYURlcGVuZGVudHNbaV07XG5cdFx0XHRcdGlmIChvRmlsdGVyRmllbGQgJiYgKG9GaWx0ZXJGaWVsZCBhcyBVSTVFbGVtZW50KS5pc0E8TURDRmlsdGVyRmllbGQ+KFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSAob0ZpbHRlckZpZWxkIGFzIE1EQ0ZpbHRlckZpZWxkKS5nZXRQcm9wZXJ0eUtleSgpLFxuXHRcdFx0XHRcdFx0c0ZpbHRlckZpZWxkSWQgPSAob0ZpbHRlckZpZWxkIGFzIE1EQ0ZpbHRlckZpZWxkKS5nZXRJZCgpO1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlQYXRoID09PSBzRGF0YVByb3BlcnR5ICYmIHNGaWx0ZXJGaWVsZElkLmluZGV4T2YoXCJDdXN0b21GaWx0ZXJGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJGaWVsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkZpbHRlciBDYW5ub3QgYmUgYWRkZWRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3RlbXBsYXRlRmlsdGVyRmllbGQoXG5cdG9TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG9QYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c0luRmlsdGVyQmFySWQ/OiBzdHJpbmcsXG5cdHBhZ2VNb2RlbD86IEpTT05Nb2RlbFxuKTogUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudCB8IEVsZW1lbnRbXT4ge1xuXHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdGlkUHJlZml4OiBvUGFyYW1ldGVycy5zSWRQcmVmaXgsXG5cdFx0dmhJZFByZWZpeDogb1BhcmFtZXRlcnMuc1ZoSWRQcmVmaXgsXG5cdFx0cHJvcGVydHlQYXRoOiBvUGFyYW1ldGVycy5zUHJvcGVydHlOYW1lLFxuXHRcdG5hdmlnYXRpb25QcmVmaXg6IG9QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4ID8gYC8ke29QYXJhbWV0ZXJzLnNOYXZpZ2F0aW9uUHJlZml4fWAgOiBcIlwiLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlOiBvUGFyYW1ldGVycy5iVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0c2V0dGluZ3M6IG9QYXJhbWV0ZXJzLm9TZXR0aW5ncyxcblx0XHR2aXN1YWxGaWx0ZXI6IG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlcixcblx0XHRlZGl0TW9kZTogYHtpbnRlcm5hbD4vJHtzSW5GaWx0ZXJCYXJJZH0vZmlsdGVyRmllbGRzLyR7b1BhcmFtZXRlcnMuc1Byb3BlcnR5TmFtZX0vZWRpdE1vZGV9YCxcblx0XHRsYWJlbDogb1BhcmFtZXRlcnMubGFiZWxcblx0fSk7XG5cdHRyeSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYXJhbWV0ZXJzLm9NZXRhTW9kZWwgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgb1Zpc3VhbEZpbHRlciA9IG5ldyBUZW1wbGF0ZU1vZGVsKG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlciBhcyBvYmplY3QsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IG1lcmdlT2JqZWN0cyh7fSwgb1NldHRpbmdzLCB7XG5cdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXI6IG9WaXN1YWxGaWx0ZXIuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHR2aXN1YWxGaWx0ZXI6IG9WaXN1YWxGaWx0ZXIsXG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogcGFnZU1vZGVsXG5cdFx0XHR9XG5cdFx0fSkgYXMgUHJlcHJvY2Vzc29yU2V0dGluZ3M7XG5cblx0XHRyZXR1cm4gYXdhaXQgRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5maWx0ZXJGaWVsZC5GaWx0ZXJGaWVsZFRlbXBsYXRlXCIsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0aXNYTUw6ICEhb1NldHRpbmdzLmlzWE1MXG5cdFx0fSk7XG5cdH0gZmluYWxseSB7XG5cdFx0b1RoaXMuZGVzdHJveSgpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9hZGRQcm9wZXJ0eUluZm8oXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuXHR0cnkge1xuXHRcdC8vIGtleSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBuYW1lXG5cdFx0Y29uc3Qgc1Byb3BlcnR5SW5mb0tleSA9IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRzUHJvcGVydHlJbmZvTmFtZSA9IHNQcm9wZXJ0eUluZm9OYW1lLnJlcGxhY2UoXCIqXCIsIFwiXCIpO1xuXHRcdGlmIChtUHJvcGVydHlCYWcgJiYgIW1Qcm9wZXJ0eUJhZy5tb2RpZmllcikge1xuXHRcdFx0dGhyb3cgXCJGaWx0ZXJCYXIgRGVsZWdhdGUgbWV0aG9kIGNhbGxlZCB3aXRob3V0IG1vZGlmaWVyLlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRlbGVnYXRlID0gYXdhaXQgbVByb3BlcnR5QmFnLm1vZGlmaWVyLmdldFByb3BlcnR5PEZpbHRlckJhckRlbGVnYXRlPihvUGFyZW50Q29udHJvbCwgXCJkZWxlZ2F0ZVwiKTtcblx0XHRjb25zdCBhUHJvcGVydHlJbmZvID0gYXdhaXQgbVByb3BlcnR5QmFnLm1vZGlmaWVyLmdldFByb3BlcnR5PEZFUHJvcGVydHlJbmZvW10+KG9QYXJlbnRDb250cm9sLCBcInByb3BlcnR5SW5mb1wiKTtcblx0XHQvL1dlIGRvIG5vdCBnZXQgcHJvcGVydHlJbmZvIGluIGNhc2Ugb2YgdGFibGUgZmlsdGVyc1xuXHRcdGlmIChhUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRjb25zdCBoYXNQcm9wZXJ0eUluZm8gPSBhUHJvcGVydHlJbmZvLnNvbWUoZnVuY3Rpb24gKHByb3A6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdHJldHVybiBwcm9wLmtleSA9PT0gc1Byb3BlcnR5SW5mb0tleSB8fCBwcm9wLm5hbWUgPT09IHNQcm9wZXJ0eUluZm9LZXk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaGFzUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gZGVsZWdhdGUucGF5bG9hZC5lbnRpdHlUeXBlUGF0aDtcblx0XHRcdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IEZpbHRlclV0aWxzLmNyZWF0ZUNvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IEZpbHRlclV0aWxzLmdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eUluZm9OYW1lLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gRmlsdGVyVXRpbHMuYnVpbGRQcm9wZXJ5SW5mbyhmaWx0ZXJGaWVsZCEsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRhd2FpdCBfdXBkYXRlUHJvcGVydHlJbmZvKFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvW10sXG5cdFx0XHRcdFx0bVByb3BlcnR5QmFnLFxuXHRcdFx0XHRcdHByb3BlcnR5SW5mbyBhcyB1bmtub3duIGFzIFByb3BlcnR5SW5mbyxcblx0XHRcdFx0XHRvUGFyZW50Q29udHJvbFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3JNc2cpIHtcblx0XHRMb2cud2FybmluZyhgJHtvUGFyZW50Q29udHJvbC5nZXRJZCgpfSA6ICR7ZXJyb3JNc2d9YCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3VwZGF0ZVByb3BlcnR5SW5mbyhcblx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm9bXSxcblx0cHJvcGVydHlCYWc6IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0sXG5cdGZpbHRlckZpZWxkOiBQcm9wZXJ0eUluZm8sXG5cdHBhcmVudENvbnRyb2w6IEZpbHRlckJhclxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGxldCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KFxuXHRcdHBhcmVudENvbnRyb2wsXG5cdFx0XCJmZUZpbHRlckluZm9cIixcblx0XHRwcm9wZXJ0eUJhZy5tb2RpZmllclxuXHQpO1xuXHRpZiAocHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyICYmIHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqID0gSlNPTi5wYXJzZShwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIpIGFzIFByb3BlcnR5SW5mb1tdO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iai5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmopO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdFx0Y29uc3QgY3VzdG9tRGF0YU5vZGUgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwucmV0cmlldmVDdXN0b21EYXRhTm9kZShwYXJlbnRDb250cm9sLCBcImZlRmlsdGVySW5mb1wiLCBwcm9wZXJ0eUJhZy5tb2RpZmllcik7XG5cdFx0Y3VzdG9tRGF0YU5vZGVbMF0uc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyKTtcblx0XHRwcm9wZXJ0eUJhZy5tb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihwYXJlbnRDb250cm9sLCBcImN1c3RvbURhdGFcIiwgY3VzdG9tRGF0YU5vZGVbMF0sIDApO1xuXHR9XG5cblx0Ly8gQ3VzdG9tIGRhdGEgaXMgc2V0IHRvIHRoZSBwYXJlbnQgY29udHJvbCB0byBzdG9yZSB0aGUgcHJvcGVydHlJbmZvXG5cdHByb3BlcnR5SW5mby5wdXNoKGZpbHRlckZpZWxkKTtcblx0Ly9yZW1vdmUgdW53YW50ZWQgcHJvcGVydHkgZnJvbSB0aGUgcHJvcGVydHlJbmZvXG5cdGNvbnN0IF9wcm9wZXJ0eUluZm8gPSBGaWx0ZXJVdGlscy5mb3JtYXRQcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvIGFzIEZFUHJvcGVydHlJbmZvW10pO1xuXHQvL1VwZGF0ZSB0aGUgcHJvcGVydHlJbmZvIGluIHRoZSBwYXJlbnQgY29udHJvbFxuXHRwcm9wZXJ0eUJhZy5tb2RpZmllci5zZXRQcm9wZXJ0eShwYXJlbnRDb250cm9sLCBcInByb3BlcnR5SW5mb1wiLCBfcHJvcGVydHlJbmZvKTtcbn1cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSBtb2RlIC8gaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyBvZiB0aGUgZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSB0byB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIGlzIGFkZGVkXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgYWRkZWQgYXMgdGhlIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiB0aGUgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIGZpbHRlciBmaWVsZCBkZWZpbml0aW9uIGlzIHJldHVybmVkXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYWRkSXRlbSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnPzogeyB2aWV3OiBWaWV3OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuKTogUHJvbWlzZTxOdWxsYWJsZU1vZGlmaWVyRWxlbWVudD4ge1xuXHRpZiAoIW1Qcm9wZXJ0eUJhZykge1xuXHRcdC8vIEludm9rZWQgZHVyaW5nIHJ1bnRpbWUuXG5cdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZFAxM25JdGVtKHNQcm9wZXJ0eUluZm9OYW1lLCBvUGFyZW50Q29udHJvbCk7XG5cdH1cblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGlmICghb01ldGFNb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgaXNYTUwgPSBtb2RpZmllciAmJiBtb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIjtcblx0aWYgKGlzWE1MKSB7XG5cdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdH1cblx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtKFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lLFxuXHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdG9NZXRhTW9kZWwsXG5cdFx0bW9kaWZpZXIsXG5cdFx0bVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCxcblx0XHRtUHJvcGVydHlCYWcudmlld1xuXHQpO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIGZpbHRlciBmaWVsZCBpbiBzdGFuZGFsb25lIC8gcGVyc29uYWxpemF0aW9uIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgaW5zdGFuY2UgZnJvbSB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIGlzIHJlbW92ZWRcbiAqIEBwYXJhbSBvRmlsdGVyRmllbGRQcm9wZXJ0eSBPYmplY3Qgb2YgdGhlIGZpbHRlciBmaWVsZCBwcm9wZXJ0eSBiZWluZyByZW1vdmVkIGFzIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUucmVtb3ZlSXRlbSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0b0ZpbHRlckZpZWxkUHJvcGVydHk6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cbik6IFByb21pc2U8Ym9vbGVhbiB8IG51bGw+IHtcblx0bGV0IGRvUmVtb3ZlSXRlbSA9IHRydWU7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBmaWx0ZXJGaWVsZFByb3BlcnR5ID0gYXdhaXQgbVByb3BlcnR5QmFnLm1vZGlmaWVyLmdldFByb3BlcnR5KG9GaWx0ZXJGaWVsZFByb3BlcnR5LCBcInByb3BlcnR5S2V5XCIpO1xuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgZmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuXHR9XG5cdGlmIChcblx0XHR0eXBlb2Ygb0ZpbHRlckZpZWxkUHJvcGVydHkgIT09IFwic3RyaW5nXCIgJiZcblx0XHQob0ZpbHRlckZpZWxkUHJvcGVydHkgYXMgVUk1RWxlbWVudCkuaXNBICYmXG5cdFx0KG9GaWx0ZXJGaWVsZFByb3BlcnR5IGFzIFVJNUVsZW1lbnQpLmlzQShcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIilcblx0KSB7XG5cdFx0aWYgKChvRmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBVSTVFbGVtZW50KS5kYXRhKFwiaXNTbG90XCIpID09PSBcInRydWVcIiAmJiBtUHJvcGVydHlCYWcpIHtcblx0XHRcdC8vIEluc2VydGluZyBpbnRvIHRoZSBtb2RpZmllciBjcmVhdGVzIGEgY2hhbmdlIGZyb20gZmxleCBhbHNvIGZpbHRlciBpcyBiZWVuIHJlbW92ZWQgaGVuY2UgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBmYWxzZVxuXHRcdFx0bW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1BhcmVudENvbnRyb2wsIFwiZGVwZW5kZW50c1wiLCBvRmlsdGVyRmllbGRQcm9wZXJ0eSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGZpbHRlciBmaWVsZCBjb25kaXRpb24gaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmFkZENvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG4pOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRhd2FpdCBfYWRkUHJvcGVydHlJbmZvKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcsIG9NZXRhTW9kZWwsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgZmlsdGVyIGZpZWxkIGluIHN0YW5kYWxvbmUgLyBwZXJzb25hbGl6YXRpb24gZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgcmVtb3ZlZFxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQgYXMgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIEZsZXggQVBJXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgZnJvbSBGbGV4IEFQSVxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHByb21pc2VcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5yZW1vdmVDb25kaXRpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG1Qcm9wZXJ0eUJhZzoge1xuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHR9XG4pOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gcm9tQ0QgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KFxuXHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcInNhcF9mZV9GaWx0ZXJCYXJEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIixcblx0XHRcdG1vZGlmaWVyXG5cdFx0KTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb0Zyb21DRCkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuLyoqXG4gKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb0ZpbHRlckNvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIEZpbHRlckJhciBjb250cm9sXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmNsZWFyRmlsdGVycyA9IGFzeW5jIGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGZpbHRlckJhckFQSSA9IG9GaWx0ZXJDb250cm9sLmdldFBhcmVudCgpO1xuXHRyZXR1cm4gU3RhdGVIZWxwZXIuY2xlYXJGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyQVBJIGFzIE1hY3JvQVBJKTtcbn07XG4vKipcbiAqIENyZWF0ZXMgdGhlIGZpbHRlciBmaWVsZCBpbiB0aGUgdGFibGUgYWRhcHRhdGlvbiBvZiB0aGUgRmlsdGVyQmFyLlxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSBmb3Igd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBuZWVkcyB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIGZpbHRlciBmaWVsZCBkZWZpbml0aW9uIGlzIHJldHVybmVkXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZFAxM25JdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvUGFyZW50Q29udHJvbClcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAob01vZGVsOiBNb2RlbCkge1xuXHRcdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtKFxuXHRcdFx0XHRzUHJvcGVydHlJbmZvTmFtZSxcblx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIk1vZGVsIGNvdWxkIG5vdCBiZSByZXNvbHZlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pO1xufTtcbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5ID0gZnVuY3Rpb24gKFxuXHRzRW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbFxuKTogUHJvcGVydHlJbmZvW10ge1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IGluY2x1ZGVIaWRkZW4gPSBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLnZhbHVlaGVscC5GaWx0ZXJCYXJcIikgPyB0cnVlIDogdW5kZWZpbmVkO1xuXHRpZiAoIW9GaWx0ZXJDb250cm9sIHx8ICFvRW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRjb25zdCBvQ29udmVydGVyQ29udGV4dCA9IEZpbHRlclV0aWxzLmNyZWF0ZUNvbnZlcnRlckNvbnRleHQob0ZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzRW50aXR5VHlwZVBhdGgpO1xuXG5cdGNvbnN0IG1GaWx0ZXJGaWVsZHMgPSBGaWx0ZXJVdGlscy5nZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMoXG5cdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0b01ldGFNb2RlbCxcblx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob0ZpbHRlckNvbnRyb2wpXG5cdCk7XG5cdGxldCBhRmV0Y2hlZFByb3BlcnRpZXM6IEZFUHJvcGVydHlJbmZvW10gPSBbXTtcblx0bUZpbHRlckZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGg7XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aCAmJiAhb0ZpbHRlckZpZWxkSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvQ29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLnJlc29sdmVQYXRoPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLnRhcmdldDtcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVByZWZpeCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTWV0YU1vZGVsLCBzQW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gc0Fubm90YXRpb25QYXRoLnJlcGxhY2UoYCR7c1RhcmdldFByb3BlcnR5UHJlZml4fS9gLCBcIlwiKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBvQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzO1xuXHRcdFx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0XHRcdGlmIChcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0T0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJBZGFwdGFibGUob0ZpbHRlckZpZWxkSW5mbywgb1Byb3BlcnR5QW5ub3RhdGlvbnMsIHNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmFjZXRzKSAmJlxuXHRcdFx0XHRpc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzVGFyZ2V0UHJvcGVydHlQcmVmaXgsIF9nZXRQcm9wZXJ0eVBhdGgoc1Byb3BlcnR5KSwgdHJ1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvRmlsdGVyRmllbGRJbmZvIGFzIFByb3BlcnR5SW5mbyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vQ3VzdG9tIEZpbHRlcnNcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9GaWx0ZXJGaWVsZEluZm8gYXMgUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFQYXJhbWV0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHByb2Nlc3NlZEZpZWxkcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoYUZldGNoZWRQcm9wZXJ0aWVzIGFzIEZpbHRlckZpZWxkW10sIG9Db252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgcHJvY2Vzc2VkRmllbGRzS2V5czogc3RyaW5nW10gPSBbXTtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wczogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRpZiAob1Byb3BzLmtleSkge1xuXHRcdFx0cHJvY2Vzc2VkRmllbGRzS2V5cy5wdXNoKG9Qcm9wcy5rZXkpO1xuXHRcdH1cblx0fSk7XG5cblx0YUZldGNoZWRQcm9wZXJ0aWVzID0gYUZldGNoZWRQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAob1Byb3A6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0cmV0dXJuIHByb2Nlc3NlZEZpZWxkc0tleXMuaW5jbHVkZXMob1Byb3Aua2V5ISk7XG5cdH0pO1xuXG5cdGNvbnN0IG9GUiA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb01ldGFNb2RlbCksXG5cdFx0bUFsbG93ZWRFeHByZXNzaW9ucyA9IG9GUi5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG5cdC8vT2JqZWN0LmtleXMocHJvY2Vzc2VkRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzRmlsdGVyRmllbGRLZXk6IHN0cmluZykge1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3AsIGlGaWx0ZXJGaWVsZEluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBvU2VsRmllbGQgPSBhRmV0Y2hlZFByb3BlcnRpZXNbaUZpbHRlckZpZWxkSW5kZXhdO1xuXHRcdGlmICghb1NlbEZpZWxkIHx8ICFvU2VsRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gX2dldFByb3BlcnR5UGF0aChvU2VsRmllbGQuY29uZGl0aW9uUGF0aCk7XG5cdFx0Ly9mZXRjaEJhc2ljXG5cdFx0b1Byb3AgPSBPYmplY3QuYXNzaWduKG9Qcm9wLCB7XG5cdFx0XHRncm91cDogb1NlbEZpZWxkLmdyb3VwLFxuXHRcdFx0Z3JvdXBMYWJlbDogb1NlbEZpZWxkLmdyb3VwTGFiZWwsXG5cdFx0XHRwYXRoOiBvU2VsRmllbGQuY29uZGl0aW9uUGF0aCxcblx0XHRcdHRvb2x0aXA6IG51bGwsXG5cdFx0XHRyZW1vdmVGcm9tQXBwU3RhdGU6IGZhbHNlLFxuXHRcdFx0aGFzVmFsdWVIZWxwOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0Ly9mZXRjaFByb3BJbmZvXG5cdFx0aWYgKG9TZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb1NlbEZpZWxkLmFubm90YXRpb25QYXRoO1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Fubm90YXRpb25QYXRoKSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQW5ub3RhdGlvblBhdGh9QGApLFxuXHRcdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQW5ub3RhdGlvblBhdGgpO1xuXG5cdFx0XHRjb25zdCBiUmVtb3ZlRnJvbUFwcFN0YXRlID1cblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gfHxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXTtcblxuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UHJlZml4ID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9NZXRhTW9kZWwsIG9TZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBzQW5ub3RhdGlvblBhdGgucmVwbGFjZShgJHtzVGFyZ2V0UHJvcGVydHlQcmVmaXh9L2AsIFwiXCIpO1xuXHRcdFx0bGV0IG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uO1xuXHRcdFx0bGV0IG9GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRpZiAob1Byb3BlcnR5Q29udGV4dCAmJiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzVGFyZ2V0UHJvcGVydHlQcmVmaXgsIF9nZXRQcm9wZXJ0eVBhdGgoc1Byb3BlcnR5KSwgdHJ1ZSkpIHtcblx0XHRcdFx0b0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlXCJdO1xuXHRcdFx0XHRpZiAob0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb24pIHtcblx0XHRcdFx0XHRvRmlsdGVyRGVmYXVsdFZhbHVlID0gb0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb25bYCQke2dldE1vZGVsVHlwZShvUHJvcGVydHkuJFR5cGUpfWBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b1Byb3AgPSBPYmplY3QuYXNzaWduKG9Qcm9wLCB7XG5cdFx0XHRcdFx0dG9vbHRpcDogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlF1aWNrSW5mb1wiXSB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cmVtb3ZlRnJvbUFwcFN0YXRlOiBiUmVtb3ZlRnJvbUFwcFN0YXRlLFxuXHRcdFx0XHRcdGhhc1ZhbHVlSGVscDogaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogb1Byb3BlcnR5Q29udGV4dCB9KSxcblx0XHRcdFx0XHRkZWZhdWx0RmlsdGVyQ29uZGl0aW9uczogb0ZpbHRlckRlZmF1bHRWYWx1ZVxuXHRcdFx0XHRcdFx0PyBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRQYXRoOiBvU2VsRmllbGQuY29uZGl0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZXM6IFtvRmlsdGVyRGVmYXVsdFZhbHVlXVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCAgXVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9iYXNlXG5cblx0XHRpZiAob1Byb3ApIHtcblx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eVBhdGhdICYmIG1BbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5UGF0aF0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvUHJvcC5maWx0ZXJFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihtQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eVBhdGhdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Qcm9wLmZpbHRlckV4cHJlc3Npb24gPSBcImF1dG9cIjtcblx0XHRcdH1cblxuXHRcdFx0b1Byb3AgPSBPYmplY3QuYXNzaWduKG9Qcm9wLCB7XG5cdFx0XHRcdHZpc2libGU6IG9TZWxGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRwcm9jZXNzZWRGaWVsZHNbaUZpbHRlckZpZWxkSW5kZXhdID0gb1Byb3A7XG5cdH0pO1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcEluZm86IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0Ly8ga2V5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIG5hbWVcblx0XHRwcm9wSW5mby5rZXkgPSBwcm9wSW5mby5uYW1lO1xuXHRcdGlmIChwcm9wSW5mby5wYXRoID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0cHJvcEluZm8ubGFiZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9GaWx0ZXJDb250cm9sKS5nZXRUZXh0KFwiRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpO1xuXHRcdH1cblx0XHRwcm9wSW5mby50eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKHByb3BJbmZvLmRhdGFUeXBlLCBwcm9wSW5mby5mb3JtYXRPcHRpb25zLCBwcm9wSW5mby5jb25zdHJhaW50cyk7XG5cdFx0cHJvcEluZm8ubGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KHByb3BJbmZvLmxhYmVsISwgb0ZpbHRlckNvbnRyb2wpIHx8IFwiXCI7XG5cdFx0aWYgKHByb3BJbmZvLmlzUGFyYW1ldGVyKSB7XG5cdFx0XHRhUGFyYW1ldGVyRmllbGRzLnB1c2gocHJvcEluZm8ubmFtZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzZWRGaWVsZHM7XG5cdERlbGVnYXRlVXRpbC5zZXRDdXN0b21EYXRhKG9GaWx0ZXJDb250cm9sLCBcInBhcmFtZXRlcnNcIiwgYVBhcmFtZXRlckZpZWxkcyBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcyBhcyBQcm9wZXJ0eUluZm9bXTtcbn07XG5cbmZ1bmN0aW9uIGdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChvQ29udHJvbC5pc0E8RW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+PihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aHMgPSBvQ29udHJvbC5nZXRNZXRhUGF0aCgpLnNwbGl0KFwiI1wiKVswXS5zcGxpdChcIi9cIik7XG5cdFx0c3dpdGNoIChhbm5vdGF0aW9uUGF0aHNbYW5ub3RhdGlvblBhdGhzLmxlbmd0aCAtIDFdKSB7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdFx0LmdldE9iamVjdChvQ29udHJvbC5nZXRNZXRhUGF0aCgpKVxuXHRcdFx0XHRcdC5WaXN1YWxpemF0aW9ucz8uZmluZCgodmlzdWFsaXphdGlvbjogeyAkQW5ub3RhdGlvblBhdGg6IHN0cmluZyB9KSA9PlxuXHRcdFx0XHRcdFx0dmlzdWFsaXphdGlvbi4kQW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWApXG5cdFx0XHRcdFx0KS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gOlxuXHRcdFx0XHRjb25zdCBtZXRhUGF0aHMgPSBvQ29udHJvbC5nZXRNZXRhUGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0cmV0dXJuIG1ldGFQYXRoc1ttZXRhUGF0aHMubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2lzRmlsdGVyQWRhcHRhYmxlID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eSxcblx0c2VsZWN0aW9uRmllbGRzPzogU2VsZWN0aW9uRmllbGRzLFxuXHRmaWx0ZXJGYWNldHM/OiBGaWx0ZXJGYWNldHNcbik6IGJvb2xlYW4ge1xuXHRsZXQgaXNJbkZpbHRlckZhY2V0czogYm9vbGVhbjtcblx0Y29uc3QgaXNTZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkcyA/IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMoc2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGaWVsZEluZm8pIDogZmFsc2U7XG5cdGlmIChmaWx0ZXJGYWNldHMpIHtcblx0XHRpc0luRmlsdGVyRmFjZXRzID0gZmlsdGVyRmFjZXRzLnNvbWUoZnVuY3Rpb24gKGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cCA9IGZpbHRlckZhY2V0LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwPy5EYXRhLnNvbWUoZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHQvLyB3ZSBleHBlY3QgZGF0YUZpZWxkIHRvIGJlIERhdGFGaWVsZFR5cGVzIChoYXZpbmcgYSBWYWx1ZSkgaW5zaWRlIEZpZWxkR3JvdXBzIGluc2lkZSBGaWx0ZXJGYWNldHNcblx0XHRcdFx0aWYgKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGggPT09IGZpbHRlckZpZWxkSW5mby5rZXkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBkYXRhRmllbGQgdHlwZXMgaGF2aW5nIG5vIFZhbHVlIChEYXRhRmllbGRGb3JBbm5vdGF0aW9uVHlwZXMsIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpLCB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZWNrLCBidXQgdGhpcyBzaG91bGQgbm90IG9jY3VyIGFueXdheVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRpc0luRmlsdGVyRmFjZXRzID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGlzU2VsZWN0aW9uRmllbGQgfHwgaXNJbkZpbHRlckZhY2V0cyB8fCAhcHJvcGVydHlBbm5vdGF0aW9ucy5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW47XG59O1xuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckluU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkczogU2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpbHRlckZpZWxkS2V5ID0gZmlsdGVyRmllbGRJbmZvLmtleT8uaW5kZXhPZihcIjo6XCIpID4gMCA/IGZpbHRlckZpZWxkSW5mby5rZXk/LnJlcGxhY2UoXCI6OlwiLCBcIi9cIikgOiBmaWx0ZXJGaWVsZEluZm8ua2V5O1xuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzLnNvbWUoZnVuY3Rpb24gKHNlbGVjdGlvbkZpZWxkOiBBbm5vdGF0aW9uU2VsZWN0aW9uRmllbGQpIHtcblx0XHRpZiAoc2VsZWN0aW9uRmllbGQudmFsdWUgPT09IGZpbHRlckZpZWxkS2V5KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRzRmxleFByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgdW5kZWZpbmVkLFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQsXG5cdHZpZXc/OiBWaWV3IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdGNvbnN0IHNGaWx0ZXJCYXJJZCA9IG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvUGFyZW50Q29udHJvbCkgOiBvUGFyZW50Q29udHJvbC5nZXRJZCgpLFxuXHRcdHNJZFByZWZpeCA9IG9Nb2RpZmllciA/IFwiXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRhU2VsZWN0aW9uRmllbGRzID0gRmlsdGVyVXRpbHMuZ2V0Q29udmVydGVkRmlsdGVyRmllbGRzKFxuXHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0b01vZGlmaWVyLFxuXHRcdFx0b01vZGlmaWVyID8gdW5kZWZpbmVkIDogZ2V0TGluZUl0ZW1RdWFsaWZpZXJGcm9tVGFibGUob1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCkhLCBvTWV0YU1vZGVsKVxuXHRcdCksXG5cdFx0b1NlbGVjdGlvbkZpZWxkID0gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fZmluZFNlbGVjdGlvbkZpZWxkKGFTZWxlY3Rpb25GaWVsZHMsIHNGbGV4UHJvcGVydHlOYW1lKSxcblx0XHRzUHJvcGVydHlQYXRoID0gX2dldFByb3BlcnR5UGF0aChzRmxleFByb3BlcnR5TmFtZSksXG5cdFx0YklzWE1MID0gISFvTW9kaWZpZXIgJiYgb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoc0ZsZXhQcm9wZXJ0eU5hbWUgPT09IEVESVRfU1RBVEVfUFJPUEVSVFlfTkFNRSkge1xuXHRcdHJldHVybiBfdGVtcGxhdGVFZGl0U3RhdGUoX2dlbmVyYXRlSWRQcmVmaXgoc0ZpbHRlckJhcklkLCBgJHtzSWRQcmVmaXh9RmlsdGVyRmllbGRgKSwgb01ldGFNb2RlbCwgb01vZGlmaWVyKTtcblx0fSBlbHNlIGlmIChzRmxleFByb3BlcnR5TmFtZSA9PT0gU0VBUkNIX1BST1BFUlRZX05BTUUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9IGVsc2UgaWYgKG9TZWxlY3Rpb25GaWVsZD8udGVtcGxhdGUpIHtcblx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fdGVtcGxhdGVDdXN0b21GaWx0ZXIoXG5cdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0X2dlbmVyYXRlSWRQcmVmaXgoc0ZpbHRlckJhcklkLCBgJHtzSWRQcmVmaXh9YCksXG5cdFx0XHRvU2VsZWN0aW9uRmllbGQsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b01vZGlmaWVyIVxuXHRcdCk7XG5cdH1cblxuXHRpZiAob1NlbGVjdGlvbkZpZWxkPy50eXBlID09PSBcIlNsb3RcIiAmJiBvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gX2FkZFhNTEN1c3RvbUZpbHRlckZpZWxkKG9QYXJlbnRDb250cm9sIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wsIG9Nb2RpZmllciwgc1Byb3BlcnR5UGF0aCk7XG5cdH1cblxuXHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdGxldCBzRW50aXR5VHlwZVBhdGg6IHN0cmluZztcblx0bGV0IHNVc2VTZW1hbnRpY0RhdGVSYW5nZTtcblx0bGV0IG9TZXR0aW5nczoge1xuXHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0Y29udGV4dFBhdGg6IENvbnRleHQ7XG5cdFx0XHRwcm9wZXJ0eTogQ29udGV4dDtcblx0XHR9O1xuXHRcdG1vZGVsczoge1xuXHRcdFx0Y29udGV4dFBhdGg6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0cHJvcGVydHk/OiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdG1ldGFQYXRoPzogT0RhdGFNZXRhTW9kZWw7XG5cdFx0fTtcblx0XHRpc1hNTDogYm9vbGVhbjtcblx0fTtcblx0bGV0IHNCaW5kaW5nUGF0aDtcblx0bGV0IG9QYXJhbWV0ZXJzOiB7XG5cdFx0bWV0YVBhdGg6IHN0cmluZztcblx0XHRzUHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0c0JpbmRpbmdQYXRoOiBzdHJpbmc7XG5cdFx0c1ZhbHVlSGVscFR5cGU6IHN0cmluZztcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRzSWRQcmVmaXg6IHN0cmluZztcblx0XHRvU2V0dGluZ3M6IHVua25vd247XG5cdFx0c1ZoSWRQcmVmaXg6IHN0cmluZztcblx0XHRzTmF2aWdhdGlvblByZWZpeD86IHN0cmluZztcblx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IGJvb2xlYW47XG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcjtcblx0XHRvQ29udHJvbDogVUk1RWxlbWVudDtcblx0XHR2aXN1YWxGaWx0ZXI/OiB1bmtub3duO1xuXHRcdHZpZXc/OiBWaWV3O1xuXHRcdGxhYmVsPzogc3RyaW5nO1xuXHR9O1xuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChvU2VsZWN0aW9uRmllbGQ/LmlzUGFyYW1ldGVyKSB7XG5cdFx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9TZWxlY3Rpb25GaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aC5zdWJzdHJpbmcoMCwgc0Fubm90YXRpb25QYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwiZW50aXR5VHlwZVwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHNSZXRyaWV2ZWRFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRzRW50aXR5VHlwZVBhdGggPSBzUmV0cmlldmVkRW50aXR5VHlwZVBhdGghO1xuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwidXNlU2VtYW50aWNEYXRlUmFuZ2VcIiwgb01vZGlmaWVyKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0c1VzZVNlbWFudGljRGF0ZVJhbmdlID0gc1JldHJpZXZlZFVzZVNlbWFudGljRGF0ZVJhbmdlO1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5Q29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVR5cGVQYXRoICsgc1Byb3BlcnR5UGF0aCkhO1xuXHRcdFx0bGV0IHNJbkZpbHRlckJhcklkID0gb01vZGlmaWVyID8gb01vZGlmaWVyLmdldElkKG9QYXJlbnRDb250cm9sKSA6IG9QYXJlbnRDb250cm9sLmdldElkKCk7XG5cdFx0XHRpZiAoc0luRmlsdGVyQmFySWQuZW5kc1dpdGgoXCItY29udGVudFwiKSkge1xuXHRcdFx0XHQvLyAtY29udGVudCBpcyBvbmx5IGFkZGVkIHdoZW4gdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgZGlyZWN0bHkgaW4gdGhlIGZpbHRlciBiYXJcblx0XHRcdFx0c0luRmlsdGVyQmFySWQgPSBzSW5GaWx0ZXJCYXJJZC5zdWJzdHJpbmcoMCwgc0luRmlsdGVyQmFySWQubGFzdEluZGV4T2YoXCItY29udGVudFwiKSk7XG5cdFx0XHRcdC8vIEJ5IHVzaW5nIHRoZSBpZCBvZiB0aGUgcGFyZW50IGNvbnRyb2wsIHdlIGNhbiBnZXQgdGhlIGNvcnJlY3QgaWRQcmVmaXggZm9yIHRoZSB2YWx1ZSBoZWxwXG5cdFx0XHR9XG5cdFx0XHRvU2V0dGluZ3MgPSB7XG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCkhLFxuXHRcdFx0XHRcdHByb3BlcnR5OiBvUHJvcGVydHlDb250ZXh0XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5OiBvTWV0YU1vZGVsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlzWE1MOiBiSXNYTUxcblx0XHRcdH07XG5cdFx0XHRzQmluZGluZ1BhdGggPSBgLyR7TW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzRW50aXR5VHlwZVBhdGgpXG5cdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0LmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZylcblx0XHRcdFx0LmpvaW4oXCIvXCIpfWA7XG5cdFx0XHRvUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0bWV0YVBhdGg6IG9Qcm9wZXJ0eUNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHRzUHJvcGVydHlOYW1lOiBzUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRzQmluZGluZ1BhdGg6IHNCaW5kaW5nUGF0aCxcblx0XHRcdFx0c1ZhbHVlSGVscFR5cGU6IHNJZFByZWZpeCArIFZBTFVFX0hFTFBfVFlQRSxcblx0XHRcdFx0b0NvbnRyb2w6IG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRvTWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRvTW9kaWZpZXI6IG9Nb2RpZmllcixcblx0XHRcdFx0c0lkUHJlZml4OiBfZ2VuZXJhdGVJZFByZWZpeChzSW5GaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fUZpbHRlckZpZWxkYCwgc05hdmlnYXRpb25QYXRoKSxcblx0XHRcdFx0c1ZoSWRQcmVmaXg6IF9nZW5lcmF0ZUlkUHJlZml4KHNJbkZpbHRlckJhcklkLCBzSWRQcmVmaXggKyBWQUxVRV9IRUxQX1RZUEUpLFxuXHRcdFx0XHRzTmF2aWdhdGlvblByZWZpeDogc05hdmlnYXRpb25QYXRoLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U6IHNVc2VTZW1hbnRpY0RhdGVSYW5nZSBhcyB1bmtub3duIGFzIGJvb2xlYW4sXG5cdFx0XHRcdG9TZXR0aW5nczogb1NlbGVjdGlvbkZpZWxkPy5zZXR0aW5ncyA/PyB7fSxcblx0XHRcdFx0dmlzdWFsRmlsdGVyOiBvU2VsZWN0aW9uRmllbGQ/LnZpc3VhbEZpbHRlcixcblx0XHRcdFx0dmlldyxcblx0XHRcdFx0bGFiZWw6IG9TZWxlY3Rpb25GaWVsZD8ubGFiZWxcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZG9lc1ZhbHVlSGVscEV4aXN0KG9QYXJhbWV0ZXJzKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChiVmFsdWVIZWxwRXhpc3RzOiBib29sZWFuKSB7XG5cdFx0XHRpZiAoIWJWYWx1ZUhlbHBFeGlzdHMpIHtcblx0XHRcdFx0cmV0dXJuIF90ZW1wbGF0ZVZhbHVlSGVscChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVR5cGVQYXRoKSEsXG5cdFx0XHRcdFx0XHRcdG1ldGFQYXRoOiBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLnByb3BlcnR5XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aDogb01ldGFNb2RlbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlzWE1MOiBiSXNYTUxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvUGFyZW50Q29udHJvbCwgXCJsb2NhbElkXCIsIG9Nb2RpZmllcik7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAobG9jYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgcGFnZU1vZGVsO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJzLnZpc3VhbEZpbHRlcikge1xuXHRcdFx0XHQvL05lZWQgdG8gc2V0IHRoZSBjb252ZXJ0ZXJjb250ZXh0IGFzIHBhZ2VNb2RlbCBpbiBzZXR0aW5ncyBmb3IgQnVpbGRpbmdCbG9jayAyLjBcblx0XHRcdFx0cGFnZU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvUGFyZW50Q29udHJvbCkuZ2V0Q29udHJvbGxlcigpLl9nZXRQYWdlTW9kZWwoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfdGVtcGxhdGVGaWx0ZXJGaWVsZChvU2V0dGluZ3MsIG9QYXJhbWV0ZXJzLCBsb2NhbElkLCBwYWdlTW9kZWwpO1xuXHRcdH0pO1xufTtcbmZ1bmN0aW9uIF9nZXRDYWNoZWRQcm9wZXJ0aWVzKG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sIHwgRWxlbWVudCk6IG51bGwgfCBQcm9wZXJ0eUluZm9bXSB8IHVuZGVmaW5lZCB7XG5cdC8vIHByb3BlcnRpZXMgYXJlIG5vdCBjYWNoZWQgZHVyaW5nIHRlbXBsYXRpbmdcblx0aWYgKG9GaWx0ZXJCYXIgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxQcm9wZXJ0eUluZm9bXT4ob0ZpbHRlckJhciwgRkVUQ0hFRF9QUk9QRVJUSUVTX0RBVEFfS0VZKTtcbn1cbmZ1bmN0aW9uIF9zZXRDYWNoZWRQcm9wZXJ0aWVzKG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sIHwgRWxlbWVudCwgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQge1xuXHQvLyBkbyBub3QgY2FjaGUgZHVyaW5nIHRlbXBsYXRpbmcsIGVsc2UgaXQgYmVjb21lcyBwYXJ0IG9mIHRoZSBjYWNoZWQgdmlld1xuXHRpZiAob0ZpbHRlckJhciBpbnN0YW5jZW9mIHdpbmRvdy5FbGVtZW50KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdERlbGVnYXRlVXRpbC5zZXRDdXN0b21EYXRhKG9GaWx0ZXJCYXIsIEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSwgYUZldGNoZWRQcm9wZXJ0aWVzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbn1cbmZ1bmN0aW9uIF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbFxuKTogQ29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB7XG5cdGxldCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyKTtcblx0bGV0IGxvY2FsR3JvdXBMYWJlbDtcblxuXHRpZiAoIWFGZXRjaGVkUHJvcGVydGllcykge1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcyA9IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHNFbnRpdHlUeXBlUGF0aCwgb01ldGFNb2RlbCwgb0ZpbHRlckJhcik7XG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9Hcm91cDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdGxvY2FsR3JvdXBMYWJlbCA9IG51bGw7XG5cdFx0XHRpZiAob0dyb3VwLmdyb3VwTGFiZWwpIHtcblx0XHRcdFx0bG9jYWxHcm91cExhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChvR3JvdXAuZ3JvdXBMYWJlbCwgb0ZpbHRlckJhcik7XG5cdFx0XHRcdG9Hcm91cC5ncm91cExhYmVsID0gbG9jYWxHcm91cExhYmVsID09PSBudWxsID8gb0dyb3VwLmdyb3VwTGFiZWwgOiBsb2NhbEdyb3VwTGFiZWw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRfc2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyLCBhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHR9XG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG59XG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uIChmaWx0ZXJCYXI6IEZpbHRlckJhcik6IFByb21pc2U8UHJvcGVydHlJbmZvRXh0ZXJuYWxbXT4ge1xuXHRjb25zdCBwcm9wZXJ0eUluZm9zID0gYXdhaXQgT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaEZpbHRlclByb3BlcnRpZXMoZmlsdGVyQmFyIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wpO1xuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShmaWx0ZXJCYXIsIFwiZmVGaWx0ZXJJbmZvXCIsIHByb3BlcnR5SW5mb3MpO1xuXHRpZiAocHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIEZpbHRlclV0aWxzLmZvcm1hdFByb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm9zIGFzIFByb3BlcnR5SW5mb1tdKSBhcyBQcm9wZXJ0eUluZm9FeHRlcm5hbFtdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBbXTtcblx0fVxufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaEZpbHRlclByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoXG5cdGZpbHRlckJhcjogSUZpbHRlckNvbnRyb2xcbik6IFByb21pc2U8Q29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXT4ge1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4oZmlsdGVyQmFyLCBcImVudGl0eVR5cGVcIikhO1xuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwoZmlsdGVyQmFyIGFzIEZpbHRlckJhcikudGhlbihmdW5jdGlvbiAobW9kZWw6IE1vZGVsKSB7XG5cdFx0aWYgKCFtb2RlbCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KGVudGl0eVR5cGVQYXRoLCBtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgZmlsdGVyQmFyKTtcblx0fSk7XG59O1xuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmdldFR5cGVNYXAgPSBmdW5jdGlvbiAoKTogdHlwZW9mIFR5cGVNYXAge1xuXHRyZXR1cm4gVHlwZU1hcDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJEQSxNQUFNQSxzQkFBc0IsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMs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
|