@sapui5/sap.fe.core 1.130.1 → 1.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/AppComponent.js +4 -11
- package/src/sap/fe/core/AppComponent.ts +3 -12
- package/src/sap/fe/core/CommonUtils.js +13 -13
- package/src/sap/fe/core/CommonUtils.ts +16 -16
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +0 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +16 -19
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +29 -28
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +43 -46
- package/src/sap/fe/core/converters/controls/Common/Table.ts +68 -57
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +7 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +6 -13
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +16 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +19 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +17 -8
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +16 -14
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/core/CommonUtils", "sap/fe/core/TemplateModel", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/definition/FEDefinition", "sap/fe/core/helpers/LoaderUtils", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/manifestMerger/ChangePageConfiguration", "sap/ui/Device", "sap/ui/VersionInfo", "sap/ui/core/mvc/View", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/model/json/JSONModel", "../helpers/DynamicAnnotationPathHelper"], function (Log, Localization, CommonUtils, TemplateModel, ManifestSettings, FEDefinition, LoaderUtils, ModelHelper, ChangePageConfiguration, Device, VersionInfo, View, Service, ServiceFactory, ServiceFactoryRegistry, JSONModel, DynamicAnnotationPathHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/core/CommonUtils", "sap/fe/core/TemplateModel", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/definition/FEDefinition", "sap/fe/core/helpers/LoaderUtils", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/manifestMerger/ChangePageConfiguration", "sap/ui/Device", "sap/ui/VersionInfo", "sap/ui/core/Core", "sap/ui/core/mvc/View", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/model/json/JSONModel", "../helpers/DynamicAnnotationPathHelper"], function (Log, Localization, CommonUtils, TemplateModel, ManifestSettings, FEDefinition, LoaderUtils, ModelHelper, ChangePageConfiguration, Device, VersionInfo, Core, View, Service, ServiceFactory, ServiceFactoryRegistry, JSONModel, DynamicAnnotationPathHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var resolveDynamicExpression = DynamicAnnotationPathHelper.resolveDynamicExpression;
|
|
@@ -70,7 +70,8 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/core/Common
|
|
|
70
70
|
aServiceDependencies.push(VersionInfo.load().then(function (oInfo) {
|
|
71
71
|
let sTimestamp = "";
|
|
72
72
|
if (!oInfo.libraries) {
|
|
73
|
-
|
|
73
|
+
var _buildinfo;
|
|
74
|
+
sTimestamp = (Core === null || Core === void 0 ? void 0 : (_buildinfo = Core.buildinfo) === null || _buildinfo === void 0 ? void 0 : _buildinfo.buildtime) ?? "<NOVALUE>";
|
|
74
75
|
} else {
|
|
75
76
|
oInfo.libraries.forEach(function (oLibrary) {
|
|
76
77
|
sTimestamp += oLibrary.buildTimestamp;
|
|
@@ -157,6 +158,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/core/Common
|
|
|
157
158
|
this.oView = oView;
|
|
158
159
|
this.oView.setModel(new JSONModel(this.oView), "$view");
|
|
159
160
|
oComponent.setAggregation("rootControl", this.oView);
|
|
161
|
+
oComponent.getAppComponent().getRootControl().getController().getPlaceholder().hideRootPlaceholder();
|
|
160
162
|
return sCacheKey;
|
|
161
163
|
});
|
|
162
164
|
});
|
|
@@ -427,4 +429,4 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/core/Common
|
|
|
427
429
|
}(ServiceFactory);
|
|
428
430
|
return TemplatedViewServiceFactory;
|
|
429
431
|
}, false);
|
|
430
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsIl9TZXJ2aWNlIiwiX2luaGVyaXRzTG9vc2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9wcm90byIsInByb3RvdHlwZSIsImluaXQiLCJhU2VydmljZURlcGVuZGVuY2llcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJwYWdlSWQiLCJnZXRMb2NhbElkIiwiZ2V0SWQiLCJzU3RhYmxlSWQiLCJnZXRNZXRhZGF0YSIsImdldENvbXBvbmVudE5hbWUiLCJhRW5oYW5jZUkxOG4iLCJnZXRFbmhhbmNlSTE4biIsInNBcHBOYW1lc3BhY2UiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJpIiwibGVuZ3RoIiwib1Jlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsInJlcGxhY2UiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZ2V0TmFtZSIsIkxvY2FsaXphdGlvbiIsImdldExhbmd1YWdlVGFnIiwicHVzaCIsIlNlcnZpY2VGYWN0b3J5UmVnaXN0cnkiLCJnZXQiLCJjcmVhdGVJbnN0YW5jZSIsInNjb3BlVHlwZSIsInNldHRpbmdzIiwiYnVuZGxlcyIsImVuaGFuY2VJMThuIiwibW9kZWxOYW1lIiwidGhlbiIsIm9SZXNvdXJjZU1vZGVsU2VydmljZSIsImdldFJlc291cmNlTW9kZWwiLCJtZXRhTW9kZWwiLCJhcHBDb21wb25lbnQiLCJjb21wb25lbnQiLCJvQ2FjaGVIYW5kbGVyU2VydmljZSIsInZhbGlkYXRlQ2FjaGVLZXkiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsIlZlcnNpb25JbmZvIiwibG9hZCIsIm9JbmZvIiwic1RpbWVzdGFtcCIsImxpYnJhcmllcyIsInNhcCIsInVpIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsInJlcXVpcmVEZXBlbmRlbmNpZXMiLCJjcmVhdGVWaWV3IiwiZ2V0SW5zdGFuY2UiLCJpbnZhbGlkYXRlSWZOZWVkZWQiLCJyZWZyZXNoVmlldyIsIm9Sb290VmlldyIsImdldFJvb3RDb250cm9sIiwiZGVzdHJveSIsIm9WaWV3IiwicmVzb3VyY2VNb2RlbCIsInN0YWJsZUlkIiwiZ2V0VUlBcmVhIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiX2dldFZpZXdTZXR0aW5ncyIsInByZXByb2Nlc3NvckNvbnRleHQiLCJtU2VydmljZVNldHRpbmdzIiwibVZpZXdEYXRhIiwib1BhZ2VNb2RlbCIsIl9vQ29tcG9uZW50JGdldFZpZXdOYSIsInZpZXdUeXBlIiwiZ2V0Vmlld1R5cGUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwicHJlcHJvY2Vzc29ycyIsInhtbCIsImNvbnRyb2xzIiwiaWQiLCJ2aWV3TmFtZSIsImdldFZpZXdOYW1lIiwiY2FsbCIsInZpZXdEYXRhIiwiY2FjaGUiLCJrZXlzIiwiYWRkaXRpb25hbERhdGEiLCJnZXRBZGRpdGlvbmFsQ2FjaGVEYXRhIiwiZ2V0RGF0YSIsInNldEFkZGl0aW9uYWxDYWNoZURhdGEiLCJ2YWx1ZSIsInNldERhdGEiLCJtb2RlbHMiLCJoZWlnaHQiLCJfY3JlYXRlRXJyb3JQYWdlIiwicmVhc29uIiwib1ZpZXdTZXR0aW5ncyIsIm1lc3NhZ2UiLCJKU09OTW9kZWwiLCJydW5Bc093bmVyIiwiVmlldyIsImNyZWF0ZSIsInNldE1vZGVsIiwic2V0QWdncmVnYXRpb24iLCJfb0FwcENvbXBvbmVudCRnZXRSb3UiLCJfb0FwcENvbXBvbmVudCRnZXRSb3UyIiwiX29BcHBDb21wb25lbnQkZ2V0Um91MyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwib01hbmlmZXN0Q29udGVudCIsImdldE1hbmlmZXN0Iiwib0RldmljZU1vZGVsIiwiRGV2aWNlIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwib01hbmlmZXN0TW9kZWwiLCJvVmlld0RhdGFNb2RlbCIsIl9vTWFuaWZlc3RDb250ZW50JHNhcCIsIl9zYXBmZU1hbmlmZXN0Q29udGVudCIsIm9Sb3V0aW5nU2VydmljZSIsImdldFNlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJfZW5oYW5jZU5hdmlnYXRpb25Db25maWciLCJjb252ZXJ0ZWRNZXRhZGF0YSIsImNvbnZlcnRUeXBlcyIsImdldENhcGFiaWxpdGllcyIsImRlZmluaXRpb25Db250ZXh0IiwiRGVmaW5pdGlvbkNvbnRleHQiLCJhZGRBcHBsaWNhdGlvbk1hbmlmZXN0IiwibmF2aWdhdGlvbiIsInZpZXdMZXZlbCIsImNvbnRlbnREZW5zaXRpZXMiLCJpc0Rlc2t0b3AiLCJzeXN0ZW0iLCJkZXNrdG9wIiwiaXNQaG9uZSIsInBob25lIiwiVGVtcGxhdGVUeXBlIiwiRnJlZVN0eWxlUGFnZSIsImdldFZpZXdEYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5Iiwic2V0UGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94IiwiZ2V0U2hhcmVCdXR0b25WaXNpYmlsaXR5Rm9yTXlJbmJveCIsIm9TaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInNhcGZlTWFuaWZlc3RDb250ZW50Iiwic2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiZm9ybSIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiaW5jbHVkZXMiLCJzVGFyZ2V0QW5ub3RhdGlvblBhdGgiLCJyZXNvbHZlRHluYW1pY0V4cHJlc3Npb24iLCJUZW1wbGF0ZU1vZGVsIiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJpSXNzdWVDb3VudCIsImdldElzc3VlcyIsIm9Db252ZXJ0ZXJQYWdlTW9kZWwiLCJjb252ZXJ0UGFnZSIsImFJc3N1ZXMiLCJhQWRkZWRJc3N1ZXMiLCJzbGljZSIsIndhcm5pbmciLCJhU3BsaXRQYXRoIiwic3BsaXQiLCJzRW50aXR5U2V0UGF0aCIsIl9nZXRGdWxsUGF0aFRvRW50aXR5U2V0IiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJkZXZpY2UiLCJtYW5pZmVzdCIsImdldENvbnZlcnRlZE1ldGFkYXRhIiwiZ2V0RGVmaW5pdGlvbkNvbnRleHQiLCJnZXREZWZpbml0aW9uRm9yUGFnZSIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwiZ2V0UGFnZUZvciIsInZpZXdJZCIsInNldFByZXByb2Nlc3NvckNvbnRleHQiLCJ2aWV3SlNPTk1vZGVsIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVmlld0pTT05Nb2RlbCIsImVycm9yVmlld05hbWUiLCJlIiwiRXJyb3IiLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsInJlZHVjZSIsInNQYXRoU29GYXIiLCJzTmV4dFBhdGhQYXJ0Iiwib1RhcmdldCIsImdldE9iamVjdCIsImdldFZpZXciLCJnZXRJbnRlcmZhY2UiLCJleGl0IiwicmVtb3ZlR2xvYmFsSW5zdGFuY2UiLCJTZXJ2aWNlIiwiX1NlcnZpY2VGYWN0b3J5IiwiX3RoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsIl9vSW5zdGFuY2VSZWdpc3RyeSIsIl9wcm90bzIiLCJvU2VydmljZUNvbnRleHQiLCJpQ3JlYXRpbmdWaWV3cyIsIm9UZW1wbGF0ZWRWaWV3U2VydmljZSIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwiZmVFbnZpcm9ubWVudCIsImdldFNoYXJlQ29udHJvbFZpc2liaWxpdHkiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiX21hbmlmZXN0JHNhcFVpIiwiX21hbmlmZXN0JHNhcFVpJHJvdXRpIiwiX21hbmlmZXN0JHNhcFVpMiIsIl9tYW5pZmVzdCRzYXBVaTIkcm91dCIsIl9tYW5pZmVzdCRzYXBVaTIkcm91dDIiLCJfbWFuaWZlc3Qkc2FwVWkyJHJvdXQzIiwiX21hbmlmZXN0JHNhcFVpMiRyb3V0NCIsInRhcmdldHMiLCJyb3V0aW5nIiwicmVhbFRhcmdldCIsInRhcmdldFRvRmluZCIsImFjdHVhbFNldHRpbmdzIiwiYXBwbHlQYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU0FQSlNPTlNjaGVtYUZvcldlYkFwcGxpY2F0aW9uTWFuaWZlc3RGaWxlIH0gZnJvbSBcIkB1aTUvbWFuaWZlc3QvdHlwZXMvbWFuaWZlc3RcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IExvY2FsaXphdGlvbiBmcm9tIFwic2FwL2Jhc2UvaTE4bi9Mb2NhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnREYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdCB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Db25maWd1cmF0aW9uLCBYTUxQcmVwcm9jZXNzb3JDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBTdXJ2ZXlDb25maWcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRmVlZGJhY2tcIjtcbmltcG9ydCB0eXBlIHtcblx0QmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdENvbnRlbnREZW5zaXRpZXNUeXBlLFxuXHRDb250cm9sQ29uZmlndXJhdGlvbixcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE1hbmlmZXN0SGVhZGVyRmFjZXQsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSAqIGFzIF9NZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSAqIGFzIF9UZW1wbGF0ZUNvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVSZWNvcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBEZWZpbml0aW9uUGFnZSB9IGZyb20gXCJzYXAvZmUvY29yZS9kZWZpbml0aW9uL0ZFRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgRGVmaW5pdGlvbkNvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZGVmaW5pdGlvbi9GRURlZmluaXRpb25cIjtcbmltcG9ydCB7IHJlcXVpcmVEZXBlbmRlbmNpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Mb2FkZXJVdGlsc1wiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBhcHBseVBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9tYW5pZmVzdE1lcmdlci9DaGFuZ2VQYWdlQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZUhhbmRsZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgVmVyc2lvbkluZm8gZnJvbSBcInNhcC91aS9WZXJzaW9uSW5mb1wiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeSwgU2hhcmVPcHRpb25zIH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlSZWdpc3RyeVwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvRHluYW1pY0Fubm90YXRpb25QYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIi4vUmVzb3VyY2VNb2RlbFNlcnZpY2VGYWN0b3J5XCI7XG5cbnR5cGUgVGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncyA9IHtcblx0dmlld1R5cGU/OiBzdHJpbmc7XG5cdHZpZXdOYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBWaWV3U2V0dGluZ3MgPSBQYXJhbWV0ZXJzPHR5cGVvZiBWaWV3LmNyZWF0ZT5bMF0gJiB7IGNhY2hlOiB1bmtub3duOyBtb2RlbHM6IHVua25vd247IGhlaWdodDogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBWaWV3RGF0YSA9IHtcblx0c2hvd0JyZWFkQ3J1bWJzPzogYm9vbGVhbjtcblx0ZmNsRW5hYmxlZD86IGJvb2xlYW47XG5cdGVkaXRhYmxlSGVhZGVyQ29udGVudD86IGJvb2xlYW47XG5cdGhpZGVGaWx0ZXJCYXI/OiBib29sZWFuO1xuXHR1c2VIaWRkZW5GaWx0ZXJCYXI/OiBib29sZWFuO1xuXHRzZWN0aW9uTGF5b3V0Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzPzogUmVjb3JkPHN0cmluZywgU2VtYW50aWNPYmplY3Q+O1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0bmF2aWdhdGlvbjogb2JqZWN0O1xuXHR2aWV3TGV2ZWw6IG51bWJlcjtcblx0dmFyaWFudE1hbmFnZW1lbnQ/OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdHN0YWJsZUlkOiBzdHJpbmc7XG5cdGNvbnRlbnREZW5zaXRpZXM/OiBDb250ZW50RGVuc2l0aWVzVHlwZTtcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbDtcblx0ZnVsbENvbnRleHRQYXRoOiBzdHJpbmc7XG5cdGlzRGVza3RvcDogYm9vbGVhbjtcblx0aXNQaG9uZTogYm9vbGVhbjtcblx0Y29udmVydGVyVHlwZTogVGVtcGxhdGVUeXBlO1xuXHRzaGVsbENvbnRlbnREZW5zaXR5Pzogc3RyaW5nO1xuXHR1c2VOZXdMYXp5TG9hZGluZz86IGJvb2xlYW47XG5cdGluaXRpYWxMb2FkPzogc3RyaW5nO1xuXHRsaXZlTW9kZT86IGJvb2xlYW47XG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q/OiBib29sZWFuO1xuXHRjb250cm9sQ29uZmlndXJhdGlvbj86IENvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRyZWZyZXNoU3RyYXRlZ3lPbkFwcFJlc3RvcmU/OiB1bmtub3duO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGlzU2hhcmVCdXR0b25WaXNpYmxlRm9yTXlJbmJveD86IGJvb2xlYW47XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzaGFyZT86IFNoYXJlT3B0aW9ucztcblx0c2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24/OiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl07XG5cdGNvbnRlbnQ/OiB7XG5cdFx0ZmVlZGJhY2s/OiB7IGFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBTdXJ2ZXlDb25maWc+OyBzdGFuZGFyZEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBTdXJ2ZXlDb25maWc+IH07XG5cdFx0aGVhZGVyPzoge1xuXHRcdFx0ZmFjZXRzPzogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+O1xuXHRcdFx0YWN0aW9ucz86IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj47XG5cdFx0fTtcblx0XHRmb290ZXI/OiB7XG5cdFx0XHRhY3Rpb25zPzogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPjtcblx0XHR9O1xuXHR9O1xufTtcbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTx2b2lkPjtcblxuXHRvVmlldyE6IFZpZXc7XG5cblx0b1Jlc291cmNlTW9kZWxTZXJ2aWNlITogUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cblx0b0NhY2hlSGFuZGxlclNlcnZpY2UhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXG5cdG9GYWN0b3J5ITogVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuXG5cdHJlc291cmNlTW9kZWwhOiBSZXNvdXJjZU1vZGVsO1xuXG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXG5cdHBhZ2VJZCE6IHN0cmluZztcblxuXHRUZW1wbGF0ZUNvbnZlcnRlcj86IHR5cGVvZiBfVGVtcGxhdGVDb252ZXJ0ZXI7XG5cblx0TWV0YU1vZGVsQ29udmVydGVyPzogdHlwZW9mIF9NZXRhTW9kZWxDb252ZXJ0ZXI7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob0NvbXBvbmVudCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0dGhpcy5wYWdlSWQgPSBvQXBwQ29tcG9uZW50LmdldExvY2FsSWQob0NvbXBvbmVudC5nZXRJZCgpKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3Qgc1N0YWJsZUlkID0gYCR7b0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldENvbXBvbmVudE5hbWUoKX06OiR7dGhpcy5wYWdlSWR9YDtcblx0XHRjb25zdCBhRW5oYW5jZUkxOG4gPSBvQ29tcG9uZW50LmdldEVuaGFuY2VJMThuKCkgfHwgW107XG5cdFx0bGV0IHNBcHBOYW1lc3BhY2U7XG5cdFx0dGhpcy5vRmFjdG9yeSA9IG9Db250ZXh0LmZhY3Rvcnk7XG5cdFx0aWYgKGFFbmhhbmNlSTE4bikge1xuXHRcdFx0c0FwcE5hbWVzcGFjZSA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFFbmhhbmNlSTE4bi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQvLyBJbiBvcmRlciB0byBzdXBwb3J0IHRleHQtdmVydGljYWxpemF0aW9uIGFwcGxpY2F0aW9ucyBjYW4gYWxzbyBwYXNzIGEgcmVzb3VyY2UgbW9kZWwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gVUk1IHRha2VzIGNhcmUgb2YgdGV4dC12ZXJ0aWNhbGl6YXRpb24gZm9yIHJlc291cmNlIG1vZGVscyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBIZW5jZSBjaGVjayBpZiB0aGUgZ2l2ZW4ga2V5IGlzIGEgcmVzb3VyY2UgbW9kZWwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gaWYgc28gdGhpcyBtb2RlbCBzaG91bGQgYmUgdXNlZCB0byBlbmhhbmNlIHRoZSBzYXAuZmUgcmVzb3VyY2UgbW9kZWwgc28gcGFzcyBpdCBhcyBpdCBpc1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoYUVuaGFuY2VJMThuW2ldKTtcblx0XHRcdFx0aWYgKG9SZXNvdXJjZU1vZGVsICYmIG9SZXNvdXJjZU1vZGVsLmlzQShcInNhcC51aS5tb2RlbC5yZXNvdXJjZS5SZXNvdXJjZU1vZGVsXCIpKSB7XG5cdFx0XHRcdFx0YUVuaGFuY2VJMThuW2ldID0gb1Jlc291cmNlTW9kZWw7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUVuaGFuY2VJMThuW2ldID0gYCR7c0FwcE5hbWVzcGFjZX0uJHthRW5oYW5jZUkxOG5baV0ucmVwbGFjZShcIi5wcm9wZXJ0aWVzXCIsIFwiXCIpfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgc0NhY2hlSWRlbnRpZmllciA9IGAke29BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9XyR7c1N0YWJsZUlkfV8ke0xvY2FsaXphdGlvbi5nZXRMYW5ndWFnZVRhZygpfWA7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0U2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpXG5cdFx0XHRcdC5jcmVhdGVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdGNvbXBvbmVudDogb0NvbXBvbmVudFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oYXN5bmMgKG9DYWNoZUhhbmRsZXJTZXJ2aWNlOiBDYWNoZUhhbmRsZXJTZXJ2aWNlKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSA9IG9DYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRcdFx0XHRcdHJldHVybiBvQ2FjaGVIYW5kbGVyU2VydmljZS52YWxpZGF0ZUNhY2hlS2V5KHNDYWNoZUlkZW50aWZpZXIsIG9Db21wb25lbnQsIG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKSk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0VmVyc2lvbkluZm8ubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvSW5mbykge1xuXHRcdFx0XHRcdGxldCBzVGltZXN0YW1wID0gXCJcIjtcblx0XHRcdFx0XHRpZiAoIW9JbmZvLmxpYnJhcmllcykge1xuXHRcdFx0XHRcdFx0c1RpbWVzdGFtcCA9IChzYXAudWkgYXMgdW5rbm93biBhcyB7IGJ1aWxkaW5mbzogeyBidWlsZHRpbWU6IHN0cmluZyB9IH0pLmJ1aWxkaW5mby5idWlsZHRpbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9JbmZvLmxpYnJhcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvTGlicmFyeSkge1xuXHRcdFx0XHRcdFx0XHRzVGltZXN0YW1wICs9IG9MaWJyYXJ5LmJ1aWxkVGltZXN0YW1wO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzVGltZXN0YW1wO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJldHVybiBcIjxOT1ZBTFVFPlwiO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UuYWxsKGFTZXJ2aWNlRGVwZW5kZW5jaWVzKVxuXHRcdFx0LnRoZW4oYXN5bmMgKGFEZXBlbmRlbmNpZXNSZXN1bHQ6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbMF0gYXMgUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXSBhcyBzdHJpbmcgfCBudWxsO1xuXHRcdFx0XHRjb25zdCBbVGVtcGxhdGVDb252ZXJ0ZXIsIE1ldGFNb2RlbENvbnZlcnRlcl0gPSBhd2FpdCByZXF1aXJlRGVwZW5kZW5jaWVzKFtcblx0XHRcdFx0XHRcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIixcblx0XHRcdFx0XHRcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCJcblx0XHRcdFx0XSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0b1Jlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0c1N0YWJsZUlkLFxuXHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRUZW1wbGF0ZUNvbnZlcnRlciBhcyB0eXBlb2YgX1RlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdE1ldGFNb2RlbENvbnZlcnRlciBhcyB0eXBlb2YgX01ldGFNb2RlbENvbnZlcnRlclxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzQ2FjaGVLZXk6IHN0cmluZyB8IHZvaWQgfCBudWxsKTogdm9pZCB7XG5cdFx0XHRcdGNvbnN0IG9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gU2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpLmdldEluc3RhbmNlKG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRvQ2FjaGVIYW5kbGVyU2VydmljZS5pbnZhbGlkYXRlSWZOZWVkZWQoXG5cdFx0XHRcdFx0c0NhY2hlS2V5LFxuXHRcdFx0XHRcdHNDYWNoZUlkZW50aWZpZXIsXG5cdFx0XHRcdFx0b0NvbXBvbmVudCxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKClcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgY3VycmVudCB2aWV3IHVzaW5nIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlLlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaW5kaWNhdGluZyB3aGVuIHRoZSB2aWV3IGlzIHJlZnJlc2hlZFxuXHQgKi9cblx0YXN5bmMgcmVmcmVzaFZpZXcob0NvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvUm9vdFZpZXcgPSBvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0aWYgKG9Sb290Vmlldykge1xuXHRcdFx0b1Jvb3RWaWV3LmRlc3Ryb3koKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMub1ZpZXcpIHtcblx0XHRcdHRoaXMub1ZpZXcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVWaWV3KHRoaXMucmVzb3VyY2VNb2RlbCwgdGhpcy5zdGFibGVJZCwgXCJcIiwgdGhpcy5UZW1wbGF0ZUNvbnZlcnRlciEsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyISlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0b0NvbXBvbmVudC5nZXRVSUFyZWEoKS5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRvQ29tcG9uZW50LmdldFVJQXJlYSgpLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRfZ2V0Vmlld1NldHRpbmdzKFxuXHRcdHByZXByb2Nlc3NvckNvbnRleHQ6IFhNTFByZXByb2Nlc3NvckNvbnRleHQsXG5cdFx0bVNlcnZpY2VTZXR0aW5nczogVGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncyxcblx0XHRvQ29tcG9uZW50OiBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4sXG5cdFx0bVZpZXdEYXRhOiBWaWV3RGF0YSxcblx0XHRzQ2FjaGVLZXk6IHN0cmluZyB8IG51bGwsXG5cdFx0b1BhZ2VNb2RlbDogSlNPTk1vZGVsLFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCk6IFZpZXdTZXR0aW5ncyB7XG5cdFx0bGV0IHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBtU2VydmljZVNldHRpbmdzLnZpZXdUeXBlIHx8IG9Db21wb25lbnQuZ2V0Vmlld1R5cGUoKSB8fCBcIlhNTFwiO1xuXHRcdGlmICh2aWV3VHlwZSAhPT0gXCJYTUxcIikge1xuXHRcdFx0dmlld1R5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiB2aWV3VHlwZSxcblx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0eG1sOiBwcmVwcm9jZXNzb3JDb250ZXh0LFxuXHRcdFx0XHRjb250cm9sczoge31cblx0XHRcdH0sXG5cdFx0XHRpZDogbVZpZXdEYXRhLnN0YWJsZUlkLFxuXHRcdFx0dmlld05hbWU6IG1TZXJ2aWNlU2V0dGluZ3Mudmlld05hbWUgfHwgb0NvbXBvbmVudC5nZXRWaWV3TmFtZT8uKCksXG5cdFx0XHR2aWV3RGF0YTogbVZpZXdEYXRhLFxuXHRcdFx0Y2FjaGU6IHtcblx0XHRcdFx0a2V5czogW3NDYWNoZUtleV0sXG5cdFx0XHRcdGFkZGl0aW9uYWxEYXRhOiB7XG5cdFx0XHRcdFx0Ly8gV2Ugc3RvcmUgdGhlIHBhZ2UgbW9kZWwgZGF0YSBpbiB0aGUgYGFkZGl0aW9uYWxEYXRhYCBvZiB0aGUgdmlldyBjYWNoZSwgdGhpcyB3YXkgaXQgaXMgYWx3YXlzIGluIHN5bmNcblx0XHRcdFx0XHRnZXRBZGRpdGlvbmFsQ2FjaGVEYXRhOiAoKTogdW5rbm93biA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhZ2VNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZXRBZGRpdGlvbmFsQ2FjaGVEYXRhOiAodmFsdWU6IG9iamVjdCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0b1BhZ2VNb2RlbC5zZXREYXRhKHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0fSxcblx0XHRcdGhlaWdodDogXCIxMDAlXCJcblx0XHR9O1xuXHR9XG5cblx0YXN5bmMgX2NyZWF0ZUVycm9yUGFnZShcblx0XHRyZWFzb246IEVycm9yLFxuXHRcdG9WaWV3U2V0dGluZ3M6IFZpZXdTZXR0aW5ncyxcblx0XHR2aWV3TmFtZTogc3RyaW5nLFxuXHRcdG9Db21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50LFxuXHRcdHNDYWNoZUtleTogc3RyaW5nIHwgbnVsbFxuXHQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdC8vIGp1c3QgcmVwbGFjZSB0aGUgdmlldyBuYW1lIGFuZCBhIG1vZGVsIGNvbnRhaW5pbmcgdGhlIHJlYXNvbiwgYnV0IGtlZXAgdGhlIG90aGVyIHNldHRpbmdzXG5cdFx0TG9nLmVycm9yKHJlYXNvbi5tZXNzYWdlLCByZWFzb24pO1xuXHRcdG9WaWV3U2V0dGluZ3Mudmlld05hbWUgPSB2aWV3TmFtZTtcblx0XHRpZiAob1ZpZXdTZXR0aW5ncy5wcmVwcm9jZXNzb3JzKSB7XG5cdFx0XHQob1ZpZXdTZXR0aW5ncy5wcmVwcm9jZXNzb3JzIGFzIFJlY29yZDxzdHJpbmcsIHsgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbD4gfT4pLnhtbC5tb2RlbHNbXCJlcnJvclwiXSA9IG5ldyBKU09OTW9kZWwocmVhc29uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0NvbXBvbmVudC5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBWaWV3LmNyZWF0ZShvVmlld1NldHRpbmdzKS50aGVuKChvVmlldzogVmlldykgPT4ge1xuXHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0fSk7XG5cdFx0fSkgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlVmlldyhcblx0XHRvUmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRzU3RhYmxlSWQ6IHN0cmluZyxcblx0XHRzQ2FjaGVLZXk6IHN0cmluZyB8IG51bGwsXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IHR5cGVvZiBfVGVtcGxhdGVDb252ZXJ0ZXIsXG5cdFx0TWV0YU1vZGVsQ29udmVydGVyOiB0eXBlb2YgX01ldGFNb2RlbENvbnZlcnRlclxuXHQpOiBQcm9taXNlPHN0cmluZyB8IG51bGwgfCB2b2lkPiB7XG5cdFx0dGhpcy5yZXNvdXJjZU1vZGVsID0gb1Jlc291cmNlTW9kZWw7XG5cdFx0dGhpcy5zdGFibGVJZCA9IHNTdGFibGVJZDtcblx0XHR0aGlzLlRlbXBsYXRlQ29udmVydGVyID0gVGVtcGxhdGVDb252ZXJ0ZXI7XG5cdFx0dGhpcy5NZXRhTW9kZWxDb252ZXJ0ZXIgPSBNZXRhTW9kZWxDb252ZXJ0ZXI7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBtU2VydmljZVNldHRpbmdzID0gb0NvbnRleHQuc2V0dGluZ3M7XG5cdFx0Y29uc3Qgc0NvbnZlcnRlclR5cGUgPSBtU2VydmljZVNldHRpbmdzLmNvbnZlcnRlclR5cGU7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0IGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9Db21wb25lbnQpO1xuXHRcdGxldCBzRnVsbENvbnRleHRQYXRoOiBzdHJpbmcgPVxuXHRcdFx0b0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpPy5vcHRpb25zPy5zZXR0aW5ncz8uZnVsbENvbnRleHRQYXRoID8/IFwiXCI7XG5cdFx0aWYgKCFzRnVsbENvbnRleHRQYXRoKSB7XG5cdFx0XHQvLyBpZiB0aGUgY29udGV4dCBwYXRoIGNvdWxkbid0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSByb3V0aW5nIHNlcnZpY2UsIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgY29tcG9uZW50IGl0c2VsZlxuXHRcdFx0c0Z1bGxDb250ZXh0UGF0aCA9IG9Db21wb25lbnQuZ2V0Q29udGV4dFBhdGgoKSA/PyBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBvTWFuaWZlc3RDb250ZW50ID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IG9EZXZpY2VNb2RlbCA9IG5ldyBKU09OTW9kZWwoRGV2aWNlKS5zZXREZWZhdWx0QmluZGluZ01vZGUoXCJPbmVXYXlcIik7XG5cdFx0Y29uc3Qgb01hbmlmZXN0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG9NYW5pZmVzdENvbnRlbnQpO1xuXHRcdGxldCBvUGFnZU1vZGVsOiBUZW1wbGF0ZU1vZGVsLCBvVmlld0RhdGFNb2RlbDogTW9kZWwsIG1WaWV3RGF0YTogVmlld0RhdGE7XG5cdFx0Ly8gTG9hZCB0aGUgaW5kZXggZm9yIHRoZSBhZGRpdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcyB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZW1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gYXdhaXQgb0FwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwicm91dGluZ1NlcnZpY2VcIik7XG5cdFx0XHQvLyBSZXRyaWV2ZSB0aGUgdmlld0xldmVsIGZvciB0aGUgY29tcG9uZW50XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9Sb3V0aW5nU2VydmljZS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IG1PdXRib3VuZHMgPVxuXHRcdFx0XHQob01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzKSB8fFxuXHRcdFx0XHR7fTtcblx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uID0gb0NvbXBvbmVudC5nZXROYXZpZ2F0aW9uKCkgfHwge307XG5cdFx0XHR0aGlzLl9lbmhhbmNlTmF2aWdhdGlvbkNvbmZpZyhtTmF2aWdhdGlvbiwgbU91dGJvdW5kcyk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhZGF0YSA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0VHlwZXMoXG5cdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGRlZmluaXRpb25Db250ZXh0ID0gbmV3IERlZmluaXRpb25Db250ZXh0KGNvbnZlcnRlZE1ldGFkYXRhKTtcblx0XHRcdGRlZmluaXRpb25Db250ZXh0LmFkZEFwcGxpY2F0aW9uTWFuaWZlc3Qob01hbmlmZXN0Q29udGVudCBhcyBTQVBKU09OU2NoZW1hRm9yV2ViQXBwbGljYXRpb25NYW5pZmVzdEZpbGUpO1xuXG5cdFx0XHRtVmlld0RhdGEgPSB7XG5cdFx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdFx0bmF2aWdhdGlvbjogbU5hdmlnYXRpb24sXG5cdFx0XHRcdHZpZXdMZXZlbDogb1RhcmdldEluZm8/LnZpZXdMZXZlbCxcblx0XHRcdFx0c3RhYmxlSWQ6IHNTdGFibGVJZCxcblx0XHRcdFx0Y29udGVudERlbnNpdGllczogb01hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0/LmNvbnRlbnREZW5zaXRpZXMsXG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcdGlzRGVza3RvcDogRGV2aWNlLnN5c3RlbS5kZXNrdG9wLFxuXHRcdFx0XHRpc1Bob25lOiBEZXZpY2Uuc3lzdGVtLnBob25lLFxuXHRcdFx0XHRjb252ZXJ0ZXJUeXBlOiBUZW1wbGF0ZVR5cGUuRnJlZVN0eWxlUGFnZVxuXHRcdFx0fTtcblx0XHRcdGlmIChvQ29tcG9uZW50LmdldFZpZXdEYXRhKSB7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obVZpZXdEYXRhLCBvQ29tcG9uZW50LmdldFZpZXdEYXRhKCkpO1xuXHRcdFx0XHRtVmlld0RhdGEgPSBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnkuc2V0UGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKFxuXHRcdFx0XHRcdG9NYW5pZmVzdENvbnRlbnQsXG5cdFx0XHRcdFx0bVZpZXdEYXRhLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0dGhpcy5wYWdlSWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1WaWV3RGF0YS5pc1NoYXJlQnV0dG9uVmlzaWJsZUZvck15SW5ib3ggPSBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuZ2V0U2hhcmVCdXR0b25WaXNpYmlsaXR5Rm9yTXlJbmJveChvQXBwQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRtVmlld0RhdGEuY29udmVydGVyVHlwZSA9IHNDb252ZXJ0ZXJUeXBlO1xuXHRcdFx0bVZpZXdEYXRhLnNoZWxsQ29udGVudERlbnNpdHkgPSBvU2hlbGxTZXJ2aWNlcy5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHRcdFx0Y29uc3Qgc2FwZmVNYW5pZmVzdENvbnRlbnQgPSBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdO1xuXHRcdFx0bVZpZXdEYXRhLnNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXTtcblx0XHRcdG1WaWV3RGF0YS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID0gc2FwZmVNYW5pZmVzdENvbnRlbnQ/LmZvcm1cblx0XHRcdFx0PyBzYXBmZU1hbmlmZXN0Q29udGVudD8uZm9ybT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdG9WaWV3RGF0YU1vZGVsID0gbmV3IEpTT05Nb2RlbChtVmlld0RhdGEpO1xuXHRcdFx0aWYgKG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNBbm5vdGF0aW9uUGF0aCBpbiBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoLmluY2x1ZGVzKFwiW1wiKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RhcmdldEFubm90YXRpb25QYXRoID0gcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uKHNBbm5vdGF0aW9uUGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0XHRcdFx0XHRtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc1RhcmdldEFubm90YXRpb25QYXRoXSA9IG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbltzQW5ub3RhdGlvblBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRvUGFnZU1vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IG9EaWFnbm9zdGljcyA9IG9BcHBDb21wb25lbnQuZ2V0RGlhZ25vc3RpY3MoKTtcblx0XHRcdFx0XHRjb25zdCBpSXNzdWVDb3VudCA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKS5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnZlcnRlclBhZ2VNb2RlbCA9IFRlbXBsYXRlQ29udmVydGVyLmNvbnZlcnRQYWdlKFxuXHRcdFx0XHRcdFx0c0NvbnZlcnRlclR5cGUsXG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0bVZpZXdEYXRhIGFzIHVua25vd24gYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdFx0XHRvRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLFxuXHRcdFx0XHRcdFx0b0NvbXBvbmVudFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgYUlzc3VlcyA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKTtcblx0XHRcdFx0XHRjb25zdCBhQWRkZWRJc3N1ZXMgPSBhSXNzdWVzLnNsaWNlKGlJc3N1ZUNvdW50KTtcblx0XHRcdFx0XHRpZiAoYUFkZGVkSXNzdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0XHRcIlNvbWUgaXNzdWVzIGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB5b3VyIHByb2plY3QsIHBsZWFzZSBjaGVjayB0aGUgVUk1IHN1cHBvcnQgYXNzaXN0YW50IHJ1bGUgZm9yIHNhcC5mZS5jb3JlXCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBvQ29udmVydGVyUGFnZU1vZGVsO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBvTWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGFTcGxpdFBhdGggPSBzRnVsbENvbnRleHRQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gdGhpcy5fZ2V0RnVsbFBhdGhUb0VudGl0eVNldChhU3BsaXRQYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IHByZXByb2Nlc3NvckNvbnRleHQ6IFhNTFByZXByb2Nlc3NvckNvbnRleHQgPSB7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVsbENvbnRleHRQYXRoKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bGxDb250ZXh0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdHZpZXdEYXRhOiBtVmlld0RhdGEgPyBvVmlld0RhdGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgOiBudWxsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGRldmljZTogb0RldmljZU1vZGVsLFxuXHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbCBhcyB1bmtub3duIGFzIEpTT05Nb2RlbCxcblx0XHRcdFx0XHRcdHZpZXdEYXRhOiBvVmlld0RhdGFNb2RlbFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdGdldENvbnZlcnRlZE1ldGFkYXRhOiAoKSA9PiBjb252ZXJ0ZWRNZXRhZGF0YSxcblx0XHRcdFx0XHRnZXREZWZpbml0aW9uQ29udGV4dCgpOiBEZWZpbml0aW9uQ29udGV4dCB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGVmaW5pdGlvbkNvbnRleHQ7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXREZWZpbml0aW9uRm9yUGFnZSgpOiBEZWZpbml0aW9uUGFnZSB7XG5cdFx0XHRcdFx0XHRsZXQgZnVsbENvbnRleHRQYXRoID0gc0Z1bGxDb250ZXh0UGF0aDtcblx0XHRcdFx0XHRcdGlmIChmdWxsQ29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aCA9IGZ1bGxDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgZnVsbENvbnRleHRQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGRlZmluaXRpb25Db250ZXh0LmdldFBhZ2VGb3IoZnVsbENvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHR2aWV3SWQ6IHNTdGFibGVJZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvVmlld1NldHRpbmdzID0gdGhpcy5fZ2V0Vmlld1NldHRpbmdzKFxuXHRcdFx0XHRcdHByZXByb2Nlc3NvckNvbnRleHQsXG5cdFx0XHRcdFx0bVNlcnZpY2VTZXR0aW5ncyxcblx0XHRcdFx0XHRvQ29tcG9uZW50LFxuXHRcdFx0XHRcdG1WaWV3RGF0YSxcblx0XHRcdFx0XHRzQ2FjaGVLZXksXG5cdFx0XHRcdFx0b1BhZ2VNb2RlbCBhcyB1bmtub3duIGFzIEpTT05Nb2RlbCxcblx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHQpO1xuXHRcdFx0Ly8gU2V0dGluZyB0aGUgcGFnZU1vZGVsIG9uIHRoZSBjb21wb25lbnQgZm9yIHBvdGVudGlhbCByZXVzZVxuXHRcdFx0b0NvbXBvbmVudC5zZXRNb2RlbChvUGFnZU1vZGVsIGFzIHVua25vd24gYXMgSlNPTk1vZGVsLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0XHRvQ29tcG9uZW50LnNldFByZXByb2Nlc3NvckNvbnRleHQocHJlcHJvY2Vzc29yQ29udGV4dCk7XG5cdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpXG5cblx0XHRcdFx0XHQudGhlbigob1ZpZXc6IFZpZXcpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXdKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuZW5oYW5jZVZpZXdKU09OTW9kZWwodmlld0pTT05Nb2RlbCBhcyBKU09OTW9kZWwgJiB7IF9nZXRPYmplY3Q6IEZ1bmN0aW9uIH0pO1xuXHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbCh2aWV3SlNPTk1vZGVsLCBcIiR2aWV3XCIpO1xuXHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChvVmlld0RhdGFNb2RlbCwgXCJ2aWV3RGF0YVwiKTtcblx0XHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goYXN5bmMgKHJlYXNvbjogRXJyb3IpID0+XG5cdFx0XHRcdFx0XHR0aGlzLl9jcmVhdGVFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRcdHJlYXNvbixcblx0XHRcdFx0XHRcdFx0b1ZpZXdTZXR0aW5ncyxcblx0XHRcdFx0XHRcdFx0bVNlcnZpY2VTZXR0aW5ncy5lcnJvclZpZXdOYW1lIHx8IFwic2FwLmZlLmNvcmUuc2VydmljZXMudmlldy5UZW1wbGF0aW5nRXJyb3JQYWdlXCIsXG5cdFx0XHRcdFx0XHRcdG9Db21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdHNDYWNoZUtleVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IExvZy5lcnJvcihlLm1lc3NhZ2UsIGUpKTtcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyB2aWV3IDogJHtlcnJvcn1gKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9lbmhhbmNlTmF2aWdhdGlvbkNvbmZpZyhcblx0XHRtTmF2aWdhdGlvbjogUmVjb3JkPHN0cmluZywgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24+LFxuXHRcdG1PdXRib3VuZHM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT5cblx0KTogdm9pZCB7XG5cdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb24pLmZvckVhY2goZnVuY3Rpb24gKG5hdmlnYXRpb25PYmplY3RLZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbk9iamVjdCA9IG1OYXZpZ2F0aW9uW25hdmlnYXRpb25PYmplY3RLZXldO1xuXHRcdFx0bGV0IG91dGJvdW5kQ29uZmlnO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25PYmplY3QuZGV0YWlsICYmIG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kICYmIG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdKSB7XG5cdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF07XG5cdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvdXRib3VuZENvbmZpZy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5jcmVhdGUgJiYgbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF0pIHtcblx0XHRcdFx0b3V0Ym91bmRDb25maWcgPSBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXTtcblx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdGFjdGlvbjogb3V0Ym91bmRDb25maWcuYWN0aW9uLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2dldEZ1bGxQYXRoVG9FbnRpdHlTZXQoYVNwbGl0UGF0aDogc3RyaW5nW10sIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYVNwbGl0UGF0aC5yZWR1Y2UoZnVuY3Rpb24gKHNQYXRoU29GYXI6IHN0cmluZywgc05leHRQYXRoUGFydDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRcdGlmIChzTmV4dFBhdGhQYXJ0ID09PSBcIlwiKSB7XG5cdFx0XHRcdHJldHVybiBzUGF0aFNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNQYXRoU29GYXIgPT09IFwiXCIpIHtcblx0XHRcdFx0c1BhdGhTb0ZhciA9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGhTb0Zhcn0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtzTmV4dFBhdGhQYXJ0fWApO1xuXHRcdFx0XHRpZiAob1RhcmdldCAmJiBPYmplY3Qua2V5cyhvVGFyZ2V0KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNQYXRoU29GYXIgKz0gYC8ke3NOZXh0UGF0aFBhcnR9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzUGF0aFNvRmFyO1xuXHRcdH0sIFwiXCIpO1xuXHR9XG5cblx0Z2V0VmlldygpOiBWaWV3IHtcblx0XHRyZXR1cm4gdGhpcy5vVmlldztcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiBUZW1wbGF0ZWRWaWV3U2VydmljZSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRleGl0KCk6IHZvaWQge1xuXHRcdC8vIERlcmVnaXN0ZXIgZ2xvYmFsIGluc3RhbmNlXG5cdFx0aWYgKHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlKSB7XG5cdFx0XHR0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlKSB7XG5cdFx0XHR0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0dGhpcy5vRmFjdG9yeS5yZW1vdmVHbG9iYWxJbnN0YW5jZSgpO1xuXHR9XG59XG5jbGFzcyBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdF9vSW5zdGFuY2VSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVkVmlld1NlcnZpY2U+ID0ge307XG5cblx0c3RhdGljIGlDcmVhdGluZ1ZpZXdzOiAwO1xuXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFRlbXBsYXRlZFZpZXdTZXJ2aWNlPiB7XG5cdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzKys7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlZFZpZXdTZXJ2aWNlID0gbmV3IFRlbXBsYXRlZFZpZXdTZXJ2aWNlKE9iamVjdC5hc3NpZ24oeyBmYWN0b3J5OiB0aGlzIH0sIG9TZXJ2aWNlQ29udGV4dCkpO1xuXHRcdHJldHVybiBvVGVtcGxhdGVkVmlld1NlcnZpY2UuaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MtLTtcblx0XHRcdHJldHVybiBvVGVtcGxhdGVkVmlld1NlcnZpY2U7XG5cdFx0fSk7XG5cdH1cblxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZSgpOiB2b2lkIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeSA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjb21wb25lbnQgZGF0YSBzcGVjaWZpZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlICdTaGFyZScgYnV0dG9uIGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgYmFzZWQgb24gdGhlIHZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgU3BlY2lmaWVzIHRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgYXMgdHJ1ZSBvciBmYWxzZSBiYXNlZCB3aGV0aGVyIHRoZSAnU2hhcmUnIGJ1dHRvbiBzaG91bGQgYmUgdmlzaWJsZSBvciBub3Rcblx0ICovXG5cdHN0YXRpYyBnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHlGb3JNeUluYm94KGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YTogQ29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0aWYgKGNvbXBvbmVudERhdGEgIT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQpIHtcblx0XHRcdHJldHVybiBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0c3RhdGljIGdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgcGFnZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIGEgc3BlY2lmaWMgcGFnZSBpZGVudGlmaWVkIGJ5IGl0cyBJRC5cblx0ICogQHBhcmFtIG1hbmlmZXN0IFRoZSBtYW5pZmVzdCBjb250ZW50IG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gZGV0YWlscy5cblx0ICogQHBhcmFtIHZpZXdEYXRhIFRoZSB2aWV3IGRhdGEgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdmlldy5cblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwbGljYXRpb24gY29tcG9uZW50IGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gcGFnZUlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcGFnZSBmb3Igd2hpY2ggY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSB0byBiZSBhcHBsaWVkLlxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCB2aWV3IGRhdGEgb2JqZWN0IHJlZmxlY3RpbmcgdGhlIGFwcGxpZWQgY2hhbmdlcy5cblx0ICovXG5cdHN0YXRpYyBzZXRQYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoXG5cdFx0bWFuaWZlc3Q6IE1hbmlmZXN0Q29udGVudCxcblx0XHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cGFnZUlkOiBzdHJpbmdcblx0KTogVmlld0RhdGEge1xuXHRcdGNvbnN0IHRhcmdldHMgPSBtYW5pZmVzdD8uW1wic2FwLnVpNVwiXT8ucm91dGluZz8udGFyZ2V0cyA/PyB7fTtcblx0XHRsZXQgcmVhbFRhcmdldCA9IFwiXCI7XG5cdFx0Zm9yIChjb25zdCB0YXJnZXRUb0ZpbmQgaW4gdGFyZ2V0cykge1xuXHRcdFx0aWYgKHRhcmdldHNbdGFyZ2V0VG9GaW5kXS5pZCA9PT0gcGFnZUlkKSB7XG5cdFx0XHRcdHJlYWxUYXJnZXQgPSB0YXJnZXRUb0ZpbmQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAocmVhbFRhcmdldCA9PT0gXCJcIikge1xuXHRcdFx0cmVhbFRhcmdldCA9IHBhZ2VJZDtcblx0XHR9XG5cdFx0Y29uc3QgYWN0dWFsU2V0dGluZ3MgPSBtYW5pZmVzdD8uW1wic2FwLnVpNVwiXT8ucm91dGluZz8udGFyZ2V0cz8uW3JlYWxUYXJnZXRdPy5vcHRpb25zPy5zZXR0aW5ncyB8fCB7fTtcblx0XHRyZXR1cm4gYXBwbHlQYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoYWN0dWFsU2V0dGluZ3MsIHZpZXdEYXRhLCBhcHBDb21wb25lbnQsIHBhZ2VJZCk7XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7TUE2Rk1BLG9CQUFvQiwwQkFBQUMsUUFBQTtJQUFBQyxjQUFBLENBQUFGLG9CQUFBLEVBQUFDLFFBQUE7SUFBQSxTQUFBRCxxQkFBQTtNQUFBLE9BQUFDLFFBQUEsQ0FBQUUsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQSxJQUFBQyxNQUFBLEdBQUFMLG9CQUFBLENBQUFNLFNBQUE7SUFBQUQsTUFBQSxDQXFCekJFLElBQUksR0FBSixTQUFBQSxLQUFBLEVBQWE7TUFDWixNQUFNQyxvQkFBb0IsR0FBRyxFQUFFO01BQy9CLE1BQU1DLFFBQVEsR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDO01BQ2xDLE1BQU1DLFVBQVUsR0FBR0YsUUFBUSxDQUFDRyxXQUFXO01BQ3ZDLE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxlQUFlLENBQUNKLFVBQVUsQ0FBQztNQUM3RCxNQUFNSyxVQUFVLEdBQUdILGFBQWEsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7TUFDL0MsSUFBSSxDQUFDQyxNQUFNLEdBQUdMLGFBQWEsQ0FBQ00sVUFBVSxDQUFDUixVQUFVLENBQUNTLEtBQUssQ0FBQyxDQUFDLENBQVc7TUFDcEUsTUFBTUMsU0FBUyxHQUFHLEdBQUdSLGFBQWEsQ0FBQ1MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQ0wsTUFBTSxFQUFFO01BQ3JGLE1BQU1NLFlBQVksR0FBR2IsVUFBVSxDQUFDYyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUU7TUFDdEQsSUFBSUMsYUFBYTtNQUNqQixJQUFJLENBQUNDLFFBQVEsR0FBR2xCLFFBQVEsQ0FBQ21CLE9BQU87TUFDaEMsSUFBSUosWUFBWSxFQUFFO1FBQ2pCRSxhQUFhLEdBQUdiLGFBQWEsQ0FBQ1MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RCxLQUFLLElBQUlNLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0wsWUFBWSxDQUFDTSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO1VBQzdDO1VBQ0E7VUFDQTtVQUNBO1VBQ0EsTUFBTUUsY0FBYyxHQUFHbEIsYUFBYSxDQUFDbUIsUUFBUSxDQUFDUixZQUFZLENBQUNLLENBQUMsQ0FBQyxDQUFDO1VBQzlELElBQUlFLGNBQWMsSUFBSUEsY0FBYyxDQUFDRSxHQUFHLENBQUMscUNBQXFDLENBQUMsRUFBRTtZQUNoRlQsWUFBWSxDQUFDSyxDQUFDLENBQUMsR0FBR0UsY0FBYztVQUNqQyxDQUFDLE1BQU07WUFDTlAsWUFBWSxDQUFDSyxDQUFDLENBQUMsR0FBRyxHQUFHSCxhQUFhLElBQUlGLFlBQVksQ0FBQ0ssQ0FBQyxDQUFDLENBQUNLLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQUU7VUFDbkY7UUFDRDtNQUNEO01BQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBR3RCLGFBQWEsQ0FBQ1MsV0FBVyxDQUFDLENBQUMsQ0FBQ2MsT0FBTyxDQUFDLENBQUMsSUFBSWYsU0FBUyxJQUFJZ0IsWUFBWSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFFO01BQ2pIOUIsb0JBQW9CLENBQUMrQixJQUFJLENBQ3hCQyxzQkFBc0IsQ0FBQ0MsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQ3JFQyxjQUFjLENBQUM7UUFDZkMsU0FBUyxFQUFFLFdBQVc7UUFDdEIvQixXQUFXLEVBQUVELFVBQVU7UUFDdkJpQyxRQUFRLEVBQUU7VUFDVEMsT0FBTyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsZ0NBQWdDLENBQUM7VUFDdkdDLFdBQVcsRUFBRXRCLFlBQVk7VUFDekJ1QixTQUFTLEVBQUU7UUFDWjtNQUNELENBQUMsQ0FBQyxDQUNEQyxJQUFJLENBQUVDLHFCQUEyQyxJQUFLO1FBQ3RELElBQUksQ0FBQ0EscUJBQXFCLEdBQUdBLHFCQUFxQjtRQUNsRCxPQUFPQSxxQkFBcUIsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztNQUNoRCxDQUFDLENBQ0gsQ0FBQztNQUNEMUMsb0JBQW9CLENBQUMrQixJQUFJLENBQ3hCQyxzQkFBc0IsQ0FBQ0MsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQ3BFQyxjQUFjLENBQUM7UUFDZkUsUUFBUSxFQUFFO1VBQ1RPLFNBQVMsRUFBRW5DLFVBQVU7VUFDckJvQyxZQUFZLEVBQUV2QyxhQUFhO1VBQzNCd0MsU0FBUyxFQUFFMUM7UUFDWjtNQUNELENBQUMsQ0FBQyxDQUNEcUMsSUFBSSxDQUFDLE1BQU9NLG9CQUF5QyxJQUE2QjtRQUNsRixJQUFJLENBQUNBLG9CQUFvQixHQUFHQSxvQkFBb0I7UUFDaEQsT0FBT0Esb0JBQW9CLENBQUNDLGdCQUFnQixDQUFDcEIsZ0JBQWdCLEVBQUV4QixVQUFVLEVBQUVFLGFBQWEsQ0FBQzJDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztNQUN2SCxDQUFDLENBQ0gsQ0FBQztNQUNEaEQsb0JBQW9CLENBQUMrQixJQUFJLENBQ3hCa0IsV0FBVyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUNoQlYsSUFBSSxDQUFDLFVBQVVXLEtBQUssRUFBRTtRQUN0QixJQUFJQyxVQUFVLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUNELEtBQUssQ0FBQ0UsU0FBUyxFQUFFO1VBQ3JCRCxVQUFVLEdBQUlFLEdBQUcsQ0FBQ0MsRUFBRSxDQUFxREMsU0FBUyxDQUFDQyxTQUFTO1FBQzdGLENBQUMsTUFBTTtVQUNOTixLQUFLLENBQUNFLFNBQVMsQ0FBQ0ssT0FBTyxDQUFDLFVBQVVDLFFBQVEsRUFBRTtZQUMzQ1AsVUFBVSxJQUFJTyxRQUFRLENBQUNDLGNBQWM7VUFDdEMsQ0FBQyxDQUFDO1FBQ0g7UUFDQSxPQUFPUixVQUFVO01BQ2xCLENBQUMsQ0FBQyxDQUNEUyxLQUFLLENBQUMsWUFBWTtRQUNsQixPQUFPLFdBQVc7TUFDbkIsQ0FBQyxDQUNILENBQUM7TUFDRCxJQUFJLENBQUNDLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxHQUFHLENBQUNoRSxvQkFBb0IsQ0FBQyxDQUNsRHdDLElBQUksQ0FBQyxNQUFPeUIsbUJBQThCLElBQUs7UUFDL0MsTUFBTTFDLGNBQWMsR0FBRzBDLG1CQUFtQixDQUFDLENBQUMsQ0FBa0I7UUFDOUQsTUFBTUMsU0FBUyxHQUFHRCxtQkFBbUIsQ0FBQyxDQUFDLENBQWtCO1FBQ3pELE1BQU0sQ0FBQ0UsaUJBQWlCLEVBQUVDLGtCQUFrQixDQUFDLEdBQUcsTUFBTUMsbUJBQW1CLENBQUMsQ0FDekUsMENBQTBDLEVBQzFDLDJDQUEyQyxDQUMzQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUNDLFVBQVUsQ0FDckIvQyxjQUFjLEVBQ2RWLFNBQVMsRUFDVHFELFNBQVMsRUFDVEMsaUJBQWlCLEVBQ2pCQyxrQkFDRCxDQUFDO01BQ0YsQ0FBQyxDQUFDLENBQ0Q1QixJQUFJLENBQUMsVUFBVTBCLFNBQStCLEVBQVE7UUFDdEQsTUFBTXBCLG9CQUFvQixHQUFHZCxzQkFBc0IsQ0FBQ0MsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUNzQyxXQUFXLENBQUMvRCxVQUFVLENBQUM7UUFDM0hzQyxvQkFBb0IsQ0FBQzBCLGtCQUFrQixDQUN0Q04sU0FBUyxFQUNUdkMsZ0JBQWdCLEVBQ2hCeEIsVUFBVSxFQUNWRSxhQUFhLENBQUMyQywwQkFBMEIsQ0FBQyxDQUMxQyxDQUFDO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQW5ELE1BQUEsQ0FLTTRFLFdBQVcsR0FBakIsZUFBQUEsWUFBa0J0RSxVQUE2QixFQUFpQjtNQUMvRCxNQUFNdUUsU0FBUyxHQUFHdkUsVUFBVSxDQUFDd0UsY0FBYyxDQUFDLENBQUM7TUFDN0MsSUFBSUQsU0FBUyxFQUFFO1FBQ2RBLFNBQVMsQ0FBQ0UsT0FBTyxDQUFDLENBQUM7TUFDcEIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDQyxLQUFLLEVBQUU7UUFDdEIsSUFBSSxDQUFDQSxLQUFLLENBQUNELE9BQU8sQ0FBQyxDQUFDO01BQ3JCO01BQ0EsT0FBTyxJQUFJLENBQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUNRLGFBQWEsRUFBRSxJQUFJLENBQUNDLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDWixpQkFBaUIsRUFBRyxJQUFJLENBQUNDLGtCQUFtQixDQUFDLENBQzlHNUIsSUFBSSxDQUFDLFlBQWtCO1FBQ3ZCckMsVUFBVSxDQUFDNkUsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLENBQUM7UUFDbkM7TUFDRCxDQUFDLENBQUMsQ0FDRHBCLEtBQUssQ0FBQyxVQUFVcUIsTUFBZSxFQUFFO1FBQ2pDL0UsVUFBVSxDQUFDNkUsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLENBQUM7UUFDbkNFLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDRixNQUFnQixDQUFDO01BQzVCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFBQXJGLE1BQUEsQ0FFRHdGLGdCQUFnQixHQUFoQixTQUFBQSxpQkFDQ0MsbUJBQTJDLEVBQzNDQyxnQkFBOEMsRUFDOUNwRixVQUE2QyxFQUM3Q3FGLFNBQW1CLEVBQ25CdEIsU0FBd0IsRUFDeEJ1QixVQUFxQixFQUNyQmxFLGNBQTZCLEVBQ2Q7TUFBQSxJQUFBbUUscUJBQUE7TUFDZixJQUFJQyxRQUE0QixHQUFHSixnQkFBZ0IsQ0FBQ0ksUUFBUSxJQUFJeEYsVUFBVSxDQUFDeUYsV0FBVyxDQUFDLENBQUMsSUFBSSxLQUFLO01BQ2pHLElBQUlELFFBQVEsS0FBSyxLQUFLLEVBQUU7UUFDdkJBLFFBQVEsR0FBR0UsU0FBUztNQUNyQjtNQUNBLE9BQU87UUFDTkMsSUFBSSxFQUFFSCxRQUFRO1FBQ2RJLGFBQWEsRUFBRTtVQUNkQyxHQUFHLEVBQUVWLG1CQUFtQjtVQUN4QlcsUUFBUSxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0RDLEVBQUUsRUFBRVYsU0FBUyxDQUFDVCxRQUFRO1FBQ3RCb0IsUUFBUSxFQUFFWixnQkFBZ0IsQ0FBQ1ksUUFBUSxNQUFBVCxxQkFBQSxHQUFJdkYsVUFBVSxDQUFDaUcsV0FBVyxjQUFBVixxQkFBQSx1QkFBdEJBLHFCQUFBLENBQUFXLElBQUEsQ0FBQWxHLFVBQXlCLENBQUM7UUFDakVtRyxRQUFRLEVBQUVkLFNBQVM7UUFDbkJlLEtBQUssRUFBRTtVQUNOQyxJQUFJLEVBQUUsQ0FBQ3RDLFNBQVMsQ0FBQztVQUNqQnVDLGNBQWMsRUFBRTtZQUNmO1lBQ0FDLHNCQUFzQixFQUFFQSxDQUFBLEtBQWU7Y0FDdEMsT0FBT2pCLFVBQVUsQ0FBQ2tCLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDREMsc0JBQXNCLEVBQUdDLEtBQWEsSUFBVztjQUNoRHBCLFVBQVUsQ0FBQ3FCLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO1lBQzFCO1VBQ0Q7UUFDRCxDQUFDO1FBQ0RFLE1BQU0sRUFBRTtVQUNQLGFBQWEsRUFBRXhGO1FBQ2hCLENBQUM7UUFDRHlGLE1BQU0sRUFBRTtNQUNULENBQUM7SUFDRixDQUFDO0lBQUFuSCxNQUFBLENBRUtvSCxnQkFBZ0IsR0FBdEIsZUFBQUEsaUJBQ0NDLE1BQWEsRUFDYkMsYUFBMkIsRUFDM0JoQixRQUFnQixFQUNoQmhHLFVBQTZCLEVBQzdCK0QsU0FBd0IsRUFDTjtNQUNsQjtNQUNBaUIsR0FBRyxDQUFDQyxLQUFLLENBQUM4QixNQUFNLENBQUNFLE9BQU8sRUFBRUYsTUFBTSxDQUFDO01BQ2pDQyxhQUFhLENBQUNoQixRQUFRLEdBQUdBLFFBQVE7TUFDakMsSUFBSWdCLGFBQWEsQ0FBQ3BCLGFBQWEsRUFBRTtRQUMvQm9CLGFBQWEsQ0FBQ3BCLGFBQWEsQ0FBdURDLEdBQUcsQ0FBQ2UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUlNLFNBQVMsQ0FBQ0gsTUFBTSxDQUFDO01BQy9IO01BRUEsT0FBTy9HLFVBQVUsQ0FBQ21ILFVBQVUsQ0FBQyxZQUFZO1FBQ3hDLE9BQU9DLElBQUksQ0FBQ0MsTUFBTSxDQUFDTCxhQUFhLENBQUMsQ0FBQzNFLElBQUksQ0FBRXFDLEtBQVcsSUFBSztVQUN2RCxJQUFJLENBQUNBLEtBQUssR0FBR0EsS0FBSztVQUNsQixJQUFJLENBQUNBLEtBQUssQ0FBQzRDLFFBQVEsQ0FBQyxJQUFJSixTQUFTLENBQUMsSUFBSSxDQUFDeEMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDO1VBQ3ZEMUUsVUFBVSxDQUFDdUgsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM3QyxLQUFLLENBQUM7VUFDcEQsT0FBT1gsU0FBUztRQUNqQixDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQUFyRSxNQUFBLENBRUt5RSxVQUFVLEdBQWhCLGVBQUFBLFdBQ0MvQyxjQUE2QixFQUM3QlYsU0FBaUIsRUFDakJxRCxTQUF3QixFQUN4QkMsaUJBQTRDLEVBQzVDQyxrQkFBOEMsRUFDZDtNQUFBLElBQUF1RCxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUNoQyxJQUFJLENBQUMvQyxhQUFhLEdBQUd2RCxjQUFjO01BQ25DLElBQUksQ0FBQ3dELFFBQVEsR0FBR2xFLFNBQVM7TUFDekIsSUFBSSxDQUFDc0QsaUJBQWlCLEdBQUdBLGlCQUFpQjtNQUMxQyxJQUFJLENBQUNDLGtCQUFrQixHQUFHQSxrQkFBa0I7TUFDNUMsTUFBTW5FLFFBQVEsR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDO01BQ2xDLE1BQU1xRixnQkFBZ0IsR0FBR3RGLFFBQVEsQ0FBQ21DLFFBQVE7TUFDMUMsTUFBTTBGLGNBQWMsR0FBR3ZDLGdCQUFnQixDQUFDd0MsYUFBYTtNQUNyRCxNQUFNNUgsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQWdEO01BQzVFLE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxlQUFlLENBQUNKLFVBQVUsQ0FBQztNQUM3RCxJQUFJNkgsZ0JBQXdCLEdBQzNCLEVBQUFMLHFCQUFBLEdBQUF0SCxhQUFhLENBQUM0SCxpQkFBaUIsQ0FBQyxDQUFDLENBQUNDLHVCQUF1QixDQUFDL0gsVUFBVSxDQUFDLGNBQUF3SCxxQkFBQSx3QkFBQUMsc0JBQUEsR0FBckVELHFCQUFBLENBQXVFUSxPQUFPLGNBQUFQLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUE5RUQsc0JBQUEsQ0FBZ0Z4RixRQUFRLGNBQUF5RixzQkFBQSx1QkFBeEZBLHNCQUFBLENBQTBGTyxlQUFlLEtBQUksRUFBRTtNQUNoSCxJQUFJLENBQUNKLGdCQUFnQixFQUFFO1FBQ3RCO1FBQ0FBLGdCQUFnQixHQUFHN0gsVUFBVSxDQUFDa0ksY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFO01BQ3JEO01BQ0EsTUFBTTdILFVBQVUsR0FBR0gsYUFBYSxDQUFDSSxZQUFZLENBQUMsQ0FBQztNQUMvQyxNQUFNNkgsZ0JBQWdCLEdBQUdqSSxhQUFhLENBQUNrSSxXQUFXLENBQUMsQ0FBQztNQUNwRCxNQUFNQyxZQUFZLEdBQUcsSUFBSW5CLFNBQVMsQ0FBQ29CLE1BQU0sQ0FBQyxDQUFDQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7TUFDMUUsTUFBTUMsY0FBYyxHQUFHLElBQUl0QixTQUFTLENBQUNpQixnQkFBZ0IsQ0FBQztNQUN0RCxJQUFJN0MsVUFBeUIsRUFBRW1ELGNBQXFCLEVBQUVwRCxTQUFtQjtNQUN6RTtNQUNBLElBQUk7UUFBQSxJQUFBcUQscUJBQUEsRUFBQUMscUJBQUE7UUFDSCxNQUFNQyxlQUFlLEdBQUcsTUFBTTFJLGFBQWEsQ0FBQzJJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN4RTtRQUNBLE1BQU1DLFdBQVcsR0FBR0YsZUFBZSxDQUFDYix1QkFBdUIsQ0FBQy9ILFVBQVUsQ0FBQztRQUN2RSxNQUFNK0ksVUFBVSxHQUNkWixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFDM0JBLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDYSxlQUFlLElBQzNDYixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQ2EsZUFBZSxDQUFDQyxTQUFTLElBQ3RELENBQUMsQ0FBQztRQUNILE1BQU1DLFdBQVcsR0FBR2xKLFVBQVUsQ0FBQ21KLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQ0Msd0JBQXdCLENBQUNGLFdBQVcsRUFBRUgsVUFBVSxDQUFDO1FBQ3RELE1BQU1NLGlCQUFpQixHQUFHcEYsa0JBQWtCLENBQUNxRixZQUFZLENBQ3hEakosVUFBVSxFQUNWSCxhQUFhLENBQUMyQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMwRyxlQUFlLENBQUMsQ0FDNUQsQ0FBQztRQUNELE1BQU1DLGlCQUFpQixHQUFHLElBQUlDLGlCQUFpQixDQUFDSixpQkFBaUIsQ0FBQztRQUNsRUcsaUJBQWlCLENBQUNFLHNCQUFzQixDQUFDdkIsZ0JBQThELENBQUM7UUFFeEc5QyxTQUFTLEdBQUc7VUFDWDVDLFlBQVksRUFBRXZDLGFBQWE7VUFDM0J5SixVQUFVLEVBQUVULFdBQVc7VUFDdkJVLFNBQVMsRUFBRWQsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVjLFNBQVM7VUFDakNoRixRQUFRLEVBQUVsRSxTQUFTO1VBQ25CbUosZ0JBQWdCLEdBQUFuQixxQkFBQSxHQUFFUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsY0FBQU8scUJBQUEsdUJBQTNCQSxxQkFBQSxDQUE2Qm1CLGdCQUFnQjtVQUMvRGxGLGFBQWEsRUFBRXZELGNBQWM7VUFDN0I2RyxlQUFlLEVBQUVKLGdCQUFnQjtVQUNqQ2lDLFNBQVMsRUFBRXhCLE1BQU0sQ0FBQ3lCLE1BQU0sQ0FBQ0MsT0FBTztVQUNoQ0MsT0FBTyxFQUFFM0IsTUFBTSxDQUFDeUIsTUFBTSxDQUFDRyxLQUFLO1VBQzVCdEMsYUFBYSxFQUFFdUMsWUFBWSxDQUFDQztRQUM3QixDQUFDO1FBQ0QsSUFBSXBLLFVBQVUsQ0FBQ3FLLFdBQVcsRUFBRTtVQUMzQkMsTUFBTSxDQUFDQyxNQUFNLENBQUNsRixTQUFTLEVBQUVyRixVQUFVLENBQUNxSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1VBQ2xEaEYsU0FBUyxHQUFHbUYsMkJBQTJCLENBQUNDLDJCQUEyQixDQUNsRXRDLGdCQUFnQixFQUNoQjlDLFNBQVMsRUFDVG5GLGFBQWEsRUFDYixJQUFJLENBQUNLLE1BQ04sQ0FBQztRQUNGO1FBQ0E4RSxTQUFTLENBQUNxRiw4QkFBOEIsR0FBR0YsMkJBQTJCLENBQUNHLGtDQUFrQyxDQUFDekssYUFBYSxDQUFDO1FBQ3hILE1BQU0wSyxjQUFjLEdBQUcxSyxhQUFhLENBQUMySyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZEeEYsU0FBUyxDQUFDdUMsYUFBYSxHQUFHRCxjQUFjO1FBQ3hDdEMsU0FBUyxDQUFDeUYsbUJBQW1CLEdBQUdGLGNBQWMsQ0FBQ0csaUJBQWlCLENBQUMsQ0FBQztRQUNsRSxNQUFNQyxvQkFBb0IsR0FBRzdDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztRQUN2RDlDLFNBQVMsQ0FBQzRGLDBCQUEwQixHQUFHOUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1FBQ2pFOUMsU0FBUyxDQUFDNkYseUJBQXlCLEdBQUdGLG9CQUFvQixhQUFwQkEsb0JBQW9CLGVBQXBCQSxvQkFBb0IsQ0FBRUcsSUFBSSxHQUM3REgsb0JBQW9CLGFBQXBCQSxvQkFBb0Isd0JBQUFyQyxxQkFBQSxHQUFwQnFDLG9CQUFvQixDQUFFRyxJQUFJLGNBQUF4QyxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCdUMseUJBQXlCLEdBQ3JEeEYsU0FBUztRQUNaK0MsY0FBYyxHQUFHLElBQUl2QixTQUFTLENBQUM3QixTQUFTLENBQUM7UUFDekMsSUFBSUEsU0FBUyxDQUFDK0Ysb0JBQW9CLEVBQUU7VUFDbkMsS0FBSyxNQUFNQyxlQUFlLElBQUloRyxTQUFTLENBQUMrRixvQkFBb0IsRUFBRTtZQUM3RCxJQUFJQyxlQUFlLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtjQUNsQyxNQUFNQyxxQkFBcUIsR0FBR0Msd0JBQXdCLENBQUNILGVBQWUsRUFBRWhMLFVBQVUsQ0FBQztjQUNuRmdGLFNBQVMsQ0FBQytGLG9CQUFvQixDQUFDRyxxQkFBcUIsQ0FBQyxHQUFHbEcsU0FBUyxDQUFDK0Ysb0JBQW9CLENBQUNDLGVBQWUsQ0FBQztZQUN4RztVQUNEO1FBQ0Q7UUFFQS9GLFVBQVUsR0FBRyxJQUFJbUcsYUFBYSxDQUFDLE1BQU07VUFDcEMsSUFBSTtZQUNILE1BQU1DLFlBQVksR0FBR3hMLGFBQWEsQ0FBQ3lMLGNBQWMsQ0FBQyxDQUFDO1lBQ25ELE1BQU1DLFdBQVcsR0FBR0YsWUFBWSxDQUFDRyxTQUFTLENBQUMsQ0FBQyxDQUFDMUssTUFBTTtZQUNuRCxNQUFNMkssbUJBQW1CLEdBQUc5SCxpQkFBaUIsQ0FBQytILFdBQVcsQ0FDeERwRSxjQUFjLEVBQ2R0SCxVQUFVLEVBQ1ZnRixTQUFTLEVBQ1RxRyxZQUFZLEVBQ1o3RCxnQkFBZ0IsRUFDaEIzSCxhQUFhLENBQUMyQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMwRyxlQUFlLENBQUMsQ0FBQyxFQUM1RHZKLFVBQ0QsQ0FBQztZQUNELE1BQU1nTSxPQUFPLEdBQUdOLFlBQVksQ0FBQ0csU0FBUyxDQUFDLENBQUM7WUFDeEMsTUFBTUksWUFBWSxHQUFHRCxPQUFPLENBQUNFLEtBQUssQ0FBQ04sV0FBVyxDQUFDO1lBQy9DLElBQUlLLFlBQVksQ0FBQzlLLE1BQU0sR0FBRyxDQUFDLEVBQUU7Y0FDNUI2RCxHQUFHLENBQUNtSCxPQUFPLENBQ1YsNkdBQ0QsQ0FBQztZQUNGO1lBQ0EsT0FBT0wsbUJBQW1CO1VBQzNCLENBQUMsQ0FBQyxPQUFPN0csS0FBYyxFQUFFO1lBQ3hCRCxHQUFHLENBQUNDLEtBQUssQ0FBQ0EsS0FBSyxFQUFZQSxLQUFlLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQUM7VUFDVjtRQUNELENBQUMsRUFBRTVFLFVBQVUsQ0FBQztRQUNkLE1BQU0rTCxVQUFVLEdBQUd2RSxnQkFBZ0IsQ0FBQ3dFLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDOUMsTUFBTUMsY0FBYyxHQUFHLElBQUksQ0FBQ0MsdUJBQXVCLENBQUNILFVBQVUsRUFBRS9MLFVBQVUsQ0FBQztRQUMzRSxNQUFNOEUsbUJBQTJDLEdBQUc7WUFDbERxSCxlQUFlLEVBQUU7Y0FDaEJDLFNBQVMsRUFBRUgsY0FBYyxHQUFHak0sVUFBVSxDQUFDcU0sb0JBQW9CLENBQUNKLGNBQWMsQ0FBQyxHQUFHLElBQUk7Y0FDbEZyRSxlQUFlLEVBQUVKLGdCQUFnQixHQUFHeEgsVUFBVSxDQUFDcU0sb0JBQW9CLENBQUM3RSxnQkFBZ0IsQ0FBQyxHQUFHLElBQUk7Y0FDNUY4RSxXQUFXLEVBQUU5RSxnQkFBZ0IsR0FBR3hILFVBQVUsQ0FBQ3FNLG9CQUFvQixDQUFDN0UsZ0JBQWdCLENBQUMsR0FBRyxJQUFJO2NBQ3hGK0UsZ0JBQWdCLEVBQUV0SCxVQUFVLENBQUNvSCxvQkFBb0IsQ0FBQyxHQUFHLEVBQUVoSCxTQUFTLEVBQUU7Z0JBQUVtSCxTQUFTLEVBQUU7Y0FBSyxDQUFDLENBQUM7Y0FDdEYxRyxRQUFRLEVBQUVkLFNBQVMsR0FBR29ELGNBQWMsQ0FBQ2lFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHO1lBQ2xFLENBQUM7WUFDRDlGLE1BQU0sRUFBRTtjQUNQNkYsU0FBUyxFQUFFcE0sVUFBVTtjQUNyQjRILGVBQWUsRUFBRTVILFVBQVU7Y0FDM0JzTSxXQUFXLEVBQUV0TSxVQUFVO2NBQ3ZCLGFBQWEsRUFBRWUsY0FBYztjQUM3Qm9CLFNBQVMsRUFBRW5DLFVBQVU7Y0FDckJ5TSxNQUFNLEVBQUV6RSxZQUFZO2NBQ3BCMEUsUUFBUSxFQUFFdkUsY0FBYztjQUN4Qm9FLGdCQUFnQixFQUFFdEgsVUFBa0M7Y0FDcERhLFFBQVEsRUFBRXNDO1lBQ1gsQ0FBQztZQUNEUixlQUFlLEVBQUVKLGdCQUFnQjtZQUNqQ21GLG9CQUFvQixFQUFFQSxDQUFBLEtBQU0zRCxpQkFBaUI7WUFDN0M0RCxvQkFBb0JBLENBQUEsRUFBc0I7Y0FDekMsT0FBT3pELGlCQUFpQjtZQUN6QixDQUFDO1lBQ0QwRCxvQkFBb0JBLENBQUEsRUFBbUI7Y0FDdEMsSUFBSWpGLGVBQWUsR0FBR0osZ0JBQWdCO2NBQ3RDLElBQUlJLGVBQWUsQ0FBQ2tGLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbENsRixlQUFlLEdBQUdBLGVBQWUsQ0FBQ21GLFNBQVMsQ0FBQyxDQUFDLEVBQUVuRixlQUFlLENBQUM5RyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQzNFO2NBQ0EsT0FBT3FJLGlCQUFpQixDQUFDNkQsVUFBVSxDQUFDcEYsZUFBZSxDQUFDO1lBQ3JELENBQUM7WUFDRHhGLFlBQVksRUFBRXZDLGFBQWE7WUFDM0JvTixNQUFNLEVBQUU1TTtVQUNULENBQUM7VUFDRHNHLGFBQWEsR0FBRyxJQUFJLENBQUM5QixnQkFBZ0IsQ0FDcENDLG1CQUFtQixFQUNuQkMsZ0JBQWdCLEVBQ2hCcEYsVUFBVSxFQUNWcUYsU0FBUyxFQUNUdEIsU0FBUyxFQUNUdUIsVUFBVSxFQUNWbEUsY0FDRCxDQUFDO1FBQ0Y7UUFDQXBCLFVBQVUsQ0FBQ3NILFFBQVEsQ0FBQ2hDLFVBQVUsRUFBMEIsWUFBWSxDQUFDO1FBQ3JFdEYsVUFBVSxDQUFDdU4sc0JBQXNCLENBQUNwSSxtQkFBbUIsQ0FBQztRQUN0RCxPQUFPbkYsVUFBVSxDQUFDbUgsVUFBVSxDQUFDLFlBQVk7VUFDeEMsT0FBT0MsSUFBSSxDQUFDQyxNQUFNLENBQUNMLGFBQWEsQ0FBQyxDQUUvQjNFLElBQUksQ0FBRXFDLEtBQVcsSUFBSztZQUN0QixJQUFJLENBQUNBLEtBQUssR0FBR0EsS0FBSztZQUNsQixNQUFNOEksYUFBYSxHQUFHLElBQUl0RyxTQUFTLENBQUMsSUFBSSxDQUFDeEMsS0FBSyxDQUFDO1lBQy9DK0ksV0FBVyxDQUFDQyxvQkFBb0IsQ0FBQ0YsYUFBcUQsQ0FBQztZQUN2RixJQUFJLENBQUM5SSxLQUFLLENBQUM0QyxRQUFRLENBQUNrRyxhQUFhLEVBQUUsT0FBTyxDQUFDO1lBQzNDLElBQUksQ0FBQzlJLEtBQUssQ0FBQzRDLFFBQVEsQ0FBQ21CLGNBQWMsRUFBRSxVQUFVLENBQUM7WUFDL0N6SSxVQUFVLENBQUN1SCxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQzdDLEtBQUssQ0FBQztZQUNwRCxPQUFPWCxTQUFTO1VBQ2pCLENBQUMsQ0FBQyxDQUNETCxLQUFLLENBQUMsTUFBT3FELE1BQWEsSUFDMUIsSUFBSSxDQUFDRCxnQkFBZ0IsQ0FDcEJDLE1BQU0sRUFDTkMsYUFBYSxFQUNiNUIsZ0JBQWdCLENBQUN1SSxhQUFhLElBQUksK0NBQStDLEVBQ2pGM04sVUFBVSxFQUNWK0QsU0FDRCxDQUNELENBQUMsQ0FDQUwsS0FBSyxDQUFFa0ssQ0FBQyxJQUFLNUksR0FBRyxDQUFDQyxLQUFLLENBQUMySSxDQUFDLENBQUMzRyxPQUFPLEVBQUUyRyxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUMsT0FBTzNJLEtBQWMsRUFBRTtRQUN4QkQsR0FBRyxDQUFDQyxLQUFLLENBQUVBLEtBQUssQ0FBV2dDLE9BQU8sRUFBRWhDLEtBQWUsQ0FBQztRQUNwRCxNQUFNLElBQUk0SSxLQUFLLENBQUMsK0JBQStCNUksS0FBSyxFQUFFLENBQUM7TUFDeEQ7SUFDRCxDQUFDO0lBQUF2RixNQUFBLENBRU8wSix3QkFBd0IsR0FBaEMsU0FBQUEseUJBQ0NGLFdBQW9ELEVBQ3BESCxVQUFpRCxFQUMxQztNQUNQdUIsTUFBTSxDQUFDakUsSUFBSSxDQUFDNkMsV0FBVyxDQUFDLENBQUMzRixPQUFPLENBQUMsVUFBVXVLLG1CQUEyQixFQUFRO1FBQzdFLE1BQU1DLGdCQUFnQixHQUFHN0UsV0FBVyxDQUFDNEUsbUJBQW1CLENBQUM7UUFDekQsSUFBSUUsY0FBYztRQUNsQixJQUFJRCxnQkFBZ0IsQ0FBQ0UsTUFBTSxJQUFJRixnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDQyxRQUFRLElBQUluRixVQUFVLENBQUNnRixnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDQyxRQUFRLENBQUMsRUFBRTtVQUNoSEYsY0FBYyxHQUFHakYsVUFBVSxDQUFDZ0YsZ0JBQWdCLENBQUNFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDO1VBQzdESCxnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDRSxjQUFjLEdBQUc7WUFDeENDLGNBQWMsRUFBRUosY0FBYyxDQUFDSSxjQUFjO1lBQzdDQyxNQUFNLEVBQUVMLGNBQWMsQ0FBQ0ssTUFBTTtZQUM3QkMsVUFBVSxFQUFFTixjQUFjLENBQUNNO1VBQzVCLENBQUM7UUFDRjtRQUNBLElBQUlQLGdCQUFnQixDQUFDMUcsTUFBTSxJQUFJMEcsZ0JBQWdCLENBQUMxRyxNQUFNLENBQUM2RyxRQUFRLElBQUluRixVQUFVLENBQUNnRixnQkFBZ0IsQ0FBQzFHLE1BQU0sQ0FBQzZHLFFBQVEsQ0FBQyxFQUFFO1VBQ2hIRixjQUFjLEdBQUdqRixVQUFVLENBQUNnRixnQkFBZ0IsQ0FBQzFHLE1BQU0sQ0FBQzZHLFFBQVEsQ0FBQztVQUM3REgsZ0JBQWdCLENBQUMxRyxNQUFNLENBQUM4RyxjQUFjLEdBQUc7WUFDeENDLGNBQWMsRUFBRUosY0FBYyxDQUFDSSxjQUFjO1lBQzdDQyxNQUFNLEVBQUVMLGNBQWMsQ0FBQ0ssTUFBTTtZQUM3QkMsVUFBVSxFQUFFTixjQUFjLENBQUNNO1VBQzVCLENBQUM7UUFDRjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFBQTVPLE1BQUEsQ0FFTzZNLHVCQUF1QixHQUEvQixTQUFBQSx3QkFBZ0NILFVBQW9CLEVBQUUvTCxVQUEwQixFQUFVO01BQ3pGLE9BQU8rTCxVQUFVLENBQUNtQyxNQUFNLENBQUMsVUFBVUMsVUFBa0IsRUFBRUMsYUFBcUIsRUFBVTtRQUNyRixJQUFJQSxhQUFhLEtBQUssRUFBRSxFQUFFO1VBQ3pCLE9BQU9ELFVBQVU7UUFDbEI7UUFDQSxJQUFJQSxVQUFVLEtBQUssRUFBRSxFQUFFO1VBQ3RCQSxVQUFVLEdBQUcsSUFBSUMsYUFBYSxFQUFFO1FBQ2pDLENBQUMsTUFBTTtVQUNOLE1BQU1DLE9BQU8sR0FBR3JPLFVBQVUsQ0FBQ3NPLFNBQVMsQ0FBQyxHQUFHSCxVQUFVLCtCQUErQkMsYUFBYSxFQUFFLENBQUM7VUFDakcsSUFBSUMsT0FBTyxJQUFJcEUsTUFBTSxDQUFDakUsSUFBSSxDQUFDcUksT0FBTyxDQUFDLENBQUN2TixNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DcU4sVUFBVSxJQUFJLDZCQUE2QjtVQUM1QztVQUNBQSxVQUFVLElBQUksSUFBSUMsYUFBYSxFQUFFO1FBQ2xDO1FBQ0EsT0FBT0QsVUFBVTtNQUNsQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ1AsQ0FBQztJQUFBOU8sTUFBQSxDQUVEa1AsT0FBTyxHQUFQLFNBQUFBLFFBQUEsRUFBZ0I7TUFDZixPQUFPLElBQUksQ0FBQ2xLLEtBQUs7SUFDbEIsQ0FBQztJQUFBaEYsTUFBQSxDQUVEbVAsWUFBWSxHQUFaLFNBQUFBLGFBQUEsRUFBcUM7TUFDcEMsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUFBblAsTUFBQSxDQUVEb1AsSUFBSSxHQUFKLFNBQUFBLEtBQUEsRUFBYTtNQUNaO01BQ0EsSUFBSSxJQUFJLENBQUN4TSxxQkFBcUIsRUFBRTtRQUMvQixJQUFJLENBQUNBLHFCQUFxQixDQUFDbUMsT0FBTyxDQUFDLENBQUM7TUFDckM7TUFDQSxJQUFJLElBQUksQ0FBQzlCLG9CQUFvQixFQUFFO1FBQzlCLElBQUksQ0FBQ0Esb0JBQW9CLENBQUM4QixPQUFPLENBQUMsQ0FBQztNQUNwQztNQUNBLElBQUksQ0FBQ3pELFFBQVEsQ0FBQytOLG9CQUFvQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUFBLE9BQUExUCxvQkFBQTtFQUFBLEVBN2NpQzJQLE9BQU87RUFBQSxJQStjcEN4RSwyQkFBMkIsMEJBQUF5RSxlQUFBO0lBQUExUCxjQUFBLENBQUFpTCwyQkFBQSxFQUFBeUUsZUFBQTtJQUFBLFNBQUF6RSw0QkFBQTtNQUFBLElBQUEwRSxLQUFBO01BQUEsU0FBQUMsSUFBQSxHQUFBMVAsU0FBQSxDQUFBMEIsTUFBQSxFQUFBaU8sSUFBQSxPQUFBQyxLQUFBLENBQUFGLElBQUEsR0FBQUcsSUFBQSxNQUFBQSxJQUFBLEdBQUFILElBQUEsRUFBQUcsSUFBQTtRQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQTdQLFNBQUEsQ0FBQTZQLElBQUE7TUFBQTtNQUFBSixLQUFBLEdBQUFELGVBQUEsQ0FBQS9JLElBQUEsVUFBQWtKLElBQUE7TUFBQUYsS0FBQSxDQUNoQ0ssa0JBQWtCLEdBQXlDLENBQUMsQ0FBQztNQUFBLE9BQUFMLEtBQUE7SUFBQTtJQUFBLElBQUFNLE9BQUEsR0FBQWhGLDJCQUFBLENBQUE3SyxTQUFBO0lBQUE2UCxPQUFBLENBSXZEek4sY0FBYyxHQUFwQixlQUFBQSxlQUFxQjBOLGVBQTZELEVBQWlDO01BQ2xIakYsMkJBQTJCLENBQUNrRixjQUFjLEVBQUU7TUFDNUMsTUFBTUMscUJBQXFCLEdBQUcsSUFBSXRRLG9CQUFvQixDQUFDaUwsTUFBTSxDQUFDQyxNQUFNLENBQUM7UUFBRXRKLE9BQU8sRUFBRTtNQUFLLENBQUMsRUFBRXdPLGVBQWUsQ0FBQyxDQUFDO01BQ3pHLE9BQU9FLHFCQUFxQixDQUFDaE0sV0FBVyxDQUFDdEIsSUFBSSxDQUFDLFlBQVk7UUFDekRtSSwyQkFBMkIsQ0FBQ2tGLGNBQWMsRUFBRTtRQUM1QyxPQUFPQyxxQkFBcUI7TUFDN0IsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBSCxPQUFBLENBRURULG9CQUFvQixHQUFwQixTQUFBQSxxQkFBQSxFQUE2QjtNQUM1QixJQUFJLENBQUNRLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUM3Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQS9FLDJCQUFBLENBS09HLGtDQUFrQyxHQUF6QyxTQUFBQSxtQ0FBMENsSSxZQUEwQixFQUF1QjtNQUMxRixNQUFNbU4sYUFBNEIsR0FBR25OLFlBQVksQ0FBQ29OLGdCQUFnQixDQUFDLENBQUM7TUFDcEUsSUFBSUQsYUFBYSxLQUFLbEssU0FBUyxJQUFJa0ssYUFBYSxDQUFDRSxhQUFhLEVBQUU7UUFDL0QsT0FBT0YsYUFBYSxDQUFDRSxhQUFhLENBQUNDLHlCQUF5QixDQUFDLENBQUM7TUFDL0Q7TUFDQSxPQUFPckssU0FBUztJQUNqQixDQUFDO0lBQUE4RSwyQkFBQSxDQUVNd0YsK0JBQStCLEdBQXRDLFNBQUFBLGdDQUFBLEVBQWlEO01BQ2hELE9BQU94RiwyQkFBMkIsQ0FBQ2tGLGNBQWM7SUFDbEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFsRiwyQkFBQSxDQVFPQywyQkFBMkIsR0FBbEMsU0FBQUEsNEJBQ0NzQyxRQUF5QixFQUN6QjVHLFFBQWtCLEVBQ2xCMUQsWUFBMEIsRUFDMUJsQyxNQUFjLEVBQ0g7TUFBQSxJQUFBMFAsZUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUNYLE1BQU1DLE9BQU8sR0FBRyxDQUFBekQsUUFBUSxhQUFSQSxRQUFRLHdCQUFBa0QsZUFBQSxHQUFSbEQsUUFBUSxDQUFHLFNBQVMsQ0FBQyxjQUFBa0QsZUFBQSx3QkFBQUMscUJBQUEsR0FBckJELGVBQUEsQ0FBdUJRLE9BQU8sY0FBQVAscUJBQUEsdUJBQTlCQSxxQkFBQSxDQUFnQ00sT0FBTyxLQUFJLENBQUMsQ0FBQztNQUM3RCxJQUFJRSxVQUFVLEdBQUcsRUFBRTtNQUNuQixLQUFLLE1BQU1DLFlBQVksSUFBSUgsT0FBTyxFQUFFO1FBQ25DLElBQUlBLE9BQU8sQ0FBQ0csWUFBWSxDQUFDLENBQUM1SyxFQUFFLEtBQUt4RixNQUFNLEVBQUU7VUFDeENtUSxVQUFVLEdBQUdDLFlBQVk7VUFDekI7UUFDRDtNQUNEO01BQ0EsSUFBSUQsVUFBVSxLQUFLLEVBQUUsRUFBRTtRQUN0QkEsVUFBVSxHQUFHblEsTUFBTTtNQUNwQjtNQUNBLE1BQU1xUSxjQUFjLEdBQUcsQ0FBQTdELFFBQVEsYUFBUkEsUUFBUSx3QkFBQW9ELGdCQUFBLEdBQVJwRCxRQUFRLENBQUcsU0FBUyxDQUFDLGNBQUFvRCxnQkFBQSx3QkFBQUMscUJBQUEsR0FBckJELGdCQUFBLENBQXVCTSxPQUFPLGNBQUFMLHFCQUFBLHdCQUFBQyxzQkFBQSxHQUE5QkQscUJBQUEsQ0FBZ0NJLE9BQU8sY0FBQUgsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQXZDRCxzQkFBQSxDQUEwQ0ssVUFBVSxDQUFDLGNBQUFKLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUFyREQsc0JBQUEsQ0FBdUR0SSxPQUFPLGNBQUF1SSxzQkFBQSx1QkFBOURBLHNCQUFBLENBQWdFdE8sUUFBUSxLQUFJLENBQUMsQ0FBQztNQUNyRyxPQUFPNE8sNkJBQTZCLENBQUNELGNBQWMsRUFBRXpLLFFBQVEsRUFBRTFELFlBQVksRUFBRWxDLE1BQU0sQ0FBQztJQUNyRixDQUFDO0lBQUEsT0FBQWlLLDJCQUFBO0VBQUEsRUE5RHdDc0csY0FBYztFQUFBLE9BZ0V6Q3RHLDJCQUEyQjtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
432
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsIl9TZXJ2aWNlIiwiX2luaGVyaXRzTG9vc2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9wcm90byIsInByb3RvdHlwZSIsImluaXQiLCJhU2VydmljZURlcGVuZGVuY2llcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJwYWdlSWQiLCJnZXRMb2NhbElkIiwiZ2V0SWQiLCJzU3RhYmxlSWQiLCJnZXRNZXRhZGF0YSIsImdldENvbXBvbmVudE5hbWUiLCJhRW5oYW5jZUkxOG4iLCJnZXRFbmhhbmNlSTE4biIsInNBcHBOYW1lc3BhY2UiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJpIiwibGVuZ3RoIiwib1Jlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsInJlcGxhY2UiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZ2V0TmFtZSIsIkxvY2FsaXphdGlvbiIsImdldExhbmd1YWdlVGFnIiwicHVzaCIsIlNlcnZpY2VGYWN0b3J5UmVnaXN0cnkiLCJnZXQiLCJjcmVhdGVJbnN0YW5jZSIsInNjb3BlVHlwZSIsInNldHRpbmdzIiwiYnVuZGxlcyIsImVuaGFuY2VJMThuIiwibW9kZWxOYW1lIiwidGhlbiIsIm9SZXNvdXJjZU1vZGVsU2VydmljZSIsImdldFJlc291cmNlTW9kZWwiLCJtZXRhTW9kZWwiLCJhcHBDb21wb25lbnQiLCJjb21wb25lbnQiLCJvQ2FjaGVIYW5kbGVyU2VydmljZSIsInZhbGlkYXRlQ2FjaGVLZXkiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsIlZlcnNpb25JbmZvIiwibG9hZCIsIm9JbmZvIiwic1RpbWVzdGFtcCIsImxpYnJhcmllcyIsIl9idWlsZGluZm8iLCJDb3JlIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsInJlcXVpcmVEZXBlbmRlbmNpZXMiLCJjcmVhdGVWaWV3IiwiZ2V0SW5zdGFuY2UiLCJpbnZhbGlkYXRlSWZOZWVkZWQiLCJyZWZyZXNoVmlldyIsIm9Sb290VmlldyIsImdldFJvb3RDb250cm9sIiwiZGVzdHJveSIsIm9WaWV3IiwicmVzb3VyY2VNb2RlbCIsInN0YWJsZUlkIiwiZ2V0VUlBcmVhIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiX2dldFZpZXdTZXR0aW5ncyIsInByZXByb2Nlc3NvckNvbnRleHQiLCJtU2VydmljZVNldHRpbmdzIiwibVZpZXdEYXRhIiwib1BhZ2VNb2RlbCIsIl9vQ29tcG9uZW50JGdldFZpZXdOYSIsInZpZXdUeXBlIiwiZ2V0Vmlld1R5cGUiLCJ1bmRlZmluZWQiLCJ0eXBlIiwicHJlcHJvY2Vzc29ycyIsInhtbCIsImNvbnRyb2xzIiwiaWQiLCJ2aWV3TmFtZSIsImdldFZpZXdOYW1lIiwiY2FsbCIsInZpZXdEYXRhIiwiY2FjaGUiLCJrZXlzIiwiYWRkaXRpb25hbERhdGEiLCJnZXRBZGRpdGlvbmFsQ2FjaGVEYXRhIiwiZ2V0RGF0YSIsInNldEFkZGl0aW9uYWxDYWNoZURhdGEiLCJ2YWx1ZSIsInNldERhdGEiLCJtb2RlbHMiLCJoZWlnaHQiLCJfY3JlYXRlRXJyb3JQYWdlIiwicmVhc29uIiwib1ZpZXdTZXR0aW5ncyIsIm1lc3NhZ2UiLCJKU09OTW9kZWwiLCJydW5Bc093bmVyIiwiVmlldyIsImNyZWF0ZSIsInNldE1vZGVsIiwic2V0QWdncmVnYXRpb24iLCJnZXRDb250cm9sbGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJoaWRlUm9vdFBsYWNlaG9sZGVyIiwiX29BcHBDb21wb25lbnQkZ2V0Um91IiwiX29BcHBDb21wb25lbnQkZ2V0Um91MiIsIl9vQXBwQ29tcG9uZW50JGdldFJvdTMiLCJzQ29udmVydGVyVHlwZSIsImNvbnZlcnRlclR5cGUiLCJzRnVsbENvbnRleHRQYXRoIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsIm9wdGlvbnMiLCJmdWxsQ29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwib1ZpZXdEYXRhTW9kZWwiLCJfb01hbmlmZXN0Q29udGVudCRzYXAiLCJfc2FwZmVNYW5pZmVzdENvbnRlbnQiLCJvUm91dGluZ1NlcnZpY2UiLCJnZXRTZXJ2aWNlIiwib1RhcmdldEluZm8iLCJtT3V0Ym91bmRzIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwibU5hdmlnYXRpb24iLCJnZXROYXZpZ2F0aW9uIiwiX2VuaGFuY2VOYXZpZ2F0aW9uQ29uZmlnIiwiY29udmVydGVkTWV0YWRhdGEiLCJjb252ZXJ0VHlwZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJkZWZpbml0aW9uQ29udGV4dCIsIkRlZmluaXRpb25Db250ZXh0IiwiYWRkQXBwbGljYXRpb25NYW5pZmVzdCIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwiaXNEZXNrdG9wIiwic3lzdGVtIiwiZGVza3RvcCIsImlzUGhvbmUiLCJwaG9uZSIsIlRlbXBsYXRlVHlwZSIsIkZyZWVTdHlsZVBhZ2UiLCJnZXRWaWV3RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSIsInNldFBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsImlzU2hhcmVCdXR0b25WaXNpYmxlRm9yTXlJbmJveCIsImdldFNoYXJlQnV0dG9uVmlzaWJpbGl0eUZvck15SW5ib3giLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJzaGVsbENvbnRlbnREZW5zaXR5IiwiZ2V0Q29udGVudERlbnNpdHkiLCJzYXBmZU1hbmlmZXN0Q29udGVudCIsInNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImluY2x1ZGVzIiwic1RhcmdldEFubm90YXRpb25QYXRoIiwicmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIiwiVGVtcGxhdGVNb2RlbCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwiaUlzc3VlQ291bnQiLCJnZXRJc3N1ZXMiLCJvQ29udmVydGVyUGFnZU1vZGVsIiwiY29udmVydFBhZ2UiLCJhSXNzdWVzIiwiYUFkZGVkSXNzdWVzIiwic2xpY2UiLCJ3YXJuaW5nIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic0VudGl0eVNldFBhdGgiLCJfZ2V0RnVsbFBhdGhUb0VudGl0eVNldCIsImJpbmRpbmdDb250ZXh0cyIsImVudGl0eVNldCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udGV4dFBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0Iiwibm9SZXNvbHZlIiwiZGV2aWNlIiwibWFuaWZlc3QiLCJnZXRDb252ZXJ0ZWRNZXRhZGF0YSIsImdldERlZmluaXRpb25Db250ZXh0IiwiZ2V0RGVmaW5pdGlvbkZvclBhZ2UiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsImdldFBhZ2VGb3IiLCJ2aWV3SWQiLCJzZXRQcmVwcm9jZXNzb3JDb250ZXh0Iiwidmlld0pTT05Nb2RlbCIsIk1vZGVsSGVscGVyIiwiZW5oYW5jZVZpZXdKU09OTW9kZWwiLCJlcnJvclZpZXdOYW1lIiwiZSIsIkVycm9yIiwibmF2aWdhdGlvbk9iamVjdEtleSIsIm5hdmlnYXRpb25PYmplY3QiLCJvdXRib3VuZENvbmZpZyIsImRldGFpbCIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInBhcmFtZXRlcnMiLCJyZWR1Y2UiLCJzUGF0aFNvRmFyIiwic05leHRQYXRoUGFydCIsIm9UYXJnZXQiLCJnZXRPYmplY3QiLCJnZXRWaWV3IiwiZ2V0SW50ZXJmYWNlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwiU2VydmljZSIsIl9TZXJ2aWNlRmFjdG9yeSIsIl90aGlzIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJfcHJvdG8yIiwib1NlcnZpY2VDb250ZXh0IiwiaUNyZWF0aW5nVmlld3MiLCJvVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsImZlRW52aXJvbm1lbnQiLCJnZXRTaGFyZUNvbnRyb2xWaXNpYmlsaXR5IiwiZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSIsIl9tYW5pZmVzdCRzYXBVaSIsIl9tYW5pZmVzdCRzYXBVaSRyb3V0aSIsIl9tYW5pZmVzdCRzYXBVaTIiLCJfbWFuaWZlc3Qkc2FwVWkyJHJvdXQiLCJfbWFuaWZlc3Qkc2FwVWkyJHJvdXQyIiwiX21hbmlmZXN0JHNhcFVpMiRyb3V0MyIsIl9tYW5pZmVzdCRzYXBVaTIkcm91dDQiLCJ0YXJnZXRzIiwicm91dGluZyIsInJlYWxUYXJnZXQiLCJ0YXJnZXRUb0ZpbmQiLCJhY3R1YWxTZXR0aW5ncyIsImFwcGx5UGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNBUEpTT05TY2hlbWFGb3JXZWJBcHBsaWNhdGlvbk1hbmlmZXN0RmlsZSB9IGZyb20gXCJAdWk1L21hbmlmZXN0L3R5cGVzL21hbmlmZXN0XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBMb2NhbGl6YXRpb24gZnJvbSBcInNhcC9iYXNlL2kxOG4vTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiwgWE1MUHJlcHJvY2Vzc29yQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgU3VydmV5Q29uZmlnIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ZlZWRiYWNrXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJhc2VNYW5pZmVzdFNldHRpbmdzLFxuXHRDb250ZW50RGVuc2l0aWVzVHlwZSxcblx0Q29udHJvbENvbmZpZ3VyYXRpb24sXG5cdE1hbmlmZXN0QWN0aW9uLFxuXHRNYW5pZmVzdEhlYWRlckZhY2V0LFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgKiBhcyBfTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgKiBhcyBfVGVtcGxhdGVDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlUmVjb3JkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgRGVmaW5pdGlvblBhZ2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZGVmaW5pdGlvbi9GRURlZmluaXRpb25cIjtcbmltcG9ydCB7IERlZmluaXRpb25Db250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgeyByZXF1aXJlRGVwZW5kZW5jaWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTG9hZGVyVXRpbHNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgYXBwbHlQYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvbWFuaWZlc3RNZXJnZXIvQ2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9DYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IFZlcnNpb25JbmZvIGZyb20gXCJzYXAvdWkvVmVyc2lvbkluZm9cIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCwgTWFuaWZlc3RPdXRib3VuZEVudHJ5LCBTaGFyZU9wdGlvbnMgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnlSZWdpc3RyeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9SZXNvdXJjZU1vZGVsU2VydmljZUZhY3RvcnlcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge1xuXHR2aWV3VHlwZT86IHN0cmluZztcblx0dmlld05hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIFZpZXdTZXR0aW5ncyA9IFBhcmFtZXRlcnM8dHlwZW9mIFZpZXcuY3JlYXRlPlswXSAmIHsgY2FjaGU6IHVua25vd247IG1vZGVsczogdW5rbm93bjsgaGVpZ2h0OiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIFZpZXdEYXRhID0ge1xuXHRzaG93QnJlYWRDcnVtYnM/OiBib29sZWFuO1xuXHRmY2xFbmFibGVkPzogYm9vbGVhbjtcblx0ZWRpdGFibGVIZWFkZXJDb250ZW50PzogYm9vbGVhbjtcblx0aGlkZUZpbHRlckJhcj86IGJvb2xlYW47XG5cdHVzZUhpZGRlbkZpbHRlckJhcj86IGJvb2xlYW47XG5cdHNlY3Rpb25MYXlvdXQ/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM/OiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY09iamVjdD47XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRuYXZpZ2F0aW9uOiBvYmplY3Q7XG5cdHZpZXdMZXZlbDogbnVtYmVyO1xuXHR2YXJpYW50TWFuYWdlbWVudD86IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0c3RhYmxlSWQ6IHN0cmluZztcblx0Y29udGVudERlbnNpdGllcz86IENvbnRlbnREZW5zaXRpZXNUeXBlO1xuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXHRmdWxsQ29udGV4dFBhdGg6IHN0cmluZztcblx0aXNEZXNrdG9wOiBib29sZWFuO1xuXHRpc1Bob25lOiBib29sZWFuO1xuXHRjb252ZXJ0ZXJUeXBlOiBUZW1wbGF0ZVR5cGU7XG5cdHNoZWxsQ29udGVudERlbnNpdHk/OiBzdHJpbmc7XG5cdHVzZU5ld0xhenlMb2FkaW5nPzogYm9vbGVhbjtcblx0aW5pdGlhbExvYWQ/OiBzdHJpbmc7XG5cdGxpdmVNb2RlPzogYm9vbGVhbjtcblx0cmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdD86IGJvb2xlYW47XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdHJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZT86IHVua25vd247XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0aXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94PzogYm9vbGVhbjtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHNoYXJlPzogU2hhcmVPcHRpb25zO1xuXHRzYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbj86IE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXTtcblx0Y29udGVudD86IHtcblx0XHRmZWVkYmFjaz86IHsgYWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFN1cnZleUNvbmZpZz47IHN0YW5kYXJkQWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFN1cnZleUNvbmZpZz4gfTtcblx0XHRoZWFkZXI/OiB7XG5cdFx0XHRmYWNldHM/OiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD47XG5cdFx0XHRhY3Rpb25zPzogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPjtcblx0XHR9O1xuXHRcdGZvb3Rlcj86IHtcblx0XHRcdGFjdGlvbnM/OiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+O1xuXHRcdH07XG5cdH07XG59O1xuY2xhc3MgVGVtcGxhdGVkVmlld1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdG9WaWV3ITogVmlldztcblxuXHRvUmVzb3VyY2VNb2RlbFNlcnZpY2UhOiBSZXNvdXJjZU1vZGVsU2VydmljZTtcblxuXHRvQ2FjaGVIYW5kbGVyU2VydmljZSE6IENhY2hlSGFuZGxlclNlcnZpY2U7XG5cblx0b0ZhY3RvcnkhOiBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnk7XG5cblx0cmVzb3VyY2VNb2RlbCE6IFJlc291cmNlTW9kZWw7XG5cblx0c3RhYmxlSWQhOiBzdHJpbmc7XG5cblx0cGFnZUlkITogc3RyaW5nO1xuXG5cdFRlbXBsYXRlQ29udmVydGVyPzogdHlwZW9mIF9UZW1wbGF0ZUNvbnZlcnRlcjtcblxuXHRNZXRhTW9kZWxDb252ZXJ0ZXI/OiB0eXBlb2YgX01ldGFNb2RlbENvbnZlcnRlcjtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZXJ2aWNlRGVwZW5kZW5jaWVzID0gW107XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvQ29tcG9uZW50KTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHR0aGlzLnBhZ2VJZCA9IG9BcHBDb21wb25lbnQuZ2V0TG9jYWxJZChvQ29tcG9uZW50LmdldElkKCkpIGFzIHN0cmluZztcblx0XHRjb25zdCBzU3RhYmxlSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpfTo6JHt0aGlzLnBhZ2VJZH1gO1xuXHRcdGNvbnN0IGFFbmhhbmNlSTE4biA9IG9Db21wb25lbnQuZ2V0RW5oYW5jZUkxOG4oKSB8fCBbXTtcblx0XHRsZXQgc0FwcE5hbWVzcGFjZTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRpZiAoYUVuaGFuY2VJMThuKSB7XG5cdFx0XHRzQXBwTmFtZXNwYWNlID0gb0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldENvbXBvbmVudE5hbWUoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUVuaGFuY2VJMThuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGV4dC12ZXJ0aWNhbGl6YXRpb24gYXBwbGljYXRpb25zIGNhbiBhbHNvIHBhc3MgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBVSTUgdGFrZXMgY2FyZSBvZiB0ZXh0LXZlcnRpY2FsaXphdGlvbiBmb3IgcmVzb3VyY2UgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIEhlbmNlIGNoZWNrIGlmIHRoZSBnaXZlbiBrZXkgaXMgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBpZiBzbyB0aGlzIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGVuaGFuY2UgdGhlIHNhcC5mZSByZXNvdXJjZSBtb2RlbCBzbyBwYXNzIGl0IGFzIGl0IGlzXG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbChhRW5oYW5jZUkxOG5baV0pO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlTW9kZWwgJiYgb1Jlc291cmNlTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLnJlc291cmNlLlJlc291cmNlTW9kZWxcIikpIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBvUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBgJHtzQXBwTmFtZXNwYWNlfS4ke2FFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIil9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBzQ2FjaGVJZGVudGlmaWVyID0gYCR7b0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1fJHtzU3RhYmxlSWR9XyR7TG9jYWxpemF0aW9uLmdldExhbmd1YWdlVGFnKCl9YDtcblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0U2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5SZXNvdXJjZU1vZGVsU2VydmljZVwiKVxuXHRcdFx0XHQuY3JlYXRlSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHNjb3BlVHlwZTogXCJjb21wb25lbnRcIixcblx0XHRcdFx0XHRzY29wZU9iamVjdDogb0NvbXBvbmVudCxcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0YnVuZGxlczogW1wic2FwLmZlLmNvcmUubWVzc2FnZWJ1bmRsZVwiLCBcInNhcC5mZS5tYWNyb3MubWVzc2FnZWJ1bmRsZVwiLCBcInNhcC5mZS50ZW1wbGF0ZXMubWVzc2FnZWJ1bmRsZVwiXSxcblx0XHRcdFx0XHRcdGVuaGFuY2VJMThuOiBhRW5oYW5jZUkxOG4sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKG9SZXNvdXJjZU1vZGVsU2VydmljZTogUmVzb3VyY2VNb2RlbFNlcnZpY2UpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSA9IG9SZXNvdXJjZU1vZGVsU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb1Jlc291cmNlTW9kZWxTZXJ2aWNlLmdldFJlc291cmNlTW9kZWwoKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbihhc3luYyAob0NhY2hlSGFuZGxlclNlcnZpY2U6IENhY2hlSGFuZGxlclNlcnZpY2UpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcblx0XHRcdFx0XHR0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gb0NhY2hlSGFuZGxlclNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9DYWNoZUhhbmRsZXJTZXJ2aWNlLnZhbGlkYXRlQ2FjaGVLZXkoc0NhY2hlSWRlbnRpZmllciwgb0NvbXBvbmVudCwgb0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRWZXJzaW9uSW5mby5sb2FkKClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9JbmZvKSB7XG5cdFx0XHRcdFx0bGV0IHNUaW1lc3RhbXAgPSBcIlwiO1xuXHRcdFx0XHRcdGlmICghb0luZm8ubGlicmFyaWVzKSB7XG5cdFx0XHRcdFx0XHRzVGltZXN0YW1wID0gKENvcmUgYXMgeyBidWlsZGluZm8/OiB7IGJ1aWxkdGltZT86IHN0cmluZyB9IH0pPy5idWlsZGluZm8/LmJ1aWxkdGltZSA/PyBcIjxOT1ZBTFVFPlwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvSW5mby5saWJyYXJpZXMuZm9yRWFjaChmdW5jdGlvbiAob0xpYnJhcnkpIHtcblx0XHRcdFx0XHRcdFx0c1RpbWVzdGFtcCArPSBvTGlicmFyeS5idWlsZFRpbWVzdGFtcDtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc1RpbWVzdGFtcDtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCI8Tk9WQUxVRT5cIjtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLmFsbChhU2VydmljZURlcGVuZGVuY2llcylcblx0XHRcdC50aGVuKGFzeW5jIChhRGVwZW5kZW5jaWVzUmVzdWx0OiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzBdIGFzIFJlc291cmNlTW9kZWw7XG5cdFx0XHRcdGNvbnN0IHNDYWNoZUtleSA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbMV0gYXMgc3RyaW5nIHwgbnVsbDtcblx0XHRcdFx0Y29uc3QgW1RlbXBsYXRlQ29udmVydGVyLCBNZXRhTW9kZWxDb252ZXJ0ZXJdID0gYXdhaXQgcmVxdWlyZURlcGVuZGVuY2llcyhbXG5cdFx0XHRcdFx0XCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsXG5cdFx0XHRcdFx0XCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiXG5cdFx0XHRcdF0pO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVWaWV3KFxuXHRcdFx0XHRcdG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRzQ2FjaGVLZXksXG5cdFx0XHRcdFx0VGVtcGxhdGVDb252ZXJ0ZXIgYXMgdHlwZW9mIF9UZW1wbGF0ZUNvbnZlcnRlcixcblx0XHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIgYXMgdHlwZW9mIF9NZXRhTW9kZWxDb252ZXJ0ZXJcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoc0NhY2hlS2V5OiBzdHJpbmcgfCB2b2lkIHwgbnVsbCk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVIYW5kbGVyU2VydmljZSA9IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ2FjaGVIYW5kbGVyU2VydmljZVwiKS5nZXRJbnN0YW5jZShvTWV0YU1vZGVsKTtcblx0XHRcdFx0b0NhY2hlSGFuZGxlclNlcnZpY2UuaW52YWxpZGF0ZUlmTmVlZGVkKFxuXHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRzQ2FjaGVJZGVudGlmaWVyLFxuXHRcdFx0XHRcdG9Db21wb25lbnQsXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgdmlldyB1c2luZyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIGJlZm9yZS5cblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgdmlldyBpcyByZWZyZXNoZWRcblx0ICovXG5cdGFzeW5jIHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gb0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdGlmIChvUm9vdFZpZXcpIHtcblx0XHRcdG9Sb290Vmlldy5kZXN0cm95KCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm9WaWV3KSB7XG5cdFx0XHR0aGlzLm9WaWV3LmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVmlldyh0aGlzLnJlc291cmNlTW9kZWwsIHRoaXMuc3RhYmxlSWQsIFwiXCIsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIhLCB0aGlzLk1ldGFNb2RlbENvbnZlcnRlciEpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdG9Db21wb25lbnQuZ2V0VUlBcmVhKCkuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0b0NvbXBvbmVudC5nZXRVSUFyZWEoKS5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X2dldFZpZXdTZXR0aW5ncyhcblx0XHRwcmVwcm9jZXNzb3JDb250ZXh0OiBYTUxQcmVwcm9jZXNzb3JDb250ZXh0LFxuXHRcdG1TZXJ2aWNlU2V0dGluZ3M6IFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3MsXG5cdFx0b0NvbXBvbmVudDogRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+LFxuXHRcdG1WaWV3RGF0YTogVmlld0RhdGEsXG5cdFx0c0NhY2hlS2V5OiBzdHJpbmcgfCBudWxsLFxuXHRcdG9QYWdlTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRvUmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuXHQpOiBWaWV3U2V0dGluZ3Mge1xuXHRcdGxldCB2aWV3VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gbVNlcnZpY2VTZXR0aW5ncy52aWV3VHlwZSB8fCBvQ29tcG9uZW50LmdldFZpZXdUeXBlKCkgfHwgXCJYTUxcIjtcblx0XHRpZiAodmlld1R5cGUgIT09IFwiWE1MXCIpIHtcblx0XHRcdHZpZXdUeXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogdmlld1R5cGUsXG5cdFx0XHRwcmVwcm9jZXNzb3JzOiB7XG5cdFx0XHRcdHhtbDogcHJlcHJvY2Vzc29yQ29udGV4dCxcblx0XHRcdFx0Y29udHJvbHM6IHt9XG5cdFx0XHR9LFxuXHRcdFx0aWQ6IG1WaWV3RGF0YS5zdGFibGVJZCxcblx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWU/LigpLFxuXHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdGNhY2hlOiB7XG5cdFx0XHRcdGtleXM6IFtzQ2FjaGVLZXldLFxuXHRcdFx0XHRhZGRpdGlvbmFsRGF0YToge1xuXHRcdFx0XHRcdC8vIFdlIHN0b3JlIHRoZSBwYWdlIG1vZGVsIGRhdGEgaW4gdGhlIGBhZGRpdGlvbmFsRGF0YWAgb2YgdGhlIHZpZXcgY2FjaGUsIHRoaXMgd2F5IGl0IGlzIGFsd2F5cyBpbiBzeW5jXG5cdFx0XHRcdFx0Z2V0QWRkaXRpb25hbENhY2hlRGF0YTogKCk6IHVua25vd24gPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9QYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2V0QWRkaXRpb25hbENhY2hlRGF0YTogKHZhbHVlOiBvYmplY3QpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdG9QYWdlTW9kZWwuc2V0RGF0YSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogb1Jlc291cmNlTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0fTtcblx0fVxuXG5cdGFzeW5jIF9jcmVhdGVFcnJvclBhZ2UoXG5cdFx0cmVhc29uOiBFcnJvcixcblx0XHRvVmlld1NldHRpbmdzOiBWaWV3U2V0dGluZ3MsXG5cdFx0dmlld05hbWU6IHN0cmluZyxcblx0XHRvQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCxcblx0XHRzQ2FjaGVLZXk6IHN0cmluZyB8IG51bGxcblx0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHQvLyBqdXN0IHJlcGxhY2UgdGhlIHZpZXcgbmFtZSBhbmQgYSBtb2RlbCBjb250YWluaW5nIHRoZSByZWFzb24sIGJ1dCBrZWVwIHRoZSBvdGhlciBzZXR0aW5nc1xuXHRcdExvZy5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uKTtcblx0XHRvVmlld1NldHRpbmdzLnZpZXdOYW1lID0gdmlld05hbWU7XG5cdFx0aWYgKG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycykge1xuXHRcdFx0KG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycyBhcyBSZWNvcmQ8c3RyaW5nLCB7IG1vZGVsczogUmVjb3JkPHN0cmluZywgTW9kZWw+IH0+KS54bWwubW9kZWxzW1wiZXJyb3JcIl0gPSBuZXcgSlNPTk1vZGVsKHJlYXNvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncykudGhlbigob1ZpZXc6IFZpZXcpID0+IHtcblx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBKU09OTW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0b0NvbXBvbmVudC5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKS5nZXRQbGFjZWhvbGRlcigpLmhpZGVSb290UGxhY2Vob2xkZXIoKTtcblx0XHRcdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0XHRcdH0pO1xuXHRcdH0pIGFzIFByb21pc2U8c3RyaW5nPjtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZVZpZXcoXG5cdFx0b1Jlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0c1N0YWJsZUlkOiBzdHJpbmcsXG5cdFx0c0NhY2hlS2V5OiBzdHJpbmcgfCBudWxsLFxuXHRcdFRlbXBsYXRlQ29udmVydGVyOiB0eXBlb2YgX1RlbXBsYXRlQ29udmVydGVyLFxuXHRcdE1ldGFNb2RlbENvbnZlcnRlcjogdHlwZW9mIF9NZXRhTW9kZWxDb252ZXJ0ZXJcblx0KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsIHwgdm9pZD4ge1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IG9SZXNvdXJjZU1vZGVsO1xuXHRcdHRoaXMuc3RhYmxlSWQgPSBzU3RhYmxlSWQ7XG5cdFx0dGhpcy5UZW1wbGF0ZUNvbnZlcnRlciA9IFRlbXBsYXRlQ29udmVydGVyO1xuXHRcdHRoaXMuTWV0YU1vZGVsQ29udmVydGVyID0gTWV0YU1vZGVsQ29udmVydGVyO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3QgbVNlcnZpY2VTZXR0aW5ncyA9IG9Db250ZXh0LnNldHRpbmdzO1xuXHRcdGNvbnN0IHNDb252ZXJ0ZXJUeXBlID0gbVNlcnZpY2VTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdCBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD47XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvQ29tcG9uZW50KTtcblx0XHRsZXQgc0Z1bGxDb250ZXh0UGF0aDogc3RyaW5nID1cblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KT8ub3B0aW9ucz8uc2V0dGluZ3M/LmZ1bGxDb250ZXh0UGF0aCA/PyBcIlwiO1xuXHRcdGlmICghc0Z1bGxDb250ZXh0UGF0aCkge1xuXHRcdFx0Ly8gaWYgdGhlIGNvbnRleHQgcGF0aCBjb3VsZG4ndCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcm91dGluZyBzZXJ2aWNlLCB0cnkgdG8gZ2V0IGl0IGZyb20gdGhlIGNvbXBvbmVudCBpdHNlbGZcblx0XHRcdHNGdWxsQ29udGV4dFBhdGggPSBvQ29tcG9uZW50LmdldENvbnRleHRQYXRoKCkgPz8gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKTtcblx0XHRjb25zdCBvRGV2aWNlTW9kZWwgPSBuZXcgSlNPTk1vZGVsKERldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBtVmlld0RhdGE6IFZpZXdEYXRhO1xuXHRcdC8vIExvYWQgdGhlIGluZGV4IGZvciB0aGUgYWRkaXRpb25hbCBidWlsZGluZyBibG9ja3Mgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGVtXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9Sb3V0aW5nU2VydmljZSA9IGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2VydmljZShcInJvdXRpbmdTZXJ2aWNlXCIpO1xuXHRcdFx0Ly8gUmV0cmlldmUgdGhlIHZpZXdMZXZlbCBmb3IgdGhlIGNvbXBvbmVudFxuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvUm91dGluZ1NlcnZpY2UuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCk7XG5cdFx0XHRjb25zdCBtT3V0Ym91bmRzID1cblx0XHRcdFx0KG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uLm91dGJvdW5kcykgfHxcblx0XHRcdFx0e307XG5cdFx0XHRjb25zdCBtTmF2aWdhdGlvbiA9IG9Db21wb25lbnQuZ2V0TmF2aWdhdGlvbigpIHx8IHt9O1xuXHRcdFx0dGhpcy5fZW5oYW5jZU5hdmlnYXRpb25Db25maWcobU5hdmlnYXRpb24sIG1PdXRib3VuZHMpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKFxuXHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKClcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBkZWZpbml0aW9uQ29udGV4dCA9IG5ldyBEZWZpbml0aW9uQ29udGV4dChjb252ZXJ0ZWRNZXRhZGF0YSk7XG5cdFx0XHRkZWZpbml0aW9uQ29udGV4dC5hZGRBcHBsaWNhdGlvbk1hbmlmZXN0KG9NYW5pZmVzdENvbnRlbnQgYXMgU0FQSlNPTlNjaGVtYUZvcldlYkFwcGxpY2F0aW9uTWFuaWZlc3RGaWxlKTtcblxuXHRcdFx0bVZpZXdEYXRhID0ge1xuXHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdG5hdmlnYXRpb246IG1OYXZpZ2F0aW9uLFxuXHRcdFx0XHR2aWV3TGV2ZWw6IG9UYXJnZXRJbmZvPy52aWV3TGV2ZWwsXG5cdFx0XHRcdHN0YWJsZUlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdGNvbnRlbnREZW5zaXRpZXM6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdPy5jb250ZW50RGVuc2l0aWVzLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiBvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRpc0Rlc2t0b3A6IERldmljZS5zeXN0ZW0uZGVza3RvcCxcblx0XHRcdFx0aXNQaG9uZTogRGV2aWNlLnN5c3RlbS5waG9uZSxcblx0XHRcdFx0Y29udmVydGVyVHlwZTogVGVtcGxhdGVUeXBlLkZyZWVTdHlsZVBhZ2Vcblx0XHRcdH07XG5cdFx0XHRpZiAob0NvbXBvbmVudC5nZXRWaWV3RGF0YSkge1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG1WaWV3RGF0YSwgb0NvbXBvbmVudC5nZXRWaWV3RGF0YSgpKTtcblx0XHRcdFx0bVZpZXdEYXRhID0gVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LnNldFBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyhcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50LFxuXHRcdFx0XHRcdG1WaWV3RGF0YSxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdHRoaXMucGFnZUlkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtVmlld0RhdGEuaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94ID0gVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmdldFNoYXJlQnV0dG9uVmlzaWJpbGl0eUZvck15SW5ib3gob0FwcENvbXBvbmVudCk7XG5cdFx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0bVZpZXdEYXRhLmNvbnZlcnRlclR5cGUgPSBzQ29udmVydGVyVHlwZTtcblx0XHRcdG1WaWV3RGF0YS5zaGVsbENvbnRlbnREZW5zaXR5ID0gb1NoZWxsU2VydmljZXMuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0XHRcdGNvbnN0IHNhcGZlTWFuaWZlc3RDb250ZW50ID0gb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXTtcblx0XHRcdG1WaWV3RGF0YS5zYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl07XG5cdFx0XHRtVmlld0RhdGEucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9IHNhcGZlTWFuaWZlc3RDb250ZW50Py5mb3JtXG5cdFx0XHRcdD8gc2FwZmVNYW5pZmVzdENvbnRlbnQ/LmZvcm0/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKTtcblx0XHRcdGlmIChtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdFx0Zm9yIChjb25zdCBzQW5ub3RhdGlvblBhdGggaW4gbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhcIltcIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUYXJnZXRBbm5vdGF0aW9uUGF0aCA9IHJlc29sdmVEeW5hbWljRXhwcmVzc2lvbihzQW5ub3RhdGlvblBhdGgsIG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRcdFx0bVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NUYXJnZXRBbm5vdGF0aW9uUGF0aF0gPSBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc0Fubm90YXRpb25QYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b1BhZ2VNb2RlbCA9IG5ldyBUZW1wbGF0ZU1vZGVsKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdFx0Y29uc3QgaUlzc3VlQ291bnQgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCkubGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJQYWdlTW9kZWwgPSBUZW1wbGF0ZUNvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRcdHNDb252ZXJ0ZXJUeXBlLFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdG1WaWV3RGF0YSBhcyB1bmtub3duIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzLFxuXHRcdFx0XHRcdFx0b0RpYWdub3N0aWNzLFxuXHRcdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKSxcblx0XHRcdFx0XHRcdG9Db21wb25lbnRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IGFJc3N1ZXMgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCk7XG5cdFx0XHRcdFx0Y29uc3QgYUFkZGVkSXNzdWVzID0gYUlzc3Vlcy5zbGljZShpSXNzdWVDb3VudCk7XG5cdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcdFx0XCJTb21lIGlzc3VlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQgaW4geW91ciBwcm9qZWN0LCBwbGVhc2UgY2hlY2sgdGhlIFVJNSBzdXBwb3J0IGFzc2lzdGFudCBydWxlIGZvciBzYXAuZmUuY29yZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb0NvbnZlcnRlclBhZ2VNb2RlbDtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgb01ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBhU3BsaXRQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IHRoaXMuX2dldEZ1bGxQYXRoVG9FbnRpdHlTZXQoYVNwbGl0UGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBwcmVwcm9jZXNzb3JDb250ZXh0OiBYTUxQcmVwcm9jZXNzb3JDb250ZXh0ID0ge1xuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVNldFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bGxDb250ZXh0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0XHR2aWV3RGF0YTogbVZpZXdEYXRhID8gb1ZpZXdEYXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIDogbnVsbFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogb1Jlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRkZXZpY2U6IG9EZXZpY2VNb2RlbCxcblx0XHRcdFx0XHRcdG1hbmlmZXN0OiBvTWFuaWZlc3RNb2RlbCxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwgYXMgdW5rbm93biBhcyBKU09OTW9kZWwsXG5cdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRnZXRDb252ZXJ0ZWRNZXRhZGF0YTogKCkgPT4gY29udmVydGVkTWV0YWRhdGEsXG5cdFx0XHRcdFx0Z2V0RGVmaW5pdGlvbkNvbnRleHQoKTogRGVmaW5pdGlvbkNvbnRleHQge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRlZmluaXRpb25Db250ZXh0O1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0RGVmaW5pdGlvbkZvclBhZ2UoKTogRGVmaW5pdGlvblBhZ2Uge1xuXHRcdFx0XHRcdFx0bGV0IGZ1bGxDb250ZXh0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGg7XG5cdFx0XHRcdFx0XHRpZiAoZnVsbENvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGggPSBmdWxsQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIGZ1bGxDb250ZXh0UGF0aC5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBkZWZpbml0aW9uQ29udGV4dC5nZXRQYWdlRm9yKGZ1bGxDb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0dmlld0lkOiBzU3RhYmxlSWRcblx0XHRcdFx0fSxcblx0XHRcdFx0b1ZpZXdTZXR0aW5ncyA9IHRoaXMuX2dldFZpZXdTZXR0aW5ncyhcblx0XHRcdFx0XHRwcmVwcm9jZXNzb3JDb250ZXh0LFxuXHRcdFx0XHRcdG1TZXJ2aWNlU2V0dGluZ3MsXG5cdFx0XHRcdFx0b0NvbXBvbmVudCxcblx0XHRcdFx0XHRtVmlld0RhdGEsXG5cdFx0XHRcdFx0c0NhY2hlS2V5LFxuXHRcdFx0XHRcdG9QYWdlTW9kZWwgYXMgdW5rbm93biBhcyBKU09OTW9kZWwsXG5cdFx0XHRcdFx0b1Jlc291cmNlTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdC8vIFNldHRpbmcgdGhlIHBhZ2VNb2RlbCBvbiB0aGUgY29tcG9uZW50IGZvciBwb3RlbnRpYWwgcmV1c2Vcblx0XHRcdG9Db21wb25lbnQuc2V0TW9kZWwob1BhZ2VNb2RlbCBhcyB1bmtub3duIGFzIEpTT05Nb2RlbCwgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdFx0b0NvbXBvbmVudC5zZXRQcmVwcm9jZXNzb3JDb250ZXh0KHByZXByb2Nlc3NvckNvbnRleHQpO1xuXHRcdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBWaWV3LmNyZWF0ZShvVmlld1NldHRpbmdzKVxuXG5cdFx0XHRcdFx0LnRoZW4oKG9WaWV3OiBWaWV3KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0XHRjb25zdCB2aWV3SlNPTk1vZGVsID0gbmV3IEpTT05Nb2RlbCh0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRcdE1vZGVsSGVscGVyLmVuaGFuY2VWaWV3SlNPTk1vZGVsKHZpZXdKU09OTW9kZWwgYXMgSlNPTk1vZGVsICYgeyBfZ2V0T2JqZWN0OiBGdW5jdGlvbiB9KTtcblx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwodmlld0pTT05Nb2RlbCwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwob1ZpZXdEYXRhTW9kZWwsIFwidmlld0RhdGFcIik7XG5cdFx0XHRcdFx0XHRvQ29tcG9uZW50LnNldEFnZ3JlZ2F0aW9uKFwicm9vdENvbnRyb2xcIiwgdGhpcy5vVmlldyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGFzeW5jIChyZWFzb246IEVycm9yKSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5fY3JlYXRlRXJyb3JQYWdlKFxuXHRcdFx0XHRcdFx0XHRyZWFzb24sXG5cdFx0XHRcdFx0XHRcdG9WaWV3U2V0dGluZ3MsXG5cdFx0XHRcdFx0XHRcdG1TZXJ2aWNlU2V0dGluZ3MuZXJyb3JWaWV3TmFtZSB8fCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLnZpZXcuVGVtcGxhdGluZ0Vycm9yUGFnZVwiLFxuXHRcdFx0XHRcdFx0XHRvQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRzQ2FjaGVLZXlcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiBMb2cuZXJyb3IoZS5tZXNzYWdlLCBlKSk7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdmlldyA6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfZW5oYW5jZU5hdmlnYXRpb25Db25maWcoXG5cdFx0bU5hdmlnYXRpb246IFJlY29yZDxzdHJpbmcsIE5hdmlnYXRpb25Db25maWd1cmF0aW9uPixcblx0XHRtT3V0Ym91bmRzOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+XG5cdCk6IHZvaWQge1xuXHRcdE9iamVjdC5rZXlzKG1OYXZpZ2F0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChuYXZpZ2F0aW9uT2JqZWN0S2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25PYmplY3QgPSBtTmF2aWdhdGlvbltuYXZpZ2F0aW9uT2JqZWN0S2V5XTtcblx0XHRcdGxldCBvdXRib3VuZENvbmZpZztcblx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbCAmJiBuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kXSkge1xuXHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdO1xuXHRcdFx0XHRuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZERldGFpbCA9IHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogb3V0Ym91bmRDb25maWcucGFyYW1ldGVyc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5hdmlnYXRpb25PYmplY3QuY3JlYXRlICYmIG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kICYmIG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdKSB7XG5cdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF07XG5cdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvdXRib3VuZENvbmZpZy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRGdWxsUGF0aFRvRW50aXR5U2V0KGFTcGxpdFBhdGg6IHN0cmluZ1tdLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGFTcGxpdFBhdGgucmVkdWNlKGZ1bmN0aW9uIChzUGF0aFNvRmFyOiBzdHJpbmcsIHNOZXh0UGF0aFBhcnQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRpZiAoc05leHRQYXRoUGFydCA9PT0gXCJcIikge1xuXHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdH1cblx0XHRcdGlmIChzUGF0aFNvRmFyID09PSBcIlwiKSB7XG5cdFx0XHRcdHNQYXRoU29GYXIgPSBgLyR7c05leHRQYXRoUGFydH1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRoU29GYXJ9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7c05leHRQYXRoUGFydH1gKTtcblx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgT2JqZWN0LmtleXMob1RhcmdldCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgKz0gXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzUGF0aFNvRmFyICs9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHR9LCBcIlwiKTtcblx0fVxuXG5cdGdldFZpZXcoKTogVmlldyB7XG5cdFx0cmV0dXJuIHRoaXMub1ZpZXc7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogVGVtcGxhdGVkVmlld1NlcnZpY2Uge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdGlmICh0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSkge1xuXHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSkge1xuXHRcdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UoKTtcblx0fVxufVxuY2xhc3MgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlZFZpZXdTZXJ2aWNlPiA9IHt9O1xuXG5cdHN0YXRpYyBpQ3JlYXRpbmdWaWV3czogMDtcblxuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+KTogUHJvbWlzZTxUZW1wbGF0ZWRWaWV3U2VydmljZT4ge1xuXHRcdFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cysrO1xuXHRcdGNvbnN0IG9UZW1wbGF0ZWRWaWV3U2VydmljZSA9IG5ldyBUZW1wbGF0ZWRWaWV3U2VydmljZShPYmplY3QuYXNzaWduKHsgZmFjdG9yeTogdGhpcyB9LCBvU2VydmljZUNvbnRleHQpKTtcblx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzLS07XG5cdFx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3ZlR2xvYmFsSW5zdGFuY2UoKTogdm9pZCB7XG5cdFx0dGhpcy5fb0luc3RhbmNlUmVnaXN0cnkgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY29tcG9uZW50IGRhdGEgc3BlY2lmaWVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSAnU2hhcmUnIGJ1dHRvbiBhbmQgcmV0dXJucyB0cnVlIG9yIGZhbHNlIGJhc2VkIG9uIHRoZSB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFNwZWNpZmllcyB0aGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGFzIHRydWUgb3IgZmFsc2UgYmFzZWQgd2hldGhlciB0aGUgJ1NoYXJlJyBidXR0b24gc2hvdWxkIGJlIHZpc2libGUgb3Igbm90XG5cdCAqL1xuXHRzdGF0aWMgZ2V0U2hhcmVCdXR0b25WaXNpYmlsaXR5Rm9yTXlJbmJveChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbXBvbmVudERhdGE6IENvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGlmIChjb21wb25lbnREYXRhICE9PSB1bmRlZmluZWQgJiYgY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50KSB7XG5cdFx0XHRyZXR1cm4gY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldFNoYXJlQ29udHJvbFZpc2liaWxpdHkoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHN0YXRpYyBnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBhIHNwZWNpZmljIHBhZ2UgaWRlbnRpZmllZCBieSBpdHMgSUQuXG5cdCAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgbWFuaWZlc3QgY29udGVudCBvYmplY3QgY29udGFpbmluZyBjb25maWd1cmF0aW9uIGRldGFpbHMuXG5cdCAqIEBwYXJhbSB2aWV3RGF0YSBUaGUgdmlldyBkYXRhIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZpZXcuXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcGxpY2F0aW9uIGNvbXBvbmVudCBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHBhZ2VJZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHBhZ2UgZm9yIHdoaWNoIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhcmUgdG8gYmUgYXBwbGllZC5cblx0ICogQHJldHVybnMgVGhlIHVwZGF0ZWQgdmlldyBkYXRhIG9iamVjdCByZWZsZWN0aW5nIHRoZSBhcHBsaWVkIGNoYW5nZXMuXG5cdCAqL1xuXHRzdGF0aWMgc2V0UGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKFxuXHRcdG1hbmlmZXN0OiBNYW5pZmVzdENvbnRlbnQsXG5cdFx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHBhZ2VJZDogc3RyaW5nXG5cdCk6IFZpZXdEYXRhIHtcblx0XHRjb25zdCB0YXJnZXRzID0gbWFuaWZlc3Q/LltcInNhcC51aTVcIl0/LnJvdXRpbmc/LnRhcmdldHMgPz8ge307XG5cdFx0bGV0IHJlYWxUYXJnZXQgPSBcIlwiO1xuXHRcdGZvciAoY29uc3QgdGFyZ2V0VG9GaW5kIGluIHRhcmdldHMpIHtcblx0XHRcdGlmICh0YXJnZXRzW3RhcmdldFRvRmluZF0uaWQgPT09IHBhZ2VJZCkge1xuXHRcdFx0XHRyZWFsVGFyZ2V0ID0gdGFyZ2V0VG9GaW5kO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHJlYWxUYXJnZXQgPT09IFwiXCIpIHtcblx0XHRcdHJlYWxUYXJnZXQgPSBwYWdlSWQ7XG5cdFx0fVxuXHRcdGNvbnN0IGFjdHVhbFNldHRpbmdzID0gbWFuaWZlc3Q/LltcInNhcC51aTVcIl0/LnJvdXRpbmc/LnRhcmdldHM/LltyZWFsVGFyZ2V0XT8ub3B0aW9ucz8uc2V0dGluZ3MgfHwge307XG5cdFx0cmV0dXJuIGFwcGx5UGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKGFjdHVhbFNldHRpbmdzLCB2aWV3RGF0YSwgYXBwQ29tcG9uZW50LCBwYWdlSWQpO1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O01BOEZNQSxvQkFBb0IsMEJBQUFDLFFBQUE7SUFBQUMsY0FBQSxDQUFBRixvQkFBQSxFQUFBQyxRQUFBO0lBQUEsU0FBQUQscUJBQUE7TUFBQSxPQUFBQyxRQUFBLENBQUFFLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUEsSUFBQUMsTUFBQSxHQUFBTCxvQkFBQSxDQUFBTSxTQUFBO0lBQUFELE1BQUEsQ0FxQnpCRSxJQUFJLEdBQUosU0FBQUEsS0FBQSxFQUFhO01BQ1osTUFBTUMsb0JBQW9CLEdBQUcsRUFBRTtNQUMvQixNQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDQyxVQUFVLENBQUMsQ0FBQztNQUNsQyxNQUFNQyxVQUFVLEdBQUdGLFFBQVEsQ0FBQ0csV0FBVztNQUN2QyxNQUFNQyxhQUFhLEdBQUdDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDSixVQUFVLENBQUM7TUFDN0QsTUFBTUssVUFBVSxHQUFHSCxhQUFhLENBQUNJLFlBQVksQ0FBQyxDQUFDO01BQy9DLElBQUksQ0FBQ0MsTUFBTSxHQUFHTCxhQUFhLENBQUNNLFVBQVUsQ0FBQ1IsVUFBVSxDQUFDUyxLQUFLLENBQUMsQ0FBQyxDQUFXO01BQ3BFLE1BQU1DLFNBQVMsR0FBRyxHQUFHUixhQUFhLENBQUNTLFdBQVcsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxJQUFJLENBQUNMLE1BQU0sRUFBRTtNQUNyRixNQUFNTSxZQUFZLEdBQUdiLFVBQVUsQ0FBQ2MsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFO01BQ3RELElBQUlDLGFBQWE7TUFDakIsSUFBSSxDQUFDQyxRQUFRLEdBQUdsQixRQUFRLENBQUNtQixPQUFPO01BQ2hDLElBQUlKLFlBQVksRUFB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
|
|
@@ -31,6 +31,7 @@ import { applyPageConfigurationChanges } from "sap/fe/core/manifestMerger/Change
|
|
|
31
31
|
import type { CacheHandlerService } from "sap/fe/core/services/CacheHandlerServiceFactory";
|
|
32
32
|
import Device from "sap/ui/Device";
|
|
33
33
|
import VersionInfo from "sap/ui/VersionInfo";
|
|
34
|
+
import Core from "sap/ui/core/Core";
|
|
34
35
|
import type { ManifestContent, ManifestOutboundEntry, ShareOptions } from "sap/ui/core/Manifest";
|
|
35
36
|
import View from "sap/ui/core/mvc/View";
|
|
36
37
|
import Service from "sap/ui/core/service/Service";
|
|
@@ -174,7 +175,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
|
|
|
174
175
|
.then(function (oInfo) {
|
|
175
176
|
let sTimestamp = "";
|
|
176
177
|
if (!oInfo.libraries) {
|
|
177
|
-
sTimestamp = (
|
|
178
|
+
sTimestamp = (Core as { buildinfo?: { buildtime?: string } })?.buildinfo?.buildtime ?? "<NOVALUE>";
|
|
178
179
|
} else {
|
|
179
180
|
oInfo.libraries.forEach(function (oLibrary) {
|
|
180
181
|
sTimestamp += oLibrary.buildTimestamp;
|
|
@@ -297,6 +298,7 @@ class TemplatedViewService extends Service<TemplatedViewServiceSettings> {
|
|
|
297
298
|
this.oView = oView;
|
|
298
299
|
this.oView.setModel(new JSONModel(this.oView), "$view");
|
|
299
300
|
oComponent.setAggregation("rootControl", this.oView);
|
|
301
|
+
oComponent.getAppComponent().getRootControl().getController().getPlaceholder().hideRootPlaceholder();
|
|
300
302
|
return sCacheKey;
|
|
301
303
|
});
|
|
302
304
|
}) as Promise<string>;
|
|
@@ -8,6 +8,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var isVisible = UIFormatters.isVisible;
|
|
10
10
|
var getConverterContext = UIFormatters.getConverterContext;
|
|
11
|
+
var getRelativePaths = DataModelPathHelper.getRelativePaths;
|
|
11
12
|
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
12
13
|
var isProperty = TypeGuards.isProperty;
|
|
13
14
|
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
@@ -114,15 +115,17 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
114
115
|
* Returns the binding expression to evaluate the visibility of a DataField or DataPoint annotation.
|
|
115
116
|
*
|
|
116
117
|
* SAP Fiori elements will evaluate either the UI.Hidden annotation defined on the annotation itself or on the target property.
|
|
117
|
-
* @param
|
|
118
|
+
* @param dataFieldModelPath The metapath referring to the annotation we are evaluating.
|
|
118
119
|
* @param [formatOptions] FormatOptions optional.
|
|
119
120
|
* @param formatOptions.isAnalytics This flag is set when using an analytical table.
|
|
120
121
|
* @returns An expression that you can bind to the UI.
|
|
121
122
|
*/
|
|
122
123
|
_exports.getLabelForConnectedFields = getLabelForConnectedFields;
|
|
123
|
-
const generateVisibleExpression = function (
|
|
124
|
+
const generateVisibleExpression = function (dataFieldModelPath, formatOptions) {
|
|
124
125
|
var _targetObject$Target, _targetObject$Target$;
|
|
125
126
|
let propertyValue;
|
|
127
|
+
let targetModelPath;
|
|
128
|
+
const targetObject = dataFieldModelPath.targetObject;
|
|
126
129
|
if (targetObject && !isProperty(targetObject)) {
|
|
127
130
|
switch (targetObject.$Type) {
|
|
128
131
|
case "com.sap.vocabularies.UI.v1.DataField":
|
|
@@ -132,12 +135,15 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
132
135
|
case "com.sap.vocabularies.UI.v1.DataFieldWithAction":
|
|
133
136
|
case "com.sap.vocabularies.UI.v1.DataPointType":
|
|
134
137
|
propertyValue = targetObject.Value.$target;
|
|
138
|
+
targetModelPath = enhanceDataModelPath(dataFieldModelPath, targetObject.Value.path);
|
|
135
139
|
break;
|
|
136
140
|
case "com.sap.vocabularies.UI.v1.DataFieldForAnnotation":
|
|
137
141
|
// if it is a DataFieldForAnnotation pointing to a DataPoint we look at the dataPoint's value
|
|
138
142
|
if ((targetObject === null || targetObject === void 0 ? void 0 : (_targetObject$Target = targetObject.Target) === null || _targetObject$Target === void 0 ? void 0 : (_targetObject$Target$ = _targetObject$Target.$target) === null || _targetObject$Target$ === void 0 ? void 0 : _targetObject$Target$.$Type) === "com.sap.vocabularies.UI.v1.DataPointType") {
|
|
139
|
-
var _targetObject$Target$2;
|
|
143
|
+
var _targetObject$Target$2, _targetObject$Target$3;
|
|
140
144
|
propertyValue = (_targetObject$Target$2 = targetObject.Target.$target) === null || _targetObject$Target$2 === void 0 ? void 0 : _targetObject$Target$2.Value.$target;
|
|
145
|
+
targetModelPath = enhanceDataModelPath(dataFieldModelPath, targetObject.Target.value);
|
|
146
|
+
targetModelPath = enhanceDataModelPath(targetModelPath, (_targetObject$Target$3 = targetObject.Target.$target) === null || _targetObject$Target$3 === void 0 ? void 0 : _targetObject$Target$3.Value.path);
|
|
141
147
|
break;
|
|
142
148
|
}
|
|
143
149
|
// eslint-disable-next-line no-fallthrough
|
|
@@ -146,17 +152,18 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
146
152
|
default:
|
|
147
153
|
propertyValue = undefined;
|
|
148
154
|
}
|
|
155
|
+
} else if (targetObject && isProperty(targetObject)) {
|
|
156
|
+
targetModelPath = enhanceDataModelPath(dataFieldModelPath, targetObject);
|
|
149
157
|
}
|
|
150
158
|
const isAnalyticalGroupHeaderExpanded = formatOptions !== null && formatOptions !== void 0 && formatOptions.isAnalytics ? UI.IsExpanded : constant(false);
|
|
151
159
|
const isAnalyticalLeaf = formatOptions !== null && formatOptions !== void 0 && formatOptions.isAnalytics ? equal(UI.NodeLevel, 0) : constant(false);
|
|
152
|
-
|
|
153
160
|
// A data field is visible if:
|
|
154
161
|
// - the UI.Hidden expression in the original annotation does not evaluate to 'true'
|
|
155
162
|
// - the UI.Hidden expression in the target property does not evaluate to 'true'
|
|
156
163
|
// - in case of Analytics it's not visible for an expanded GroupHeader
|
|
157
|
-
return and(...[isVisible(targetObject), ifElse(!!propertyValue, propertyValue && isVisible(propertyValue), true), or(not(isAnalyticalGroupHeaderExpanded), isAnalyticalLeaf)]);
|
|
164
|
+
return and(...[isVisible(dataFieldModelPath.targetObject, getRelativePaths(targetModelPath)), ifElse(!!propertyValue, propertyValue && isVisible(propertyValue, getRelativePaths(targetModelPath)), true), or(not(isAnalyticalGroupHeaderExpanded), isAnalyticalLeaf)]);
|
|
158
165
|
};
|
|
159
166
|
_exports.generateVisibleExpression = generateVisibleExpression;
|
|
160
167
|
return _exports;
|
|
161
168
|
}, false);
|
|
162
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREYXRhRmllbGQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJzUGF0aCIsImNvbnRleHQiLCJnZXRQYXRoIiwiRXJyb3IiLCJoYXNPd25Qcm9wZXJ0eSIsIiRraW5kIiwib0NvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0IiwiaXNBbm5vdGF0aW9uUGF0aCIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsIl9leHBvcnRzIiwiZ2V0RGF0YUZpZWxkT2JqZWN0UGF0aCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsInZhbHVlIiwiZW5kc1dpdGgiLCJpc1NlbWFudGljYWxseUNvbm5lY3RlZEZpZWxkcyIsIm9EYXRhRmllbGQiLCIkVHlwZSIsImlzTXVsdGlMaW5lVGV4dCIsIl9vRGF0YUZpZWxkJGFubm90YXRpbyIsIl9vRGF0YUZpZWxkJGFubm90YXRpbzIiLCJfb0RhdGFGaWVsZCRhbm5vdGF0aW8zIiwiYW5ub3RhdGlvbnMiLCJVSSIsIk11bHRpTGluZVRleHQiLCJ2YWx1ZU9mIiwiY29ubmVjdGVkRmllbGRzVGVtcGxhdGVSZWdleCIsImNvbm5lY3RlZEZpZWxkc1RlbXBsYXRlU3ViUmVnZXgiLCJnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyIsImNvbm5lY3RlZEZpZWxkc1BhdGgiLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJjb21waWxlQmluZGluZ0V4cHJlc3Npb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZU1hdGNoZXMiLCJUZW1wbGF0ZSIsInRvU3RyaW5nIiwibWF0Y2giLCJwYXJ0c1RvQ29uY2F0IiwicmVkdWNlIiwic3ViUGFydHNUb0NvbmNhdCIsInN1Yk1hdGNoIiwidGFyZ2V0VmFsdWUiLCJ0YXJnZXREYXRhIiwiRGF0YSIsImRhdGFGaWVsZFBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJyZXBsYWNlIiwidGFyZ2V0RW50aXR5VHlwZSIsIlZhbHVlIiwicHVzaCIsImNvbnN0YW50IiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb25jYXQiLCJnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsIl90YXJnZXRPYmplY3QkVGFyZ2V0IiwiX3RhcmdldE9iamVjdCRUYXJnZXQkIiwicHJvcGVydHlWYWx1ZSIsImlzUHJvcGVydHkiLCJUYXJnZXQiLCJfdGFyZ2V0T2JqZWN0JFRhcmdldCQyIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJlcXVhbCIsIk5vZGVMZXZlbCIsImFuZCIsImlzVmlzaWJsZSIsImlmRWxzZSIsIm9yIiwibm90Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhRmllbGRGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludFR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19VSSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbmNhdCwgY29uc3RhbnQsIGVxdWFsLCBpZkVsc2UsIG5vdCwgb3IgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25QYXRoLCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UsIE1ldGFNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldENvbnZlcnRlckNvbnRleHQsIGlzVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCxcblx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG4pOiBEYXRhRmllbGRUeXBlcyB8IENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcyB8IFByb3BlcnR5IHtcblx0Y29uc3Qgc1BhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnJlc29sdmVkIGNvbnRleHQgcGF0aCAke3NQYXRofWApO1xuXHR9XG5cdGlmICh0eXBlb2Ygb0NvbnRleHQgPT09IFwib2JqZWN0XCIgJiYgb0NvbnRleHQuaGFzT3duUHJvcGVydHkoXCIka2luZFwiKSAmJiBvQ29udGV4dC4ka2luZCAhPT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb250ZXh0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBEYXRhRmllbGQgb2JqZWN0IGJ1dCB0byBhICR7b0NvbnRleHQuJGtpbmR9YCk7XG5cdH1cblx0bGV0IG9Db252ZXJ0ZXJDb250ZXh0ID0gZ2V0Q29udmVydGVyQ29udGV4dChvQ29udGV4dCwgb0ludGVyZmFjZSkgYXNcblx0XHR8IERhdGFGaWVsZFR5cGVzXG5cdFx0fCBQcm9wZXJ0eVxuXHRcdHwgQ29ubmVjdGVkRmllbGRzVHlwZVR5cGVzXG5cdFx0fCBBbm5vdGF0aW9uUGF0aDxEYXRhRmllbGRUeXBlcyB8IENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcz5cblx0XHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxEYXRhRmllbGRUeXBlcyB8IENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcz47XG5cdGlmIChpc0Fubm90YXRpb25QYXRoKG9Db252ZXJ0ZXJDb250ZXh0KSB8fCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvQ29udmVydGVyQ29udGV4dCkpIHtcblx0XHRvQ29udmVydGVyQ29udGV4dCA9IG9Db252ZXJ0ZXJDb250ZXh0LiR0YXJnZXQhO1xuXHR9XG5cdHJldHVybiBvQ29udmVydGVyQ29udGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhRmllbGRPYmplY3RQYXRoID0gZnVuY3Rpb24gKFxuXHRvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCB8IHN0cmluZyxcblx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZFR5cGVzPiB7XG5cdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0aWYgKCFvQ29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgVW5yZXNvbHZlZCBjb250ZXh0IHBhdGggJHtzUGF0aH1gKTtcblx0fVxuXHRpZiAodHlwZW9mIG9Db250ZXh0ID09PSBcIm9iamVjdFwiICYmIG9Db250ZXh0Lmhhc093blByb3BlcnR5KFwiJGtpbmRcIikgJiYgb0NvbnRleHQuJGtpbmQgIT09IFwiUHJvcGVydHlcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29udGV4dCBkb2VzIG5vdCByZXNvbHZlIHRvIGEgUHJvcGVydHkgb2JqZWN0IGJ1dCB0byBhICR7b0NvbnRleHQuJGtpbmR9YCk7XG5cdH1cblx0bGV0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4ob0ludGVyZmFjZS5jb250ZXh0KTtcblx0aWYgKGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCkpIHtcblx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxEYXRhRmllbGRUeXBlcz4oXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMsXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0LnBhdGhcblx0XHQpO1xuXHR9XG5cdGlmIChpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0ICYmIGlzQW5ub3RhdGlvblBhdGg8RGF0YUZpZWxkVHlwZXM+KGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QpKSB7XG5cdFx0Ly8gUkVWSUVXIC0+IFRoZSBjb2RlIGJlbG93IHdhcyBuZXZlciBjb3JyZWN0LCBpJ20gY2hhbmdpbmcgaXQgdG8gc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgdHlwZSB3aXNlXG5cdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8RGF0YUZpZWxkVHlwZXM+KFxuXHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLFxuXHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdC52YWx1ZVxuXHRcdCk7XG5cdH1cblx0aWYgKHNQYXRoLmVuZHNXaXRoKFwiJFBhdGhcIikgfHwgc1BhdGguZW5kc1dpdGgoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxEYXRhRmllbGRUeXBlcz4oaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLCBvQ29udGV4dCBhcyBzdHJpbmcpO1xuXHR9XG5cdHJldHVybiBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHM7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZW1hbnRpY2FsbHlDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IGJvb2xlYW4ge1xuXHRjb25zdCBvRGF0YUZpZWxkID0gZ2V0RGF0YUZpZWxkKG9Db250ZXh0LCBvSW50ZXJmYWNlKTtcblx0cmV0dXJuIChvRGF0YUZpZWxkIGFzIENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcykuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbm5lY3RlZEZpZWxkc1R5cGU7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGluc3RhbmNlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBoYXMgTXVsdGlMaW5lVGV4dCBhbm5vdGF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBpc011bHRpTGluZVRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IGJvb2xlYW4ge1xuXHRjb25zdCBvRGF0YUZpZWxkID0gZ2V0RGF0YUZpZWxkKG9Db250ZXh0LCBvSW50ZXJmYWNlKTtcblx0cmV0dXJuIChvRGF0YUZpZWxkLmFubm90YXRpb25zPy5VSSBhcyBQcm9wZXJ0eUFubm90YXRpb25zX1VJKT8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xufTtcblxuY29uc3QgY29ubmVjdGVkRmllbGRzVGVtcGxhdGVSZWdleCA9IC8oPzooe1tefV0rfSlbXntdKikvZztcbmNvbnN0IGNvbm5lY3RlZEZpZWxkc1RlbXBsYXRlU3ViUmVnZXggPSAveyhbXn1dKyl9KC4qKS87XG5leHBvcnQgY29uc3QgZ2V0TGFiZWxGb3JDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbm5lY3RlZEZpZWxkc1BhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPixcblx0Z2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uOiBGdW5jdGlvbixcblx0Y29tcGlsZUJpbmRpbmdFeHByZXNzaW9uID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGNvbm5lY3RlZEZpZWxkczogQ29ubmVjdGVkRmllbGRzVHlwZVR5cGVzID0gY29ubmVjdGVkRmllbGRzUGF0aC50YXJnZXRPYmplY3QhO1xuXHQvLyBGaXJzdCB3ZSBzZXBhcmF0ZSBlYWNoIGdyb3VwIG9mIGB7VGVtcGxhdGVQYXJ0fSB4eHhgXG5cdGNvbnN0IHRlbXBsYXRlTWF0Y2hlcyA9IGNvbm5lY3RlZEZpZWxkcy5UZW1wbGF0ZS50b1N0cmluZygpLm1hdGNoKGNvbm5lY3RlZEZpZWxkc1RlbXBsYXRlUmVnZXgpO1xuXHRpZiAoIXRlbXBsYXRlTWF0Y2hlcykge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IHBhcnRzVG9Db25jYXQgPSB0ZW1wbGF0ZU1hdGNoZXMucmVkdWNlKChzdWJQYXJ0c1RvQ29uY2F0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdLCBtYXRjaCkgPT4ge1xuXHRcdC8vIFRoZW4gZm9yIGVhY2ggc3ViLWdyb3VwLCB3ZSByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgZGF0YSBvYmplY3QgYW5kIHRoZSByZW1haW5pbmcgdGV4dCwgaWYgaXQgZXhpc3RzXG5cdFx0Y29uc3Qgc3ViTWF0Y2ggPSBtYXRjaC5tYXRjaChjb25uZWN0ZWRGaWVsZHNUZW1wbGF0ZVN1YlJlZ2V4KTtcblx0XHRpZiAoc3ViTWF0Y2ggJiYgc3ViTWF0Y2gubGVuZ3RoID4gMSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBzdWJNYXRjaFsxXTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRjb25zdCB0YXJnZXREYXRhID0gKGNvbm5lY3RlZEZpZWxkcy5EYXRhIGFzIGFueSlbdGFyZ2V0VmFsdWVdO1xuXHRcdFx0aWYgKHRhcmdldERhdGEpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFGaWVsZFR5cGVzPihcblx0XHRcdFx0XHRjb25uZWN0ZWRGaWVsZHNQYXRoLFxuXHRcdFx0XHRcdC8vIFRPRE8gQmV0dGVyIHR5cGUgZm9yIHRoZSBFZG0uRGljdGlvbmFyeVxuXHRcdFx0XHRcdHRhcmdldERhdGEuZnVsbHlRdWFsaWZpZWROYW1lLnJlcGxhY2UoY29ubmVjdGVkRmllbGRzUGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgXCJcIilcblx0XHRcdFx0KTtcblx0XHRcdFx0ZGF0YUZpZWxkUGF0aC50YXJnZXRPYmplY3QgPSBkYXRhRmllbGRQYXRoLnRhcmdldE9iamVjdCEuVmFsdWU7XG5cdFx0XHRcdHN1YlBhcnRzVG9Db25jYXQucHVzaChnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24oZGF0YUZpZWxkUGF0aCwge30pKTtcblx0XHRcdFx0aWYgKHN1Yk1hdGNoLmxlbmd0aCA+IDIpIHtcblx0XHRcdFx0XHRzdWJQYXJ0c1RvQ29uY2F0LnB1c2goY29uc3RhbnQoc3ViTWF0Y2hbMl0pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc3ViUGFydHNUb0NvbmNhdDtcblx0fSwgW10pO1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmdFeHByZXNzaW9uID8gY29tcGlsZUV4cHJlc3Npb24oY29uY2F0KC4uLnBhcnRzVG9Db25jYXQpKSA6IGNvbmNhdCguLi5wYXJ0c1RvQ29uY2F0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB0YXJnZXRPYmplY3QgVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB3ZSBhcmUgZXZhbHVhdGluZy5cbiAqIEBwYXJhbSBbZm9ybWF0T3B0aW9uc10gRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB1c2luZyBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHR0YXJnZXRPYmplY3Q6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCBQcm9wZXJ0eSB8IHVuZGVmaW5lZCxcblx0Zm9ybWF0T3B0aW9ucz86IHsgaXNBbmFseXRpY3M/OiBib29sZWFuIH1cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0ICYmICFpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkpIHtcblx0XHRzd2l0Y2ggKHRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBVSS5Jc0V4cGFuZGVkIDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDogY29uc3RhbnQoZmFsc2UpO1xuXG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gYW5kKFxuXHRcdC4uLltcblx0XHRcdGlzVmlzaWJsZSh0YXJnZXRPYmplY3QpLFxuXHRcdFx0aWZFbHNlKCEhcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlWYWx1ZSAmJiBpc1Zpc2libGUocHJvcGVydHlWYWx1ZSksIHRydWUpLFxuXHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdF1cblx0KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CTyxNQUFNQSxZQUFZLEdBQUcsU0FBQUEsQ0FDM0JDLFFBQTBCLEVBQzFCQyxVQUF1QyxFQUNnQjtJQUN2RCxNQUFNQyxLQUFLLEdBQUdELFVBQVUsQ0FBQ0UsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUNKLFFBQVEsRUFBRTtNQUNkLE1BQU0sSUFBSUssS0FBSyxDQUFDLDJCQUEyQkgsS0FBSyxFQUFFLENBQUM7SUFDcEQ7SUFDQSxJQUFJLE9BQU9GLFFBQVEsS0FBSyxRQUFRLElBQUlBLFFBQVEsQ0FBQ00sY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJTixRQUFRLENBQUNP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
|
|
169
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREYXRhRmllbGQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJzUGF0aCIsImNvbnRleHQiLCJnZXRQYXRoIiwiRXJyb3IiLCJoYXNPd25Qcm9wZXJ0eSIsIiRraW5kIiwib0NvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0IiwiaXNBbm5vdGF0aW9uUGF0aCIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsIl9leHBvcnRzIiwiZ2V0RGF0YUZpZWxkT2JqZWN0UGF0aCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsInZhbHVlIiwiZW5kc1dpdGgiLCJpc1NlbWFudGljYWxseUNvbm5lY3RlZEZpZWxkcyIsIm9EYXRhRmllbGQiLCIkVHlwZSIsImlzTXVsdGlMaW5lVGV4dCIsIl9vRGF0YUZpZWxkJGFubm90YXRpbyIsIl9vRGF0YUZpZWxkJGFubm90YXRpbzIiLCJfb0RhdGFGaWVsZCRhbm5vdGF0aW8zIiwiYW5ub3RhdGlvbnMiLCJVSSIsIk11bHRpTGluZVRleHQiLCJ2YWx1ZU9mIiwiY29ubmVjdGVkRmllbGRzVGVtcGxhdGVSZWdleCIsImNvbm5lY3RlZEZpZWxkc1RlbXBsYXRlU3ViUmVnZXgiLCJnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyIsImNvbm5lY3RlZEZpZWxkc1BhdGgiLCJnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24iLCJjb21waWxlQmluZGluZ0V4cHJlc3Npb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZU1hdGNoZXMiLCJUZW1wbGF0ZSIsInRvU3RyaW5nIiwibWF0Y2giLCJwYXJ0c1RvQ29uY2F0IiwicmVkdWNlIiwic3ViUGFydHNUb0NvbmNhdCIsInN1Yk1hdGNoIiwidGFyZ2V0VmFsdWUiLCJ0YXJnZXREYXRhIiwiRGF0YSIsImRhdGFGaWVsZFBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJyZXBsYWNlIiwidGFyZ2V0RW50aXR5VHlwZSIsIlZhbHVlIiwicHVzaCIsImNvbnN0YW50IiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb25jYXQiLCJnZW5lcmF0ZVZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkTW9kZWxQYXRoIiwiZm9ybWF0T3B0aW9ucyIsIl90YXJnZXRPYmplY3QkVGFyZ2V0IiwiX3RhcmdldE9iamVjdCRUYXJnZXQkIiwicHJvcGVydHlWYWx1ZSIsInRhcmdldE1vZGVsUGF0aCIsImlzUHJvcGVydHkiLCJUYXJnZXQiLCJfdGFyZ2V0T2JqZWN0JFRhcmdldCQyIiwiX3RhcmdldE9iamVjdCRUYXJnZXQkMyIsImlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQiLCJpc0FuYWx5dGljcyIsIklzRXhwYW5kZWQiLCJpc0FuYWx5dGljYWxMZWFmIiwiZXF1YWwiLCJOb2RlTGV2ZWwiLCJhbmQiLCJpc1Zpc2libGUiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiaWZFbHNlIiwib3IiLCJub3QiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFGaWVsZEZvcm1hdHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZVR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1VJIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSV9FZG1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgY29uY2F0LCBjb25zdGFudCwgZXF1YWwsIGlmRWxzZSwgbm90LCBvciB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvblBhdGgsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSwgTWV0YU1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0Q29udmVydGVyQ29udGV4dCwgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhRmllbGQgPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFGaWVsZFR5cGVzIHwgQ29ubmVjdGVkRmllbGRzVHlwZVR5cGVzIHwgUHJvcGVydHkge1xuXHRjb25zdCBzUGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdGlmICghb0NvbnRleHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFVucmVzb2x2ZWQgY29udGV4dCBwYXRoICR7c1BhdGh9YCk7XG5cdH1cblx0aWYgKHR5cGVvZiBvQ29udGV4dCA9PT0gXCJvYmplY3RcIiAmJiBvQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShcIiRraW5kXCIpICYmIG9Db250ZXh0LiRraW5kICE9PSBcIlByb3BlcnR5XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYENvbnRleHQgZG9lcyBub3QgcmVzb2x2ZSB0byBhIERhdGFGaWVsZCBvYmplY3QgYnV0IHRvIGEgJHtvQ29udGV4dC4ka2luZH1gKTtcblx0fVxuXHRsZXQgb0NvbnZlcnRlckNvbnRleHQgPSBnZXRDb252ZXJ0ZXJDb250ZXh0KG9Db250ZXh0LCBvSW50ZXJmYWNlKSBhc1xuXHRcdHwgRGF0YUZpZWxkVHlwZXNcblx0XHR8IFByb3BlcnR5XG5cdFx0fCBDb25uZWN0ZWRGaWVsZHNUeXBlVHlwZXNcblx0XHR8IEFubm90YXRpb25QYXRoPERhdGFGaWVsZFR5cGVzIHwgQ29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPlxuXHRcdHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPERhdGFGaWVsZFR5cGVzIHwgQ29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPjtcblx0aWYgKGlzQW5ub3RhdGlvblBhdGgob0NvbnZlcnRlckNvbnRleHQpIHx8IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Db252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdG9Db252ZXJ0ZXJDb250ZXh0ID0gb0NvbnZlcnRlckNvbnRleHQuJHRhcmdldCE7XG5cdH1cblx0cmV0dXJuIG9Db252ZXJ0ZXJDb250ZXh0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZE9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0IHwgc3RyaW5nLFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkVHlwZXM+IHtcblx0Y29uc3Qgc1BhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnJlc29sdmVkIGNvbnRleHQgcGF0aCAke3NQYXRofWApO1xuXHR9XG5cdGlmICh0eXBlb2Ygb0NvbnRleHQgPT09IFwib2JqZWN0XCIgJiYgb0NvbnRleHQuaGFzT3duUHJvcGVydHkoXCIka2luZFwiKSAmJiBvQ29udGV4dC4ka2luZCAhPT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb250ZXh0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBQcm9wZXJ0eSBvYmplY3QgYnV0IHRvIGEgJHtvQ29udGV4dC4ka2luZH1gKTtcblx0fVxuXHRsZXQgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHRpZiAoaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0KSkge1xuXHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFGaWVsZFR5cGVzPihcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyxcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QucGF0aFxuXHRcdCk7XG5cdH1cblx0aWYgKGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgJiYgaXNBbm5vdGF0aW9uUGF0aDxEYXRhRmllbGRUeXBlcz4oaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCkpIHtcblx0XHQvLyBSRVZJRVcgLT4gVGhlIGNvZGUgYmVsb3cgd2FzIG5ldmVyIGNvcnJlY3QsIGknbSBjaGFuZ2luZyBpdCB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSB0eXBlIHdpc2Vcblx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxEYXRhRmllbGRUeXBlcz4oXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMsXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0LnZhbHVlXG5cdFx0KTtcblx0fVxuXHRpZiAoc1BhdGguZW5kc1dpdGgoXCIkUGF0aFwiKSB8fCBzUGF0aC5lbmRzV2l0aChcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPERhdGFGaWVsZFR5cGVzPihpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMsIG9Db250ZXh0IGFzIHN0cmluZyk7XG5cdH1cblx0cmV0dXJuIGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbWFudGljYWxseUNvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9EYXRhRmllbGQgPSBnZXREYXRhRmllbGQob0NvbnRleHQsIG9JbnRlcmZhY2UpO1xuXHRyZXR1cm4gKG9EYXRhRmllbGQgYXMgQ29ubmVjdGVkRmllbGRzVHlwZVR5cGVzKS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29ubmVjdGVkRmllbGRzVHlwZTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBpbnRlcmZhY2UgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGhhcyBNdWx0aUxpbmVUZXh0IGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlMaW5lVGV4dCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9EYXRhRmllbGQgPSBnZXREYXRhRmllbGQob0NvbnRleHQsIG9JbnRlcmZhY2UpO1xuXHRyZXR1cm4gKG9EYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfVUkpPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWU7XG59O1xuXG5jb25zdCBjb25uZWN0ZWRGaWVsZHNUZW1wbGF0ZVJlZ2V4ID0gLyg/Oih7W159XSt9KVtee10qKS9nO1xuY29uc3QgY29ubmVjdGVkRmllbGRzVGVtcGxhdGVTdWJSZWdleCA9IC97KFtefV0rKX0oLiopLztcbmV4cG9ydCBjb25zdCBnZXRMYWJlbEZvckNvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29ubmVjdGVkRmllbGRzUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlVHlwZXM+LFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb246IEZ1bmN0aW9uLFxuXHRjb21waWxlQmluZGluZ0V4cHJlc3Npb24gPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgY29ubmVjdGVkRmllbGRzOiBDb25uZWN0ZWRGaWVsZHNUeXBlVHlwZXMgPSBjb25uZWN0ZWRGaWVsZHNQYXRoLnRhcmdldE9iamVjdCE7XG5cdC8vIEZpcnN0IHdlIHNlcGFyYXRlIGVhY2ggZ3JvdXAgb2YgYHtUZW1wbGF0ZVBhcnR9IHh4eGBcblx0Y29uc3QgdGVtcGxhdGVNYXRjaGVzID0gY29ubmVjdGVkRmllbGRzLlRlbXBsYXRlLnRvU3RyaW5nKCkubWF0Y2goY29ubmVjdGVkRmllbGRzVGVtcGxhdGVSZWdleCk7XG5cdGlmICghdGVtcGxhdGVNYXRjaGVzKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Y29uc3QgcGFydHNUb0NvbmNhdCA9IHRlbXBsYXRlTWF0Y2hlcy5yZWR1Y2UoKHN1YlBhcnRzVG9Db25jYXQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10sIG1hdGNoKSA9PiB7XG5cdFx0Ly8gVGhlbiBmb3IgZWFjaCBzdWItZ3JvdXAsIHdlIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBkYXRhIG9iamVjdCBhbmQgdGhlIHJlbWFpbmluZyB0ZXh0LCBpZiBpdCBleGlzdHNcblx0XHRjb25zdCBzdWJNYXRjaCA9IG1hdGNoLm1hdGNoKGNvbm5lY3RlZEZpZWxkc1RlbXBsYXRlU3ViUmVnZXgpO1xuXHRcdGlmIChzdWJNYXRjaCAmJiBzdWJNYXRjaC5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IHN1Yk1hdGNoWzFdO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0XHRcdGNvbnN0IHRhcmdldERhdGEgPSAoY29ubmVjdGVkRmllbGRzLkRhdGEgYXMgYW55KVt0YXJnZXRWYWx1ZV07XG5cdFx0XHRpZiAodGFyZ2V0RGF0YSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8RGF0YUZpZWxkVHlwZXM+KFxuXHRcdFx0XHRcdGNvbm5lY3RlZEZpZWxkc1BhdGgsXG5cdFx0XHRcdFx0Ly8gVE9ETyBCZXR0ZXIgdHlwZSBmb3IgdGhlIEVkbS5EaWN0aW9uYXJ5XG5cdFx0XHRcdFx0dGFyZ2V0RGF0YS5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShjb25uZWN0ZWRGaWVsZHNQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRkYXRhRmllbGRQYXRoLnRhcmdldE9iamVjdCA9IGRhdGFGaWVsZFBhdGgudGFyZ2V0T2JqZWN0IS5WYWx1ZTtcblx0XHRcdFx0c3ViUGFydHNUb0NvbmNhdC5wdXNoKGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbihkYXRhRmllbGRQYXRoLCB7fSkpO1xuXHRcdFx0XHRpZiAoc3ViTWF0Y2gubGVuZ3RoID4gMikge1xuXHRcdFx0XHRcdHN1YlBhcnRzVG9Db25jYXQucHVzaChjb25zdGFudChzdWJNYXRjaFsyXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzdWJQYXJ0c1RvQ29uY2F0O1xuXHR9LCBbXSk7XG5cdHJldHVybiBjb21waWxlQmluZGluZ0V4cHJlc3Npb24gPyBjb21waWxlRXhwcmVzc2lvbihjb25jYXQoLi4ucGFydHNUb0NvbmNhdCkpIDogY29uY2F0KC4uLnBhcnRzVG9Db25jYXQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKlxuICogU0FQIEZpb3JpIGVsZW1lbnRzIHdpbGwgZXZhbHVhdGUgZWl0aGVyIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBkZWZpbmVkIG9uIHRoZSBhbm5vdGF0aW9uIGl0c2VsZiBvciBvbiB0aGUgdGFyZ2V0IHByb3BlcnR5LlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHBhcmFtIFtmb3JtYXRPcHRpb25zXSBGb3JtYXRPcHRpb25zIG9wdGlvbmFsLlxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MgVGhpcyBmbGFnIGlzIHNldCB3aGVuIHVzaW5nIGFuIGFuYWx5dGljYWwgdGFibGUuXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiBiaW5kIHRvIHRoZSBVSS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlVmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgUHJvcGVydHk+LFxuXHRmb3JtYXRPcHRpb25zPzogeyBpc0FuYWx5dGljcz86IGJvb2xlYW4gfVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0bGV0IHByb3BlcnR5VmFsdWU7XG5cdGxldCB0YXJnZXRNb2RlbFBhdGg7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmICh0YXJnZXRPYmplY3QgJiYgIWlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSkge1xuXHRcdHN3aXRjaCAodGFyZ2V0T2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlOlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdHRhcmdldE1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE1vZGVsUGF0aCwgdGFyZ2V0T2JqZWN0LlZhbHVlLnBhdGgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdHRhcmdldE1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE1vZGVsUGF0aCwgdGFyZ2V0T2JqZWN0LlRhcmdldC52YWx1ZSk7XG5cdFx0XHRcdFx0dGFyZ2V0TW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgodGFyZ2V0TW9kZWxQYXRoLCB0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQ/LlZhbHVlLnBhdGgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRPYmplY3QgJiYgaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0dGFyZ2V0TW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YUZpZWxkTW9kZWxQYXRoLCB0YXJnZXRPYmplY3QpO1xuXHR9XG5cblx0Y29uc3QgaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gVUkuSXNFeHBhbmRlZCA6IGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gZXF1YWwoVUkuTm9kZUxldmVsLCAwKSA6IGNvbnN0YW50KGZhbHNlKTtcblx0Ly8gQSBkYXRhIGZpZWxkIGlzIHZpc2libGUgaWY6XG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSBvcmlnaW5hbCBhbm5vdGF0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgdGFyZ2V0IHByb3BlcnR5IGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIGluIGNhc2Ugb2YgQW5hbHl0aWNzIGl0J3Mgbm90IHZpc2libGUgZm9yIGFuIGV4cGFuZGVkIEdyb3VwSGVhZGVyXG5cdHJldHVybiBhbmQoXG5cdFx0Li4uW1xuXHRcdFx0aXNWaXNpYmxlKGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3QsIGdldFJlbGF0aXZlUGF0aHModGFyZ2V0TW9kZWxQYXRoKSksXG5cdFx0XHRpZkVsc2UoISFwcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVZhbHVlICYmIGlzVmlzaWJsZShwcm9wZXJ0eVZhbHVlLCBnZXRSZWxhdGl2ZVBhdGhzKHRhcmdldE1vZGVsUGF0aCkpLCB0cnVlKSxcblx0XHRcdG9yKG5vdChpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkKSwgaXNBbmFseXRpY2FsTGVhZilcblx0XHRdXG5cdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUJPLE1BQU1BLFlBQVksR0FBRyxTQUFBQSxDQUMzQkMsUUFBMEIsRUFDMUJDLFVBQXVDLEVBQ2dCO0lBQ3ZELE1BQU1DLEtBQUssR0FBR0QsVUFBVSxDQUFDRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQ0osUUFBUSxFQUFFO01BQ2QsTUFBTSxJQUFJSyxLQUFLLENBQUMsMkJBQTJCSCxLQUFLLEVBQUUsQ0FBQztJQUNwRDtJQUNBLElBQUksT0FBT0YsUUFBUSxLQUFLLFFBQVEsSUFBSUEsUUFBUSxDQUFDTSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUlOLFFBQVEsQ0FBQ08sS0FBSyxLQUFLLFVBQVUsRUFBRTtNQUN0RyxNQUFNLElBQUlGLEtBQUssQ0FBQywyREFBMkRMLFFBQVEsQ0FBQ08sS0FBSyxFQUFFLENBQUM7SUFDN0Y7SUFDQSxJQUFJQyxpQkFBaUIsR0FBR0MsbUJBQW1CLENBQUNULFFBQVEsRUFBRUMsVUFBVSxDQUtNO0lBQ3RFLElBQUlTLGdCQUFnQixDQUFD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
|
|
@@ -13,7 +13,7 @@ import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelCon
|
|
|
13
13
|
import { UI } from "sap/fe/core/helpers/BindingHelper";
|
|
14
14
|
import { isAnnotationPath, isPathAnnotationExpression, isProperty } from "sap/fe/core/helpers/TypeGuards";
|
|
15
15
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
16
|
-
import { enhanceDataModelPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
16
|
+
import { enhanceDataModelPath, getRelativePaths } from "sap/fe/core/templating/DataModelPathHelper";
|
|
17
17
|
import type { ComputedAnnotationInterface, MetaModelContext } from "sap/fe/core/templating/UIFormatters";
|
|
18
18
|
import { getConverterContext, isVisible } from "sap/fe/core/templating/UIFormatters";
|
|
19
19
|
|
|
@@ -129,16 +129,18 @@ export const getLabelForConnectedFields = function (
|
|
|
129
129
|
* Returns the binding expression to evaluate the visibility of a DataField or DataPoint annotation.
|
|
130
130
|
*
|
|
131
131
|
* SAP Fiori elements will evaluate either the UI.Hidden annotation defined on the annotation itself or on the target property.
|
|
132
|
-
* @param
|
|
132
|
+
* @param dataFieldModelPath The metapath referring to the annotation we are evaluating.
|
|
133
133
|
* @param [formatOptions] FormatOptions optional.
|
|
134
134
|
* @param formatOptions.isAnalytics This flag is set when using an analytical table.
|
|
135
135
|
* @returns An expression that you can bind to the UI.
|
|
136
136
|
*/
|
|
137
137
|
export const generateVisibleExpression = function (
|
|
138
|
-
|
|
138
|
+
dataFieldModelPath: DataModelObjectPath<DataFieldAbstractTypes | DataPointTypeTypes | Property>,
|
|
139
139
|
formatOptions?: { isAnalytics?: boolean }
|
|
140
140
|
): BindingToolkitExpression<boolean> {
|
|
141
141
|
let propertyValue;
|
|
142
|
+
let targetModelPath;
|
|
143
|
+
const targetObject = dataFieldModelPath.targetObject;
|
|
142
144
|
if (targetObject && !isProperty(targetObject)) {
|
|
143
145
|
switch (targetObject.$Type) {
|
|
144
146
|
case UIAnnotationTypes.DataField:
|
|
@@ -148,11 +150,14 @@ export const generateVisibleExpression = function (
|
|
|
148
150
|
case UIAnnotationTypes.DataFieldWithAction:
|
|
149
151
|
case UIAnnotationTypes.DataPointType:
|
|
150
152
|
propertyValue = targetObject.Value.$target;
|
|
153
|
+
targetModelPath = enhanceDataModelPath(dataFieldModelPath, targetObject.Value.path);
|
|
151
154
|
break;
|
|
152
155
|
case UIAnnotationTypes.DataFieldForAnnotation:
|
|
153
156
|
// if it is a DataFieldForAnnotation pointing to a DataPoint we look at the dataPoint's value
|
|
154
157
|
if (targetObject?.Target?.$target?.$Type === UIAnnotationTypes.DataPointType) {
|
|
155
158
|
propertyValue = targetObject.Target.$target?.Value.$target;
|
|
159
|
+
targetModelPath = enhanceDataModelPath(dataFieldModelPath, targetObject.Target.value);
|
|
160
|
+
targetModelPath = enhanceDataModelPath(targetModelPath, targetObject.Target.$target?.Value.path);
|
|
156
161
|
break;
|
|
157
162
|
}
|
|
158
163
|
// eslint-disable-next-line no-fallthrough
|
|
@@ -161,18 +166,20 @@ export const generateVisibleExpression = function (
|
|
|
161
166
|
default:
|
|
162
167
|
propertyValue = undefined;
|
|
163
168
|
}
|
|
169
|
+
} else if (targetObject && isProperty(targetObject)) {
|
|
170
|
+
targetModelPath = enhanceDataModelPath(dataFieldModelPath, targetObject);
|
|
164
171
|
}
|
|
172
|
+
|
|
165
173
|
const isAnalyticalGroupHeaderExpanded = formatOptions?.isAnalytics ? UI.IsExpanded : constant(false);
|
|
166
174
|
const isAnalyticalLeaf = formatOptions?.isAnalytics ? equal(UI.NodeLevel, 0) : constant(false);
|
|
167
|
-
|
|
168
175
|
// A data field is visible if:
|
|
169
176
|
// - the UI.Hidden expression in the original annotation does not evaluate to 'true'
|
|
170
177
|
// - the UI.Hidden expression in the target property does not evaluate to 'true'
|
|
171
178
|
// - in case of Analytics it's not visible for an expanded GroupHeader
|
|
172
179
|
return and(
|
|
173
180
|
...[
|
|
174
|
-
isVisible(targetObject),
|
|
175
|
-
ifElse(!!propertyValue, propertyValue && isVisible(propertyValue), true),
|
|
181
|
+
isVisible(dataFieldModelPath.targetObject, getRelativePaths(targetModelPath)),
|
|
182
|
+
ifElse(!!propertyValue, propertyValue && isVisible(propertyValue, getRelativePaths(targetModelPath)), true),
|
|
176
183
|
or(not(isAnalyticalGroupHeaderExpanded), isAnalyticalLeaf)
|
|
177
184
|
]
|
|
178
185
|
);
|