@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
|
@@ -7,12 +7,6 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
|
|
|
7
7
|
|
|
8
8
|
var VariantManagementType = ManifestSettings.VariantManagementType;
|
|
9
9
|
|
|
10
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
11
|
-
|
|
12
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
13
|
-
|
|
14
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
15
|
-
|
|
16
10
|
/**
|
|
17
11
|
*
|
|
18
12
|
*/
|
|
@@ -25,8 +19,6 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
|
|
|
25
19
|
* @returns {ManifestWrapper} The manifest wrapper object
|
|
26
20
|
*/
|
|
27
21
|
function ManifestWrapper(oManifestSettings, mergeFn) {
|
|
28
|
-
_classCallCheck(this, ManifestWrapper);
|
|
29
|
-
|
|
30
22
|
this.oManifestSettings = oManifestSettings;
|
|
31
23
|
this.mergeFn = mergeFn;
|
|
32
24
|
}
|
|
@@ -37,392 +29,376 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
|
|
|
37
29
|
*/
|
|
38
30
|
|
|
39
31
|
|
|
40
|
-
|
|
41
|
-
key: "getTemplateType",
|
|
42
|
-
value: function getTemplateType() {
|
|
43
|
-
return this.oManifestSettings.converterType;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Checks whether the current template should display the filter bar.
|
|
47
|
-
*
|
|
48
|
-
* @returns {boolean} `true` if the filter bar should be hidden
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
}, {
|
|
52
|
-
key: "isFilterBarHidden",
|
|
53
|
-
value: function isFilterBarHidden() {
|
|
54
|
-
var _this$oManifestSettin;
|
|
55
|
-
|
|
56
|
-
return !!((_this$oManifestSettin = this.oManifestSettings) !== null && _this$oManifestSettin !== void 0 && _this$oManifestSettin.hideFilterBar);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Checks whether the current environment is a desktop or not.
|
|
60
|
-
*
|
|
61
|
-
* @returns {boolean} `true` if we are on a desktop
|
|
62
|
-
*/
|
|
63
|
-
|
|
64
|
-
}, {
|
|
65
|
-
key: "isDesktop",
|
|
66
|
-
value: function isDesktop() {
|
|
67
|
-
return !!this.oManifestSettings.isDesktop;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Checks whether the current environment is a mobile phone or not.
|
|
71
|
-
*
|
|
72
|
-
* @returns {boolean} `true` if we are on a mobile phone
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
}, {
|
|
76
|
-
key: "isPhone",
|
|
77
|
-
value: function isPhone() {
|
|
78
|
-
return !!this.oManifestSettings.isPhone;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Retrieves the form containers (field groups or identification) defined in the manifest.
|
|
82
|
-
*
|
|
83
|
-
* @param {string} facetTarget The target annotation path for this form
|
|
84
|
-
* @returns {FormManifestConfiguration} A set of form containers defined in the manifest indexed by an iterable key
|
|
85
|
-
*/
|
|
86
|
-
|
|
87
|
-
}, {
|
|
88
|
-
key: "getFormContainer",
|
|
89
|
-
value: function getFormContainer(facetTarget) {
|
|
90
|
-
var _this$oManifestSettin2;
|
|
91
|
-
|
|
92
|
-
return (_this$oManifestSettin2 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin2 === void 0 ? void 0 : _this$oManifestSettin2[facetTarget];
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Retrieves the header facets defined in the manifest.
|
|
96
|
-
*
|
|
97
|
-
* @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of header facets defined in the manifest indexed by an iterable key
|
|
98
|
-
*/
|
|
99
|
-
|
|
100
|
-
}, {
|
|
101
|
-
key: "getHeaderFacets",
|
|
102
|
-
value: function getHeaderFacets() {
|
|
103
|
-
var _this$oManifestSettin3, _this$oManifestSettin4, _content, _content$header;
|
|
104
|
-
|
|
105
|
-
return this.mergeFn({}, (_this$oManifestSettin3 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin3 === void 0 ? void 0 : (_this$oManifestSettin4 = _this$oManifestSettin3["@com.sap.vocabularies.UI.v1.HeaderFacets"]) === null || _this$oManifestSettin4 === void 0 ? void 0 : _this$oManifestSettin4.facets, (_content = this.oManifestSettings.content) === null || _content === void 0 ? void 0 : (_content$header = _content.header) === null || _content$header === void 0 ? void 0 : _content$header.facets);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Retrieves the header actions defined in the manifest.
|
|
109
|
-
*
|
|
110
|
-
* @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
|
|
111
|
-
*/
|
|
112
|
-
|
|
113
|
-
}, {
|
|
114
|
-
key: "getHeaderActions",
|
|
115
|
-
value: function getHeaderActions() {
|
|
116
|
-
var _this$oManifestSettin5, _this$oManifestSettin6;
|
|
117
|
-
|
|
118
|
-
return ((_this$oManifestSettin5 = this.oManifestSettings.content) === null || _this$oManifestSettin5 === void 0 ? void 0 : (_this$oManifestSettin6 = _this$oManifestSettin5.header) === null || _this$oManifestSettin6 === void 0 ? void 0 : _this$oManifestSettin6.actions) || {};
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Retrieves the footer actions defined in the manifest.
|
|
122
|
-
*
|
|
123
|
-
* @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
|
|
124
|
-
*/
|
|
125
|
-
|
|
126
|
-
}, {
|
|
127
|
-
key: "getFooterActions",
|
|
128
|
-
value: function getFooterActions() {
|
|
129
|
-
var _this$oManifestSettin7, _this$oManifestSettin8;
|
|
130
|
-
|
|
131
|
-
return ((_this$oManifestSettin7 = this.oManifestSettings.content) === null || _this$oManifestSettin7 === void 0 ? void 0 : (_this$oManifestSettin8 = _this$oManifestSettin7.footer) === null || _this$oManifestSettin8 === void 0 ? void 0 : _this$oManifestSettin8.actions) || {};
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Retrieves the variant management as defined in the manifest.
|
|
135
|
-
*
|
|
136
|
-
* @returns {VariantManagementType} A type of variant management
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
}, {
|
|
140
|
-
key: "getVariantManagement",
|
|
141
|
-
value: function getVariantManagement() {
|
|
142
|
-
return this.oManifestSettings.variantManagement || VariantManagementType.None;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Retrieves the annotation Path for the SPV in the manifest.
|
|
146
|
-
*
|
|
147
|
-
* @returns {string|undefined} The annotation path for the default SPV or undefined.
|
|
148
|
-
*/
|
|
149
|
-
|
|
150
|
-
}, {
|
|
151
|
-
key: "getDefaultTemplateAnnotationPath",
|
|
152
|
-
value: function getDefaultTemplateAnnotationPath() {
|
|
153
|
-
return this.oManifestSettings.defaultTemplateAnnotationPath;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Retrieves the control configuration as defined in the manifest for a specific annotation path.
|
|
157
|
-
*
|
|
158
|
-
* @param {string} sAnnotationPath The relative annotation path
|
|
159
|
-
* @private
|
|
160
|
-
* @returns {object} The control configuration
|
|
161
|
-
*/
|
|
162
|
-
|
|
163
|
-
}, {
|
|
164
|
-
key: "getControlConfiguration",
|
|
165
|
-
value: function getControlConfiguration(sAnnotationPath) {
|
|
166
|
-
var _this$oManifestSettin9, _this$oManifestSettin10;
|
|
167
|
-
|
|
168
|
-
return ((_this$oManifestSettin9 = this.oManifestSettings) === null || _this$oManifestSettin9 === void 0 ? void 0 : (_this$oManifestSettin10 = _this$oManifestSettin9.controlConfiguration) === null || _this$oManifestSettin10 === void 0 ? void 0 : _this$oManifestSettin10[sAnnotationPath]) || {};
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Retrieves the configured settings for a given navigation target.
|
|
172
|
-
*
|
|
173
|
-
* @param {string} navigationOrCollectionName The name of the navigation to check
|
|
174
|
-
* @returns {NavigationSettingsConfiguration} The navigation settings configuration
|
|
175
|
-
*/
|
|
176
|
-
|
|
177
|
-
}, {
|
|
178
|
-
key: "getNavigationConfiguration",
|
|
179
|
-
value: function getNavigationConfiguration(navigationOrCollectionName) {
|
|
180
|
-
var _this$oManifestSettin11, _this$oManifestSettin12;
|
|
181
|
-
|
|
182
|
-
return ((_this$oManifestSettin11 = this.oManifestSettings) === null || _this$oManifestSettin11 === void 0 ? void 0 : (_this$oManifestSettin12 = _this$oManifestSettin11.navigation) === null || _this$oManifestSettin12 === void 0 ? void 0 : _this$oManifestSettin12[navigationOrCollectionName]) || {};
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Retrieves the view level.
|
|
186
|
-
*
|
|
187
|
-
* @returns {number} The current view level
|
|
188
|
-
*/
|
|
189
|
-
|
|
190
|
-
}, {
|
|
191
|
-
key: "getViewLevel",
|
|
192
|
-
value: function getViewLevel() {
|
|
193
|
-
var _this$oManifestSettin13;
|
|
194
|
-
|
|
195
|
-
return ((_this$oManifestSettin13 = this.oManifestSettings) === null || _this$oManifestSettin13 === void 0 ? void 0 : _this$oManifestSettin13.viewLevel) || -1;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Retrieves the contentDensities setting of the application.
|
|
199
|
-
*
|
|
200
|
-
* @returns {ContentDensitiesType} The current content density
|
|
201
|
-
*/
|
|
202
|
-
|
|
203
|
-
}, {
|
|
204
|
-
key: "getContentDensities",
|
|
205
|
-
value: function getContentDensities() {
|
|
206
|
-
var _this$oManifestSettin14;
|
|
207
|
-
|
|
208
|
-
return ((_this$oManifestSettin14 = this.oManifestSettings) === null || _this$oManifestSettin14 === void 0 ? void 0 : _this$oManifestSettin14.contentDensities) || {
|
|
209
|
-
cozy: false,
|
|
210
|
-
compact: false
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Checks whether we are in FCL mode or not.
|
|
215
|
-
*
|
|
216
|
-
* @returns {boolean} `true` if we are in FCL
|
|
217
|
-
*/
|
|
218
|
-
|
|
219
|
-
}, {
|
|
220
|
-
key: "isFclEnabled",
|
|
221
|
-
value: function isFclEnabled() {
|
|
222
|
-
var _this$oManifestSettin15;
|
|
223
|
-
|
|
224
|
-
return !!((_this$oManifestSettin15 = this.oManifestSettings) !== null && _this$oManifestSettin15 !== void 0 && _this$oManifestSettin15.fclEnabled);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Checks whether the current settings (application / shell) allows us to use condensed layout.
|
|
228
|
-
*
|
|
229
|
-
* @returns {boolean} `true` if we can use the condensed layout, false otherwise
|
|
230
|
-
*/
|
|
231
|
-
|
|
232
|
-
}, {
|
|
233
|
-
key: "isCondensedLayoutCompliant",
|
|
234
|
-
value: function isCondensedLayoutCompliant() {
|
|
235
|
-
var _this$oManifestSettin16, _this$oManifestSettin17;
|
|
236
|
-
|
|
237
|
-
var manifestContentDensity = ((_this$oManifestSettin16 = this.oManifestSettings) === null || _this$oManifestSettin16 === void 0 ? void 0 : _this$oManifestSettin16.contentDensities) || {
|
|
238
|
-
cozy: false,
|
|
239
|
-
compact: false
|
|
240
|
-
};
|
|
241
|
-
var shellContentDensity = ((_this$oManifestSettin17 = this.oManifestSettings) === null || _this$oManifestSettin17 === void 0 ? void 0 : _this$oManifestSettin17.shellContentDensity) || "compact";
|
|
242
|
-
var isCondensedLayoutCompliant = true;
|
|
32
|
+
var _proto = ManifestWrapper.prototype;
|
|
243
33
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
34
|
+
_proto.getTemplateType = function getTemplateType() {
|
|
35
|
+
return this.oManifestSettings.converterType;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Checks whether the current template should display the filter bar.
|
|
39
|
+
*
|
|
40
|
+
* @returns {boolean} `true` if the filter bar should be hidden
|
|
41
|
+
*/
|
|
42
|
+
;
|
|
247
43
|
|
|
248
|
-
|
|
249
|
-
|
|
44
|
+
_proto.isFilterBarHidden = function isFilterBarHidden() {
|
|
45
|
+
var _this$oManifestSettin;
|
|
250
46
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
47
|
+
return !!((_this$oManifestSettin = this.oManifestSettings) !== null && _this$oManifestSettin !== void 0 && _this$oManifestSettin.hideFilterBar);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Checks whether the current environment is a desktop or not.
|
|
51
|
+
*
|
|
52
|
+
* @returns {boolean} `true` if we are on a desktop
|
|
53
|
+
*/
|
|
54
|
+
;
|
|
256
55
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
56
|
+
_proto.isDesktop = function isDesktop() {
|
|
57
|
+
return !!this.oManifestSettings.isDesktop;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Checks whether the current environment is a mobile phone or not.
|
|
61
|
+
*
|
|
62
|
+
* @returns {boolean} `true` if we are on a mobile phone
|
|
63
|
+
*/
|
|
64
|
+
;
|
|
261
65
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
66
|
+
_proto.isPhone = function isPhone() {
|
|
67
|
+
return !!this.oManifestSettings.isPhone;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Retrieves the form containers (field groups or identification) defined in the manifest.
|
|
71
|
+
*
|
|
72
|
+
* @param {string} facetTarget The target annotation path for this form
|
|
73
|
+
* @returns {FormManifestConfiguration} A set of form containers defined in the manifest indexed by an iterable key
|
|
74
|
+
*/
|
|
75
|
+
;
|
|
76
|
+
|
|
77
|
+
_proto.getFormContainer = function getFormContainer(facetTarget) {
|
|
78
|
+
var _this$oManifestSettin2;
|
|
79
|
+
|
|
80
|
+
return (_this$oManifestSettin2 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin2 === void 0 ? void 0 : _this$oManifestSettin2[facetTarget];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Retrieves the header facets defined in the manifest.
|
|
84
|
+
*
|
|
85
|
+
* @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of header facets defined in the manifest indexed by an iterable key
|
|
86
|
+
*/
|
|
87
|
+
;
|
|
88
|
+
|
|
89
|
+
_proto.getHeaderFacets = function getHeaderFacets() {
|
|
90
|
+
var _this$oManifestSettin3, _this$oManifestSettin4, _content, _content$header;
|
|
91
|
+
|
|
92
|
+
return this.mergeFn({}, (_this$oManifestSettin3 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin3 === void 0 ? void 0 : (_this$oManifestSettin4 = _this$oManifestSettin3["@com.sap.vocabularies.UI.v1.HeaderFacets"]) === null || _this$oManifestSettin4 === void 0 ? void 0 : _this$oManifestSettin4.facets, (_content = this.oManifestSettings.content) === null || _content === void 0 ? void 0 : (_content$header = _content.header) === null || _content$header === void 0 ? void 0 : _content$header.facets);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Retrieves the header actions defined in the manifest.
|
|
96
|
+
*
|
|
97
|
+
* @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
|
|
98
|
+
*/
|
|
99
|
+
;
|
|
100
|
+
|
|
101
|
+
_proto.getHeaderActions = function getHeaderActions() {
|
|
102
|
+
var _this$oManifestSettin5, _this$oManifestSettin6;
|
|
103
|
+
|
|
104
|
+
return ((_this$oManifestSettin5 = this.oManifestSettings.content) === null || _this$oManifestSettin5 === void 0 ? void 0 : (_this$oManifestSettin6 = _this$oManifestSettin5.header) === null || _this$oManifestSettin6 === void 0 ? void 0 : _this$oManifestSettin6.actions) || {};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Retrieves the footer actions defined in the manifest.
|
|
108
|
+
*
|
|
109
|
+
* @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
|
|
110
|
+
*/
|
|
111
|
+
;
|
|
112
|
+
|
|
113
|
+
_proto.getFooterActions = function getFooterActions() {
|
|
114
|
+
var _this$oManifestSettin7, _this$oManifestSettin8;
|
|
115
|
+
|
|
116
|
+
return ((_this$oManifestSettin7 = this.oManifestSettings.content) === null || _this$oManifestSettin7 === void 0 ? void 0 : (_this$oManifestSettin8 = _this$oManifestSettin7.footer) === null || _this$oManifestSettin8 === void 0 ? void 0 : _this$oManifestSettin8.actions) || {};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Retrieves the variant management as defined in the manifest.
|
|
120
|
+
*
|
|
121
|
+
* @returns {VariantManagementType} A type of variant management
|
|
122
|
+
*/
|
|
123
|
+
;
|
|
124
|
+
|
|
125
|
+
_proto.getVariantManagement = function getVariantManagement() {
|
|
126
|
+
return this.oManifestSettings.variantManagement || VariantManagementType.None;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Retrieves the annotation Path for the SPV in the manifest.
|
|
130
|
+
*
|
|
131
|
+
* @returns {string|undefined} The annotation path for the default SPV or undefined.
|
|
132
|
+
*/
|
|
133
|
+
;
|
|
134
|
+
|
|
135
|
+
_proto.getDefaultTemplateAnnotationPath = function getDefaultTemplateAnnotationPath() {
|
|
136
|
+
return this.oManifestSettings.defaultTemplateAnnotationPath;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Retrieves the control configuration as defined in the manifest for a specific annotation path.
|
|
140
|
+
*
|
|
141
|
+
* @param {string} sAnnotationPath The relative annotation path
|
|
142
|
+
* @private
|
|
143
|
+
* @returns {object} The control configuration
|
|
144
|
+
*/
|
|
145
|
+
;
|
|
146
|
+
|
|
147
|
+
_proto.getControlConfiguration = function getControlConfiguration(sAnnotationPath) {
|
|
148
|
+
var _this$oManifestSettin9, _this$oManifestSettin10;
|
|
149
|
+
|
|
150
|
+
return ((_this$oManifestSettin9 = this.oManifestSettings) === null || _this$oManifestSettin9 === void 0 ? void 0 : (_this$oManifestSettin10 = _this$oManifestSettin9.controlConfiguration) === null || _this$oManifestSettin10 === void 0 ? void 0 : _this$oManifestSettin10[sAnnotationPath]) || {};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Retrieves the configured settings for a given navigation target.
|
|
154
|
+
*
|
|
155
|
+
* @param {string} navigationOrCollectionName The name of the navigation to check
|
|
156
|
+
* @returns {NavigationSettingsConfiguration} The navigation settings configuration
|
|
157
|
+
*/
|
|
158
|
+
;
|
|
159
|
+
|
|
160
|
+
_proto.getNavigationConfiguration = function getNavigationConfiguration(navigationOrCollectionName) {
|
|
161
|
+
var _this$oManifestSettin11, _this$oManifestSettin12;
|
|
162
|
+
|
|
163
|
+
return ((_this$oManifestSettin11 = this.oManifestSettings) === null || _this$oManifestSettin11 === void 0 ? void 0 : (_this$oManifestSettin12 = _this$oManifestSettin11.navigation) === null || _this$oManifestSettin12 === void 0 ? void 0 : _this$oManifestSettin12[navigationOrCollectionName]) || {};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Retrieves the view level.
|
|
167
|
+
*
|
|
168
|
+
* @returns {number} The current view level
|
|
169
|
+
*/
|
|
170
|
+
;
|
|
171
|
+
|
|
172
|
+
_proto.getViewLevel = function getViewLevel() {
|
|
173
|
+
var _this$oManifestSettin13;
|
|
174
|
+
|
|
175
|
+
return ((_this$oManifestSettin13 = this.oManifestSettings) === null || _this$oManifestSettin13 === void 0 ? void 0 : _this$oManifestSettin13.viewLevel) || -1;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Retrieves the contentDensities setting of the application.
|
|
179
|
+
*
|
|
180
|
+
* @returns {ContentDensitiesType} The current content density
|
|
181
|
+
*/
|
|
182
|
+
;
|
|
183
|
+
|
|
184
|
+
_proto.getContentDensities = function getContentDensities() {
|
|
185
|
+
var _this$oManifestSettin14;
|
|
186
|
+
|
|
187
|
+
return ((_this$oManifestSettin14 = this.oManifestSettings) === null || _this$oManifestSettin14 === void 0 ? void 0 : _this$oManifestSettin14.contentDensities) || {
|
|
188
|
+
cozy: false,
|
|
189
|
+
compact: false
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Checks whether we are in FCL mode or not.
|
|
194
|
+
*
|
|
195
|
+
* @returns {boolean} `true` if we are in FCL
|
|
196
|
+
*/
|
|
197
|
+
;
|
|
198
|
+
|
|
199
|
+
_proto.isFclEnabled = function isFclEnabled() {
|
|
200
|
+
var _this$oManifestSettin15;
|
|
201
|
+
|
|
202
|
+
return !!((_this$oManifestSettin15 = this.oManifestSettings) !== null && _this$oManifestSettin15 !== void 0 && _this$oManifestSettin15.fclEnabled);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Checks whether the current settings (application / shell) allows us to use condensed layout.
|
|
206
|
+
*
|
|
207
|
+
* @returns {boolean} `true` if we can use the condensed layout, false otherwise
|
|
208
|
+
*/
|
|
209
|
+
;
|
|
210
|
+
|
|
211
|
+
_proto.isCondensedLayoutCompliant = function isCondensedLayoutCompliant() {
|
|
212
|
+
var _this$oManifestSettin16, _this$oManifestSettin17;
|
|
213
|
+
|
|
214
|
+
var manifestContentDensity = ((_this$oManifestSettin16 = this.oManifestSettings) === null || _this$oManifestSettin16 === void 0 ? void 0 : _this$oManifestSettin16.contentDensities) || {
|
|
215
|
+
cozy: false,
|
|
216
|
+
compact: false
|
|
217
|
+
};
|
|
218
|
+
var shellContentDensity = ((_this$oManifestSettin17 = this.oManifestSettings) === null || _this$oManifestSettin17 === void 0 ? void 0 : _this$oManifestSettin17.shellContentDensity) || "compact";
|
|
219
|
+
var isCondensedLayoutCompliant = true;
|
|
220
|
+
|
|
221
|
+
if ((manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.cozy) === true && (manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.compact) !== true || shellContentDensity === "cozy") {
|
|
222
|
+
isCondensedLayoutCompliant = false;
|
|
346
223
|
}
|
|
347
|
-
/**
|
|
348
|
-
* Returns true if there are multiple entity sets to be displayed.
|
|
349
|
-
*
|
|
350
|
-
* @returns {boolean} `true` if there are multiple entity sets
|
|
351
|
-
*/
|
|
352
224
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
value: function hasMultipleEntitySets() {
|
|
356
|
-
var _this = this;
|
|
225
|
+
return isCondensedLayoutCompliant;
|
|
226
|
+
} //region OP Specific
|
|
357
227
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
228
|
+
/**
|
|
229
|
+
* Retrieves the sections defined in the manifest.
|
|
230
|
+
*
|
|
231
|
+
* @returns {ConfigurableRecord<ManifestSection>} A set of manifest sections indexed by an iterable key
|
|
232
|
+
*/
|
|
233
|
+
;
|
|
234
|
+
|
|
235
|
+
_proto.getSections = function getSections() {
|
|
236
|
+
var _this$oManifestSettin18, _this$oManifestSettin19, _content2, _content2$body;
|
|
237
|
+
|
|
238
|
+
return this.mergeFn({}, (_this$oManifestSettin18 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin18 === void 0 ? void 0 : (_this$oManifestSettin19 = _this$oManifestSettin18["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin19 === void 0 ? void 0 : _this$oManifestSettin19.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Returns true of the header of the application is editable and should appear in the facets.
|
|
242
|
+
*
|
|
243
|
+
* @returns {boolean} `true` if the header if editable
|
|
244
|
+
*/
|
|
245
|
+
;
|
|
246
|
+
|
|
247
|
+
_proto.isHeaderEditable = function isHeaderEditable() {
|
|
248
|
+
return this.getShowObjectPageHeader() && this.oManifestSettings.editableHeaderContent;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Returns true if we should show the object page header.
|
|
252
|
+
*
|
|
253
|
+
* @returns {boolean} `true` if the header should be displayed
|
|
254
|
+
*/
|
|
255
|
+
;
|
|
256
|
+
|
|
257
|
+
_proto.getShowAnchorBar = function getShowAnchorBar() {
|
|
258
|
+
var _content3, _content3$header, _content4, _content4$header;
|
|
259
|
+
|
|
260
|
+
return ((_content3 = this.oManifestSettings.content) === null || _content3 === void 0 ? void 0 : (_content3$header = _content3.header) === null || _content3$header === void 0 ? void 0 : _content3$header.anchorBarVisible) !== undefined ? !!((_content4 = this.oManifestSettings.content) !== null && _content4 !== void 0 && (_content4$header = _content4.header) !== null && _content4$header !== void 0 && _content4$header.anchorBarVisible) : true;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Defines whether or not the section will be displayed in different tabs.
|
|
264
|
+
*
|
|
265
|
+
* @returns {boolean} `true` if the icon tab bar should be used instead of scrolling
|
|
266
|
+
*/
|
|
267
|
+
;
|
|
268
|
+
|
|
269
|
+
_proto.useIconTabBar = function useIconTabBar() {
|
|
270
|
+
return this.getShowAnchorBar() && this.oManifestSettings.sectionLayout === "Tabs";
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Returns true if the object page header is to be shown.
|
|
274
|
+
*
|
|
275
|
+
* @returns {boolean} `true` if the object page header is to be displayed
|
|
276
|
+
*/
|
|
277
|
+
;
|
|
278
|
+
|
|
279
|
+
_proto.getShowObjectPageHeader = function getShowObjectPageHeader() {
|
|
280
|
+
var _content5, _content5$header, _content6, _content6$header;
|
|
281
|
+
|
|
282
|
+
return ((_content5 = this.oManifestSettings.content) === null || _content5 === void 0 ? void 0 : (_content5$header = _content5.header) === null || _content5$header === void 0 ? void 0 : _content5$header.visible) !== undefined ? !!((_content6 = this.oManifestSettings.content) !== null && _content6 !== void 0 && (_content6$header = _content6.header) !== null && _content6$header !== void 0 && _content6$header.visible) : true;
|
|
283
|
+
} //endregion OP Specific
|
|
284
|
+
//region LR Specific
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Retrieves the multiple view configuration from the manifest.
|
|
288
|
+
*
|
|
289
|
+
* @returns {MultipleViewsConfiguration} The views that represent the manifest object
|
|
290
|
+
*/
|
|
291
|
+
;
|
|
292
|
+
|
|
293
|
+
_proto.getViewConfiguration = function getViewConfiguration() {
|
|
294
|
+
return this.oManifestSettings.views;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Retrieves the stickyMultiTabHeader configuration from the manifest.
|
|
298
|
+
*
|
|
299
|
+
* @returns {boolean} Returns True if stickyMultiTabHeader is enabled or undefined
|
|
300
|
+
*/
|
|
301
|
+
;
|
|
302
|
+
|
|
303
|
+
_proto.getStickyMultiTabHeaderConfiguration = function getStickyMultiTabHeaderConfiguration() {
|
|
304
|
+
var bStickyMultiTabHeader = this.oManifestSettings.stickyMultiTabHeader;
|
|
305
|
+
return bStickyMultiTabHeader !== undefined ? bStickyMultiTabHeader : true;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Retrieves the KPI configuration from the manifest.
|
|
309
|
+
*
|
|
310
|
+
* @returns {object} Returns a map between KPI names and their respective configuration
|
|
311
|
+
*/
|
|
312
|
+
;
|
|
313
|
+
|
|
314
|
+
_proto.getKPIConfiguration = function getKPIConfiguration() {
|
|
315
|
+
return this.oManifestSettings.keyPerformanceIndicators || {};
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Retrieves the filter configuration from the manifest.
|
|
319
|
+
*
|
|
320
|
+
* @returns {FilterManifestConfiguration} The filter configuration from the manifest
|
|
321
|
+
*/
|
|
322
|
+
;
|
|
323
|
+
|
|
324
|
+
_proto.getFilterConfiguration = function getFilterConfiguration() {
|
|
325
|
+
return this.getControlConfiguration("@com.sap.vocabularies.UI.v1.SelectionFields");
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Returns true if there are multiple entity sets to be displayed.
|
|
329
|
+
*
|
|
330
|
+
* @returns {boolean} `true` if there are multiple entity sets
|
|
331
|
+
*/
|
|
332
|
+
;
|
|
333
|
+
|
|
334
|
+
_proto.hasMultipleEntitySets = function hasMultipleEntitySets() {
|
|
335
|
+
var _this = this;
|
|
336
|
+
|
|
337
|
+
var viewConfig = this.getViewConfiguration() || {
|
|
338
|
+
paths: []
|
|
339
|
+
};
|
|
340
|
+
var manifestEntitySet = this.oManifestSettings.entitySet;
|
|
341
|
+
return viewConfig.paths.find(function (path) {
|
|
342
|
+
var _path;
|
|
343
|
+
|
|
344
|
+
if ((_path = path) !== null && _path !== void 0 && _path.template) {
|
|
345
|
+
return undefined;
|
|
346
|
+
} else if (_this.hasMultipleVisualizations(path)) {
|
|
347
|
+
var _ref = path,
|
|
348
|
+
primary = _ref.primary,
|
|
349
|
+
secondary = _ref.secondary;
|
|
350
|
+
return primary.some(function (path) {
|
|
351
|
+
return path.entitySet && path.entitySet !== manifestEntitySet;
|
|
352
|
+
}) || secondary.some(function (path) {
|
|
378
353
|
return path.entitySet && path.entitySet !== manifestEntitySet;
|
|
379
|
-
}
|
|
380
|
-
}) !== undefined;
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Returns the context path for the template if it is specified in the manifest.
|
|
384
|
-
*
|
|
385
|
-
* @returns {string} The context path for the template
|
|
386
|
-
*/
|
|
387
|
-
|
|
388
|
-
}, {
|
|
389
|
-
key: "getContextPath",
|
|
390
|
-
value: function getContextPath() {
|
|
391
|
-
var _this$oManifestSettin20;
|
|
392
|
-
|
|
393
|
-
return (_this$oManifestSettin20 = this.oManifestSettings) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.contextPath;
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Returns true if there are multiple visualizations.
|
|
397
|
-
*
|
|
398
|
-
* @param {ViewPathConfiguration} path The path from the view
|
|
399
|
-
* @returns {boolean} `true` if there are multiple visualizations
|
|
400
|
-
*/
|
|
401
|
-
|
|
402
|
-
}, {
|
|
403
|
-
key: "hasMultipleVisualizations",
|
|
404
|
-
value: function hasMultipleVisualizations(path) {
|
|
405
|
-
var _primary2, _secondary2;
|
|
406
|
-
|
|
407
|
-
if (!path) {
|
|
408
|
-
var viewConfig = this.getViewConfiguration() || {
|
|
409
|
-
paths: []
|
|
410
|
-
};
|
|
411
|
-
return viewConfig.paths.some(function (path) {
|
|
412
|
-
var _primary, _secondary;
|
|
413
|
-
|
|
414
|
-
return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
|
|
415
354
|
});
|
|
355
|
+
} else {
|
|
356
|
+
path = path;
|
|
357
|
+
return path.entitySet && path.entitySet !== manifestEntitySet;
|
|
416
358
|
}
|
|
359
|
+
}) !== undefined;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Returns the context path for the template if it is specified in the manifest.
|
|
363
|
+
*
|
|
364
|
+
* @returns {string} The context path for the template
|
|
365
|
+
*/
|
|
366
|
+
;
|
|
367
|
+
|
|
368
|
+
_proto.getContextPath = function getContextPath() {
|
|
369
|
+
var _this$oManifestSettin20;
|
|
417
370
|
|
|
418
|
-
|
|
419
|
-
|
|
371
|
+
return (_this$oManifestSettin20 = this.oManifestSettings) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.contextPath;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Returns true if there are multiple visualizations.
|
|
375
|
+
*
|
|
376
|
+
* @param {ViewPathConfiguration} path The path from the view
|
|
377
|
+
* @returns {boolean} `true` if there are multiple visualizations
|
|
378
|
+
*/
|
|
379
|
+
;
|
|
380
|
+
|
|
381
|
+
_proto.hasMultipleVisualizations = function hasMultipleVisualizations(path) {
|
|
382
|
+
var _primary2, _secondary2;
|
|
383
|
+
|
|
384
|
+
if (!path) {
|
|
385
|
+
var viewConfig = this.getViewConfiguration() || {
|
|
386
|
+
paths: []
|
|
387
|
+
};
|
|
388
|
+
return viewConfig.paths.some(function (path) {
|
|
389
|
+
var _primary, _secondary;
|
|
390
|
+
|
|
391
|
+
return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
|
|
392
|
+
});
|
|
393
|
+
}
|
|
420
394
|
|
|
421
|
-
|
|
395
|
+
return ((_primary2 = path.primary) === null || _primary2 === void 0 ? void 0 : _primary2.length) > 0 && ((_secondary2 = path.secondary) === null || _secondary2 === void 0 ? void 0 : _secondary2.length) > 0;
|
|
396
|
+
} //end region LR Specific
|
|
397
|
+
;
|
|
422
398
|
|
|
423
399
|
return ManifestWrapper;
|
|
424
400
|
}();
|
|
425
401
|
|
|
426
402
|
return ManifestWrapper;
|
|
427
403
|
}, false);
|
|
428
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJjb252ZXJ0ZXJUeXBlIiwiaGlkZUZpbHRlckJhciIsImlzRGVza3RvcCIsImlzUGhvbmUiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImFjdGlvbnMiLCJmb290ZXIiLCJ2YXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIk5vbmUiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNBbm5vdGF0aW9uUGF0aCIsIm5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIiwibmF2aWdhdGlvbiIsInZpZXdMZXZlbCIsImNvbnRlbnREZW5zaXRpZXMiLCJjb3p5IiwiY29tcGFjdCIsImZjbEVuYWJsZWQiLCJtYW5pZmVzdENvbnRlbnREZW5zaXR5Iiwic2hlbGxDb250ZW50RGVuc2l0eSIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwic2VjdGlvbnMiLCJib2R5IiwiZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwiZ2V0U2hvd0FuY2hvckJhciIsInNlY3Rpb25MYXlvdXQiLCJ2aXNpYmxlIiwidmlld3MiLCJrZXlQZXJmb3JtYW5jZUluZGljYXRvcnMiLCJnZXRDb250cm9sQ29uZmlndXJhdGlvbiIsInZpZXdDb25maWciLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInBhdGhzIiwibWFuaWZlc3RFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJmaW5kIiwicGF0aCIsInRlbXBsYXRlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJzb21lIiwiY29udGV4dFBhdGgiLCJs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LEdBQUdBLElBQVA7QUFDQSxtQkFBT0EsSUFBSSxDQUFDRixTQUFMLElBQWtCRSxJQUFJLENBQUNGLFNBQUwsS0FBbUJELGlCQUE1QztBQUNBO0FBQ0QsU0FiRCxNQWFPVixTQWRSO0FBZ0JBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7OzthQUNDLDBCQUFxQztBQUFBOztBQUNwQywwQ0FBTyxLQUFLakMsaUJBQVosNERBQU8sd0JBQXdCb0QsV0FBL0I7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzthQUNDLG1DQUEwQk4sSUFBMUIsRUFBaUU7QUFBQTs7QUFDaEUsWUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVixjQUFNTixVQUFVLEdBQUcsS0FBS0Msb0JBQUwsTUFBK0I7QUFBRUMsWUFBQUEsS0FBSyxFQUFFO0FBQVQsV0FBbEQ7QUFDQSxpQkFBT0YsVUFBVSxDQUFDRSxLQUFYLENBQWlCUyxJQUFqQixDQUFzQixVQUFBTCxJQUFJLEVBQUk7QUFBQTs7QUFDcEMsbUJBQ0MsYUFBQ0EsSUFBRCxDQUF3Q0csT0FBeEMsc0RBQWlESSxNQUFqRCxJQUEwRCxDQUExRCxJQUNBLGVBQUNQLElBQUQsQ0FBd0NJLFNBQXhDLDBEQUFtREcsTUFBbkQsSUFBNEQsQ0FGN0Q7QUFJQSxXQUxNLENBQVA7QUFNQTs7QUFDRCxlQUFPLGNBQUNQLElBQUQsQ0FBd0NHLE9BQXhDLHdEQUFpREksTUFBakQsSUFBMEQsQ0FBMUQsSUFBK0QsZ0JBQUNQLElBQUQsQ0FBd0NJLFNBQXhDLDREQUFtREcsTUFBbkQsSUFBNEQsQ0FBbEk7QUFDQSxPLENBRUQ7Ozs7Ozs7U0FHY3RELGUiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYWJsZVJlY29yZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdENvbnRlbnREZW5zaXRpZXNUeXBlLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TWFuaWZlc3RIZWFkZXJGYWNldCxcblx0TWFuaWZlc3RTZWN0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0T2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0Q3VzdG9tVmlld1RlbXBsYXRlQ29uZmlndXJhdGlvbixcblx0Vmlld0NvbmZpZ3VyYXRpb24sXG5cdEtQSUNvbmZpZ3VyYXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuXG4vKipcbiAqXG4gKi9cbmNsYXNzIE1hbmlmZXN0V3JhcHBlciB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgd3JhcHBlciBvYmplY3QgdG8gZW5zdXJlIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIG1hbmlmZXN0IGlzIGNvbnNpc3RlbnQgYW5kIGV2ZXJ5dGhpbmcgaXMgbWVyZ2VkIGNvcnJlY3RseS5cblx0ICpcblx0ICogQHBhcmFtIHtCYXNlTWFuaWZlc3RTZXR0aW5nc30gb01hbmlmZXN0U2V0dGluZ3MgVGhlIG1hbmlmZXN0IHNldHRpbmdzIGZvciB0aGUgY3VycmVudCBwYWdlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBtZXJnZVxuXHQgKiBAcmV0dXJucyB7TWFuaWZlc3RXcmFwcGVyfSBUaGUgbWFuaWZlc3Qgd3JhcHBlciBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgb01hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBwcml2YXRlIG1lcmdlRm46IEZ1bmN0aW9uKSB7fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlXG5cdCAqL1xuXHRnZXRUZW1wbGF0ZVR5cGUoKTogVGVtcGxhdGVUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHRlbXBsYXRlIHNob3VsZCBkaXNwbGF5IHRoZSBmaWx0ZXIgYmFyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBmaWx0ZXIgYmFyIHNob3VsZCBiZSBoaWRkZW5cblx0ICovXG5cdGlzRmlsdGVyQmFySGlkZGVuKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKT8uaGlkZUZpbHRlckJhcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIGRlc2t0b3Agb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBvbiBhIGRlc2t0b3Bcblx0ICovXG5cdGlzRGVza3RvcCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzRGVza3RvcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIG1vYmlsZSBwaG9uZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgYXJlIG9uIGEgbW9iaWxlIHBob25lXG5cdCAqL1xuXHRpc1Bob25lKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3MuaXNQaG9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gY29udGFpbmVycyAoZmllbGQgZ3JvdXBzIG9yIGlkZW50aWZpY2F0aW9uKSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZhY2V0VGFyZ2V0IFRoZSB0YXJnZXQgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGlzIGZvcm1cblx0ICogQHJldHVybnMge0Zvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb259IEEgc2V0IG9mIGZvcm0gY29udGFpbmVycyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9ybUNvbnRhaW5lcihmYWNldFRhcmdldDogc3RyaW5nKTogRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltmYWNldFRhcmdldF0gYXMgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgZmFjZXRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+fSBBIHNldCBvZiBoZWFkZXIgZmFjZXRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRIZWFkZXJGYWNldHMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+IHtcblx0XHRyZXR1cm4gdGhpcy5tZXJnZUZuKFxuXHRcdFx0e30sXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVyRmFjZXRzXCJdPy5mYWNldHMsXG5cdFx0XHQodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5mYWNldHNcblx0XHQpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGhlYWRlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5oZWFkZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZm9vdGVyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+fSBBIHNldCBvZiBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRGb290ZXJBY3Rpb25zKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRlbnQ/LmZvb3Rlcj8uYWN0aW9ucyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHZhcmlhbnQgbWFuYWdlbWVudCBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge1ZhcmlhbnRNYW5hZ2VtZW50VHlwZX0gQSB0eXBlIG9mIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKi9cblx0Z2V0VmFyaWFudE1hbmFnZW1lbnQoKTogVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy52YXJpYW50TWFuYWdlbWVudCB8fCBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGFubm90YXRpb24gUGF0aCBmb3IgdGhlIFNQViBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBUaGUgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGUgZGVmYXVsdCBTUFYgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5kZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgYSBzcGVjaWZpYyBhbm5vdGF0aW9uIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQW5ub3RhdGlvblBhdGggVGhlIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXRDb250cm9sQ29uZmlndXJhdGlvbihzQW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRyb2xDb25maWd1cmF0aW9uPy5bc0Fubm90YXRpb25QYXRoXSB8fCB7fTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb25maWd1cmVkIHNldHRpbmdzIGZvciBhIGdpdmVuIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmF2aWdhdGlvbk9yQ29sbGVjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdG8gY2hlY2tcblx0ICogQHJldHVybnMge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8ubmF2aWdhdGlvbj8uW25hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lXSB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHZpZXcgbGV2ZWwuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IHZpZXcgbGV2ZWxcblx0ICovXG5cdGdldFZpZXdMZXZlbCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy52aWV3TGV2ZWwgfHwgLTE7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250ZW50RGVuc2l0aWVzIHNldHRpbmcgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29udGVudERlbnNpdGllc1R5cGV9IFRoZSBjdXJyZW50IGNvbnRlbnQgZGVuc2l0eVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdGllcygpOiBDb250ZW50RGVuc2l0aWVzVHlwZSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRlbnREZW5zaXRpZXMgfHwge1xuXHRcdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHdlIGFyZSBpbiBGQ0wgbW9kZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgYXJlIGluIEZDTFxuXHQgKi9cblx0aXNGY2xFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmZjbEVuYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2V0dGluZ3MgKGFwcGxpY2F0aW9uIC8gc2hlbGwpIGFsbG93cyB1cyB0byB1c2UgY29uZGVuc2VkIGxheW91dC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBjYW4gdXNlIHRoZSBjb25kZW5zZWQgbGF5b3V0LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdGNvenk6IGZhbHNlLFxuXHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHR9O1xuXHRcdGNvbnN0IHNoZWxsQ29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5zaGVsbENvbnRlbnREZW5zaXR5IHx8IFwiY29tcGFjdFwiO1xuXHRcdGxldCBpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IHRydWU7XG5cdFx0aWYgKChtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb3p5ID09PSB0cnVlICYmIG1hbmlmZXN0Q29udGVudERlbnNpdHk/LmNvbXBhY3QgIT09IHRydWUpIHx8IHNoZWxsQ29udGVudERlbnNpdHkgPT09IFwiY296eVwiKSB7XG5cdFx0XHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQ7XG5cdH1cblxuXHQvL3JlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj59IEEgc2V0IG9mIG1hbmlmZXN0IHNlY3Rpb25zIGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRTZWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXT8uc2VjdGlvbnMsXG5cdFx0XHQodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uYm9keT8uc2VjdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBvZiB0aGUgaGVhZGVyIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBlZGl0YWJsZSBhbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmFjZXRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBoZWFkZXIgaWYgZWRpdGFibGVcblx0ICovXG5cdGlzSGVhZGVyRWRpdGFibGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHNob3cgdGhlIG9iamVjdCBwYWdlIGhlYWRlci5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIHNob3VsZCBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dBbmNob3JCYXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmFuY2hvckJhclZpc2libGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmFuY2hvckJhclZpc2libGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBzZWN0aW9uIHdpbGwgYmUgZGlzcGxheWVkIGluIGRpZmZlcmVudCB0YWJzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpY29uIHRhYiBiYXIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBzY3JvbGxpbmdcblx0ICovXG5cdHVzZUljb25UYWJCYXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hvd0FuY2hvckJhcigpICYmICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBzaG93bi5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyIGlzIHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0Z2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LnZpc2libGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyAhISh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LnZpc2libGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXG5cdC8vZW5kcmVnaW9uIE9QIFNwZWNpZmljXG5cblx0Ly9yZWdpb24gTFIgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBtdWx0aXBsZSB2aWV3IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbn0gVGhlIHZpZXdzIHRoYXQgcmVwcmVzZW50IHRoZSBtYW5pZmVzdCBvYmplY3Rcblx0ICovXG5cdGdldFZpZXdDb25maWd1cmF0aW9uKCk6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLnZpZXdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgS1BJIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgYSBtYXAgYmV0d2VlbiBLUEkgbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0S1BJQ29uZmlndXJhdGlvbigpOiB7IFtrcGlOYW1lOiBzdHJpbmddOiBLUElDb25maWd1cmF0aW9uIH0ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykua2V5UGVyZm9ybWFuY2VJbmRpY2F0b3JzIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb259IFRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKi9cblx0Z2V0RmlsdGVyQ29uZmlndXJhdGlvbigpOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbnRyb2xDb25maWd1cmF0aW9uKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKTtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0cyB0byBiZSBkaXNwbGF5ZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGVudGl0eSBzZXRzXG5cdCAqL1xuXHRoYXNNdWx0aXBsZUVudGl0eVNldHMoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdGNvbnN0IG1hbmlmZXN0RW50aXR5U2V0ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdHZpZXdDb25maWcucGF0aHMuZmluZCgocGF0aDogVmlld0NvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdFx0aWYgKChwYXRoIGFzIEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pPy50ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdHByaW1hcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldCkgfHxcblx0XHRcdFx0XHRcdHNlY29uZGFyeS5zb21lKHBhdGggPT4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aCA9IHBhdGggYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pICE9PSB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHRlbXBsYXRlIGlmIGl0IGlzIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGV4dFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2aXN1YWxpemF0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtWaWV3UGF0aENvbmZpZ3VyYXRpb259IHBhdGggVGhlIHBhdGggZnJvbSB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2aXN1YWxpemF0aW9uc1xuXHQgKi9cblx0aGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoPzogVmlld1BhdGhDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFwYXRoKSB7XG5cdFx0XHRjb25zdCB2aWV3Q29uZmlnID0gdGhpcy5nZXRWaWV3Q29uZmlndXJhdGlvbigpIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRyZXR1cm4gdmlld0NvbmZpZy5wYXRocy5zb21lKHBhdGggPT4ge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5wcmltYXJ5Py5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMFxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiAocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJiAocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuc2Vjb25kYXJ5Py5sZW5ndGggPiAwO1xuXHR9XG5cblx0Ly9lbmQgcmVnaW9uIExSIFNwZWNpZmljXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmlmZXN0V3JhcHBlcjtcbiJdfQ==
|
|
404
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwiaXNEZXNrdG9wIiwiaXNQaG9uZSIsImdldEZvcm1Db250YWluZXIiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0SGVhZGVyRmFjZXRzIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb25zIiwiYm9keSIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImdldFNob3dBbmNob3JCYXIiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwidXNlSWNvblRhYkJhciIsInNlY3Rpb25MYXlvdXQiLCJ2aXNpYmxlIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ2aWV3cyIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsImJTdGlja3lNdWx0aVRhYkhlYWRlciIsInN0aWNreU11bHRpVGFiSGVhZGVyIiwiZ2V0S1BJQ29uZmlndXJhdGlvbiIsImtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJ2aWV3Q29uZmlnIiwicGF0aHMiLCJtYW5pZmVzdEVudGl0eVNldCIsImVudGl0eVNldCIsImZpbmQiLCJwYXRoIiwidGVtcGxhdGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInNvbWUiLCJnZXRDb250ZXh0UGF0aCIsImNvbnRleHRQYXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFxQkE7QUFDQTtBQUNBO01BQ01BLGU7QUFDTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLDZCQUFvQkMsaUJBQXBCLEVBQXFFQyxPQUFyRSxFQUF3RjtBQUFBLFdBQXBFRCxpQkFBb0UsR0FBcEVBLGlCQUFvRTtBQUFBLFdBQW5CQyxPQUFtQixHQUFuQkEsT0FBbUI7QUFBRTtBQUUxRjtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7OztXQUNDQyxlLEdBQUEsMkJBQWdDO0FBQy9CLGFBQU8sS0FBS0YsaUJBQUwsQ0FBdUJHLGFBQTlCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0MsaUIsR0FBQSw2QkFBNkI7QUFBQTs7QUFDNUIsYUFBTyxDQUFDLDJCQUFFLEtBQUtKLGlCQUFQLGtEQUFDLHNCQUF3REssYUFBekQsQ0FBUjtBQUNBO0FBRUQ7QUFD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O0FBQ0E7QUFDRCxPQWJELE1BYU9mLFNBZFI7QUFnQkE7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ3dCLGMsR0FBQSwwQkFBcUM7QUFBQTs7QUFDcEMsd0NBQU8sS0FBS3pFLGlCQUFaLDREQUFPLHdCQUF3QjBFLFdBQS9CO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDTCx5QixHQUFBLG1DQUEwQkYsSUFBMUIsRUFBaUU7QUFBQTs7QUFDaEUsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVixZQUFNTCxVQUFVLEdBQUcsS0FBS1Qsb0JBQUwsTUFBK0I7QUFBRVUsVUFBQUEsS0FBSyxFQUFFO0FBQVQsU0FBbEQ7QUFDQSxlQUFPRCxVQUFVLENBQUNDLEtBQVgsQ0FBaUJTLElBQWpCLENBQXNCLFVBQUFMLElBQUksRUFBSTtBQUFBOztBQUNwQyxpQkFDQyxhQUFDQSxJQUFELENBQXdDRyxPQUF4QyxzREFBaURLLE1BQWpELElBQTBELENBQTFELElBQ0EsZUFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsMERBQW1ESSxNQUFuRCxJQUE0RCxDQUY3RDtBQUlBLFNBTE0sQ0FBUDtBQU1BOztBQUNELGFBQU8sY0FBQ1IsSUFBRCxDQUF3Q0csT0FBeEMsd0RBQWlESyxNQUFqRCxJQUEwRCxDQUExRCxJQUErRCxnQkFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsNERBQW1ESSxNQUFuRCxJQUE0RCxDQUFsSTtBQUNBLEssQ0FFRDs7Ozs7O1NBR2M1RSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmFibGVSZWNvcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0QmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRDb250ZW50RGVuc2l0aWVzVHlwZSxcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyxcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE1hbmlmZXN0SGVhZGVyRmFjZXQsXG5cdE1hbmlmZXN0U2VjdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdFZpZXdDb25maWd1cmF0aW9uLFxuXHRLUElDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBNYW5pZmVzdFdyYXBwZXIge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdyYXBwZXIgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBtYW5pZmVzdCBpcyBjb25zaXN0ZW50IGFuZCBldmVyeXRoaW5nIGlzIG1lcmdlZCBjb3JyZWN0bHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdCBzZXR0aW5ncyBmb3IgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZuIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgbWVyZ2Vcblx0ICogQHJldHVybnMge01hbmlmZXN0V3JhcHBlcn0gVGhlIG1hbmlmZXN0IHdyYXBwZXIgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG9NYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncywgcHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbikge31cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCB0ZW1wbGF0ZSB0eXBlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0VGVtcGxhdGVUeXBlKCk6IFRlbXBsYXRlVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCB0ZW1wbGF0ZSBzaG91bGQgZGlzcGxheSB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZmlsdGVyIGJhciBzaG91bGQgYmUgaGlkZGVuXG5cdCAqL1xuXHRpc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyk/LmhpZGVGaWx0ZXJCYXI7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBkZXNrdG9wIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtb2JpbGUgcGhvbmUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBvbiBhIG1vYmlsZSBwaG9uZVxuXHQgKi9cblx0aXNQaG9uZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzUGhvbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmb3JtIGNvbnRhaW5lcnMgKGZpZWxkIGdyb3VwcyBvciBpZGVudGlmaWNhdGlvbikgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmYWNldFRhcmdldCBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBmb3IgdGhpcyBmb3JtXG5cdCAqIEByZXR1cm5zIHtGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9ufSBBIHNldCBvZiBmb3JtIGNvbnRhaW5lcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEZvcm1Db250YWluZXIoZmFjZXRUYXJnZXQ6IHN0cmluZyk6IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bZmFjZXRUYXJnZXRdIGFzIEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pn0gQSBzZXQgb2YgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXT8uZmFjZXRzLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uZmFjZXRzXG5cdFx0KTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj59IEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvb3RlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9vdGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5mb290ZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtWYXJpYW50TWFuYWdlbWVudFR5cGV9IEEgdHlwZSBvZiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MudmFyaWFudE1hbmFnZW1lbnQgfHwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gVGhlIGFubm90YXRpb24gcGF0aCBmb3IgdGhlIGRlZmF1bHQgU1BWIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgc3BlY2lmaWMgYW5ub3RhdGlvbiBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0Q29udHJvbENvbmZpZ3VyYXRpb24oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250cm9sQ29uZmlndXJhdGlvbj8uW3NBbm5vdGF0aW9uUGF0aF0gfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge0NvbnRlbnREZW5zaXRpZXNUeXBlfSBUaGUgY3VycmVudCBjb250ZW50IGRlbnNpdHlcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXRpZXMoKTogQ29udGVudERlbnNpdGllc1R5cGUge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdFx0Y296eTogZmFsc2UsXG5cdFx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB3ZSBhcmUgaW4gRkNMIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgY2FuIHVzZSB0aGUgY29uZGVuc2VkIGxheW91dCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0fTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRsZXQgaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSB0cnVlO1xuXHRcdGlmICgobWFuaWZlc3RDb250ZW50RGVuc2l0eT8uY296eSA9PT0gdHJ1ZSAmJiBtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb21wYWN0ICE9PSB0cnVlKSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvenlcIikge1xuXHRcdFx0aXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50O1xuXHR9XG5cblx0Ly9yZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+fSBBIHNldCBvZiBtYW5pZmVzdCBzZWN0aW9ucyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0U2VjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm1lcmdlRm4oXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0/LnNlY3Rpb25zLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmJvZHk/LnNlY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgb2YgdGhlIGhlYWRlciBvZiB0aGUgYXBwbGljYXRpb24gaXMgZWRpdGFibGUgYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGZhY2V0cy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIGlmIGVkaXRhYmxlXG5cdCAqL1xuXHRpc0hlYWRlckVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dPYmplY3RQYWdlSGVhZGVyKCkgJiYgKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93QW5jaG9yQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiBkaWZmZXJlbnQgdGFicy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaWNvbiB0YWIgYmFyIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygc2Nyb2xsaW5nXG5cdCAqL1xuXHR1c2VJY29uVGFiQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dBbmNob3JCYXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgc2hvd24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dPYmplY3RQYWdlSGVhZGVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvL2VuZHJlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8vcmVnaW9uIExSIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbXVsdGlwbGUgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb259IFRoZSB2aWV3cyB0aGF0IHJlcHJlc2VudCB0aGUgbWFuaWZlc3Qgb2JqZWN0XG5cdCAqL1xuXHRnZXRWaWV3Q29uZmlndXJhdGlvbigpOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHN0aWNreU11bHRpVGFiSGVhZGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFRydWUgaWYgc3RpY2t5TXVsdGlUYWJIZWFkZXIgaXMgZW5hYmxlZCBvciB1bmRlZmluZWRcblx0ICovXG5cdGdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgPSAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykuc3RpY2t5TXVsdGlUYWJIZWFkZXI7XG5cdFx0cmV0dXJuIGJTdGlja3lNdWx0aVRhYkhlYWRlciAhPT0gdW5kZWZpbmVkID8gYlN0aWNreU11bHRpVGFiSGVhZGVyIDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEtQSSBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbWFwIGJldHdlZW4gS1BJIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldEtQSUNvbmZpZ3VyYXRpb24oKTogeyBba3BpTmFtZTogc3RyaW5nXTogS1BJQ29uZmlndXJhdGlvbiB9IHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLmtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9ufSBUaGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb250cm9sQ29uZmlndXJhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIik7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHMgdG8gYmUgZGlzcGxheWVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0c1xuXHQgKi9cblx0aGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRjb25zdCBtYW5pZmVzdEVudGl0eVNldCA9IHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdHJldHVybiAoXG5cdFx0XHR2aWV3Q29uZmlnLnBhdGhzLmZpbmQoKHBhdGg6IFZpZXdDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICgocGF0aCBhcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKT8udGVtcGxhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRwcmltYXJ5LnNvbWUocGF0aCA9PiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpIHx8XG5cdFx0XHRcdFx0XHRzZWNvbmRhcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBpZiBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGVcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSBwYXRoIFRoZSBwYXRoIGZyb20gdGhlIHZpZXdcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aD86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIHZpZXdDb25maWcucGF0aHMuc29tZShwYXRoID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5zZWNvbmRhcnk/Lmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnByaW1hcnk/Lmxlbmd0aCA+IDAgJiYgKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8vZW5kIHJlZ2lvbiBMUiBTcGVjaWZpY1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pZmVzdFdyYXBwZXI7XG4iXX0=
|