@sapui5/sap.fe.core 1.99.0 → 1.100.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 +4 -2
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +1 -69
- package/src/sap/fe/core/AnnotationHelper.ts +0 -70
- package/src/sap/fe/core/AppComponent.js +388 -399
- package/src/sap/fe/core/AppComponent.ts +403 -0
- package/src/sap/fe/core/AppStateHandler.js +127 -158
- package/src/sap/fe/core/BaseController.js +82 -58
- package/src/sap/fe/core/BaseController.ts +68 -0
- package/src/sap/fe/core/CommonUtils.js +111 -20
- package/src/sap/fe/core/CommonUtils.ts +131 -32
- package/src/sap/fe/core/ExtensionAPI.js +278 -274
- package/src/sap/fe/core/ExtensionAPI.ts +250 -0
- package/src/sap/fe/core/PageController.js +157 -29
- package/src/sap/fe/core/PageController.ts +60 -32
- package/src/sap/fe/core/RouterProxy.js +694 -756
- package/src/sap/fe/core/RouterProxy.ts +11 -9
- package/src/sap/fe/core/Synchronization.js +21 -31
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +10 -3
- package/src/sap/fe/core/TemplateModel.js +20 -38
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/TransactionHelper.js +1354 -1370
- package/src/sap/fe/core/TransactionHelper.ts +33 -22
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
- package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
- package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/src/sap/fe/core/actions/draft.js +30 -68
- package/src/sap/fe/core/actions/draft.ts +44 -71
- package/src/sap/fe/core/actions/messageHandling.js +55 -36
- package/src/sap/fe/core/actions/messageHandling.ts +66 -46
- package/src/sap/fe/core/actions/operations.js +34 -15
- package/src/sap/fe/core/actions/operations.ts +48 -18
- package/src/sap/fe/core/actions/sticky.js +17 -4
- package/src/sap/fe/core/actions/sticky.ts +21 -4
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
- package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
- package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
- package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
- package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Share.js +230 -268
- package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
- package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
- package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/src/sap/fe/core/controls/CommandExecution.js +67 -66
- package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
- package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
- package/src/sap/fe/core/controls/FilterBar.js +162 -159
- package/src/sap/fe/core/controls/FilterBar.ts +143 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
- package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
- package/src/sap/fe/core/converters/ConverterContext.js +348 -379
- package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
- package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
- package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
- package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
- package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
- package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
- package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
- package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
- package/src/sap/fe/core/converters/helpers/Key.js +42 -57
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
- package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
- package/src/sap/fe/core/fpm/Component.js +50 -54
- package/src/sap/fe/core/fpm/Component.ts +48 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
- package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
- package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
- package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
- package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
- package/src/sap/fe/core/library.js +426 -451
- package/src/sap/fe/core/library.support.js +22 -33
- package/src/sap/fe/core/library.support.ts +23 -0
- package/src/sap/fe/core/library.ts +420 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
- package/src/sap/fe/core/messagebundle.properties +22 -5
- package/src/sap/fe/core/messagebundle_ar.properties +27 -7
- package/src/sap/fe/core/messagebundle_bg.properties +27 -7
- package/src/sap/fe/core/messagebundle_ca.properties +27 -7
- package/src/sap/fe/core/messagebundle_cs.properties +27 -7
- package/src/sap/fe/core/messagebundle_cy.properties +27 -7
- package/src/sap/fe/core/messagebundle_da.properties +27 -7
- package/src/sap/fe/core/messagebundle_de.properties +27 -7
- package/src/sap/fe/core/messagebundle_el.properties +27 -7
- package/src/sap/fe/core/messagebundle_en.properties +27 -7
- package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
- package/src/sap/fe/core/messagebundle_es.properties +27 -7
- package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
- package/src/sap/fe/core/messagebundle_et.properties +27 -7
- package/src/sap/fe/core/messagebundle_fi.properties +28 -8
- package/src/sap/fe/core/messagebundle_fr.properties +28 -8
- package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
- package/src/sap/fe/core/messagebundle_hi.properties +27 -7
- package/src/sap/fe/core/messagebundle_hr.properties +27 -7
- package/src/sap/fe/core/messagebundle_hu.properties +27 -7
- package/src/sap/fe/core/messagebundle_id.properties +27 -7
- package/src/sap/fe/core/messagebundle_it.properties +27 -7
- package/src/sap/fe/core/messagebundle_iw.properties +27 -7
- package/src/sap/fe/core/messagebundle_ja.properties +26 -6
- package/src/sap/fe/core/messagebundle_kk.properties +27 -7
- package/src/sap/fe/core/messagebundle_ko.properties +27 -7
- package/src/sap/fe/core/messagebundle_lt.properties +27 -7
- package/src/sap/fe/core/messagebundle_lv.properties +28 -8
- package/src/sap/fe/core/messagebundle_ms.properties +27 -7
- package/src/sap/fe/core/messagebundle_nl.properties +27 -7
- package/src/sap/fe/core/messagebundle_no.properties +27 -7
- package/src/sap/fe/core/messagebundle_pl.properties +27 -7
- package/src/sap/fe/core/messagebundle_pt.properties +28 -8
- package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
- package/src/sap/fe/core/messagebundle_ro.properties +27 -7
- package/src/sap/fe/core/messagebundle_ru.properties +27 -7
- package/src/sap/fe/core/messagebundle_sh.properties +27 -7
- package/src/sap/fe/core/messagebundle_sk.properties +27 -7
- package/src/sap/fe/core/messagebundle_sl.properties +27 -7
- package/src/sap/fe/core/messagebundle_sv.properties +27 -7
- package/src/sap/fe/core/messagebundle_th.properties +26 -6
- package/src/sap/fe/core/messagebundle_tr.properties +30 -10
- package/src/sap/fe/core/messagebundle_uk.properties +27 -7
- package/src/sap/fe/core/messagebundle_vi.properties +27 -7
- package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
- package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
- package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
- package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +36 -48
- package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
- package/src/sap/fe/core/templating/FilterHelper.js +25 -32
- package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +32 -26
- package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
|
@@ -93,7 +93,7 @@ export type LengthExpression = BaseExpression<string> & {
|
|
|
93
93
|
};
|
|
94
94
|
|
|
95
95
|
export type UnresolveableBindingExpression = BaseExpression<string> & {
|
|
96
|
-
_type: "
|
|
96
|
+
_type: "Unresolvable";
|
|
97
97
|
};
|
|
98
98
|
|
|
99
99
|
/**
|
|
@@ -177,7 +177,7 @@ export type Expression<T> =
|
|
|
177
177
|
export type ExpressionOrPrimitive<T extends PrimitiveType> = Expression<T> | T;
|
|
178
178
|
|
|
179
179
|
export const unresolveableExpression: UnresolveableBindingExpression = {
|
|
180
|
-
_type: "
|
|
180
|
+
_type: "Unresolvable"
|
|
181
181
|
};
|
|
182
182
|
|
|
183
183
|
function escapeXmlAttribute(inputString: string) {
|
|
@@ -185,7 +185,7 @@ function escapeXmlAttribute(inputString: string) {
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
export function hasUnresolveableExpression(...expressions: Expression<any>[]): boolean {
|
|
188
|
-
return expressions.find(expr => expr._type === "
|
|
188
|
+
return expressions.find(expr => expr._type === "Unresolvable") !== undefined;
|
|
189
189
|
}
|
|
190
190
|
/**
|
|
191
191
|
* Check two expressions for (deep) equality.
|
|
@@ -200,8 +200,8 @@ export function _checkExpressionsAreEqual<T>(a: Expression<T>, b: Expression<T>)
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
switch (a._type) {
|
|
203
|
-
case "
|
|
204
|
-
return false; //
|
|
203
|
+
case "Unresolvable":
|
|
204
|
+
return false; // Unresolvable is never equal to anything even itself
|
|
205
205
|
case "Constant":
|
|
206
206
|
case "EmbeddedBinding":
|
|
207
207
|
case "EmbeddedExpressionBinding":
|
|
@@ -976,7 +976,7 @@ function comparison<T extends PrimitiveType>(
|
|
|
976
976
|
}
|
|
977
977
|
|
|
978
978
|
export function length(expression: BindingExpressionExpression<any> | UnresolveableBindingExpression): Expression<number> {
|
|
979
|
-
if (expression._type === "
|
|
979
|
+
if (expression._type === "Unresolvable") {
|
|
980
980
|
return expression;
|
|
981
981
|
}
|
|
982
982
|
return {
|
|
@@ -1636,7 +1636,7 @@ export function compileBinding<T extends PrimitiveType>(
|
|
|
1636
1636
|
const embeddedSeparator = keepTargetType ? "$" : "%";
|
|
1637
1637
|
|
|
1638
1638
|
switch (expr._type) {
|
|
1639
|
-
case "
|
|
1639
|
+
case "Unresolvable":
|
|
1640
1640
|
return undefined;
|
|
1641
1641
|
|
|
1642
1642
|
case "Constant":
|
|
@@ -2,23 +2,21 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/util/ObjectPath", "sap/base/
|
|
5
|
+
sap.ui.define(["sap/base/util/ObjectPath", "sap/ui/core/ElementMetadata", "sap/ui/base/Metadata", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/ui/core/mvc/ControllerMetadata", "sap/base/util/uid", "sap/base/util/merge"], function (ObjectPath, ElementMetadata, Metadata, ControllerExtensionMetadata, ControllerMetadata, uid, merge) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
|
|
10
10
|
var ensureMetadata = function (target) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
11
|
+
target.metadata = merge({
|
|
12
|
+
controllerExtensions: {},
|
|
13
|
+
properties: {},
|
|
14
|
+
macroContexts: {},
|
|
15
|
+
aggregations: {},
|
|
16
|
+
associations: {},
|
|
17
|
+
methods: {},
|
|
18
|
+
events: {}
|
|
19
|
+
}, target.metadata || {});
|
|
22
20
|
return target.metadata;
|
|
23
21
|
};
|
|
24
22
|
|
|
@@ -62,8 +60,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
62
60
|
|
|
63
61
|
_exports.Extensible = Extensible;
|
|
64
62
|
|
|
65
|
-
function Public(target, propertyKey) {
|
|
63
|
+
function Public(target, propertyKey, descriptor) {
|
|
66
64
|
var metadata = ensureMetadata(target);
|
|
65
|
+
descriptor.enumerable = true;
|
|
67
66
|
|
|
68
67
|
if (!metadata.methods[propertyKey]) {
|
|
69
68
|
metadata.methods[propertyKey] = {};
|
|
@@ -74,8 +73,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
74
73
|
|
|
75
74
|
_exports.Public = Public;
|
|
76
75
|
|
|
77
|
-
function Private(target, propertyKey) {
|
|
76
|
+
function Private(target, propertyKey, descriptor) {
|
|
78
77
|
var metadata = ensureMetadata(target);
|
|
78
|
+
descriptor.enumerable = true;
|
|
79
79
|
|
|
80
80
|
if (!metadata.methods[propertyKey]) {
|
|
81
81
|
metadata.methods[propertyKey] = {};
|
|
@@ -86,8 +86,9 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
86
86
|
|
|
87
87
|
_exports.Private = Private;
|
|
88
88
|
|
|
89
|
-
function Final(target, propertyKey) {
|
|
89
|
+
function Final(target, propertyKey, descriptor) {
|
|
90
90
|
var metadata = ensureMetadata(target);
|
|
91
|
+
descriptor.enumerable = true;
|
|
91
92
|
|
|
92
93
|
if (!metadata.methods[propertyKey]) {
|
|
93
94
|
metadata.methods[propertyKey] = {};
|
|
@@ -128,6 +129,17 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
128
129
|
|
|
129
130
|
_exports.MacroContext = MacroContext;
|
|
130
131
|
|
|
132
|
+
function UsingExtension(extensionClass) {
|
|
133
|
+
return function (target, propertyKey, propertyDescriptor) {
|
|
134
|
+
var metadata = ensureMetadata(target);
|
|
135
|
+
delete propertyDescriptor.initializer;
|
|
136
|
+
metadata.controllerExtensions[propertyKey] = extensionClass;
|
|
137
|
+
return propertyDescriptor;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
_exports.UsingExtension = UsingExtension;
|
|
142
|
+
|
|
131
143
|
function Property(oPropertyParams) {
|
|
132
144
|
return function (target, propertyKey, propertyDescriptor) {
|
|
133
145
|
var metadata = ensureMetadata(target);
|
|
@@ -143,15 +155,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
143
155
|
}
|
|
144
156
|
|
|
145
157
|
delete propertyDescriptor.writable;
|
|
146
|
-
delete propertyDescriptor.initializer;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
propertyDescriptor.get = function () {
|
|
153
|
-
return this.getProperty(propertyKey);
|
|
154
|
-
};
|
|
158
|
+
delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
|
|
159
|
+
// return this.setProperty(propertyKey, v);
|
|
160
|
+
// };
|
|
161
|
+
// (propertyDescriptor as any).get = function() {
|
|
162
|
+
// return this.getProperty(propertyKey);
|
|
163
|
+
// };
|
|
155
164
|
|
|
156
165
|
return propertyDescriptor;
|
|
157
166
|
};
|
|
@@ -172,15 +181,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
172
181
|
}
|
|
173
182
|
|
|
174
183
|
delete propertyDescriptor.writable;
|
|
175
|
-
delete propertyDescriptor.initializer;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
propertyDescriptor.get = function () {
|
|
182
|
-
return this.getAggregation(propertyKey);
|
|
183
|
-
};
|
|
184
|
+
delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
|
|
185
|
+
// return this.setAggregation(propertyKey, v);
|
|
186
|
+
// };
|
|
187
|
+
// (propertyDescriptor as any).get = function() {
|
|
188
|
+
// return this.getAggregation(propertyKey);
|
|
189
|
+
// };
|
|
184
190
|
|
|
185
191
|
return propertyDescriptor;
|
|
186
192
|
};
|
|
@@ -197,15 +203,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
197
203
|
}
|
|
198
204
|
|
|
199
205
|
delete propertyDescriptor.writable;
|
|
200
|
-
delete propertyDescriptor.initializer;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
propertyDescriptor.get = function () {
|
|
207
|
-
return this.getAggregation(propertyKey);
|
|
208
|
-
};
|
|
206
|
+
delete propertyDescriptor.initializer; // (propertyDescriptor as any).set = function(v: any) {
|
|
207
|
+
// return this.setAggregation(propertyKey, v);
|
|
208
|
+
// };
|
|
209
|
+
// (propertyDescriptor as any).get = function() {
|
|
210
|
+
// return this.getAggregation(propertyKey);
|
|
211
|
+
// };
|
|
209
212
|
|
|
210
213
|
return propertyDescriptor;
|
|
211
214
|
};
|
|
@@ -250,52 +253,172 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
250
253
|
_exports.APIClass = APIClass;
|
|
251
254
|
|
|
252
255
|
function UI5Class(sTarget, metadataClass, metadataDefinition) {
|
|
256
|
+
var useExtend = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
253
257
|
return function (constructor) {
|
|
254
258
|
if (!constructor.prototype.metadata) {
|
|
255
259
|
constructor.prototype.metadata = {};
|
|
256
260
|
}
|
|
257
261
|
|
|
258
|
-
if (metadataDefinition
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (metadataDefinition !== null && metadataDefinition !== void 0 && metadataDefinition.events) {
|
|
263
|
-
constructor.prototype.metadata.events = metadataDefinition.events;
|
|
262
|
+
if (metadataDefinition) {
|
|
263
|
+
Object.keys(metadataDefinition).forEach(function (key) {
|
|
264
|
+
constructor.prototype.metadata[key] = metadataDefinition[key];
|
|
265
|
+
});
|
|
264
266
|
}
|
|
265
267
|
|
|
266
|
-
describe(constructor, sTarget, constructor.prototype, metadataClass);
|
|
268
|
+
return describe(constructor, sTarget, constructor.prototype, metadataClass, useExtend);
|
|
267
269
|
};
|
|
268
270
|
}
|
|
269
271
|
|
|
270
272
|
_exports.UI5Class = UI5Class;
|
|
271
273
|
|
|
272
274
|
function describe(clazz, name, inObj, metadataClass) {
|
|
273
|
-
var _inObj$metadata, _clazz$metadata;
|
|
275
|
+
var _inObj$metadata, _clazz$metadata, _obj$metadata;
|
|
276
|
+
|
|
277
|
+
var useExtend = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
278
|
+
|
|
279
|
+
if (metadataClass === ControllerExtensionMetadata) {
|
|
280
|
+
Object.getOwnPropertyNames(inObj).forEach(function (objName) {
|
|
281
|
+
var descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
|
|
282
|
+
|
|
283
|
+
if (descriptor && !descriptor.enumerable) {
|
|
284
|
+
descriptor.enumerable = true; // Log.error(`Property ${objName} from ${name} should be decorated as public`);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
274
288
|
|
|
275
289
|
var obj = {};
|
|
276
290
|
obj.metadata = inObj.metadata || {};
|
|
277
291
|
obj.override = inObj.override;
|
|
278
292
|
obj.constructor = clazz;
|
|
279
293
|
obj.metadata.baseType = Object.getPrototypeOf(clazz.prototype).getMetadata().getName();
|
|
280
|
-
|
|
294
|
+
var rendererDefinition = inObj.renderer || clazz.renderer;
|
|
295
|
+
obj.renderer = {
|
|
296
|
+
apiVersion: 2
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
if (typeof rendererDefinition === "function") {
|
|
300
|
+
obj.renderer.render = rendererDefinition;
|
|
301
|
+
} else if (rendererDefinition != undefined) {
|
|
302
|
+
obj.renderer = rendererDefinition;
|
|
303
|
+
}
|
|
304
|
+
|
|
281
305
|
obj.metadata.interfaces = ((_inObj$metadata = inObj.metadata) === null || _inObj$metadata === void 0 ? void 0 : _inObj$metadata.interfaces) || ((_clazz$metadata = clazz.metadata) === null || _clazz$metadata === void 0 ? void 0 : _clazz$metadata.interfaces);
|
|
282
|
-
var metadata;
|
|
283
306
|
|
|
284
|
-
if (
|
|
285
|
-
|
|
307
|
+
if (useExtend) {
|
|
308
|
+
Object.keys(clazz.prototype).forEach(function (key) {
|
|
309
|
+
if (key !== "metadata") {
|
|
310
|
+
try {
|
|
311
|
+
obj[key] = clazz.prototype[key];
|
|
312
|
+
} catch (e) {//console.log(e);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
if ((_obj$metadata = obj.metadata) !== null && _obj$metadata !== void 0 && _obj$metadata.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
|
|
319
|
+
for (var cExtName in obj.metadata.controllerExtensions) {
|
|
320
|
+
obj[cExtName] = obj.metadata.controllerExtensions[cExtName];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
var output = clazz;
|
|
325
|
+
|
|
326
|
+
if (useExtend) {
|
|
327
|
+
output = clazz.extend(name, obj, metadataClass);
|
|
328
|
+
var _fnInit = output.prototype.init;
|
|
329
|
+
|
|
330
|
+
output.prototype.init = function () {
|
|
331
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
332
|
+
args[_key] = arguments[_key];
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
_fnInit && _fnInit.apply(this, args);
|
|
336
|
+
this.metadata = obj.metadata;
|
|
337
|
+
|
|
338
|
+
if (obj.metadata.properties) {
|
|
339
|
+
var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
340
|
+
|
|
341
|
+
var that = this;
|
|
342
|
+
aPropertyKeys.forEach(function (propertyKey) {
|
|
343
|
+
Object.defineProperty(that, propertyKey, {
|
|
344
|
+
configurable: true,
|
|
345
|
+
set: function (v) {
|
|
346
|
+
return that.setProperty(propertyKey, v);
|
|
347
|
+
},
|
|
348
|
+
get: function () {
|
|
349
|
+
return that.getProperty(propertyKey);
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
var aAggregationKeys = Object.keys(obj.metadata.aggregations);
|
|
354
|
+
aAggregationKeys.forEach(function (aggregationKey) {
|
|
355
|
+
Object.defineProperty(that, aggregationKey, {
|
|
356
|
+
configurable: true,
|
|
357
|
+
set: function (v) {
|
|
358
|
+
return that.setAggregation(aggregationKey, v);
|
|
359
|
+
},
|
|
360
|
+
get: function () {
|
|
361
|
+
return that.getAggregation(aggregationKey);
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
};
|
|
286
367
|
} else {
|
|
287
|
-
metadata
|
|
368
|
+
var metadata;
|
|
369
|
+
|
|
370
|
+
if (metadataClass) {
|
|
371
|
+
metadata = new metadataClass(name, obj);
|
|
372
|
+
} else {
|
|
373
|
+
metadata = new ElementMetadata(name, obj);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
clazz.getMetadata = clazz.prototype.getMetadata = function () {
|
|
377
|
+
return metadata;
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
if (!clazz.getMetadata().isFinal()) {
|
|
381
|
+
clazz.extend = function (sSCName, oSCClassInfo, fnSCMetaImpl) {
|
|
382
|
+
// the default constructor created by ui5 does not return the value which is problematic with TS
|
|
383
|
+
oSCClassInfo.constructor = function () {
|
|
384
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
385
|
+
args[_key2] = arguments[_key2];
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return clazz.apply(this, args);
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
var fnClass = Metadata.createClass(clazz, sSCName, oSCClassInfo, fnSCMetaImpl || metadataClass || ElementMetadata); // fnClass.prototype.constructor = function(...args: any[]) {
|
|
392
|
+
// return clazz.apply(this, ...args);
|
|
393
|
+
// };
|
|
394
|
+
|
|
395
|
+
return fnClass;
|
|
396
|
+
};
|
|
397
|
+
}
|
|
288
398
|
}
|
|
289
399
|
|
|
290
|
-
clazz.
|
|
291
|
-
|
|
400
|
+
clazz.override = function (oExtension) {
|
|
401
|
+
var pol = {};
|
|
402
|
+
|
|
403
|
+
pol.constructor = function () {
|
|
404
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
405
|
+
args[_key3] = arguments[_key3];
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return clazz.apply(this, args);
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
var oClass = Metadata.createClass(clazz, "anonymousExtension~" + uid(), pol, ControllerMetadata);
|
|
412
|
+
oClass.getMetadata()._staticOverride = oExtension;
|
|
413
|
+
oClass.getMetadata()._override = clazz.getMetadata()._override;
|
|
414
|
+
return oClass;
|
|
292
415
|
};
|
|
293
416
|
|
|
294
417
|
var fnInit = clazz.prototype.init;
|
|
295
418
|
|
|
296
|
-
|
|
297
|
-
for (var
|
|
298
|
-
args[
|
|
419
|
+
output.prototype.init = function () {
|
|
420
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
421
|
+
args[_key4] = arguments[_key4];
|
|
299
422
|
}
|
|
300
423
|
|
|
301
424
|
fnInit && fnInit.apply(this, args);
|
|
@@ -318,9 +441,10 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
|
|
|
318
441
|
}
|
|
319
442
|
};
|
|
320
443
|
|
|
321
|
-
ObjectPath.set(name,
|
|
444
|
+
ObjectPath.set(name, output);
|
|
445
|
+
return output;
|
|
322
446
|
}
|
|
323
447
|
|
|
324
448
|
return _exports;
|
|
325
449
|
}, false);
|
|
326
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsImhhc093blByb3BlcnR5IiwibWV0YWRhdGEiLCJkZWVwQ2xvbmUiLCJwcm9wZXJ0aWVzIiwibWFjcm9Db250ZXh0cyIsImFnZ3JlZ2F0aW9ucyIsImFzc29jaWF0aW9ucyIsIm1ldGhvZHMiLCJldmVudHMiLCJPdmVycmlkZSIsInNUYXJnZXQiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsIkV4dGVuc2libGUiLCJvT3ZlcnJpZGVFeGVjdXRpb24iLCJvdmVycmlkZUV4ZWN1dGlvbiIsIlB1YmxpYyIsInB1YmxpYyIsIlByaXZhdGUiLCJGaW5hbCIsImZpbmFsIiwiRXZlbnQiLCJldmVudEtleSIsIkV2ZW50SGFuZGxlciIsInByb3BlcnR5a2V5IiwiY29uc3RydWN0b3IiLCJnZXRBUEkiLCJNYWNyb0NvbnRleHQiLCJiTWV0YU1vZGVsT2JqZWN0IiwiUHJvcGVydHkiLCJ0eXBlIiwibWFjcm9Db250ZXh0IiwibWV0YU1vZGVsT2JqZWN0Iiwib1Byb3BlcnR5UGFyYW1zIiwicHJvcGVydHlEZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwic2V0QWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsIkFzc29jaWF0aW9uIiwib0Fzc29jaWF0aW9uRGVzY3JpcHRpb24iLCJBUElDbGFzcyIsImlzRGVwZW5kZW50Qm91bmQiLCJwcm90b3R5cGUiLCJpbnRlcmZhY2VzIiwicHVzaCIsInJlbmRlcmVyIiwiYXBpVmVyc2lvbiIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImdldENvbnRlbnQiLCJkZXNjcmliZSIsIkVsZW1lbnRNZXRhZGF0YSIsIlVJNUNsYXNzIiwibWV0YWRhdGFDbGFzcyIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsImNsYXp6IiwibmFtZSIsImluT2JqIiwib2JqIiwiYmFzZVR5cGUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwia2V5cyIsInRoYXQiLCJmb3JFYWNoIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFJQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1QyxRQUFJLENBQUNBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixVQUF0QixDQUFMLEVBQXdDO0FBQ3ZDRCxNQUFBQSxNQUFNLENBQUNFLFFBQVAsR0FBa0JDLFNBQVMsQ0FDMUJILE1BQU0sQ0FBQ0UsUUFBUCxJQUFtQjtBQUNsQkUsUUFBQUEsVUFBVSxFQUFFLEVBRE07QUFFbEJDLFFBQUFBLGFBQWEsRUFBRSxFQUZHO0FBR2xCQyxRQUFBQSxZQUFZLEVBQUUsRUFISTtBQUlsQkMsUUFBQUEsWUFBWSxFQUFFLEVBSkk7QUFLbEJDLFFBQUFBLE9BQU8sRUFBRSxFQUxTO0FBTWxCQyxRQUFBQSxNQUFNLEVBQUU7QUFOVSxPQURPLENBQTNCO0FBVUE7O0FBQ0QsV0FBT1QsTUFBTSxDQUFDRSxRQUFkO0FBQ0EsR0FkRDs7QUFlTyxXQUFTUSxRQUFULENBQWtCQyxPQUFsQixFQUFvQztBQUMxQyxXQUFPLFVBQVNYLE1BQVQsRUFBc0JZLFdBQXRCLEVBQTJDO0FBQ2pELFVBQUksQ0FBQ1osTUFBTSxDQUFDYSxRQUFaLEVBQXNCO0FBQ3JCYixRQUFBQSxNQUFNLENBQUNhLFFBQVAsR0FBa0IsRUFBbEI7QUFDQTs7QUFDRCxVQUFJQyxhQUFh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LElBQUksQ0FBQzNDLFdBQUwsQ0FBaUI5QixXQUFqQixFQUE4QjZCLENBQTlCLENBQVA7QUFDQSxhQUp1QztBQUt4Q0UsWUFBQUEsR0FBRyxFQUFFLFlBQU07QUFDVixxQkFBTzBDLElBQUksQ0FBQ3pDLFdBQUwsQ0FBaUJoQyxXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE2RSxJQUFBQSxVQUFVLENBQUNqRCxHQUFYLENBQWUrQixJQUFmLEVBQXFCRCxLQUFyQjtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBFbGVtZW50TWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRNZXRhZGF0YVwiO1xuaW1wb3J0IFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHRpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShcIm1ldGFkYXRhXCIpKSB7XG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID0gZGVlcENsb25lKFxuXHRcdFx0dGFyZ2V0Lm1ldGFkYXRhIHx8IHtcblx0XHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0XHRhc3NvY2lhdGlvbnM6IHt9LFxuXHRcdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5leHBvcnQgZnVuY3Rpb24gT3ZlcnJpZGUoc1RhcmdldD86IHN0cmluZykge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZSkge1xuXHRcdFx0dGFyZ2V0Lm92ZXJyaWRlID0ge307XG5cdFx0fVxuXHRcdGxldCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0Lm92ZXJyaWRlO1xuXHRcdGlmIChzVGFyZ2V0KSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW3NUYXJnZXRdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW3NUYXJnZXRdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXldID0gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBFeHRlbnNpYmxlKG9PdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5vdmVycmlkZUV4ZWN1dGlvbiA9IG9PdmVycmlkZUV4ZWN1dGlvbjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQdWJsaWModGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGaW5hbCh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLmZpbmFsID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50KHRhcmdldDogYW55LCBldmVudEtleTogc3RyaW5nKSB7XG5cdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0aWYgKCFtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXldKSB7XG5cdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSA9IHt9O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudEhhbmRsZXIodGFyZ2V0OiBhbnksIHByb3BlcnR5a2V5OiBhbnkpIHtcblx0dGFyZ2V0LmNvbnN0cnVjdG9yW3Byb3BlcnR5a2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IHRhcmdldC5jb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eWtleV0oLi4uYXJncyk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNYWNyb0NvbnRleHQoYk1ldGFNb2RlbE9iamVjdDogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0cmV0dXJuIFByb3BlcnR5KHsgdHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLCBtYWNyb0NvbnRleHQ6IHRydWUsIG1ldGFNb2RlbE9iamVjdDogYk1ldGFNb2RlbE9iamVjdCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb3BlcnR5KG9Qcm9wZXJ0eVBhcmFtczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChvUHJvcGVydHlQYXJhbXM/Lm1hY3JvQ29udGV4dCkge1xuXHRcdFx0aWYgKCFtZXRhZGF0YS5tYWNyb0NvbnRleHRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRtZXRhZGF0YS5tYWNyb0NvbnRleHRzW3Byb3BlcnR5S2V5XSA9IG9Qcm9wZXJ0eVBhcmFtcztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0fTtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0fTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZ2dyZWdhdGlvbihvQWdncmVnYXRpb25EZXNjcmlwdG9yPzogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3I7XG5cdFx0fVxuXHRcdGlmIChvQWdncmVnYXRpb25EZXNjcmlwdG9yLmlzRGVmYXVsdCkge1xuXHRcdFx0bWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uID0gcHJvcGVydHlLZXk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0fTtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0fTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBc3NvY2lhdGlvbihvQXNzb2NpYXRpb25EZXNjcmlwdGlvbj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSBvQXNzb2NpYXRpb25EZXNjcmlwdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQ+ID0gUGFydGlhbDxQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+Pj47XG5cbi8qKlxuICogRGVjb3JhdG9yIHRvIHByb3ZpZGUgYSBuZXcgQVBJIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIG1hY3Jvcy5cbiAqXG4gKiBAcGFyYW0gc1RhcmdldCBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1hY3JvIEFQSVxuICogQHBhcmFtIGlzRGVwZW5kZW50Qm91bmQgV2hldGhlciB0aGlzIEFQSSB3aWxsIGJlIHVzZWQgYXMgYSBkZXBlbmRlbnQgb3Igbm90XG4gKiBAY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFQSUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgaXNEZXBlbmRlbnRCb3VuZCA9IGZhbHNlKSB7XG5cdHJldHVybiBmdW5jdGlvbihjb25zdHJ1Y3RvcjogRnVuY3Rpb24pIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcykge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMgPSBbXTtcblx0XHR9XG5cdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMucHVzaChcInNhcC51aS5jb3JlLklGb3JtQ29udGVudFwiKTtcblx0XHQoY29uc3RydWN0b3IgYXMgYW55KS5pc0RlcGVuZGVudEJvdW5kID0gaXNEZXBlbmRlbnRCb3VuZDtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlcikge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlcmVyID0ge1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyLFxuXHRcdFx0XHRyZW5kZXI6IGZ1bmN0aW9uKG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmdldENvbnRlbnQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZGVzY3JpYmUoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgRWxlbWVudE1ldGFkYXRhKTtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBVSTVDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIG1ldGFkYXRhQ2xhc3M/OiBhbnksIG1ldGFkYXRhRGVmaW5pdGlvbj86IGFueSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRpZiAobWV0YWRhdGFEZWZpbml0aW9uPy5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEucHJvcGVydGllcyA9IG1ldGFkYXRhRGVmaW5pdGlvbi5wcm9wZXJ0aWVzO1xuXHRcdH1cblx0XHRpZiAobWV0YWRhdGFEZWZpbml0aW9uPy5ldmVudHMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5ldmVudHMgPSBtZXRhZGF0YURlZmluaXRpb24uZXZlbnRzO1xuXHRcdH1cblx0XHRkZXNjcmliZShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlLCBtZXRhZGF0YUNsYXNzKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmUoY2xheno6IGFueSwgbmFtZTogc3RyaW5nLCBpbk9iajogYW55LCBtZXRhZGF0YUNsYXNzPzogYW55KSB7XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdG9iai5tZXRhZGF0YSA9IGluT2JqLm1ldGFkYXRhIHx8IHt9O1xuXHRvYmoub3ZlcnJpZGUgPSBpbk9iai5vdmVycmlkZTtcblx0b2JqLmNvbnN0cnVjdG9yID0gY2xheno7XG5cdG9iai5tZXRhZGF0YS5iYXNlVHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGF6ei5wcm90b3R5cGUpXG5cdFx0LmdldE1ldGFkYXRhKClcblx0XHQuZ2V0TmFtZSgpO1xuXHRvYmoucmVuZGVyZXIgPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlcjtcblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0bGV0IG1ldGFkYXRhOiBhbnk7XG5cdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0bWV0YWRhdGEgPSBuZXcgbWV0YWRhdGFDbGFzcyhuYW1lLCBvYmopO1xuXHR9IGVsc2Uge1xuXHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHR9XG5cdGNsYXp6LmdldE1ldGFkYXRhID0gY2xhenoucHJvdG90eXBlLmdldE1ldGFkYXRhID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHR9O1xuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0Y2xhenoucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBhUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaChwcm9wZXJ0eUtleSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdE9iamVjdFBhdGguc2V0KG5hbWUsIGNsYXp6KTtcbn1cbiJdfQ==
|
|
450
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJtYWNyb0NvbnRleHRzIiwiYWdncmVnYXRpb25zIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsIk92ZXJyaWRlIiwic1RhcmdldCIsInByb3BlcnR5S2V5Iiwib3ZlcnJpZGUiLCJjdXJyZW50VGFyZ2V0IiwiZXh0ZW5zaW9uIiwiRXh0ZW5zaWJsZSIsIm9PdmVycmlkZUV4ZWN1dGlvbiIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiUHVibGljIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJQcml2YXRlIiwiRmluYWwiLCJmaW5hbCIsIkV2ZW50IiwiZXZlbnRLZXkiLCJFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImNvbnN0cnVjdG9yIiwiZ2V0QVBJIiwiTWFjcm9Db250ZXh0IiwiYk1ldGFNb2RlbE9iamVjdCIsIlByb3BlcnR5IiwidHlwZSIsIm1hY3JvQ29udGV4dCIsIm1ldGFNb2RlbE9iamVjdCIsIlVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsIm9Qcm9wZXJ0eVBhcmFtcyIsIndyaXRhYmxlIiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiQXNzb2NpYXRpb24iLCJvQXNzb2NpYXRpb25EZXNjcmlwdGlvbiIsIkFQSUNsYXNzIiwiaXNEZXBlbmRlbnRCb3VuZCIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwidXNlRXh0ZW5kIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJjbGF6eiIsIm5hbWUiLCJpbk9iaiIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJlbmRlcmVyRGVmaW5pdGlvbiIsInVuZGVmaW5lZCIsImUiLCJsZW5ndGgiLCJjRXh0TmFtZSIsIm91dHB1dCIsImV4dGVuZCIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwidGhhdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwic2V0IiwidiIsInNldFByb3BlcnR5IiwiZ2V0IiwiZ2V0UHJvcGVydHkiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJzZXRBZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaXNGaW5hbCIsInNTQ05hbWUiLCJvU0NDbGFzc0luZm8iLCJmblNDTWV0YUltcGwiLCJmbkNsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsIm9FeHRlbnNpb24iLCJwb2wiLCJvQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFTQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1Q0EsSUFBQUEsTUFBTSxDQUFDQyxRQUFQLEdBQWtCQyxLQUFLLENBQ3RCO0FBQ0NDLE1BQUFBLG9CQUFvQixFQUFFLEVBRHZC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Q0FBYUcsVUFBekIsQ0FBdEIsQ0FENEIsQ0FFNUI7O0FBQ0EsWUFBTTRGLElBQUksR0FBRyxJQUFiO0FBQ0FELFFBQUFBLGFBQWEsQ0FBQ3pCLE9BQWQsQ0FBc0IsVUFBQTFELFdBQVcsRUFBSTtBQUNwQ3dELFVBQUFBLE1BQU0sQ0FBQzZCLGNBQVAsQ0FBc0JELElBQXRCLEVBQTRCcEYsV0FBNUIsRUFBeUM7QUFDeENzRixZQUFBQSxZQUFZLEVBQUUsSUFEMEI7QUFFeENDLFlBQUFBLEdBQUcsRUFBRSxVQUFDQyxDQUFELEVBQVk7QUFDaEIscUJBQU9KLElBQUksQ0FBQ0ssV0FBTCxDQUFpQnpGLFdBQWpCLEVBQThCd0YsQ0FBOUIsQ0FBUDtBQUNBLGFBSnVDO0FBS3hDRSxZQUFBQSxHQUFHLEVBQUUsWUFBTTtBQUNWLHFCQUFPTixJQUFJLENBQUNPLFdBQUwsQ0FBaUIzRixXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE4RyxJQUFBQSxVQUFVLENBQUN2QixHQUFYLENBQWUxQixJQUFmLEVBQXFCZ0IsTUFBckI7QUFDQSxXQUFPQSxNQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgRWxlbWVudE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50TWV0YWRhdGFcIjtcbmltcG9ydCBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge31cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSB8fCB7fVxuXHQpO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogYW55KTogYW55IHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IGFueSkge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5maW5hbCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudCh0YXJnZXQ6IGFueSwgZXZlbnRLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSkge1xuXHRcdG1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0gPSB7fTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRIYW5kbGVyKHRhcmdldDogYW55LCBwcm9wZXJ0eWtleTogYW55KSB7XG5cdHRhcmdldC5jb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleV0gPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQuY29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlrZXldKC4uLmFyZ3MpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTWFjcm9Db250ZXh0KGJNZXRhTW9kZWxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdHJldHVybiBQcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiwgbWFjcm9Db250ZXh0OiB0cnVlLCBtZXRhTW9kZWxPYmplY3Q6IGJNZXRhTW9kZWxPYmplY3QgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQcm9wZXJ0eShvUHJvcGVydHlQYXJhbXM6IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAob1Byb3BlcnR5UGFyYW1zPy5tYWNyb0NvbnRleHQpIHtcblx0XHRcdGlmICghbWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEubWFjcm9Db250ZXh0c1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twcm9wZXJ0eUtleV0gPSBvQWdncmVnYXRpb25EZXNjcmlwdG9yO1xuXHRcdH1cblx0XHRpZiAob0FnZ3JlZ2F0aW9uRGVzY3JpcHRvci5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdC8vIH07XG5cdFx0Ly8gKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdC8vIH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQXNzb2NpYXRpb24ob0Fzc29jaWF0aW9uRGVzY3JpcHRpb24/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gb0Fzc29jaWF0aW9uRGVzY3JpcHRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0Ly8gfTtcblx0XHQvLyAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0Ly8gfTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZjxUPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+O1xuXG4vKipcbiAqIERlY29yYXRvciB0byBwcm92aWRlIGEgbmV3IEFQSSBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBtYWNyb3MuXG4gKlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtYWNybyBBUElcbiAqIEBwYXJhbSBpc0RlcGVuZGVudEJvdW5kIFdoZXRoZXIgdGhpcyBBUEkgd2lsbCBiZSB1c2VkIGFzIGEgZGVwZW5kZW50IG9yIG5vdFxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIGlzRGVwZW5kZW50Qm91bmQgPSBmYWxzZSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblxuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzID0gW107XG5cdFx0fVxuXHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzLnB1c2goXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIik7XG5cdFx0KGNvbnN0cnVjdG9yIGFzIGFueSkuaXNEZXBlbmRlbnRCb3VuZCA9IGlzRGVwZW5kZW50Qm91bmQ7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0T2JqZWN0LmtleXMobWV0YWRhdGFEZWZpbml0aW9uKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleV07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG1ldGFkYXRhQ2xhc3MsIHVzZUV4dGVuZCk7XG5cdH07XG59XG5mdW5jdGlvbiBkZXNjcmliZShjbGF6ejogYW55LCBuYW1lOiBzdHJpbmcsIGluT2JqOiBhbnksIG1ldGFkYXRhQ2xhc3M/OiBhbnksIHVzZUV4dGVuZDogYm9vbGVhbiA9IHRydWUpIHtcblx0aWYgKG1ldGFkYXRhQ2xhc3MgPT09IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKG9iak5hbWUgPT4ge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5PYmosIG9iak5hbWUpO1xuXHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdFx0XHQvL1x0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7b2JqTmFtZX0gZnJvbSAke25hbWV9IHNob3VsZCBiZSBkZWNvcmF0ZWQgYXMgcHVibGljYCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSlcblx0XHQuZ2V0TWV0YWRhdGEoKVxuXHRcdC5nZXROYW1lKCk7XG5cblx0Y29uc3QgcmVuZGVyZXJEZWZpbml0aW9uID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5yZW5kZXJlciA9IHsgYXBpVmVyc2lvbjogMiB9O1xuXHRpZiAodHlwZW9mIHJlbmRlcmVyRGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0fSBlbHNlIGlmIChyZW5kZXJlckRlZmluaXRpb24gIT0gdW5kZWZpbmVkKSB7XG5cdFx0b2JqLnJlbmRlcmVyID0gcmVuZGVyZXJEZWZpbml0aW9uO1xuXHR9XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRPYmplY3Qua2V5cyhjbGF6ei5wcm90b3R5cGUpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdGlmIChrZXkgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKG9iai5tZXRhZGF0YT8uY29udHJvbGxlckV4dGVuc2lvbnMgJiYgT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBjRXh0TmFtZSBpbiBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpIHtcblx0XHRcdG9ialtjRXh0TmFtZV0gPSBvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbY0V4dE5hbWVdO1xuXHRcdH1cblx0fVxuXHRsZXQgb3V0cHV0ID0gY2xheno7XG5cdGlmICh1c2VFeHRlbmQpIHtcblx0XHRvdXRwdXQgPSBjbGF6ei5leHRlbmQobmFtZSwgb2JqLCBtZXRhZGF0YUNsYXNzKTtcblx0XHRjb25zdCBmbkluaXQgPSBvdXRwdXQucHJvdG90eXBlLmluaXQ7XG5cdFx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHR0aGlzLm1ldGFkYXRhID0gb2JqLm1ldGFkYXRhO1xuXG5cdFx0XHRpZiAob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRhQWdncmVnYXRpb25LZXlzLmZvckVhY2goYWdncmVnYXRpb25LZXkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBtZXRhZGF0YTogYW55O1xuXHRcdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0XHRtZXRhZGF0YSA9IG5ldyBtZXRhZGF0YUNsYXNzKG5hbWUsIG9iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHRcdH1cblx0XHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHRcdH07XG5cdFx0aWYgKCFjbGF6ei5nZXRNZXRhZGF0YSgpLmlzRmluYWwoKSkge1xuXHRcdFx0Y2xhenouZXh0ZW5kID0gZnVuY3Rpb24oc1NDTmFtZTogc3RyaW5nLCBvU0NDbGFzc0luZm86IGFueSwgZm5TQ01ldGFJbXBsOiBGdW5jdGlvbikge1xuXHRcdFx0XHQvLyB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVkIGJ5IHVpNSBkb2VzIG5vdCByZXR1cm4gdGhlIHZhbHVlIHdoaWNoIGlzIHByb2JsZW1hdGljIHdpdGggVFNcblx0XHRcdFx0b1NDQ2xhc3NJbmZvLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0XHRyZXR1cm4gY2xhenouYXBwbHkodGhpcywgYXJncyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgZm5DbGFzcyA9IChNZXRhZGF0YSBhcyBhbnkpLmNyZWF0ZUNsYXNzKFxuXHRcdFx0XHRcdGNsYXp6LFxuXHRcdFx0XHRcdHNTQ05hbWUsXG5cdFx0XHRcdFx0b1NDQ2xhc3NJbmZvLFxuXHRcdFx0XHRcdGZuU0NNZXRhSW1wbCB8fCBtZXRhZGF0YUNsYXNzIHx8IEVsZW1lbnRNZXRhZGF0YVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBmbkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHQvLyB9O1xuXHRcdFx0XHRyZXR1cm4gZm5DbGFzcztcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24ob0V4dGVuc2lvbjogYW55KSB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBhbnkpLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzIGFzIGFueSk7XG5cdFx0fTtcblx0XHRjb25zdCBvQ2xhc3MgPSAoTWV0YWRhdGEgYXMgYW55KS5jcmVhdGVDbGFzcyhjbGF6eiwgXCJhbm9ueW1vdXNFeHRlbnNpb25+XCIgKyB1aWQoKSwgcG9sLCBDb250cm9sbGVyTWV0YWRhdGEpO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9zdGF0aWNPdmVycmlkZSA9IG9FeHRlbnNpb247XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX292ZXJyaWRlID0gKGNsYXp6LmdldE1ldGFkYXRhKCkgYXMgYW55KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQgJiYgZm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhhdCwgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl19
|