@sapui5/sap.fe.core 1.130.0 → 1.131.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/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +38 -14
- package/src/sap/fe/core/CommonUtils.ts +39 -15
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +17 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/SelectionVariantHelper", "sap/fe/core/helpers/TypeGuards", "sap/ui/core/message/MessageType", "../../helpers/Aggregation", "../../helpers/ID", "./Criticality"], function (IssueManager, SelectionVariantHelper, TypeGuards, MessageType, Aggregation, ID, Criticality) {
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/SelectionVariantHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/ui/core/message/MessageType", "../../helpers/Aggregation", "../../helpers/ID", "./Criticality"], function (IssueManager, SelectionVariantHelper, TypeGuards, DataModelPathHelper, PropertyHelper, MessageType, Aggregation, ID, Criticality) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
|
|
10
10
|
var getKPIID = ID.getKPIID;
|
|
11
11
|
var AggregationHelper = Aggregation.AggregationHelper;
|
|
12
|
+
var getAssociatedTextPropertyPath = PropertyHelper.getAssociatedTextPropertyPath;
|
|
13
|
+
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
12
14
|
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
13
15
|
var isAnnotationOfType = TypeGuards.isAnnotationOfType;
|
|
14
16
|
var isAnnotationOfTerm = TypeGuards.isAnnotationOfTerm;
|
|
@@ -35,23 +37,30 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
35
37
|
"UI.ChartType/Combination": "combination",
|
|
36
38
|
"UI.ChartType/Scatter": "scatter"
|
|
37
39
|
};
|
|
38
|
-
function convertKPIChart(chartAnnotation, presentationVariantAnnotation) {
|
|
39
|
-
var _presentationVariantA, _presentationVariantA2;
|
|
40
|
+
function convertKPIChart(chartAnnotation, presentationVariantAnnotation, converterContext) {
|
|
41
|
+
var _presentationVariantA, _presentationVariantA2, _chartAnnotation$Titl;
|
|
40
42
|
if (chartAnnotation.Measures === undefined) {
|
|
41
43
|
// We need at least 1 measure (but no dimension is allowed, e.g. for bubble chart)
|
|
42
44
|
return undefined;
|
|
43
45
|
}
|
|
44
46
|
const charDimensions = chartAnnotation.Dimensions ? chartAnnotation.Dimensions.map(propertyPath => {
|
|
45
|
-
var _chartAnnotation$Dime, _propertyPath$$target, _propertyPath$$target2, _propertyPath$$target3, _dimAttribute$Role;
|
|
47
|
+
var _chartAnnotation$Dime, _propertyPath$$target, _propertyPath$$target2, _propertyPath$$target3, _dimAttribute$Role, _dimensionProperty$an;
|
|
46
48
|
const dimAttribute = (_chartAnnotation$Dime = chartAnnotation.DimensionAttributes) === null || _chartAnnotation$Dime === void 0 ? void 0 : _chartAnnotation$Dime.find(attribute => {
|
|
47
49
|
var _attribute$Dimension;
|
|
48
50
|
return ((_attribute$Dimension = attribute.Dimension) === null || _attribute$Dimension === void 0 ? void 0 : _attribute$Dimension.value) === propertyPath.value;
|
|
49
51
|
});
|
|
50
|
-
|
|
52
|
+
const dimensionDefinition = {
|
|
51
53
|
name: propertyPath.value,
|
|
52
54
|
label: ((_propertyPath$$target = propertyPath.$target) === null || _propertyPath$$target === void 0 ? void 0 : (_propertyPath$$target2 = _propertyPath$$target.annotations.Common) === null || _propertyPath$$target2 === void 0 ? void 0 : (_propertyPath$$target3 = _propertyPath$$target2.Label) === null || _propertyPath$$target3 === void 0 ? void 0 : _propertyPath$$target3.toString()) || propertyPath.value,
|
|
53
55
|
role: dimAttribute === null || dimAttribute === void 0 ? void 0 : (_dimAttribute$Role = dimAttribute.Role) === null || _dimAttribute$Role === void 0 ? void 0 : _dimAttribute$Role.replace("UI.ChartDimensionRoleType/", "")
|
|
54
56
|
};
|
|
57
|
+
const dimensionProperty = enhanceDataModelPath(converterContext.getDataModelObjectPath(), propertyPath.value).targetObject;
|
|
58
|
+
if (dimensionProperty !== null && dimensionProperty !== void 0 && (_dimensionProperty$an = dimensionProperty.annotations.Common) !== null && _dimensionProperty$an !== void 0 && _dimensionProperty$an.Text) {
|
|
59
|
+
var _dimensionProperty$an2, _dimensionProperty$an3, _dimensionProperty$an4;
|
|
60
|
+
dimensionDefinition.text = getAssociatedTextPropertyPath(dimensionProperty);
|
|
61
|
+
dimensionDefinition.textArrangement = ((_dimensionProperty$an2 = dimensionProperty.annotations.Common.Text.annotations) === null || _dimensionProperty$an2 === void 0 ? void 0 : (_dimensionProperty$an3 = _dimensionProperty$an2.UI) === null || _dimensionProperty$an3 === void 0 ? void 0 : (_dimensionProperty$an4 = _dimensionProperty$an3.TextArrangement) === null || _dimensionProperty$an4 === void 0 ? void 0 : _dimensionProperty$an4.toString().replace("UI.TextArrangementType/", "")) ?? "TextFirst";
|
|
62
|
+
}
|
|
63
|
+
return dimensionDefinition;
|
|
55
64
|
}) : [];
|
|
56
65
|
const chartMeasures = chartAnnotation.Measures.map(propertyPath => {
|
|
57
66
|
var _chartAnnotation$Meas, _propertyPath$$target4, _propertyPath$$target5, _propertyPath$$target6, _measureAttribute$Rol;
|
|
@@ -65,7 +74,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
65
74
|
role: measureAttribute === null || measureAttribute === void 0 ? void 0 : (_measureAttribute$Rol = measureAttribute.Role) === null || _measureAttribute$Rol === void 0 ? void 0 : _measureAttribute$Rol.replace("UI.ChartMeasureRoleType/", "")
|
|
66
75
|
};
|
|
67
76
|
});
|
|
68
|
-
|
|
77
|
+
const chartDefinition = {
|
|
69
78
|
chartType: KPIChartTypeFromUI[chartAnnotation.ChartType] || "Line",
|
|
70
79
|
dimensions: charDimensions,
|
|
71
80
|
measures: chartMeasures,
|
|
@@ -78,6 +87,11 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
78
87
|
}),
|
|
79
88
|
maxItems: presentationVariantAnnotation === null || presentationVariantAnnotation === void 0 ? void 0 : (_presentationVariantA2 = presentationVariantAnnotation.MaxItems) === null || _presentationVariantA2 === void 0 ? void 0 : _presentationVariantA2.valueOf()
|
|
80
89
|
};
|
|
90
|
+
const chartTitle = (_chartAnnotation$Titl = chartAnnotation.Title) === null || _chartAnnotation$Titl === void 0 ? void 0 : _chartAnnotation$Titl.valueOf();
|
|
91
|
+
if (chartTitle !== undefined) {
|
|
92
|
+
chartDefinition.title = chartTitle;
|
|
93
|
+
}
|
|
94
|
+
return chartDefinition;
|
|
81
95
|
}
|
|
82
96
|
function updateCurrency(datapointAnnotation, kpiDef) {
|
|
83
97
|
var _targetValueProperty$, _targetValueProperty$3;
|
|
@@ -247,7 +261,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
247
261
|
return !!kpiConfig.template;
|
|
248
262
|
}
|
|
249
263
|
function createAnalyticalKPIDefinition(converterContext, kpiConfig, kpiName) {
|
|
250
|
-
var _datapointAnnotation$, _datapointAnnotation$2;
|
|
264
|
+
var _datapointAnnotation$, _datapointAnnotation$2, _datapointAnnotation$3;
|
|
251
265
|
let contextPath = "";
|
|
252
266
|
if (kpiConfig.contextPath) {
|
|
253
267
|
contextPath = kpiConfig.contextPath;
|
|
@@ -323,7 +337,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
323
337
|
}
|
|
324
338
|
|
|
325
339
|
// Chart definition
|
|
326
|
-
const chartDef = convertKPIChart(chartAnnotation, presentationVariantAnnotation);
|
|
340
|
+
const chartDef = convertKPIChart(chartAnnotation, presentationVariantAnnotation, converterContext);
|
|
327
341
|
if (!chartDef) {
|
|
328
342
|
return undefined;
|
|
329
343
|
}
|
|
@@ -340,6 +354,9 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
340
354
|
selectionVariantFilterDefinitions: selectionVariantAnnotation ? getFilterDefinitionsFromSelectionVariant(selectionVariantAnnotation) : undefined,
|
|
341
355
|
chart: chartDef
|
|
342
356
|
};
|
|
357
|
+
if (((_datapointAnnotation$3 = datapointAnnotation.ValueFormat) === null || _datapointAnnotation$3 === void 0 ? void 0 : _datapointAnnotation$3.NumberOfFractionalDigits) !== undefined) {
|
|
358
|
+
kpiDef.datapoint.numberOfFractionalDigits = datapointAnnotation.ValueFormat.NumberOfFractionalDigits.valueOf();
|
|
359
|
+
}
|
|
343
360
|
|
|
344
361
|
// Navigation
|
|
345
362
|
if (!navigationInfo) {
|
|
@@ -393,4 +410,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/conve
|
|
|
393
410
|
_exports.getKPIDefinitions = getKPIDefinitions;
|
|
394
411
|
return _exports;
|
|
395
412
|
}, false);
|
|
396
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJfcHJlc2VudGF0aW9uVmFyaWFudEEiLCJfcHJlc2VudGF0aW9uVmFyaWFudEEyIiwiTWVhc3VyZXMiLCJ1bmRlZmluZWQiLCJjaGFyRGltZW5zaW9ucyIsIkRpbWVuc2lvbnMiLCJtYXAiLCJwcm9wZXJ0eVBhdGgiLCJfY2hhcnRBbm5vdGF0aW9uJERpbWUiLCJfcHJvcGVydHlQYXRoJCR0YXJnZXQiLCJfcHJvcGVydHlQYXRoJCR0YXJnZXQyIiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0MyIsIl9kaW1BdHRyaWJ1dGUkUm9sZSIsImRpbUF0dHJpYnV0ZSIsIkRpbWVuc2lvbkF0dHJpYnV0ZXMiLCJmaW5kIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSREaW1lbnNpb24iLCJEaW1lbnNpb24iLCJ2YWx1ZSIsIm5hbWUiLCJsYWJlbCIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJyb2xlIiwiUm9sZSIsInJlcGxhY2UiLCJjaGFydE1lYXN1cmVzIiwiX2NoYXJ0QW5ub3RhdGlvbiRNZWFzIiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0NCIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDUiLCJfcHJvcGVydHlQYXRoJCR0YXJnZXQ2IiwiX21lYXN1cmVBdHRyaWJ1dGUkUm9sIiwibWVhc3VyZUF0dHJpYnV0ZSIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwiX2F0dHJpYnV0ZSRNZWFzdXJlIiwiTWVhc3VyZSIsImNoYXJ0VHlwZSIsIkNoYXJ0VHlwZSIsImRpbWVuc2lvbnMiLCJtZWFzdXJlcyIsInNvcnRPcmRlciIsIlNvcnRPcmRlciIsIl9zb3J0T3JkZXIkUHJvcGVydHkiLCJQcm9wZXJ0eSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwibWF4SXRlbXMiLCJNYXhJdGVtcyIsInZhbHVlT2YiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQzIiwidGFyZ2V0VmFsdWVQcm9wZXJ0eSIsIlZhbHVlIiwiSVNPQ3VycmVuY3kiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQyIiwiY3VycmVuY3kiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImRhdGFwb2ludCIsInVuaXQiLCJpc0N1cnJlbmN5IiwiaXNQYXRoIiwiVW5pdCIsIl90YXJnZXRWYWx1ZVByb3BlcnR5JDQiLCJ1cGRhdGVDcml0aWNhbGl0eSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImNyaXRpY2FsaXR5UGF0aCIsInBhdGgiLCJjcml0aWNhbGl0eVZhbHVlIiwiTWVzc2FnZVR5cGUiLCJOb25lIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsInB1c2giLCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsInVwZGF0ZVRyZW5kIiwiVHJlbmQiLCJ0cmVuZFByb3BlcnR5IiwidHJlbmRQYXRoIiwidHJlbmRWYWx1ZSIsIlRyZW5kQ2FsY3VsYXRpb24iLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsIklzUmVsYXRpdmVEaWZmZXJlbmNlIiwiUmVmZXJlbmNlVmFsdWUiLCJyZWZlcmVuY2VQcm9wZXJ0eSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsIlN0cm9uZ0Rvd25EaWZmZXJlbmNlIiwiRG93bkRpZmZlcmVuY2UiLCJVcERpZmZlcmVuY2UiLCJTdHJvbmdVcERpZmZlcmVuY2UiLCJ1cGRhdGVUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwiZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkiLCJwcm9wZXJ0eSIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvbiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5ub3RhdGlvbktleSIsImFubm90YXRpb24iLCJpc0Fubm90YXRpb25PZlRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsIl9zZW1hbnRpY09iamVjdEFubm90YSIsImlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiIsImtwaUNvbmZpZyIsInRlbXBsYXRlIiwiY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0Iiwia3BpTmFtZSIsIl9kYXRhcG9pbnRBbm5vdGF0aW9uJCIsIl9kYXRhcG9pbnRBbm5vdGF0aW9uJDIiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImtwaUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVUeXBlIiwiS1BJX0lTU1VFUyIsIk5PX0FOQUxZVElDUyIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibmF2aWdhdGlvbkluZm8iLCJhS1BJQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhcmdldEtQSSIsImtwaSIsIl90YXJnZXRLUEkkRGV0YWlsIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMyIsIl9wcmVzZW50YXRpb25WYXJpYW50QTQiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE1IiwiX3RhcmdldEtQSSREZXRhaWwyIiwiRGF0YVBvaW50IiwiU2VsZWN0aW9uVmFyaWFudCIsIkRldGFpbCIsIkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiVmlzdWFsaXphdGlvbnMiLCJ2aXoiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZW1hbnRpY09iamVjdCIsIl90YXJnZXRLUEkkRGV0YWlsJEFjdCIsImFjdGlvbiIsIkFjdGlvbiIsImFTUFZBbm5vdGF0aW9ucyIsInRhcmdldFNQViIsInNwdiIsIl9wcmVzZW50YXRpb25WYXJpYW50QTYiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE3IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBOCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTkiLCJfcHJlc2VudGF0aW9uVmFyaWFudEExMCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTExIiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIktQSV9OT1RfRk9VTkQiLCJLUElfREVUQUlMX05PVF9GT1VORCIsImRhdGFwb2ludFByb3BlcnR5IiwiTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFIiwiY2hhcnREZWYiLCJ0eXBlIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInRpdGxlIiwiVGl0bGUiLCJkZXNjcmlwdGlvbiIsIkRlc2NyaXB0aW9uIiwic2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zIiwiZ2V0RmlsdGVyRGVmaW5pdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudCIsImNoYXJ0IiwiZGV0YWlsTmF2aWdhdGlvbiIsIm91dGJvdW5kTmF2aWdhdGlvbiIsIm5hdmlnYXRpb24iLCJjcmVhdGVLUElEZWZpbml0aW9uIiwiZ2V0S1BJRGVmaW5pdGlvbnMiLCJrcGlDb25maWdzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0S1BJQ29uZmlndXJhdGlvbiIsImtwaURlZnMiLCJvRGVmIiwiX2V4cG9ydHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIktQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljT2JqZWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZSxcblx0SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlLFxuXHRLUEksXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckRlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCB7IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVGVybSwgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbiwgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiwgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdGRpbWVuc2lvbnM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXTtcblx0bWVhc3VyZXM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXTtcblx0c29ydE9yZGVyPzogeyBuYW1lOiBzdHJpbmc7IGRlc2NlbmRpbmc6IGJvb2xlYW4gfVtdO1xuXHRtYXhJdGVtcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljYWxLUElEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBcIkFuYWx5dGljYWxcIjtcblx0aWQ6IHN0cmluZztcblx0Y29udGV4dFBhdGg6IHN0cmluZztcblx0ZGF0YXBvaW50OiB7XG5cdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0XHR1bml0Pzoge1xuXHRcdFx0dmFsdWU6IHN0cmluZztcblx0XHRcdGlzUGF0aDogYm9vbGVhbjtcblx0XHRcdGlzQ3VycmVuY3k6IGJvb2xlYW47XG5cdFx0fTtcblx0XHRjcml0aWNhbGl0eVBhdGg/OiBzdHJpbmc7XG5cdFx0Y3JpdGljYWxpdHlWYWx1ZT86IE1lc3NhZ2VUeXBlO1xuXHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlPzogSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlO1xuXHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzPzogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW107XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdFx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdFx0dHJlbmRQYXRoPzogc3RyaW5nO1xuXHRcdHRyZW5kVmFsdWU/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlPzogbnVtYmVyO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoPzogc3RyaW5nO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZT86IGJvb2xlYW47XG5cdFx0dGFyZ2V0VmFsdWU/OiBudW1iZXI7XG5cdFx0dGFyZ2V0UGF0aD86IHN0cmluZztcblx0fTtcblx0Y2hhcnQ6IEtQSUNoYXJ0RGVmaW5pdGlvbjtcblx0c2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPzogRmlsdGVyRGVmaW5pdGlvbltdO1xuXHRuYXZpZ2F0aW9uPzogTmF2aWdhdGlvbkluZm87XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21LUElEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBcIkN1c3RvbVwiO1xuXHRrZXk6IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBLUElEZWZpbml0aW9uID0gQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCBDdXN0b21LUElEZWZpbml0aW9uO1xuXG5jb25zdCBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdVcFwiOiBcIlVwXCIsXG5cdFwiVUkuVHJlbmRUeXBlL1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvU3Ryb25nRG93blwiOiBcIkRvd25cIixcblx0XCJVSS5UcmVuZFR5cGUvRG93blwiOiBcIkRvd25cIixcblx0XCJVSS5UcmVuZFR5cGUvU2lkZXdheXNcIjogXCJOb25lXCJcbn07XG5cbmNvbnN0IEtQSUNoYXJ0VHlwZUZyb21VSTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcblx0XCJVSS5DaGFydFR5cGUvQ29sdW1uU3RhY2tlZFwiOiBcIlN0YWNrZWRDb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyU3RhY2tlZFwiOiBcIlN0YWNrZWRCYXJcIixcblx0XCJVSS5DaGFydFR5cGUvRG9udXRcIjogXCJEb251dFwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9MaW5lXCI6IFwiTGluZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CdWJibGVcIjogXCJidWJibGVcIixcblx0XCJVSS5DaGFydFR5cGUvQ29sdW1uXCI6IFwiY29sdW1uXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0JhclwiOiBcImJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9WZXJ0aWNhbEJ1bGxldFwiOiBcInZlcnRpY2FsX2J1bGxldFwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db21iaW5hdGlvblwiOiBcImNvbWJpbmF0aW9uXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1NjYXR0ZXJcIjogXCJzY2F0dGVyXCJcbn07XG5cbmZ1bmN0aW9uIGNvbnZlcnRLUElDaGFydChjaGFydEFubm90YXRpb246IENoYXJ0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpOiBLUElDaGFydERlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBXZSBuZWVkIGF0IGxlYXN0IDEgbWVhc3VyZSAoYnV0IG5vIGRpbWVuc2lvbiBpcyBhbGxvd2VkLCBlLmcuIGZvciBidWJibGUgY2hhcnQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IGNoYXJEaW1lbnNpb25zID0gY2hhcnRBbm5vdGF0aW9uLkRpbWVuc2lvbnNcblx0XHQ/IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRpbUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25BdHRyaWJ1dGVzPy5maW5kKChhdHRyaWJ1dGUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gYXR0cmlidXRlLkRpbWVuc2lvbj8udmFsdWUgPT09IHByb3BlcnR5UGF0aC52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRyb2xlOiBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0fTtcblx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRjaGFydFR5cGU6IEtQSUNoYXJ0VHlwZUZyb21VSVtjaGFydEFubm90YXRpb24uQ2hhcnRUeXBlXSB8fCBcIkxpbmVcIixcblx0XHRkaW1lbnNpb25zOiBjaGFyRGltZW5zaW9ucyxcblx0XHRtZWFzdXJlczogY2hhcnRNZWFzdXJlcyxcblx0XHRzb3J0T3JkZXI6IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXI/Lm1hcCgoc29ydE9yZGVyKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBzb3J0T3JkZXIuUHJvcGVydHk/LnZhbHVlIHx8IFwiXCIsIGRlc2NlbmRpbmc6ICEhc29ydE9yZGVyLkRlc2NlbmRpbmcgfTtcblx0XHR9KSxcblx0XHRtYXhJdGVtczogcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zPy52YWx1ZU9mKCkgYXMgbnVtYmVyXG5cdH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsIGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0VmFsdWVQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0Y29uc3QgY3VycmVuY3kgPSB0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oY3VycmVuY3kpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAoY3VycmVuY3kuJHRhcmdldCBhcyB1bmtub3duIGFzIFByb3BlcnR5KS5uYW1lLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IGN1cnJlbmN5LnRvU3RyaW5nKCksXG5cdFx0XHRcdGlzQ3VycmVuY3k6IHRydWUsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQpIHtcblx0XHRjb25zdCB1bml0ID0gdGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdDtcblx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6ICh1bml0LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogdW5pdC50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiBmYWxzZSxcblx0XHRcdFx0aXNQYXRoOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ3JpdGljYWxpdHkoXG5cdGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0a3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvblxuKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSB7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkpKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBpcyBhIHBhdGggLS0+IGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZVxuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHlQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkuJHRhcmdldDtcblx0XHRcdGlmIChjcml0aWNhbGl0eVByb3BlcnR5ICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUoY3JpdGljYWxpdHlQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5LnBhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgaXNuJ3QgYWdncmVnYXRhYmxlIC0tPiB3ZSBpZ25vcmUgaXRcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYW4gZW51bSBWYWx1ZSAtLT4gZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB2YWx1ZVxuXHRcdFx0Ly8gV2UgaWdub3JlIGFsbCB0aGUgb3RoZXIgdHlwZSBvZiBkeW5hbWljIGV4cHJlc3Npb25zIGZvciBub3dcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZShcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSBhcyB1bmtub3duIGFzIENyaXRpY2FsaXR5VHlwZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSA9IGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5JbXByb3ZlbWVudERpcmVjdGlvbjtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzID0gW107XG5cdFx0c3dpdGNoIChrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlKSB7XG5cdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1RhcmdldFwiOlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLlRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NYXhpbWl6ZVwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJlbmQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSB7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFwb2ludEFubm90YXRpb24uVHJlbmQpKSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhIHBhdGggLS0+IGNoZWNrIGlmIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZVxuXHRcdFx0Y29uc3QgdHJlbmRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmQuJHRhcmdldDtcblx0XHRcdGlmICh0cmVuZFByb3BlcnR5ICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUodHJlbmRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZFBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kLnBhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgaXNuJ3QgYWdncmVnYXRhYmxlIC0tPiB3ZSBpZ25vcmUgaXRcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyZW5kIGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGVbZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZF0gfHwgXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uSXNSZWxhdGl2ZURpZmZlcmVuY2UgPyB0cnVlIDogZmFsc2U7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnR5ID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShyZWZlcmVuY2VQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0IGFuZCBzd2l0Y2ggYmFjayB0byB0cmVuZCAnTm9uZSdcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFJlZmVyZW5jZSB2YWx1ZSBpcyBhIHN0YXRpYyB2YWx1ZVxuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWU7XG5cdFx0fVxuXHRcdGlmIChrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoICE9PSB1bmRlZmluZWQgfHwga3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzID0gW1xuXHRcdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uU3Ryb25nRG93bkRpZmZlcmVuY2UudmFsdWVPZigpLFxuXHRcdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uRG93bkRpZmZlcmVuY2UudmFsdWVPZigpLFxuXHRcdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uVXBEaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ1VwRGlmZmVyZW5jZS52YWx1ZU9mKClcblx0XHRcdF07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRhcmdldChkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLCBhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsIGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24pOiB2b2lkIHtcblx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUpIHtcblx0XHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGUgKG90aGVyd2lzZSBpZ25vcmUpXG5cdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRhcmdldFByb3BlcnR5KSkge1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRhcmdldFBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLnBhdGg7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRhcmdldCB2YWx1ZSBpcyBhIHN0YXRpYyB2YWx1ZVxuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRWYWx1ZSA9IGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWU7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSk6IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvbnMgPSBwcm9wZXJ0eS5hbm5vdGF0aW9uc1tcIkNvbW1vblwiXSB8fCB7fTtcblx0Ly8gTG9vayBmb3IgdGhlIHNlbWFudGljT2JqZWN0IGFubm90YXRpb24gKGlmIGFueSlcblx0bGV0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbjogU2VtYW50aWNPYmplY3QgfCB1bmRlZmluZWQ7XG5cdE9iamVjdC5rZXlzKGFubm90YXRpb25zKS5mb3JFYWNoKChhbm5vdGF0aW9uS2V5KSA9PiB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2Fubm90YXRpb25LZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXTtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtKGFubm90YXRpb24sIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdCkpIHtcblx0XHRcdGlmICghYW5ub3RhdGlvbi5xdWFsaWZpZXIgfHwgIXNlbWFudGljT2JqZWN0QW5ub3RhdGlvbikge1xuXHRcdFx0XHQvLyBXZSBhbHdheXMgdGFrZSB0aGUgYW5ub3RhdGlvbiB3aXRob3V0IHF1YWxpZmllciBpZiB0aGVyZSdzIG9uZSwgb3RoZXJ3aXNlIHdlIHRha2UgdGhlIGZpcnN0IG9uZVxuXHRcdFx0XHRzZW1hbnRpY09iamVjdEFubm90YXRpb24gPSBhbm5vdGF0aW9uIGFzIFNlbWFudGljT2JqZWN0O1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0aWYgKHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHJlc3VsdDogTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uLnRvU3RyaW5nKCksXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IFtdXG5cdFx0fTtcblxuXHRcdC8vIExvb2sgZm9yIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zIChpZiBhbnkpXG5cdFx0Y29uc3QgYW5ub3RhdGlvbktleSA9IE9iamVjdC5rZXlzKGFubm90YXRpb25zKS5maW5kKChrZXkpID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1trZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybShhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMpICYmXG5cdFx0XHRcdGFubm90YXRpb24ucXVhbGlmaWVyID09PSBzZW1hbnRpY09iamVjdEFubm90YXRpb24/LnF1YWxpZmllclxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRpZiAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0cmVzdWx0LnVuYXZhaWxhYmxlQWN0aW9ucyA9IGFubm90YXRpb25zW2Fubm90YXRpb25LZXkgYXMga2V5b2YgdHlwZW9mIGFubm90YXRpb25zXSBhcyBzdHJpbmdbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZzogS1BJQ29uZmlndXJhdGlvbik6IGtwaUNvbmZpZyBpcyBDdXN0b21LUElDb25maWd1cmF0aW9uIHtcblx0cmV0dXJuICEhKGtwaUNvbmZpZyBhcyBDdXN0b21LUElDb25maWd1cmF0aW9uKS50ZW1wbGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0a3BpQ29uZmlnOiBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbixcblx0a3BpTmFtZTogc3RyaW5nXG4pOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBjb250ZXh0UGF0aCA9IFwiXCI7XG5cdGlmIChrcGlDb25maWcuY29udGV4dFBhdGgpIHtcblx0XHRjb250ZXh0UGF0aCA9IGtwaUNvbmZpZy5jb250ZXh0UGF0aDtcblx0fSBlbHNlIGlmIChrcGlDb25maWcuZW50aXR5U2V0KSB7XG5cdFx0Y29udGV4dFBhdGggPSBgLyR7a3BpQ29uZmlnLmVudGl0eVNldH1gO1xuXHR9XG5cdGNvbnN0IGtwaUNvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihjb250ZXh0UGF0aCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBrcGlDb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHQvLyBUaGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXNcblx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5NZWRpdW0sIElzc3VlVHlwZS5LUElfSVNTVUVTLk5PX0FOQUxZVElDUyArIGNvbnRleHRQYXRoKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkO1xuXHRsZXQgZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQgfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0aW9uSW5mbzogTmF2aWdhdGlvbkluZm8gfCB1bmRlZmluZWQ7XG5cblx0Ly8gU2VhcmNoIGZvciBhIEtQSSB3aXRoIHRoZSBxdWFsaWZpZXIgZnJtbyB0aGUgbWFuaWZlc3Rcblx0Y29uc3QgYUtQSUFubm90YXRpb25zID0ga3BpQ29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLktQSSkgYXMgS1BJW107XG5cdGNvbnN0IHRhcmdldEtQSSA9IGFLUElBbm5vdGF0aW9ucy5maW5kKChrcGkpID0+IHtcblx0XHRyZXR1cm4ga3BpLnF1YWxpZmllciA9PT0ga3BpQ29uZmlnLnF1YWxpZmllcjtcblx0fSk7XG5cdGlmICh0YXJnZXRLUEkpIHtcblx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uID0gdGFyZ2V0S1BJLkRhdGFQb2ludDtcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5TZWxlY3Rpb25WYXJpYW50O1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0S1BJLkRldGFpbD8uRGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0Y2hhcnRBbm5vdGF0aW9uID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXopID0+IHtcblx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8Q2hhcnQ+KHZpei4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5DaGFydERlZmluaXRpb25UeXBlKTtcblx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblxuXHRcdGlmICh0YXJnZXRLUEkuRGV0YWlsPy5TZW1hbnRpY09iamVjdCkge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0OiB0YXJnZXRLUEkuRGV0YWlsLlNlbWFudGljT2JqZWN0LnRvU3RyaW5nKCksXG5cdFx0XHRcdGFjdGlvbjogdGFyZ2V0S1BJLkRldGFpbC5BY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogW11cblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZhbGxiYWNrOiB0cnkgdG8gZmluZCBhIFNQViB3aXRoIHRoZSBzYW1lIHF1YWxpZmllclxuXHRcdGNvbnN0IGFTUFZBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIlVJXCIsXG5cdFx0XHRVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0KSBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50W107XG5cdFx0Y29uc3QgdGFyZ2V0U1BWID0gYVNQVkFubm90YXRpb25zLmZpbmQoKHNwdikgPT4ge1xuXHRcdFx0cmV0dXJuIHNwdi5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKHRhcmdldFNQVikge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRTUFYuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHRkYXRhcG9pbnRBbm5vdGF0aW9uID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXopID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhUG9pbnQ+KHZpei4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKTtcblx0XHRcdH0pPy4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8Q2hhcnQ+KHZpei4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5DaGFydERlZmluaXRpb25UeXBlKTtcblx0XHRcdH0pPy4kdGFyZ2V0IGFzIENoYXJ0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDb3VsZG4ndCBmaW5kIGEgS1BJIG9yIGEgU1BWIGFubm90YXRpb24gd2l0aCB0aGUgcXVhbGlmaWVyIGZyb20gdGhlIG1hbmlmZXN0XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5LUElfTk9UX0ZPVU5EICsga3BpQ29uZmlnLnF1YWxpZmllcik7XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiB8fCAhZGF0YXBvaW50QW5ub3RhdGlvbiB8fCAhY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0Ly8gQ291bGRuJ3QgZmluZCBhIGNoYXJ0IG9yIGRhdGFwb2ludCBkZWZpbml0aW9uXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5LUElfREVUQUlMX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IGRhdGFwb2ludFByb3BlcnR5ID0gZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUoZGF0YXBvaW50UHJvcGVydHkpKSB7XG5cdFx0Ly8gVGhlIG1haW4gcHJvcGVydHkgb2YgdGhlIEtQSSBpcyBub3QgYWdncmVnYXRhYmxlIC0tPiBXZSBjYW4ndCBjYWxjdWxhdGUgaXRzIHZhbHVlIHNvIHdlIGlnbm9yZSB0aGUgS1BJXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShcblx0XHRcdFx0SXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0SXNzdWVUeXBlLktQSV9JU1NVRVMuTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFICsga3BpQ29uZmlnLnF1YWxpZmllclxuXHRcdFx0KTtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gQ2hhcnQgZGVmaW5pdGlvblxuXHRjb25zdCBjaGFydERlZiA9IGNvbnZlcnRLUElDaGFydChjaGFydEFubm90YXRpb24sIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKTtcblx0aWYgKCFjaGFydERlZikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFwiQW5hbHl0aWNhbFwiLFxuXHRcdGlkOiBcImtwaVRhZy1cIiArIGdldEtQSUlEKGtwaU5hbWUpLFxuXHRcdGNvbnRleHRQYXRoLFxuXHRcdGRhdGFwb2ludDoge1xuXHRcdFx0cHJvcGVydHlQYXRoOiBkYXRhcG9pbnRBbm5vdGF0aW9uLlZhbHVlLnBhdGgsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDoga3BpQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFwb2ludEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdHRpdGxlOiBkYXRhcG9pbnRBbm5vdGF0aW9uLlRpdGxlPy50b1N0cmluZygpLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRhdGFwb2ludEFubm90YXRpb24uRGVzY3JpcHRpb24/LnRvU3RyaW5nKClcblx0XHR9LFxuXHRcdHNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9uczogc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb25cblx0XHRcdD8gZ2V0RmlsdGVyRGVmaW5pdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbilcblx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGNoYXJ0OiBjaGFydERlZlxuXHR9O1xuXG5cdC8vIE5hdmlnYXRpb25cblx0aWYgKCFuYXZpZ2F0aW9uSW5mbykge1xuXHRcdC8vIE5vIG5hdmlnYXRpb25JbmZvIHdhcyBmb3VuZCBpbiB0aGUgS1BJIGFubm90YXRpb24gLS0+IHRyeSB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdGlmIChrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvbikge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdG91dGJvdW5kTmF2aWdhdGlvbjoga3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG91dGJvdW5kIG5hdmlnYXRpb24gaW4gdGhlIG1hbmlmZXN0IC0tPiB0cnkgdGhlIHNlbWFudGljIG9iamVjdCBvbiB0aGUgRGF0YXBvaW50IHZhbHVlXG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KGRhdGFwb2ludFByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25JbmZvKSB7XG5cdFx0a3BpRGVmLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSW5mbztcblx0fVxuXG5cdHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb24sIGtwaURlZik7XG5cdHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXG5cdHJldHVybiBrcGlEZWY7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oXG5cdGtwaU5hbWU6IHN0cmluZyxcblx0a3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZykpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJDdXN0b21cIixcblx0XHRcdGtleToga3BpTmFtZSxcblx0XHRcdHRlbXBsYXRlOiBrcGlDb25maWcudGVtcGxhdGVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjcmVhdGVBbmFseXRpY2FsS1BJRGVmaW5pdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBrcGlDb25maWcsIGtwaU5hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgS1BJIGRlZmluaXRpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogS1BJRGVmaW5pdGlvbltdIHtcblx0Y29uc3Qga3BpQ29uZmlncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0S1BJQ29uZmlndXJhdGlvbigpLFxuXHRcdGtwaURlZnM6IEtQSURlZmluaXRpb25bXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGtwaUNvbmZpZ3MpLmZvckVhY2goKGtwaU5hbWUpID0+IHtcblx0XHRjb25zdCBvRGVmID0gY3JlYXRlS1BJRGVmaW5pdGlvbihrcGlOYW1lLCBrcGlDb25maWdzW2twaU5hbWVdLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAob0RlZikge1xuXHRcdFx0a3BpRGVmcy5wdXNoKG9EZWYpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGtwaURlZnM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSwrQkFBdUQsR0FBRztJQUMvRCx1QkFBdUIsRUFBRSxJQUFJO0lBQzdCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIseUJBQXlCLEVBQUUsTUFBTTtJQUNqQyxtQkFBbUIsRUFBRSxNQUFNO0lBQzNCLHVCQUF1QixFQUFFO0VBQzFCLENBQUM7RUFFRCxNQUFNQyxrQkFBMEMsR0FBRztJQUNsRCw0QkFBNEIsRUFBRSxlQUFlO0lBQzdDLHlCQUF5QixFQUFF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
|
|
413
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwiS1BJQ2hhcnRUeXBlRnJvbVVJIiwiY29udmVydEtQSUNoYXJ0IiwiY2hhcnRBbm5vdGF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMiIsIl9jaGFydEFubm90YXRpb24kVGl0bCIsIk1lYXN1cmVzIiwidW5kZWZpbmVkIiwiY2hhckRpbWVuc2lvbnMiLCJEaW1lbnNpb25zIiwibWFwIiwicHJvcGVydHlQYXRoIiwiX2NoYXJ0QW5ub3RhdGlvbiREaW1lIiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0IiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0MiIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDMiLCJfZGltQXR0cmlidXRlJFJvbGUiLCJfZGltZW5zaW9uUHJvcGVydHkkYW4iLCJkaW1BdHRyaWJ1dGUiLCJEaW1lbnNpb25BdHRyaWJ1dGVzIiwiZmluZCIsImF0dHJpYnV0ZSIsIl9hdHRyaWJ1dGUkRGltZW5zaW9uIiwiRGltZW5zaW9uIiwidmFsdWUiLCJkaW1lbnNpb25EZWZpbml0aW9uIiwibmFtZSIsImxhYmVsIiwiJHRhcmdldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsInJvbGUiLCJSb2xlIiwicmVwbGFjZSIsImRpbWVuc2lvblByb3BlcnR5IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiVGV4dCIsIl9kaW1lbnNpb25Qcm9wZXJ0eSRhbjIiLCJfZGltZW5zaW9uUHJvcGVydHkkYW4zIiwiX2RpbWVuc2lvblByb3BlcnR5JGFuNCIsInRleHQiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwiY2hhcnRNZWFzdXJlcyIsIl9jaGFydEFubm90YXRpb24kTWVhcyIsIl9wcm9wZXJ0eVBhdGgkJHRhcmdldDQiLCJfcHJvcGVydHlQYXRoJCR0YXJnZXQ1IiwiX3Byb3BlcnR5UGF0aCQkdGFyZ2V0NiIsIl9tZWFzdXJlQXR0cmlidXRlJFJvbCIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJNZWFzdXJlQXR0cmlidXRlcyIsIl9hdHRyaWJ1dGUkTWVhc3VyZSIsIk1lYXN1cmUiLCJjaGFydERlZmluaXRpb24iLCJjaGFydFR5cGUiLCJDaGFydFR5cGUiLCJkaW1lbnNpb25zIiwibWVhc3VyZXMiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJfc29ydE9yZGVyJFByb3BlcnR5IiwiUHJvcGVydHkiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsIm1heEl0ZW1zIiwiTWF4SXRlbXMiLCJ2YWx1ZU9mIiwiY2hhcnRUaXRsZSIsIlRpdGxlIiwidGl0bGUiLCJ1cGRhdGVDdXJyZW5jeSIsImRhdGFwb2ludEFubm90YXRpb24iLCJrcGlEZWYiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQzIiwidGFyZ2V0VmFsdWVQcm9wZXJ0eSIsIlZhbHVlIiwiSVNPQ3VycmVuY3kiLCJfdGFyZ2V0VmFsdWVQcm9wZXJ0eSQyIiwiY3VycmVuY3kiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImRhdGFwb2ludCIsInVuaXQiLCJpc0N1cnJlbmN5IiwiaXNQYXRoIiwiVW5pdCIsIl90YXJnZXRWYWx1ZVByb3BlcnR5JDQiLCJ1cGRhdGVDcml0aWNhbGl0eSIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImNyaXRpY2FsaXR5UGF0aCIsInBhdGgiLCJjcml0aWNhbGl0eVZhbHVlIiwiTWVzc2FnZVR5cGUiLCJOb25lIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyIsInB1c2giLCJEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSIsIkFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIiwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlIiwiVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUiLCJEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZSIsInVwZGF0ZVRyZW5kIiwiVHJlbmQiLCJ0cmVuZFByb3BlcnR5IiwidHJlbmRQYXRoIiwidHJlbmRWYWx1ZSIsIlRyZW5kQ2FsY3VsYXRpb24iLCJ0cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSIsIklzUmVsYXRpdmVEaWZmZXJlbmNlIiwiUmVmZXJlbmNlVmFsdWUiLCJyZWZlcmVuY2VQcm9wZXJ0eSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsIlN0cm9uZ0Rvd25EaWZmZXJlbmNlIiwiRG93bkRpZmZlcmVuY2UiLCJVcERpZmZlcmVuY2UiLCJTdHJvbmdVcERpZmZlcmVuY2UiLCJ1cGRhdGVUYXJnZXQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwiZ2V0TmF2aWdhdGlvbkluZm9Gcm9tUHJvcGVydHkiLCJwcm9wZXJ0eSIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvbiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5ub3RhdGlvbktleSIsImFubm90YXRpb24iLCJpc0Fubm90YXRpb25PZlRlcm0iLCJxdWFsaWZpZXIiLCJyZXN1bHQiLCJzZW1hbnRpY09iamVjdCIsInVuYXZhaWxhYmxlQWN0aW9ucyIsImtleSIsIl9zZW1hbnRpY09iamVjdEFubm90YSIsImlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiIsImtwaUNvbmZpZyIsInRlbXBsYXRlIiwiY3JlYXRlQW5hbHl0aWNhbEtQSURlZmluaXRpb24iLCJrcGlOYW1lIiwiX2RhdGFwb2ludEFubm90YXRpb24kIiwiX2RhdGFwb2ludEFubm90YXRpb24kMiIsIl9kYXRhcG9pbnRBbm5vdGF0aW9uJDMiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImtwaUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVUeXBlIiwiS1BJX0lTU1VFUyIsIk5PX0FOQUxZVElDUyIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwibmF2aWdhdGlvbkluZm8iLCJhS1BJQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInRhcmdldEtQSSIsImtwaSIsIl90YXJnZXRLUEkkRGV0YWlsIiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBMyIsIl9wcmVzZW50YXRpb25WYXJpYW50QTQiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE1IiwiX3RhcmdldEtQSSREZXRhaWwyIiwiRGF0YVBvaW50IiwiU2VsZWN0aW9uVmFyaWFudCIsIkRldGFpbCIsIkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50IiwiVmlzdWFsaXphdGlvbnMiLCJ2aXoiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZW1hbnRpY09iamVjdCIsIl90YXJnZXRLUEkkRGV0YWlsJEFjdCIsImFjdGlvbiIsIkFjdGlvbiIsImFTUFZBbm5vdGF0aW9ucyIsInRhcmdldFNQViIsInNwdiIsIl9wcmVzZW50YXRpb25WYXJpYW50QTYiLCJfcHJlc2VudGF0aW9uVmFyaWFudEE3IiwiX3ByZXNlbnRhdGlvblZhcmlhbnRBOCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTkiLCJfcHJlc2VudGF0aW9uVmFyaWFudEExMCIsIl9wcmVzZW50YXRpb25WYXJpYW50QTExIiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIktQSV9OT1RfRk9VTkQiLCJLUElfREVUQUlMX05PVF9GT1VORCIsImRhdGFwb2ludFByb3BlcnR5IiwiTUFJTl9QUk9QRVJUWV9OT1RfQUdHUkVHQVRBQkxFIiwiY2hhcnREZWYiLCJ0eXBlIiwiaWQiLCJnZXRLUElJRCIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImRlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiY2hhcnQiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsIm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImRldGFpbE5hdmlnYXRpb24iLCJvdXRib3VuZE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlS1BJRGVmaW5pdGlvbiIsImdldEtQSURlZmluaXRpb25zIiwia3BpQ29uZmlncyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrcGlEZWZzIiwib0RlZiIsIl9leHBvcnRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhUG9pbnQsXG5cdERhdGFQb2ludFR5cGUsXG5cdEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZSxcblx0S1BJLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJEZWZpbml0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY2FsS1BJQ29uZmlndXJhdGlvbiwgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiwgS1BJQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRLUElJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uSW5mbyA9IHtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogc3RyaW5nW107XG5cdG91dGJvdW5kTmF2aWdhdGlvbj86IHN0cmluZztcbn07XG5cbnR5cGUgRGltZW5zaW9uRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiBcIlRleHRGaXJzdFwiIHwgXCJUZXh0TGFzdFwiIHwgXCJUZXh0T25seVwiIHwgXCJUZXh0U2VwYXJhdGVcIjtcblx0bGFiZWw6IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEtQSUNoYXJ0RGVmaW5pdGlvbiA9IHtcblx0Y2hhcnRUeXBlOiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRkaW1lbnNpb25zOiBEaW1lbnNpb25EZWZpbml0aW9uW107XG5cdG1lYXN1cmVzOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgcm9sZT86IHN0cmluZyB9W107XG5cdHNvcnRPcmRlcj86IHsgbmFtZTogc3RyaW5nOyBkZXNjZW5kaW5nOiBib29sZWFuIH1bXTtcblx0bWF4SXRlbXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogXCJBbmFseXRpY2FsXCI7XG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoOiBzdHJpbmc7XG5cdGRhdGFwb2ludDoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzPzogbnVtYmVyO1xuXHRcdHVuaXQ/OiB7XG5cdFx0XHR2YWx1ZTogc3RyaW5nO1xuXHRcdFx0aXNQYXRoOiBib29sZWFuO1xuXHRcdFx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0XHR9O1xuXHRcdGNyaXRpY2FsaXR5UGF0aD86IHN0cmluZztcblx0XHRjcml0aWNhbGl0eVZhbHVlPzogTWVzc2FnZVR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGU/OiBJbXByb3ZlbWVudERpcmVjdGlvblR5cGU7XG5cdFx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHM/OiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXTtcblx0XHR0aXRsZT86IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0XHR0cmVuZFBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRWYWx1ZT86IHN0cmluZztcblx0XHR0cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU/OiBudW1iZXI7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGg/OiBzdHJpbmc7XG5cdFx0dHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcz86IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdO1xuXHRcdHRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlPzogYm9vbGVhbjtcblx0XHR0YXJnZXRWYWx1ZT86IG51bWJlcjtcblx0XHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHR9O1xuXHRjaGFydDogS1BJQ2hhcnREZWZpbml0aW9uO1xuXHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/OiBGaWx0ZXJEZWZpbml0aW9uW107XG5cdG5hdmlnYXRpb24/OiBOYXZpZ2F0aW9uSW5mbztcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUtQSURlZmluaXRpb24gPSB7XG5cdHR5cGU6IFwiQ3VzdG9tXCI7XG5cdGtleTogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEtQSURlZmluaXRpb24gPSBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IEN1c3RvbUtQSURlZmluaXRpb247XG5cbmNvbnN0IERldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdFwiVUkuVHJlbmRUeXBlL1N0cm9uZ1VwXCI6IFwiVXBcIixcblx0XCJVSS5UcmVuZFR5cGUvVXBcIjogXCJVcFwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TdHJvbmdEb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9Eb3duXCI6IFwiRG93blwiLFxuXHRcIlVJLlRyZW5kVHlwZS9TaWRld2F5c1wiOiBcIk5vbmVcIlxufTtcblxuY29uc3QgS1BJQ2hhcnRUeXBlRnJvbVVJOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5TdGFja2VkXCI6IFwiU3RhY2tlZENvbHVtblwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9CYXJTdGFja2VkXCI6IFwiU3RhY2tlZEJhclwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Eb251dFwiOiBcIkRvbnV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0xpbmVcIjogXCJMaW5lXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0J1YmJsZVwiOiBcImJ1YmJsZVwiLFxuXHRcIlVJLkNoYXJ0VHlwZS9Db2x1bW5cIjogXCJjb2x1bW5cIixcblx0XCJVSS5DaGFydFR5cGUvQmFyXCI6IFwiYmFyXCIsXG5cdFwiVUkuQ2hhcnRUeXBlL1ZlcnRpY2FsQnVsbGV0XCI6IFwidmVydGljYWxfYnVsbGV0XCIsXG5cdFwiVUkuQ2hhcnRUeXBlL0NvbWJpbmF0aW9uXCI6IFwiY29tYmluYXRpb25cIixcblx0XCJVSS5DaGFydFR5cGUvU2NhdHRlclwiOiBcInNjYXR0ZXJcIlxufTtcblxuZnVuY3Rpb24gY29udmVydEtQSUNoYXJ0KFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogS1BJQ2hhcnREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gV2UgbmVlZCBhdCBsZWFzdCAxIG1lYXN1cmUgKGJ1dCBubyBkaW1lbnNpb24gaXMgYWxsb3dlZCwgZS5nLiBmb3IgYnViYmxlIGNoYXJ0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBjaGFyRGltZW5zaW9ucyA9IGNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zXG5cdFx0PyBjaGFydEFubm90YXRpb24uRGltZW5zaW9ucy5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkaW1BdHRyaWJ1dGUgPSBjaGFydEFubm90YXRpb24uRGltZW5zaW9uQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZS5EaW1lbnNpb24/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGRpbWVuc2lvbkRlZmluaXRpb246IERpbWVuc2lvbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0bmFtZTogcHJvcGVydHlQYXRoLnZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRcdFx0cm9sZTogZGltQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZS9cIiwgXCJcIilcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBkaW1lbnNpb25Qcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgudmFsdWVcblx0XHRcdFx0KS50YXJnZXRPYmplY3Q7XG5cdFx0XHRcdGlmIChkaW1lbnNpb25Qcm9wZXJ0eT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0KSB7XG5cdFx0XHRcdFx0ZGltZW5zaW9uRGVmaW5pdGlvbi50ZXh0ID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZGltZW5zaW9uUHJvcGVydHkpO1xuXHRcdFx0XHRcdGRpbWVuc2lvbkRlZmluaXRpb24udGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdFx0XHRcdChkaW1lbnNpb25Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24uVGV4dC5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvXCIsXG5cdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdCkgPz8gXCJUZXh0Rmlyc3RcIikgYXMgXCJUZXh0Rmlyc3RcIiB8IFwiVGV4dExhc3RcIiB8IFwiVGV4dE9ubHlcIiB8IFwiVGV4dFNlcGFyYXRlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZGltZW5zaW9uRGVmaW5pdGlvbjtcblx0XHQgIH0pXG5cdFx0OiBbXTtcblxuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzLm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0Y29uc3QgbWVhc3VyZUF0dHJpYnV0ZSA9IGNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlQXR0cmlidXRlcz8uZmluZCgoYXR0cmlidXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXR0cmlidXRlLk1lYXN1cmU/LnZhbHVlID09PSBwcm9wZXJ0eVBhdGgudmFsdWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHByb3BlcnR5UGF0aC52YWx1ZSxcblx0XHRcdGxhYmVsOiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBwcm9wZXJ0eVBhdGgudmFsdWUsXG5cdFx0XHRyb2xlOiBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlPy5yZXBsYWNlKFwiVUkuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvXCIsIFwiXCIpXG5cdFx0fTtcblx0fSk7XG5cblx0Y29uc3QgY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24gPSB7XG5cdFx0Y2hhcnRUeXBlOiBLUElDaGFydFR5cGVGcm9tVUlbY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZV0gfHwgXCJMaW5lXCIsXG5cdFx0ZGltZW5zaW9uczogY2hhckRpbWVuc2lvbnMsXG5cdFx0bWVhc3VyZXM6IGNoYXJ0TWVhc3VyZXMsXG5cdFx0c29ydE9yZGVyOiBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyPy5tYXAoKHNvcnRPcmRlcikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogc29ydE9yZGVyLlByb3BlcnR5Py52YWx1ZSB8fCBcIlwiLCBkZXNjZW5kaW5nOiAhIXNvcnRPcmRlci5EZXNjZW5kaW5nIH07XG5cdFx0fSksXG5cdFx0bWF4SXRlbXM6IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcz8udmFsdWVPZigpIGFzIG51bWJlclxuXHR9O1xuXG5cdGNvbnN0IGNoYXJ0VGl0bGUgPSBjaGFydEFubm90YXRpb24uVGl0bGU/LnZhbHVlT2YoKTtcblx0aWYgKGNoYXJ0VGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYXJ0RGVmaW5pdGlvbi50aXRsZSA9IGNoYXJ0VGl0bGU7XG5cdH1cblxuXHRyZXR1cm4gY2hhcnREZWZpbml0aW9uO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDdXJyZW5jeShkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFZhbHVlUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5ID0gdGFyZ2V0VmFsdWVQcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGN1cnJlbmN5KSkge1xuXHRcdFx0a3BpRGVmLmRhdGFwb2ludC51bml0ID0ge1xuXHRcdFx0XHR2YWx1ZTogKGN1cnJlbmN5LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSkubmFtZSxcblx0XHRcdFx0aXNDdXJyZW5jeTogdHJ1ZSxcblx0XHRcdFx0aXNQYXRoOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiBjdXJyZW5jeS50b1N0cmluZygpLFxuXHRcdFx0XHRpc0N1cnJlbmN5OiB0cnVlLFxuXHRcdFx0XHRpc1BhdGg6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRWYWx1ZVByb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0KSB7XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldFZhbHVlUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpKSB7XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnVuaXQgPSB7XG5cdFx0XHRcdHZhbHVlOiAodW5pdC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpLm5hbWUsXG5cdFx0XHRcdGlzQ3VycmVuY3k6IGZhbHNlLFxuXHRcdFx0XHRpc1BhdGg6IHRydWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudW5pdCA9IHtcblx0XHRcdFx0dmFsdWU6IHVuaXQudG9TdHJpbmcoKSxcblx0XHRcdFx0aXNDdXJyZW5jeTogZmFsc2UsXG5cdFx0XHRcdGlzUGF0aDogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNyaXRpY2FsaXR5KFxuXHRkYXRhcG9pbnRBbm5vdGF0aW9uOiBEYXRhUG9pbnRUeXBlLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb25cbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eSkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5KSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5LiR0YXJnZXQ7XG5cdFx0XHRpZiAoY3JpdGljYWxpdHlQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGNyaXRpY2FsaXR5UHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eS5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGlzIGFuIGVudW0gVmFsdWUgLS0+IGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdmFsdWVcblx0XHRcdC8vIFdlIGlnbm9yZSBhbGwgdGhlIG90aGVyIHR5cGUgb2YgZHluYW1pYyBleHByZXNzaW9ucyBmb3Igbm93XG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBDcml0aWNhbGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbikge1xuXHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb247XG5cdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyA9IFtdO1xuXHRcdHN3aXRjaCAoa3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5EZXZpYXRpb25SYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUxvd1ZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5BY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcy5wdXNoKGRhdGFwb2ludEFubm90YXRpb24uQ3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Ub2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUpO1xuXHRcdFx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzLnB1c2goZGF0YXBvaW50QW5ub3RhdGlvbi5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uLkRldmlhdGlvblJhbmdlSGlnaFZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSk7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMucHVzaChkYXRhcG9pbnRBbm5vdGF0aW9uLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyZW5kKGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUsIGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHZvaWQge1xuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZCkge1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kKSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBwYXRoIC0tPiBjaGVjayBpZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGVcblx0XHRcdGNvbnN0IHRyZW5kUHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kLiR0YXJnZXQ7XG5cdFx0XHRpZiAodHJlbmRQcm9wZXJ0eSAmJiBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKHRyZW5kUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZC5wYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gVGhlIHByb3BlcnR5IGlzbid0IGFnZ3JlZ2F0YWJsZSAtLT4gd2UgaWdub3JlIGl0XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhbiBlbnVtIFZhbHVlIC0tPiBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHZhbHVlXG5cdFx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBEZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlW2RhdGFwb2ludEFubm90YXRpb24uVHJlbmRdIHx8IFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24pIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLklzUmVsYXRpdmVEaWZmZXJlbmNlID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gUmVmZXJlbmNlIHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlXG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5SZWZlcmVuY2VWYWx1ZS4kdGFyZ2V0IGFzIFByb3BlcnR5O1xuXHRcdFx0aWYgKGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlBZ2dyZWdhdGFibGUocmVmZXJlbmNlUHJvcGVydHkpKSB7XG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRyZW5kQ2FsY3VsYXRpb24uUmVmZXJlbmNlVmFsdWUucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSBpc24ndCBhZ2dyZWdhdGFibGUgLS0+IHdlIGlnbm9yZSBpdCBhbmQgc3dpdGNoIGJhY2sgdG8gdHJlbmQgJ05vbmUnXG5cdFx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBSZWZlcmVuY2UgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlJlZmVyZW5jZVZhbHVlO1xuXHRcdH1cblx0XHRpZiAoa3BpRGVmLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCAhPT0gdW5kZWZpbmVkIHx8IGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyA9IFtcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlN0cm9uZ0Rvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLkRvd25EaWZmZXJlbmNlLnZhbHVlT2YoKSxcblx0XHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbi5UcmVuZENhbGN1bGF0aW9uLlVwRGlmZmVyZW5jZS52YWx1ZU9mKCksXG5cdFx0XHRcdGRhdGFwb2ludEFubm90YXRpb24uVHJlbmRDYWxjdWxhdGlvbi5TdHJvbmdVcERpZmZlcmVuY2UudmFsdWVPZigpXG5cdFx0XHRdO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50LnRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVUYXJnZXQoZGF0YXBvaW50QW5ub3RhdGlvbjogRGF0YVBvaW50VHlwZSwgYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWY6IEFuYWx5dGljYWxLUElEZWZpbml0aW9uKTogdm9pZCB7XG5cdGlmIChkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlKSB7XG5cdFx0aWYgKGRhdGFwb2ludEFubm90YXRpb24uVGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly8gVGFyZ2V0IHZhbHVlIGlzIGEgcGF0aCAtLT4gY2hlY2sgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlIChvdGhlcndpc2UgaWdub3JlKVxuXHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSh0YXJnZXRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0a3BpRGVmLmRhdGFwb2ludC50YXJnZXRQYXRoID0gZGF0YXBvaW50QW5ub3RhdGlvbi5UYXJnZXRWYWx1ZS5wYXRoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYXJnZXQgdmFsdWUgaXMgYSBzdGF0aWMgdmFsdWVcblx0XHRcdGtwaURlZi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPSBkYXRhcG9pbnRBbm5vdGF0aW9uLlRhcmdldFZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uSW5mb0Zyb21Qcm9wZXJ0eShwcm9wZXJ0eTogUHJvcGVydHkpOiBOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnNbXCJDb21tb25cIl0gfHwge307XG5cdC8vIExvb2sgZm9yIHRoZSBzZW1hbnRpY09iamVjdCBhbm5vdGF0aW9uIChpZiBhbnkpXG5cdGxldCBzZW1hbnRpY09iamVjdEFubm90YXRpb246IFNlbWFudGljT2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZm9yRWFjaCgoYW5ub3RhdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybShhbm5vdGF0aW9uLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpKSB7XG5cdFx0XHRpZiAoIWFubm90YXRpb24ucXVhbGlmaWVyIHx8ICFzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHRha2UgdGhlIGFubm90YXRpb24gd2l0aG91dCBxdWFsaWZpZXIgaWYgdGhlcmUncyBvbmUsIG90aGVyd2lzZSB3ZSB0YWtlIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0c2VtYW50aWNPYmplY3RBbm5vdGF0aW9uID0gYW5ub3RhdGlvbiBhcyBTZW1hbnRpY09iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChzZW1hbnRpY09iamVjdEFubm90YXRpb24pIHtcblx0XHRjb25zdCByZXN1bHQ6IE5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvbi50b1N0cmluZygpLFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBbXVxuXHRcdH07XG5cblx0XHQvLyBMb29rIGZvciB0aGUgdW5hdmFpbGFibGUgYWN0aW9ucyAoaWYgYW55KVxuXHRcdGNvbnN0IGFubm90YXRpb25LZXkgPSBPYmplY3Qua2V5cyhhbm5vdGF0aW9ucykuZmluZCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc107XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRpc0Fubm90YXRpb25PZlRlcm0oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSAmJlxuXHRcdFx0XHRhbm5vdGF0aW9uLnF1YWxpZmllciA9PT0gc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uPy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0aWYgKGFubm90YXRpb25LZXkpIHtcblx0XHRcdHJlc3VsdC51bmF2YWlsYWJsZUFjdGlvbnMgPSBhbm5vdGF0aW9uc1thbm5vdGF0aW9uS2V5IGFzIGtleW9mIHR5cGVvZiBhbm5vdGF0aW9uc10gYXMgc3RyaW5nW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tS1BJQ29uZmlndXJhdGlvbihrcGlDb25maWc6IEtQSUNvbmZpZ3VyYXRpb24pOiBrcGlDb25maWcgaXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbiB7XG5cdHJldHVybiAhIShrcGlDb25maWcgYXMgQ3VzdG9tS1BJQ29uZmlndXJhdGlvbikudGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuYWx5dGljYWxLUElEZWZpbml0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGtwaUNvbmZpZzogQW5hbHl0aWNhbEtQSUNvbmZpZ3VyYXRpb24sXG5cdGtwaU5hbWU6IHN0cmluZ1xuKTogQW5hbHl0aWNhbEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgY29udGV4dFBhdGggPSBcIlwiO1xuXHRpZiAoa3BpQ29uZmlnLmNvbnRleHRQYXRoKSB7XG5cdFx0Y29udGV4dFBhdGggPSBrcGlDb25maWcuY29udGV4dFBhdGg7XG5cdH0gZWxzZSBpZiAoa3BpQ29uZmlnLmVudGl0eVNldCkge1xuXHRcdGNvbnRleHRQYXRoID0gYC8ke2twaUNvbmZpZy5lbnRpdHlTZXR9YDtcblx0fVxuXHRjb25zdCBrcGlDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oY29udGV4dFBhdGgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwga3BpQ29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0Ly8gVGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTWVkaXVtLCBJc3N1ZVR5cGUuS1BJX0lTU1VFUy5OT19BTkFMWVRJQ1MgKyBjb250ZXh0UGF0aCk7XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IGRhdGFwb2ludEFubm90YXRpb246IERhdGFQb2ludFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGxldCBjaGFydEFubm90YXRpb246IENoYXJ0IHwgdW5kZWZpbmVkO1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IE5hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXG5cdC8vIFNlYXJjaCBmb3IgYSBLUEkgd2l0aCB0aGUgcXVhbGlmaWVyIGZybW8gdGhlIG1hbmlmZXN0XG5cdGNvbnN0IGFLUElBbm5vdGF0aW9ucyA9IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5LUEkpIGFzIEtQSVtdO1xuXHRjb25zdCB0YXJnZXRLUEkgPSBhS1BJQW5ub3RhdGlvbnMuZmluZCgoa3BpKSA9PiB7XG5cdFx0cmV0dXJuIGtwaS5xdWFsaWZpZXIgPT09IGtwaUNvbmZpZy5xdWFsaWZpZXI7XG5cdH0pO1xuXHRpZiAodGFyZ2V0S1BJKSB7XG5cdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EYXRhUG9pbnQ7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gPSB0YXJnZXRLUEkuU2VsZWN0aW9uVmFyaWFudDtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldEtQSS5EZXRhaWw/LkRlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0fSk/LiR0YXJnZXQgYXMgQ2hhcnQ7XG5cblx0XHRpZiAodGFyZ2V0S1BJLkRldGFpbD8uU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdDogdGFyZ2V0S1BJLkRldGFpbC5TZW1hbnRpY09iamVjdC50b1N0cmluZygpLFxuXHRcdFx0XHRhY3Rpb246IHRhcmdldEtQSS5EZXRhaWwuQWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgYSBTUFYgd2l0aCB0aGUgc2FtZSBxdWFsaWZpZXJcblx0XHRjb25zdCBhU1BWQW5ub3RhdGlvbnMgPSBrcGlDb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJVSVwiLFxuXHRcdFx0VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdCkgYXMgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFtdO1xuXHRcdGNvbnN0IHRhcmdldFNQViA9IGFTUFZBbm5vdGF0aW9ucy5maW5kKChzcHYpID0+IHtcblx0XHRcdHJldHVybiBzcHYucXVhbGlmaWVyID09PSBrcGlDb25maWcucXVhbGlmaWVyO1xuXHRcdH0pO1xuXHRcdGlmICh0YXJnZXRTUFYpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gdGFyZ2V0U1BWLlNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiA9IHRhcmdldFNQVi5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdFx0ZGF0YXBvaW50QW5ub3RhdGlvbiA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucz8uZmluZCgodml6KSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RGF0YVBvaW50Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0XHRjaGFydEFubm90YXRpb24gPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpeikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPENoYXJ0Pih2aXouJHRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZSk7XG5cdFx0XHR9KT8uJHRhcmdldCBhcyBDaGFydDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ291bGRuJ3QgZmluZCBhIEtQSSBvciBhIFNQViBhbm5vdGF0aW9uIHdpdGggdGhlIHF1YWxpZmllciBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX05PVF9GT1VORCArIGtwaUNvbmZpZy5xdWFsaWZpZXIpO1xuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gfHwgIWRhdGFwb2ludEFubm90YXRpb24gfHwgIWNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdC8vIENvdWxkbid0IGZpbmQgYSBjaGFydCBvciBkYXRhcG9pbnQgZGVmaW5pdGlvblxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5Lk1lZGl1bSwgSXNzdWVUeXBlLktQSV9JU1NVRVMuS1BJX0RFVEFJTF9OT1RfRk9VTkQgKyBrcGlDb25maWcucXVhbGlmaWVyKTtcblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBkYXRhcG9pbnRQcm9wZXJ0eSA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5QWdncmVnYXRhYmxlKGRhdGFwb2ludFByb3BlcnR5KSkge1xuXHRcdC8vIFRoZSBtYWluIHByb3BlcnR5IG9mIHRoZSBLUEkgaXMgbm90IGFnZ3JlZ2F0YWJsZSAtLT4gV2UgY2FuJ3QgY2FsY3VsYXRlIGl0cyB2YWx1ZSBzbyB3ZSBpZ25vcmUgdGhlIEtQSVxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdElzc3VlVHlwZS5LUElfSVNTVUVTLk1BSU5fUFJPUEVSVFlfTk9UX0FHR1JFR0FUQUJMRSArIGtwaUNvbmZpZy5xdWFsaWZpZXJcblx0XHRcdCk7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIENoYXJ0IGRlZmluaXRpb25cblx0Y29uc3QgY2hhcnREZWYgPSBjb252ZXJ0S1BJQ2hhcnQoY2hhcnRBbm5vdGF0aW9uLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghY2hhcnREZWYpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qga3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRpZDogXCJrcGlUYWctXCIgKyBnZXRLUElJRChrcGlOYW1lKSxcblx0XHRjb250ZXh0UGF0aCxcblx0XHRkYXRhcG9pbnQ6IHtcblx0XHRcdHByb3BlcnR5UGF0aDogZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZS5wYXRoLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGtwaUNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhcG9pbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHR0aXRsZTogZGF0YXBvaW50QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhcG9pbnRBbm5vdGF0aW9uLkRlc2NyaXB0aW9uPy50b1N0cmluZygpXG5cdFx0fSxcblx0XHRzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM6IHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IGdldEZpbHRlckRlZmluaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjaGFydDogY2hhcnREZWZcblx0fTtcblxuXHRpZiAoZGF0YXBvaW50QW5ub3RhdGlvbi5WYWx1ZUZvcm1hdD8uTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRrcGlEZWYuZGF0YXBvaW50Lm51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFwb2ludEFubm90YXRpb24uVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLnZhbHVlT2YoKTtcblx0fVxuXG5cdC8vIE5hdmlnYXRpb25cblx0aWYgKCFuYXZpZ2F0aW9uSW5mbykge1xuXHRcdC8vIE5vIG5hdmlnYXRpb25JbmZvIHdhcyBmb3VuZCBpbiB0aGUgS1BJIGFubm90YXRpb24gLS0+IHRyeSB0aGUgb3V0Ym91bmQgbmF2aWdhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdGlmIChrcGlDb25maWcuZGV0YWlsTmF2aWdhdGlvbikge1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdG91dGJvdW5kTmF2aWdhdGlvbjoga3BpQ29uZmlnLmRldGFpbE5hdmlnYXRpb25cblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG91dGJvdW5kIG5hdmlnYXRpb24gaW4gdGhlIG1hbmlmZXN0IC0tPiB0cnkgdGhlIHNlbWFudGljIG9iamVjdCBvbiB0aGUgRGF0YXBvaW50IHZhbHVlXG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IGdldE5hdmlnYXRpb25JbmZvRnJvbVByb3BlcnR5KGRhdGFwb2ludFByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0aWYgKG5hdmlnYXRpb25JbmZvKSB7XG5cdFx0a3BpRGVmLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSW5mbztcblx0fVxuXG5cdHVwZGF0ZUN1cnJlbmN5KGRhdGFwb2ludEFubm90YXRpb24sIGtwaURlZik7XG5cdHVwZGF0ZUNyaXRpY2FsaXR5KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXHR1cGRhdGVUcmVuZChkYXRhcG9pbnRBbm5vdGF0aW9uLCBhZ2dyZWdhdGlvbkhlbHBlciwga3BpRGVmKTtcblx0dXBkYXRlVGFyZ2V0KGRhdGFwb2ludEFubm90YXRpb24sIGFnZ3JlZ2F0aW9uSGVscGVyLCBrcGlEZWYpO1xuXG5cdHJldHVybiBrcGlEZWY7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtQSURlZmluaXRpb24oXG5cdGtwaU5hbWU6IHN0cmluZyxcblx0a3BpQ29uZmlnOiBLUElDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEtQSURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNDdXN0b21LUElDb25maWd1cmF0aW9uKGtwaUNvbmZpZykpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogXCJDdXN0b21cIixcblx0XHRcdGtleToga3BpTmFtZSxcblx0XHRcdHRlbXBsYXRlOiBrcGlDb25maWcudGVtcGxhdGVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjcmVhdGVBbmFseXRpY2FsS1BJRGVmaW5pdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBrcGlDb25maWcsIGtwaU5hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgS1BJIGRlZmluaXRpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCB0aGUgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIEtQSSBkZWZpbml0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0S1BJRGVmaW5pdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogS1BJRGVmaW5pdGlvbltdIHtcblx0Y29uc3Qga3BpQ29uZmlncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0S1BJQ29uZmlndXJhdGlvbigpLFxuXHRcdGtwaURlZnM6IEtQSURlZmluaXRpb25bXSA9IFtdO1xuXG5cdE9iamVjdC5rZXlzKGtwaUNvbmZpZ3MpLmZvckVhY2goKGtwaU5hbWUpID0+IHtcblx0XHRjb25zdCBvRGVmID0gY3JlYXRlS1BJRGVmaW5pdGlvbihrcGlOYW1lLCBrcGlDb25maWdzW2twaU5hbWVdLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAob0RlZikge1xuXHRcdFx0a3BpRGVmcy5wdXNoKG9EZWYp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
|
|
@@ -19,6 +19,8 @@ import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/
|
|
|
19
19
|
import type { FilterDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
|
|
20
20
|
import { getFilterDefinitionsFromSelectionVariant } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
|
|
21
21
|
import { isAnnotationOfTerm, isAnnotationOfType, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
22
|
+
import { enhanceDataModelPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
23
|
+
import { getAssociatedTextPropertyPath } from "sap/fe/core/templating/PropertyHelper";
|
|
22
24
|
import MessageType from "sap/ui/core/message/MessageType";
|
|
23
25
|
import type { AnalyticalKPIConfiguration, CustomKPIConfiguration, KPIConfiguration } from "../../ManifestSettings";
|
|
24
26
|
import { AggregationHelper } from "../../helpers/Aggregation";
|
|
@@ -32,9 +34,18 @@ export type NavigationInfo = {
|
|
|
32
34
|
outboundNavigation?: string;
|
|
33
35
|
};
|
|
34
36
|
|
|
37
|
+
type DimensionDefinition = {
|
|
38
|
+
name: string;
|
|
39
|
+
text?: string;
|
|
40
|
+
textArrangement?: "TextFirst" | "TextLast" | "TextOnly" | "TextSeparate";
|
|
41
|
+
label: string;
|
|
42
|
+
role?: string;
|
|
43
|
+
};
|
|
44
|
+
|
|
35
45
|
export type KPIChartDefinition = {
|
|
36
46
|
chartType: string;
|
|
37
|
-
|
|
47
|
+
title?: string;
|
|
48
|
+
dimensions: DimensionDefinition[];
|
|
38
49
|
measures: { name: string; label: string; role?: string }[];
|
|
39
50
|
sortOrder?: { name: string; descending: boolean }[];
|
|
40
51
|
maxItems?: number;
|
|
@@ -47,6 +58,7 @@ export type AnalyticalKPIDefinition = {
|
|
|
47
58
|
datapoint: {
|
|
48
59
|
annotationPath: string;
|
|
49
60
|
propertyPath: string;
|
|
61
|
+
numberOfFractionalDigits?: number;
|
|
50
62
|
unit?: {
|
|
51
63
|
value: string;
|
|
52
64
|
isPath: boolean;
|
|
@@ -100,7 +112,11 @@ const KPIChartTypeFromUI: Record<string, string> = {
|
|
|
100
112
|
"UI.ChartType/Scatter": "scatter"
|
|
101
113
|
};
|
|
102
114
|
|
|
103
|
-
function convertKPIChart(
|
|
115
|
+
function convertKPIChart(
|
|
116
|
+
chartAnnotation: Chart,
|
|
117
|
+
presentationVariantAnnotation: PresentationVariantType,
|
|
118
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
119
|
+
): KPIChartDefinition | undefined {
|
|
104
120
|
if (chartAnnotation.Measures === undefined) {
|
|
105
121
|
// We need at least 1 measure (but no dimension is allowed, e.g. for bubble chart)
|
|
106
122
|
return undefined;
|
|
@@ -111,11 +127,27 @@ function convertKPIChart(chartAnnotation: Chart, presentationVariantAnnotation:
|
|
|
111
127
|
const dimAttribute = chartAnnotation.DimensionAttributes?.find((attribute) => {
|
|
112
128
|
return attribute.Dimension?.value === propertyPath.value;
|
|
113
129
|
});
|
|
114
|
-
|
|
130
|
+
|
|
131
|
+
const dimensionDefinition: DimensionDefinition = {
|
|
115
132
|
name: propertyPath.value,
|
|
116
133
|
label: propertyPath.$target?.annotations.Common?.Label?.toString() || propertyPath.value,
|
|
117
134
|
role: dimAttribute?.Role?.replace("UI.ChartDimensionRoleType/", "")
|
|
118
135
|
};
|
|
136
|
+
|
|
137
|
+
const dimensionProperty = enhanceDataModelPath<Property>(
|
|
138
|
+
converterContext.getDataModelObjectPath(),
|
|
139
|
+
propertyPath.value
|
|
140
|
+
).targetObject;
|
|
141
|
+
if (dimensionProperty?.annotations.Common?.Text) {
|
|
142
|
+
dimensionDefinition.text = getAssociatedTextPropertyPath(dimensionProperty);
|
|
143
|
+
dimensionDefinition.textArrangement =
|
|
144
|
+
(dimensionProperty.annotations.Common.Text.annotations?.UI?.TextArrangement?.toString().replace(
|
|
145
|
+
"UI.TextArrangementType/",
|
|
146
|
+
""
|
|
147
|
+
) ?? "TextFirst") as "TextFirst" | "TextLast" | "TextOnly" | "TextSeparate";
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return dimensionDefinition;
|
|
119
151
|
})
|
|
120
152
|
: [];
|
|
121
153
|
|
|
@@ -130,7 +162,7 @@ function convertKPIChart(chartAnnotation: Chart, presentationVariantAnnotation:
|
|
|
130
162
|
};
|
|
131
163
|
});
|
|
132
164
|
|
|
133
|
-
|
|
165
|
+
const chartDefinition: KPIChartDefinition = {
|
|
134
166
|
chartType: KPIChartTypeFromUI[chartAnnotation.ChartType] || "Line",
|
|
135
167
|
dimensions: charDimensions,
|
|
136
168
|
measures: chartMeasures,
|
|
@@ -139,6 +171,13 @@ function convertKPIChart(chartAnnotation: Chart, presentationVariantAnnotation:
|
|
|
139
171
|
}),
|
|
140
172
|
maxItems: presentationVariantAnnotation?.MaxItems?.valueOf() as number
|
|
141
173
|
};
|
|
174
|
+
|
|
175
|
+
const chartTitle = chartAnnotation.Title?.valueOf();
|
|
176
|
+
if (chartTitle !== undefined) {
|
|
177
|
+
chartDefinition.title = chartTitle;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return chartDefinition;
|
|
142
181
|
}
|
|
143
182
|
|
|
144
183
|
function updateCurrency(datapointAnnotation: DataPointType, kpiDef: AnalyticalKPIDefinition): void {
|
|
@@ -428,7 +467,7 @@ function createAnalyticalKPIDefinition(
|
|
|
428
467
|
}
|
|
429
468
|
|
|
430
469
|
// Chart definition
|
|
431
|
-
const chartDef = convertKPIChart(chartAnnotation, presentationVariantAnnotation);
|
|
470
|
+
const chartDef = convertKPIChart(chartAnnotation, presentationVariantAnnotation, converterContext);
|
|
432
471
|
if (!chartDef) {
|
|
433
472
|
return undefined;
|
|
434
473
|
}
|
|
@@ -449,6 +488,10 @@ function createAnalyticalKPIDefinition(
|
|
|
449
488
|
chart: chartDef
|
|
450
489
|
};
|
|
451
490
|
|
|
491
|
+
if (datapointAnnotation.ValueFormat?.NumberOfFractionalDigits !== undefined) {
|
|
492
|
+
kpiDef.datapoint.numberOfFractionalDigits = datapointAnnotation.ValueFormat.NumberOfFractionalDigits.valueOf();
|
|
493
|
+
}
|
|
494
|
+
|
|
452
495
|
// Navigation
|
|
453
496
|
if (!navigationInfo) {
|
|
454
497
|
// No navigationInfo was found in the KPI annotation --> try the outbound navigation from the manifest
|