@sapui5/sap.fe.core 1.135.0 → 1.136.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 -2
- package/src/sap/fe/core/ActionRuntime.ts +3 -1
- package/src/sap/fe/core/AppComponent.js +6 -4
- package/src/sap/fe/core/AppComponent.ts +3 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -6
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/CommonUtils.js +4 -1
- package/src/sap/fe/core/CommonUtils.ts +12 -2
- package/src/sap/fe/core/ExtensionAPI.js +5 -3
- package/src/sap/fe/core/ExtensionAPI.ts +4 -2
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +13 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
- package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
- package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
- package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/WebSocket.js +10 -1
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +23 -2
- package/src/sap/fe/core/messagebundle_bg.properties +23 -2
- package/src/sap/fe/core/messagebundle_ca.properties +21 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
- package/src/sap/fe/core/messagebundle_cs.properties +21 -0
- package/src/sap/fe/core/messagebundle_cy.properties +21 -0
- package/src/sap/fe/core/messagebundle_da.properties +23 -2
- package/src/sap/fe/core/messagebundle_de.properties +23 -2
- package/src/sap/fe/core/messagebundle_el.properties +21 -0
- package/src/sap/fe/core/messagebundle_en.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
- package/src/sap/fe/core/messagebundle_es.properties +21 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
- package/src/sap/fe/core/messagebundle_et.properties +21 -0
- package/src/sap/fe/core/messagebundle_fi.properties +21 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -1
- package/src/sap/fe/core/messagebundle_hr.properties +24 -3
- package/src/sap/fe/core/messagebundle_hu.properties +21 -0
- package/src/sap/fe/core/messagebundle_id.properties +21 -0
- package/src/sap/fe/core/messagebundle_it.properties +23 -2
- package/src/sap/fe/core/messagebundle_iw.properties +21 -0
- package/src/sap/fe/core/messagebundle_ja.properties +21 -0
- package/src/sap/fe/core/messagebundle_kk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ko.properties +21 -0
- package/src/sap/fe/core/messagebundle_lt.properties +21 -0
- package/src/sap/fe/core/messagebundle_lv.properties +23 -2
- package/src/sap/fe/core/messagebundle_mk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -1
- package/src/sap/fe/core/messagebundle_nl.properties +21 -0
- package/src/sap/fe/core/messagebundle_no.properties +21 -0
- package/src/sap/fe/core/messagebundle_pl.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
- package/src/sap/fe/core/messagebundle_ro.properties +23 -2
- package/src/sap/fe/core/messagebundle_ru.properties +22 -1
- package/src/sap/fe/core/messagebundle_sh.properties +23 -2
- package/src/sap/fe/core/messagebundle_sk.properties +21 -0
- package/src/sap/fe/core/messagebundle_sl.properties +23 -2
- package/src/sap/fe/core/messagebundle_sr.properties +23 -2
- package/src/sap/fe/core/messagebundle_sv.properties +21 -0
- package/src/sap/fe/core/messagebundle_th.properties +21 -0
- package/src/sap/fe/core/messagebundle_tr.properties +21 -0
- package/src/sap/fe/core/messagebundle_uk.properties +23 -2
- package/src/sap/fe/core/messagebundle_vi.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/routing/ContextPathHelper", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ModelHelper", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../converters/MetaModelConverter", "./editFlow/editFlowConstants", "./messageHandler/messageHandling"], function (Log, ClassSupport, CommonUtils, BusyLocker, draft, ContextPathHelper, NavigationReason, EditState, ModelHelper, Component, Library, ControllerExtension, OverrideExecution, MetaModelConverter, UiModelConstants, messageHandling) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/routing/ContextPathHelper", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ModelHelper", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "../converters/MetaModelConverter", "./collaboration/CollaborationCommon", "./editFlow/editFlowConstants", "./messageHandler/messageHandling"], function (Log, ClassSupport, CommonUtils, BusyLocker, draft, ContextPathHelper, NavigationReason, EditState, ModelHelper, Component, Library, ControllerExtension, OverrideExecution, MetaModelConverter, CollaborationCommon, UiModelConstants, messageHandling) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _class, _class2;
|
|
9
|
+
var addSelf = CollaborationCommon.addSelf;
|
|
9
10
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
10
11
|
var resolvePath = ContextPathHelper.resolvePath;
|
|
11
12
|
var isPathOnDraftRoot = ContextPathHelper.isPathOnDraftRoot;
|
|
@@ -662,6 +663,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
662
663
|
sEntitySet = oPageComponent && oPageComponent.getEntitySet && oPageComponent.getEntitySet(),
|
|
663
664
|
sContextPath = oPageComponent && oPageComponent.getContextPath && oPageComponent.getContextPath() || sEntitySet && `/${sEntitySet}`,
|
|
664
665
|
oMetaModel = oModel.getMetaModel(),
|
|
666
|
+
isCollaborationDraftSupported = ModelHelper.isCollaborationDraftSupported(oMetaModel),
|
|
665
667
|
mParameters = {
|
|
666
668
|
$$groupId: "$auto.Heroes",
|
|
667
669
|
$$updateGroupId: "$auto",
|
|
@@ -711,6 +713,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
711
713
|
propertiesToSelect.push(...semanticKeys);
|
|
712
714
|
}
|
|
713
715
|
propertiesToSelect.push(...alternateAndSecondaryKeys);
|
|
716
|
+
if (isCollaborationDraftSupported && oDraftRoot) {
|
|
717
|
+
propertiesToSelect.push("DraftAdministrativeData/DraftAdministrativeUser");
|
|
718
|
+
}
|
|
714
719
|
if (propertiesToSelect.length) {
|
|
715
720
|
mParameters.$select = propertiesToSelect.join(",");
|
|
716
721
|
}
|
|
@@ -727,7 +732,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
727
732
|
this.base.messageHandler.holdMessagesForControl(this._oView);
|
|
728
733
|
});
|
|
729
734
|
oHiddenBinding.attachEventOnce("dataReceived", this.onDataReceived.bind(this));
|
|
730
|
-
|
|
735
|
+
const boundContext = oHiddenBinding.getBoundContext();
|
|
736
|
+
if (isCollaborationDraftSupported && sPath.includes("IsActiveEntity=false")) {
|
|
737
|
+
addSelf(oMetaModel, sContextPath, oModel, boundContext);
|
|
738
|
+
}
|
|
739
|
+
return boundContext;
|
|
731
740
|
}
|
|
732
741
|
};
|
|
733
742
|
_proto.onDataReceived = async function onDataReceived(oEvent) {
|
|
@@ -976,4 +985,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
|
|
|
976
985
|
}(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatched", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatched"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatchedFinished", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatchedFinished"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeBinding", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToTarget", [_dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToTarget"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateBackFromTransientState", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateBackFromTransientState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isCurrentStateImpactedBy", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "isCurrentStateImpactedBy"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDataReceived", [_dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onDataReceived"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "switchFullScreen", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "switchFullScreen"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "closeColumn", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "closeColumn"), _class2.prototype), _class2)) || _class);
|
|
977
986
|
return InternalRouting;
|
|
978
987
|
}, false);
|
|
979
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbFJvdXRpbmciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfZGVjNCIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiQmVmb3JlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyRXh0ZW5zaW9uIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uRXhpdCIsIl9vUm91dGluZ1NlcnZpY2UiLCJfZm5Sb3V0ZU1hdGNoZWRCb3VuZCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIm9uSW5pdCIsIl9vVmlldyIsImJhc2UiLCJnZXRWaWV3IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIl9vUGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiX29Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJfb1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJFcnJvciIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1JvdXRpbmdTZXJ2aWNlIiwiaXNBIiwiX29uUm91dGVNYXRjaGVkIiwiYmluZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIl9vVGFyZ2V0SW5mb3JtYXRpb24iLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNhdGNoIiwib25Sb3V0ZU1hdGNoZWQiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25CZWZvcmVCaW5kaW5nIiwiX2JpbmRpbmdDb250ZXh0IiwiX21QYXJhbWV0ZXJzIiwiYmVmb3JlU2V0QmluZGluZ0NvbnRleHQiLCJiaW5kaW5nQ29udGV4dCIsIm9Sb3V0aW5nIiwiZ2V0Q29udHJvbGxlciIsInJvdXRpbmciLCJvbkFmdGVyQmluZGluZyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIm9uQ29udGV4dEJvdW5kVG9WaWV3IiwiYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dCIsImRlZmVycmVkQ3JlYXRpb24iLCJuYXZpZ2F0ZVRvVGFyZ2V0Iiwib0NvbnRleHQiLCJzTmF2aWdhdGlvblRhcmdldE5hbWUiLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwib05hdmlnYXRpb25Db25maWd1cmF0aW9uIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJvRGV0YWlsUm91dGUiLCJkZXRhaWwiLCJzUm91dGVOYW1lIiwicm91dGUiLCJtUGFyYW1ldGVyTWFwcGluZyIsInBhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvIiwiZ2V0SGFzaEZvck5hdmlnYXRpb24iLCJjb250ZXh0IiwibmF2aWdhdGlvblRhcmdldE5hbWUiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsImRldGFpbFJvdXRlIiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvQ29udGV4dCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwibW9kZSIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsImNyZWF0ZUNvbnRleHRQcm9taXNlIiwiY3JlYXRlZENvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsImVkaXRhYmxlIiwicGVyc2lzdE9QU2Nyb2xsIiwidXBkYXRlRkNMTGV2ZWwiLCJmb3JjZUZvY3VzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJjYWxsRXh0ZW5zaW9uIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJjb250ZXh0VG9OYXZpZ2F0ZSIsImhpZGRlbkJpbmRpbmciLCJiYWNrUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsImdldFBhdGgiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm92ZXJyaWRlTmF2Iiwib25CZWZvcmVOYXZpZ2F0aW9uIiwiZGVzdHJveSIsIlByb21pc2UiLCJyZXNvbHZlIiwiRkNMTGV2ZWwiLCJnZXRGQ0xMZXZlbCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJSb3dQcmVzcyIsIm1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNQYXRoT25EcmFmdFJvb3QiLCJjb250ZXh0Rm9yTmF2aWdhdGlvbiIsImdldENvbnRleHRGb3JOYXZpZ2F0aW9uV2l0aENvbGxhYm9yYXRpb24iLCJnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUiLCJnZXRWaWV3RGF0YSIsIm9yaWdpbmFsQ29udGV4dCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJnZXRQcm9wZXJ0eSIsImRyYWZ0T3JBY3RpdmVDb250ZXh0IiwiZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0TWV0YUNvbnRleHQiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsInRhcmdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVySW5mbyIsIlR5cGVOYW1lIiwibmFtZSIsImlzRmNsRW5hYmxlZCIsImNvbnRleHRUb1JlcGxhY2VXaXRoIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsInJlcGxhY2VXaXRoIiwiRWRpdFN0YXRlIiwic2V0RWRpdFN0YXRlRGlydHkiLCJwYXJlbnRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJncm91cCIsImFnZ3JlZ2F0ZSIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwibmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJuYXZpZ2F0ZUJhY2tGcm9tVHJhbnNpZW50U3RhdGUiLCJzSGFzaCIsImdldEhhc2giLCJpbmNsdWRlcyIsIm5hdkJhY2siLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJzRXJyb3JNZXNzYWdlIiwibVBhcmFtZXRlcnMiLCJuYXZUb0hhc2giLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsImRpc3BsYXlFcnJvclBhZ2UiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJfaXNWaWV3UGFydE9mUm91dGUiLCJyb3V0ZUluZm9ybWF0aW9uIiwiYVRhcmdldHMiLCJ0YXJnZXRzIiwidGFyZ2V0TmFtZSIsInZpZXdMZXZlbCIsInJvdXRlTGV2ZWwiLCJnZXRSb3V0aW5nU2VydmljZSIsImFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZSIsInNldFRpbWVvdXQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJfc2V0QmluZGluZ0NvbnRleHQiLCJfYnVpbGRCaW5kaW5nUGF0aCIsInJvdXRlQXJndW1lbnRzIiwiYmluZGluZ1BhdHRlcm4iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsInBhdGgiLCJyZXBsYWNlIiwiZGVmZXJyZWQiLCJzS2V5Iiwic1ZhbHVlIiwiYlRhcmdldEVkaXRhYmxlIiwiYkFjdGlvbkNyZWF0ZSIsIm9FdmVudCIsImdldFBhcmFtZXRlciIsImdldEJpbmRpbmdDb250ZXh0UGF0dGVybiIsImNvbnRleHRQYXR0ZXJuIiwibUFyZ3VtZW50cyIsImdldFBhcmFtZXRlcnMiLCJvTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJiaW5kUHJvbWlzZSIsIm9Nb2RlbCIsIl9iaW5kRGVmZXJyZWQiLCJFZGl0Rmxvd0FjdGlvbiIsImlzT3BlbkluRWRpdE1vZGUiLCJfYmluZFBhZ2VGb3JFZGl0IiwiX2JpbmRQYWdlIiwiZmluYWxseSIsInRvU3RyaW5nIiwidXBkYXRlVUlTdGF0ZUZvclZpZXciLCJ0YXJnZXRQYXRoIiwiY3JlYXRlRGVmZXJyZWRDb250ZXh0IiwibGlzdEJpbmRpbmciLCJwYXJlbnRDb250ZXh0IiwiZGF0YSIsIl9iaW5kUGFnZVRvQ29udGV4dCIsInRlY2huaWNhbFBhdGgiLCJyZXNvbHZlUGF0aCIsImlzU3RpY2t5RWRpdE1vZGUiLCJpc1N0aWNreSIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImFjdGl2ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiX2NyZWF0ZUNvbnRleHQiLCJlZGl0RmxvdyIsImVkaXREb2N1bWVudCIsIl9iaW5kUGFnZVRvUGF0aCIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiZSIsIm1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VzIiwic1RhcmdldFBhdGgiLCJvQ3VycmVudENvbnRleHQiLCJfZ2V0QmluZGluZ0NvbnRleHQiLCJzQ3VycmVudFBhdGgiLCJvVXNlQ29udGV4dCIsIm9Sb290Vmlld0NvbnRyb2xsZXIiLCJzaG91bGRSZWZyZXNoQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiaXNEcmFmdFN1cHBvcnRlZCIsInJlc2V0Q2hhbmdlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0R3JvdXBJZCIsImVyciIsImJQZXJzaXN0T1BTY3JvbGwiLCJzaG93UGxhY2Vob2xkZXIiLCJiU2hvd1BsYWNlaG9sZGVyIiwiQXBwU3RhdGVDaGFuZ2VkIiwiUmVzdG9yZUhpc3RvcnkiLCJpc0VkaXRTdGF0ZURpcnR5IiwiX3JlZnJlc2hCaW5kaW5nQ29udGV4dCIsIm9QYXJlbnRMaXN0QmluZGluZyIsIl9zZXRLZWVwQWxpdmUiLCJpc0V4aXRpbmciLCJpc0NvbnRleHRVc2VkSW5QYWdlcyIsInNQYXRoIiwib1BhZ2VDb21wb25lbnQiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJvTWV0YU1vZGVsIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwiJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyIsImlubGluZUVkaXRGbG93IiwiaXNJbmxpbmVFZGl0UG9zc2libGUiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJvRHJhZnRSb290IiwiZ2V0T2JqZWN0Iiwib0RyYWZ0Tm9kZSIsImRhdGFNb2RlbE9iamVjdCIsImdldENvbnRleHQiLCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsInRhcmdldEVudGl0eVNldCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5IiwibWFwIiwia2V5IiwidmFsdWUiLCJfZ2V0S2VlcEFsaXZlQ29udGV4dCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJjb25jYXQiLCJyZXF1ZXN0UHJvcGVydHkiLCJyZXF1ZXN0T2JqZWN0IiwicHJvcGVydGllc1RvU2VsZWN0Iiwic01lc3NhZ2VzUGF0aCIsImdldE1lc3NhZ2VzUGF0aCIsInB1c2giLCIkc2VsZWN0Iiwiam9pbiIsIm9QcmV2aW91c0JpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwib0hpZGRlbkJpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJCdXN5TG9ja2VyIiwibG9jayIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJvbkRhdGFSZWNlaXZlZCIsImlzTG9ja2VkIiwidW5sb2NrIiwibVBhcmFtcyIsImVycm9yU3RhdHVzIiwic3RhdHVzIiwiY2F1c2UiLCJvUmVzb3VyY2VCdW5kbGUiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJzaGVsbEJhY2siLCJpc0RhdGFSZWNlaXZlZEVycm9yIiwiY29udHJvbCIsInJlbGVhc2VIb2xkQnlDb250cm9sIiwib0JpbmRpbmdDb250ZXh0Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsInNSb290Q29udGV4dFBhdGgiLCJhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMiLCJhUHJvcGVydHlQYXRocyIsIm9TaWRlRWZmZWN0cyIsInRhcmdldFByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdGllcyIsImdldEJpbmRpbmdQYXRocyIsIm9CaW5kaW5nIiwiYURlcGVuZGVudEJpbmRpbmdzIiwic1JlbGF0aXZlUGF0aCIsInNsaWNlIiwiZ2V0RGVwZW5kZW50QmluZGluZ3MiLCJpdGVtIiwiaSIsInJlZHVjZSIsInRhcmdldFByb3BlcnR5IiwiaW5kZXgiLCJpbmRleE9mIiwib1ByZXZpb3VzQ29udGV4dCIsIm9UYXJnZXRDb250cm9sIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0tlZXBBbGl2ZSIsImJLZWVwQWxpdmUiLCJmbkJlZm9yZURlc3Ryb3kiLCJiUmVxdWVzdE1lc3NhZ2VzIiwiZW5kc1dpdGgiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsInNldEtlZXBBbGl2ZSIsImtlcHRBbGl2ZVNlZ21lbnRzIiwic3BsaXQiLCJhZGRpdGlvbm5hbFNlZ21lbnRzIiwicG9wIiwia2VwdEFsaXZlUGF0aCIsIm9LZWVwQWxpdmVDb250ZXh0IiwicmV2ZXJzZSIsImFkZGl0aW9ubmFsUGF0aCIsInN3aXRjaEZ1bGxTY3JlZW4iLCJvU291cmNlIiwib0ZDTEhlbHBlck1vZGVsIiwiYklzRnVsbFNjcmVlbiIsInNOZXh0TGF5b3V0IiwiZ2V0UmlnaHRtb3N0Q29udGV4dCIsIl9yb3V0aW5nIiwibGF5b3V0Iiwid2FybmluZyIsImNsb3NlQ29sdW1uIiwib1ZpZXdEYXRhIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsInNraXBEaXNjYXJkUG9wb3ZlciIsInNraXBCYWNrTmF2aWdhdGlvbiIsImNhbmNlbERvY3VtZW50IiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW50ZXJuYWxSb3V0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgdHlwZSBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQsIHR5cGUgU2hvd01lc3NhZ2VzUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB7IGdldERyYWZ0T3JBY3RpdmVDb250ZXh0LCBpc1BhdGhPbkRyYWZ0Um9vdCwgcmVzb2x2ZVBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Db250ZXh0UGF0aEhlbHBlclwiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbywgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzLCBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdUYXJnZXQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1RhcmdldFR5cGUgfSBmcm9tIFwiLi4vc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcIi4vZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcIi4vbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5cbnR5cGUgUm91dGVJbmZvcm1hdGlvbiA9IHtcblx0dGFyZ2V0cz86IHVua25vd25bXTtcblx0cm91dGVMZXZlbDogbnVtYmVyO1xufTtcbi8qKlxuICoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uIENvbnRyb2xsZXIgZXh0ZW5zaW9ufVxuICogQHNpbmNlIDEuNzQuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlcm5hbFJvdXRpbmdcIilcbmNsYXNzIEludGVybmFsUm91dGluZyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29QYWdlQ29tcG9uZW50ITogRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+IHwgbnVsbDtcblxuXHRwcml2YXRlIF9vUm91dGVyITogUm91dGVyO1xuXG5cdHByaXZhdGUgX29Sb3V0aW5nU2VydmljZSE6IFJvdXRpbmdTZXJ2aWNlO1xuXG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgX2ZuUm91dGVNYXRjaGVkQm91bmQ/OiBGdW5jdGlvbjtcblxuXHRwcm90ZWN0ZWQgX29UYXJnZXRJbmZvcm1hdGlvbiE6IFJvdXRpbmdUYXJnZXQ7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vUm91dGluZ1NlcnZpY2UgJiYgdGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCkge1xuXHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kKTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fb1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpO1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fb1ZpZXcpO1xuXHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX29WaWV3KSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD47XG5cdFx0dGhpcy5fb1JvdXRlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um91dGVyKCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXG5cdFx0aWYgKCF0aGlzLl9vQXBwQ29tcG9uZW50IHx8ICF0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgY29udHJvbGVyIGV4dGVuc2lvbiAnc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVzaW9ucy5JbnRlcm5hbFJvdXRpbmdcIik7XG5cdFx0fVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpcy5fb0FwcENvbXBvbmVudCA9PT0gdGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdC8vIFRoZSB2aWV3IGlzbid0IGhvc3RlZCBpbiBhIGRlZGljYXRlZCBVSUNvbXBvbmVudCwgYnV0IGRpcmVjdGx5IGluIHRoZSBhcHBcblx0XHRcdC8vIC0tPiBqdXN0IGtlZXAgdGhlIHZpZXdcblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ID0gbnVsbDtcblx0XHR9XG5cblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInJvdXRpbmdTZXJ2aWNlXCIpXG5cdFx0XHQudGhlbigob1JvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSkgPT4ge1xuXHRcdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UgPSBvUm91dGluZ1NlcnZpY2U7XG5cdFx0XHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudD8uaXNBKFwic2FwLmZlLmNvcmUuUmV1c2VDb21wb25lbnRcIikgIT09IHRydWUpIHtcblx0XHRcdFx0XHQvLyBSZXVzZSBjb21wb25lbnRzIGNhbiBwb3RlbnRpYWxseSBlbWJlZCBhIHZpZXcgd2l0aCBhIHBhZ2UgY29udHJvbGxlciwgd2Ugd2FudCB0byBhdm9pZCBhdHRhY2hpbmcgdGhlIHJvdXRlIG1hdGNoZWQgZXZlbnQgaW4gdGhpcyBjYXNlXG5cdFx0XHRcdFx0dGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmF0dGFjaFJvdXRlTWF0Y2hlZCh7fSwgdGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fb1RhcmdldEluZm9ybWF0aW9uID0gb1JvdXRpbmdTZXJ2aWNlLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKHRoaXMuX29QYWdlQ29tcG9uZW50IHx8IHRoaXMuX29WaWV3KSEgPz8ge307XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGNhbm5vdCB3b3JrIHdpdGhvdXQgYSAncm91dGluZ1NlcnZpY2UnIG9uIHRoZSBtYWluIEFwcENvbXBvbmVudFwiKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJlZCBldmVyeSB0aW1lIHRoaXMgY29udHJvbGxlciBpcyBhIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJvdXRlTWF0Y2hlZCgpOiB2b2lkIHtcblx0XHQvKiovXG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKTogdm9pZCB7XG5cdFx0LyoqL1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkJlZm9yZUJpbmRpbmcoX2JpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge31cblxuXHRiZWZvcmVTZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLm9uQmVmb3JlQmluZGluZyhiaW5kaW5nQ29udGV4dCwgX21QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQmVmb3JlQmluZGluZykge1xuXHRcdFx0b1JvdXRpbmcub25CZWZvcmVCaW5kaW5nKGJpbmRpbmdDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uQWZ0ZXJCaW5kaW5nKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkub25Db250ZXh0Qm91bmRUb1ZpZXcoYmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0YWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMub25BZnRlckJpbmRpbmcoYmluZGluZ0NvbnRleHQsIHsgLi4uX21QYXJhbWV0ZXJzLCBkZWZlcnJlZENyZWF0aW9uOiB0cnVlIH0pO1xuXHRcdGNvbnN0IG9Sb3V0aW5nID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkucm91dGluZztcblx0XHRpZiAob1JvdXRpbmcgJiYgb1JvdXRpbmcub25BZnRlckJpbmRpbmcpIHtcblx0XHRcdG9Sb3V0aW5nLm9uQWZ0ZXJCaW5kaW5nKGJpbmRpbmdDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBNZXRob2RzIHRyaWdnZXJpbmcgYSBuYXZpZ2F0aW9uIGFmdGVyIGEgdXNlciBhY3Rpb25cblx0Ly8gKGUuZy4gY2xpY2sgb24gYSB0YWJsZSByb3csIGJ1dHRvbiwgZXRjLi4uKVxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNwZWNpZmllZCBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHNOYXZpZ2F0aW9uVGFyZ2V0TmFtZSBOYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRhcmdldFxuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBUcnVlIHRvIGZvcmNlIHRoZSBuZXcgVVJMIHRvIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGJyb3dzZXIgaGlzdG9yeSAobm8gcmVwbGFjZSlcblx0ICogQHBhcmFtIGRlbGF5ZWRVc2FnZSBUcnVlIHRvIHJldHVybiBhIGZ1bmN0aW9uIGZvciBleGVjdXRpbmcgdGhlIG5hdmlnYXRpb24sIEZhbHNlIHRvIGV4ZWN1dGUgdGhlIG5hdmlnYXRpb24gaW1tZWRpYXRlbHlcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9UYXJnZXQoXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c05hdmlnYXRpb25UYXJnZXROYW1lOiBzdHJpbmcsXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogdHJ1ZVxuXHQpOiBQcm9taXNlPCgpID0+IHZvaWQ+O1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVRvVGFyZ2V0KFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNOYXZpZ2F0aW9uVGFyZ2V0TmFtZTogc3RyaW5nLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB2b2lkPiB7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25Db25maWd1cmF0aW9uID1cblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ICYmXG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiAmJlxuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oc05hdmlnYXRpb25UYXJnZXROYW1lKTtcblx0XHRpZiAob05hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsUm91dGUgPSBvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24uZGV0YWlsO1xuXHRcdFx0Y29uc3Qgc1JvdXRlTmFtZSA9IG9EZXRhaWxSb3V0ZS5yb3V0ZTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJNYXBwaW5nID0gb0RldGFpbFJvdXRlLnBhcmFtZXRlcnM7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLm5hdmlnYXRlVG8ob0NvbnRleHQsIHNSb3V0ZU5hbWUsIG1QYXJhbWV0ZXJNYXBwaW5nLCBiUHJlc2VydmVIaXN0b3J5LCBkZWxheWVkVXNhZ2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLm5hdmlnYXRlVG8ob0NvbnRleHQsIG51bGwsIG51bGwsIGJQcmVzZXJ2ZUhpc3RvcnksIGRlbGF5ZWRVc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgSGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVGFyZ2V0TmFtZSBOYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRhcmdldFxuXHQgKiBAcmV0dXJucyBUaGUgSGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvXG5cdCAqL1xuXHRhc3luYyBnZXRIYXNoRm9yTmF2aWdhdGlvbihjb250ZXh0OiBDb250ZXh0LCBuYXZpZ2F0aW9uVGFyZ2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiA9IHRoaXM/Ll9vUGFnZUNvbXBvbmVudD8uZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldE5hbWUpO1xuXHRcdGlmIChuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3QgZGV0YWlsUm91dGUgPSBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbi5kZXRhaWw7XG5cdFx0XHRjb25zdCByb3V0ZU5hbWUgPSBkZXRhaWxSb3V0ZS5yb3V0ZTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlck1hcHBpbmcgPSBkZXRhaWxSb3V0ZS5wYXJhbWV0ZXJzO1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRIYXNoRnJvbVJvdXRlKGNvbnRleHQsIHJvdXRlTmFtZSwgcGFyYW1ldGVyTWFwcGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0SGFzaEZyb21Sb3V0ZShjb250ZXh0LCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgbmF2aWdhdGlvbiB0YXJnZXQgcm91dGUuXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gW29QYXJhbWV0ZXJzXSBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZSwgb1BhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB0byAndHJ1ZScgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRpZiAocGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubW9kZSA9PT0gXCJBc3luY1wiKSB7XG5cdFx0XHRcdC8vIHRoZSBjb250ZXh0IGlzIGVpdGhlciBjcmVhdGVkIGFzeW5jIChQcm9taXNlKVxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGFjdGl2YXRlIHRoZSByb3V0ZU1hdGNoU3luY2hybyBvbiB0aGUgUm91dGVyUHJveHkgdG8gYXZvaWQgdGhhdFxuXHRcdFx0XHQvLyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIG5hdmlnYXRlVG9Db250ZXh0IGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0XHR0aGlzLl9vUm91dGVyUHJveHkuYWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKCk7XG5cblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycy5jcmVhdGVDb250ZXh0UHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKGFzeW5jIChjcmVhdGVkQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gb25jZSB0aGUgY29udGV4dCBpcyByZXR1cm5lZCB3ZSBuYXZpZ2F0ZSBpbnRvIGl0XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjcmVhdGVkQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRjaGVja05vSGFzaENoYW5nZTogcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZSxcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU6IHBhcmFtZXRlcnMuZWRpdGFibGUsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUZDTExldmVsOiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsLFxuXHRcdFx0XHRcdFx0XHRmb3JjZUZvY3VzOiBwYXJhbWV0ZXJzLmZvcmNlRm9jdXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdpdGggdGhlIGFzeW5jIGNvbnRleHRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/Lm1vZGUgIT09IFwiRGVmZXJyZWRcIikge1xuXHRcdFx0XHQvLyBOYXZpZ2F0ZSB0byBhIGxpc3QgYmluZGluZyBub3QgeWV0IHN1cHBvcnRlZFxuXHRcdFx0XHR0aHJvdyBcIm5hdmlnYXRpb24gdG8gYSBsaXN0IGJpbmRpbmcgaXMgbm90IHlldCBzdXBwb3J0ZWRcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY2FsbEV4dGVuc2lvbikge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXG5cdFx0XHQvLyBTdG9yaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0IHRvIHVzZSBpdCBpbiBpbnRlcm5hbCByb3V0ZSBuYXZpZ2F0aW9uIGlmIG5lY2Vzc2FyeS5cblx0XHRcdGxldCBjb250ZXh0VG9OYXZpZ2F0ZTogQ29udGV4dCB8IG51bGwgPSBjb250ZXh0O1xuXHRcdFx0bGV0IGhpZGRlbkJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdFx0Ly8gSWYgd2UncmUgbmF2aWdhdGluZyBiYWNrLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIFwicGFyZW50XCIgY29udGV4dFxuXHRcdFx0XHRjb25zdCBiYWNrUGF0aCA9IHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRQYXRoVG9OYXZpZ2F0ZUJhY2soY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBBcyB3ZSBkb24ndCBjYWxsIHRoZSBleHRlbnNpb24gd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gdGhlIExSLCBiYWNrUGF0aCBpcyBuZXZlciBlbXB0eSBzbyB3ZSBjYW4gc2FmZWx5IGNyZWF0ZSBhIGNvbnRleHRcblx0XHRcdFx0aGlkZGVuQmluZGluZyA9IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChiYWNrUGF0aCk7XG5cdFx0XHRcdGNvbnRleHRUb05hdmlnYXRlID0gaGlkZGVuQmluZGluZy5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG92ZXJyaWRlTmF2ID0gYXdhaXQgdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkucm91dGluZy5vbkJlZm9yZU5hdmlnYXRpb24oeyBiaW5kaW5nQ29udGV4dDogY29udGV4dFRvTmF2aWdhdGUgfSk7XG5cdFx0XHRoaWRkZW5CaW5kaW5nPy5kZXN0cm95KCk7XG5cdFx0XHRpZiAob3ZlcnJpZGVOYXYpIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBjb250ZXh0KTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwYXJhbWV0ZXJzLkZDTExldmVsID0gdGhpcy5nZXRGQ0xMZXZlbCgpO1xuXG5cdFx0Ly8gSW4gY2FzZSB3ZSdyZSBuYXZpZ2F0aW5nIGZyb20gYSB0YWJsZSBpbiBhIExpc3RSZXBvcnQgd2l0aCBkcmFmdCwgdGhlcmUncyBzcGVjaWFsIGhhbmRsaW5nIGZvciBjb2xsYWJvcmF0aW9uIGFuZCB0cmVlIHRhYmxlLlxuXHRcdC8vIFdlIG1heSBub3QgbmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgdGhlIHVzZXIgY2xpY2tlZCBvbi5cblx0XHRpZiAocGFyYW1ldGVycy5yZWFzb24gPT09IE5hdmlnYXRpb25SZWFzb24uUm93UHJlc3MgJiYgY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdFx0aWYgKGlzUGF0aE9uRHJhZnRSb290KGNvbnRleHQuZ2V0UGF0aCgpLCBtZXRhTW9kZWwpKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRGb3JOYXZpZ2F0aW9uID1cblx0XHRcdFx0XHQoYXdhaXQgdGhpcy5nZXRDb250ZXh0Rm9yTmF2aWdhdGlvbldpdGhDb2xsYWJvcmF0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpKSA/P1xuXHRcdFx0XHRcdChhd2FpdCB0aGlzLmdldENvbnRleHRGb3JOYXZpZ2F0aW9uRnJvbVRyZWVPckFuYWx5dGljYWxUYWJsZShjb250ZXh0KSk7XG5cblx0XHRcdFx0Ly8gVXNlIGFub3RoZXIgaW5zdGFuY2UgZm9yIG5hdmlnYXRpb25cblx0XHRcdFx0aWYgKGNvbnRleHRGb3JOYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHRGb3JOYXZpZ2F0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzLCB0aGlzLl9vVmlldy5nZXRWaWV3RGF0YSgpLCB0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGV4dCB0byB1c2UgZm9yIG5hdmlnYXRpb24gaW4gY2FzZSB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGEgZHJhZnQgaW5zdGFuY2UgZnJvbSB0aGUgTFIgYW5kIHdlJ3JlIGluIGEgY29sbGFib3JhdGlvbiBhcHBsaWNhdGlvbi5cblx0ICogQHBhcmFtIG9yaWdpbmFsQ29udGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCB0byB1c2UgZm9yIG5hdmlnYXRpb24gaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgY29udGV4dCwgbnVsbCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Q29udGV4dEZvck5hdmlnYXRpb25XaXRoQ29sbGFib3JhdGlvbihcblx0XHRvcmlnaW5hbENvbnRleHQ6IENvbnRleHQsXG5cdFx0cGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdCk6IFByb21pc2U8Q29udGV4dCB8IG51bGw+IHtcblx0XHRjb25zdCBtb2RlbCA9IG9yaWdpbmFsQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSBmYWxzZSkge1xuXHRcdFx0Ly8gSWYgd2UncmUgaW4gYSBjb2xsYWJvcmF0aW9uIGFwcGxpY2F0aW9uLCBhbmQgd2UncmUgbmF2aWdhdGluZyB0byBhIGRyYWZ0IGluc3RhbmNlIGZyb20gdGhlIExSLFxuXHRcdFx0Ly8gV2Ugd2FudCB0byBjaGVjayBpZiB0aGUgZHJhZnQgaW5zdGFuY2UgZXhpc3RzIGZpcnN0LiBPdGhlcndpc2Ugd2UgbmF2aWdhdGUgdG8gdGhlIG9yaWdpbmFsIChkcmFmdCkgdmVyc2lvbi5cblx0XHRcdGNvbnN0IGRyYWZ0T3JBY3RpdmVDb250ZXh0ID0gYXdhaXQgZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQob3JpZ2luYWxDb250ZXh0KTtcblxuXHRcdFx0aWYgKGRyYWZ0T3JBY3RpdmVDb250ZXh0ICE9PSBudWxsICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQYXRoKCkgIT09IGRyYWZ0T3JBY3RpdmVDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHQvLyBOb3RpZnkgdGhlIHVzZXIgdGhhdCB3ZSBoYXZlIG5hdmlnYXRlZCB0byB0aGUgc2F2ZWQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQob3JpZ2luYWxDb250ZXh0LmdldFBhdGgoKSkpO1xuXHRcdFx0XHRwYXJhbWV0ZXJzLnJlZGlyZWN0ZWRUb05vbkRyYWZ0ID1cblx0XHRcdFx0XHQob2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZSBhcyB1bmtub3duIGFzIHN0cmluZykgPz9cblx0XHRcdFx0XHRvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUubmFtZTtcblxuXHRcdFx0XHRpZiAodGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdC8vIEZDTDogcmVwbGFjZSB0aGUgY29udGV4dCBpbiB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFRvUmVwbGFjZVdpdGggPSBtb2RlbC5nZXRLZWVwQWxpdmVDb250ZXh0KGRyYWZ0T3JBY3RpdmVDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0b3JpZ2luYWxDb250ZXh0LnJlcGxhY2VXaXRoKGNvbnRleHRUb1JlcGxhY2VXaXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBGdWxsc2NyZWVuOiB0cmlnZ2VyIGEgcmVmcmVzaCBvZiB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBVc2UgdGhlIHNhdmVkIGluc3RhbmNlIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBkcmFmdE9yQWN0aXZlQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGNvbnRleHRcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgdG8gdXNlIGZvciBuYXZpZ2F0aW9uIGluIGNhc2Ugd2UncmUgbmF2aWdhdGluZyB0byBhbiBhY3RpdmUgaW5zdGFuY2UgZnJvbSB0aGUgTFIgYW5kIHdlJ3JlIGluIGEgVHJlZSBvciBBbmFseXRpY2FsIHRhYmxlLlxuXHQgKiBAcGFyYW0gb3JpZ2luYWxDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHRvIHVzZSBmb3IgbmF2aWdhdGlvbiBpZiBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBjb250ZXh0LCBudWxsIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUob3JpZ2luYWxDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0IHwgbnVsbD4ge1xuXHRcdGNvbnN0IHBhcmVudEJpbmRpbmcgPSBvcmlnaW5hbENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdGlmICghcGFyZW50QmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Ly8gVGhlIGNvbnRleHQgZG9lc24ndCBiZWxvbmcgdG8gYSBsaXN0IGJpbmRpbmdcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IHBhcmVudEJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhc1xuXHRcdFx0fCB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZzsgZ3JvdXA/OiBvYmplY3Q7IGFnZ3JlZ2F0ZT86IG9iamVjdCB9XG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWFnZ3JlZ2F0aW9uPy5oaWVyYXJjaHlRdWFsaWZpZXIgJiYgIWFnZ3JlZ2F0aW9uPy5ncm91cCAmJiAhYWdncmVnYXRpb24/LmFnZ3JlZ2F0ZSkge1xuXHRcdFx0Ly8gVGhlIGNvbnRleHQgZG9lc24ndCBiZWxvbmcgdG8gYSBoaWVyYXJjaGljYWwvYW5hbHl0aWNhbCBsaXN0IGJpbmRpbmdcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChvcmlnaW5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gdHJ1ZSAmJiBvcmlnaW5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gSWYgd2UncmUgaW4gYSBUcmVlL0FuYWx5dGljYWwgdGFibGUsIGFuZCB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGFuIGFjdGl2ZSBpbnN0YW5jZSBpbnN0YW5jZSB0aGF0IGhhcyBhIGRyYWZ0LFxuXHRcdFx0Ly8gLS0+IFdlIHRyeSB0byBuYXZpZ2F0ZSB0byB0aGUgZHJhZnQgaW5zdGFuY2UgKGlmIGl0IHN0aWxsIGV4aXN0cylcblx0XHRcdGNvbnN0IGRyYWZ0T3JBY3RpdmVDb250ZXh0ID0gYXdhaXQgZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQob3JpZ2luYWxDb250ZXh0KTtcblxuXHRcdFx0aWYgKGRyYWZ0T3JBY3RpdmVDb250ZXh0ICE9PSBudWxsICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQYXRoKCkgIT09IGRyYWZ0T3JBY3RpdmVDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHQvLyBVc2UgdGhlIGRyYWZ0IGluc3RhbmNlIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBkcmFmdE9yQWN0aXZlQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGNvbnRleHRcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFja3dhcmRzIGZyb20gYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCBmcm9tXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQ6IENvbnRleHQsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9IC0xO1xuXG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGZvcndhcmRzIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgT0RhdGFMaXN0QmluZGluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9IDE7XG5cblx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFjayBpbiBoaXN0b3J5IGlmIHRoZSBjdXJyZW50IGhhc2ggY29ycmVzcG9uZHMgdG8gYSB0cmFuc2llbnQgc3RhdGUuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNIYXNoID0gdGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKTtcblxuXHRcdC8vIGlmIHRyaWdnZXJlZCB3aGlsZSBuYXZpZ2F0aW5nIHRvICguLi4pLCB3ZSBuZWVkIHRvIG5hdmlnYXRlIGJhY2tcblx0XHRpZiAoc0hhc2guaW5jbHVkZXMoXCIoLi4uKVwiKSkge1xuXHRcdFx0dGhpcy5fb1JvdXRlclByb3h5Lm5hdkJhY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgYW4gZXJyb3IgKGlsbHVzdHJhdGVkIG1lc3NhZ2UpIGluIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc0Vycm9yTWVzc2FnZVxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2Uoc0Vycm9yTWVzc2FnZTogc3RyaW5nLCBtUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bVBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycyB8fCB7fTtcblx0XHRpZiAodGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWNyZWF0ZVwiKSB8fCB0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwiaS1hY3Rpb249YXV0b0NyZWF0ZVwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eS5uYXZUb0hhc2godGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmdldERlZmF1bHRDcmVhdGVIYXNoKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5kaXNwbGF5RXJyb3JQYWdlKHNFcnJvck1lc3NhZ2UsIG1QYXJhbWV0ZXJzLCB0aGlzLmdldEZDTExldmVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdGF0ZSBpcyBpbXBhY3RlZCBieSB0aGUgY29udGV4dFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KG9Db250ZXh0KTtcblx0fVxuXG5cdF9pc1ZpZXdQYXJ0T2ZSb3V0ZShyb3V0ZUluZm9ybWF0aW9uPzogUm91dGVJbmZvcm1hdGlvbik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFUYXJnZXRzID0gcm91dGVJbmZvcm1hdGlvbj8udGFyZ2V0cztcblx0XHRpZiAoIWFUYXJnZXRzIHx8ICFhVGFyZ2V0cy5pbmNsdWRlcyh0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24udGFyZ2V0TmFtZSkpIHtcblx0XHRcdC8vIElmIHRoZSB0YXJnZXQgZm9yIHRoaXMgdmlldyBoYXMgYSB2aWV3IGxldmVsIGdyZWF0ZXIgdGhhbiB0aGUgcm91dGUgbGV2ZWwsIGl0IG1lYW5zIHRoaXMgdmlldyBjb21lcyBcImFmdGVyXCIgdGhlIHJvdXRlXG5cdFx0XHQvLyBpbiB0ZXJtcyBvZiBuYXZpZ2F0aW9uLlxuXHRcdFx0Ly8gSW4gc3VjaCBjYXNlLCB3ZSByZW1vdmUgaXRzIGJpbmRpbmcgY29udGV4dCwgdG8gYXZvaWQgdGhpcyB2aWV3IHRvIGhhdmUgZGF0YSBpZiB3ZSBuYXZpZ2F0ZSB0byBpdCBsYXRlciBvblxuXHRcdFx0Ly8gVGhpcyBpcyBkb25lIGluIGEgdGltZW91dCB0byBhbGxvdyBmb3IgZm9jdXNvdXQgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgcHJvcGVybHkgaW4gY29sbGFib3JhdGl2ZSBkcmFmdFxuXHRcdFx0aWYgKCh0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24udmlld0xldmVsID8/IDApID49IChyb3V0ZUluZm9ybWF0aW9uPy5yb3V0ZUxldmVsID8/IDApKSB7XG5cdFx0XHRcdHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UoKS5hZGRCaW5kaW5nQ2xlYW51cFByb21pc2UoXG5cdFx0XHRcdFx0bmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA9PT0gMCAmJiB0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgcm91dGUgaGFzIGxldmVsIDAgLS0+IHdlIG5lZWQgdG8gbGVhdmUgdGhlIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBhcyBubyBPUCBpcyBkaXNwbGF5ZWRcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLl9zZXRCaW5kaW5nQ29udGV4dChudWxsKTsgLy8gVGhpcyBhbHNvIGNhbGwgc2V0S2VlcEFsaXZlKGZhbHNlKSBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRfYnVpbGRCaW5kaW5nUGF0aChcblx0XHRyb3V0ZUFyZ3VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgb2JqZWN0Pixcblx0XHRiaW5kaW5nUGF0dGVybjogc3RyaW5nLFxuXHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm9cblx0KTogeyBwYXRoOiBzdHJpbmc7IGRlZmVycmVkOiBib29sZWFuIH0ge1xuXHRcdGxldCBwYXRoID0gYmluZGluZ1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGxldCBkZWZlcnJlZCA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIHJvdXRlQXJndW1lbnRzKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSByb3V0ZUFyZ3VtZW50c1tzS2V5XTtcblxuXHRcdFx0aWYgKHR5cGVvZiBzVmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzVmFsdWUgPT09IFwiLi4uXCIgJiYgYmluZGluZ1BhdHRlcm4uaW5jbHVkZXMoYHske3NLZXl9fWApKSB7XG5cdFx0XHRcdGRlZmVycmVkID0gdHJ1ZTtcblx0XHRcdFx0Ly8gU29tZXRpbWVzIGluIHByZWZlcnJlZE1vZGUgPSBjcmVhdGUsIHRoZSBlZGl0IGJ1dHRvbiBpcyBzaG93biBpbiBiYWNrZ3JvdW5kIHdoZW4gdGhlXG5cdFx0XHRcdC8vIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nIHNob3dzIHVwLCBzZXR0aW5nIGJUYXJnZXRFZGl0YWJsZSBwYXNzZXMgZWRpdGFibGUgYXMgdHJ1ZVxuXHRcdFx0XHQvLyB0byBvbkJlZm9yZUJpbmRpbmcgaW4gX2JpbmRUYXJnZXRQYWdlIGZ1bmN0aW9uXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXRoID0gcGF0aC5yZXBsYWNlKGB7JHtzS2V5fX1gLCBzVmFsdWUpO1xuXHRcdH1cblx0XHRpZiAoKHJvdXRlQXJndW1lbnRzW1wiP3F1ZXJ5XCJdIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pPy5bXCJpLWFjdGlvblwiXT8uaW5jbHVkZXMoXCJjcmVhdGVcIikpIHtcblx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmJBY3Rpb25DcmVhdGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIHRoZSBiaW5kaW5nIHBhdGggaXMgYWx3YXlzIGFic29sdXRlXG5cdFx0aWYgKHBhdGggJiYgcGF0aFswXSAhPT0gXCIvXCIpIHtcblx0XHRcdHBhdGggPSBgLyR7cGF0aH1gO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IHBhdGgsIGRlZmVycmVkIH07XG5cdH1cblxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBNZXRob2RzIHRvIGJpbmQgdGhlIHBhZ2Ugd2hlbiBhIHJvdXRlIGlzIG1hdGNoZWRcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBCdWlsZHMgdGhlIGJpbmRpbmcgY29udGV4dCBmcm9tIHRoZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMsIGFuZCBiaW5kIHRoZSBwYWdlIGFjY29yZGluZ2x5LlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfb25Sb3V0ZU1hdGNoZWQoXG5cdFx0b0V2ZW50OiBFdmVudDx7XG5cdFx0XHRyb3V0ZUluZm9ybWF0aW9uPzogUm91dGVJbmZvcm1hdGlvbjtcblx0XHRcdHJvdXRlUGF0dGVybjogc3RyaW5nO1xuXHRcdFx0bmF2aWdhdGlvbkluZm86IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbztcblx0XHRcdGFyZ3VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgb2JqZWN0Pjtcblx0XHR9PlxuXHQpOiB2b2lkIHtcblx0XHQvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGZvciB0aGlzIHZpZXcgaXMgcGFydCBvZiB0aGUgZXZlbnQgdGFyZ2V0cyAoaS5lLiBpcyBhIHRhcmdldCBmb3IgdGhlIGN1cnJlbnQgcm91dGUpLlxuXHRcdC8vIElmIG5vdCwgd2UgZG9uJ3QgbmVlZCB0byBiaW5kIGl0IC0tPiByZXR1cm5cblx0XHRpZiAoIXRoaXMuX2lzVmlld1BhcnRPZlJvdXRlKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJyb3V0ZUluZm9ybWF0aW9uXCIpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHJpZXZlIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0dGVyblxuXHRcdGxldCBiaW5kaW5nUGF0dGVybjtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQgJiYgdGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuKSB7XG5cdFx0XHRiaW5kaW5nUGF0dGVybiA9IHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0UGF0dGVybigpO1xuXHRcdH1cblx0XHRiaW5kaW5nUGF0dGVybiA9IGJpbmRpbmdQYXR0ZXJuID8/IHRoaXMuX29UYXJnZXRJbmZvcm1hdGlvbi5jb250ZXh0UGF0dGVybjtcblxuXHRcdGlmIChiaW5kaW5nUGF0dGVybiA9PT0gbnVsbCB8fCBiaW5kaW5nUGF0dGVybiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBEb24ndCBkbyB0aGlzIGlmIHdlIGFscmVhZHkgZ290IHNUYXJnZXQgPT0gJycsIHdoaWNoIGlzIGEgdmFsaWQgdGFyZ2V0IHBhdHRlcm5cblx0XHRcdGJpbmRpbmdQYXR0ZXJuID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInJvdXRlUGF0dGVyblwiKTtcblx0XHR9XG5cblx0XHQvLyBSZXBsYWNlIHRoZSBwYXJhbWV0ZXJzIGJ5IHRoZWlyIHZhbHVlcyBpbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdHRlcm5cblx0XHRjb25zdCBtQXJndW1lbnRzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKS5hcmd1bWVudHM7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25QYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hdmlnYXRpb25JbmZvXCIpO1xuXHRcdGNvbnN0IHsgcGF0aCwgZGVmZXJyZWQgfSA9IHRoaXMuX2J1aWxkQmluZGluZ1BhdGgobUFyZ3VtZW50cywgYmluZGluZ1BhdHRlcm4sIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cblx0XHR0aGlzLm9uUm91dGVNYXRjaGVkKCk7XG5cblx0XHRsZXQgYmluZFByb21pc2U7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoKTtcblx0XHRpZiAoZGVmZXJyZWQpIHtcblx0XHRcdGJpbmRQcm9taXNlID0gdGhpcy5fYmluZERlZmVycmVkKHBhdGgsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24gJiZcblx0XHRcdCh0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwiaS1hY3Rpb249ZWRpdFwiKSB8fCAodGhpcy5fb1BhZ2VDb21wb25lbnQ/LmlzT3BlbkluRWRpdE1vZGU/LigpID8/IGZhbHNlKSlcblx0XHQpIHtcblx0XHRcdGJpbmRQcm9taXNlID0gdGhpcy5fYmluZFBhZ2VGb3JFZGl0KHBhdGgsIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kUGFnZShwYXRoLCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXG5cdFx0YmluZFByb21pc2Vcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5vblJvdXRlTWF0Y2hlZEZpbmlzaGVkKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBkdXJpbmcgcGFnZSBiaW5kaW5nIFwiICsgZXJyb3IudG9TdHJpbmcoKSk7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudXBkYXRlVUlTdGF0ZUZvclZpZXcodGhpcy5fb1ZpZXcsIHRoaXMuZ2V0RkNMTGV2ZWwoKSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmZXJyZWQgYmluZGluZyAoZHVyaW5nIG9iamVjdCBjcmVhdGlvbikuXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoIFRoZSBwYXRoIHRvIHRoZSBkZWZmZXJlZCBjb250ZXh0XG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVycyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfYmluZERlZmVycmVkKHRhcmdldFBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuYmVmb3JlU2V0QmluZGluZ0NvbnRleHQobnVsbCwgeyBlZGl0YWJsZTogbmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlIH0pO1xuXG5cdFx0aWYgKCFuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyB8fCBuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycy5tb2RlID09PSBcIkRlZmVycmVkXCIpIHtcblx0XHRcdC8vIGVpdGhlciB0aGUgY29udGV4dCBzaGFsbCBiZSBjcmVhdGVkIGluIHRoZSB0YXJnZXQgcGFnZSAoZGVmZXJyZWQgQ29udGV4dCkgb3IgaXQgc2hhbGxcblx0XHRcdC8vIGJlIGNyZWF0ZWQgYXN5bmMgYnV0IHRoZSB1c2VyIHJlZnJlc2hlZCB0aGUgcGFnZSAvIGJvb2ttYXJrZWQgdGhpcyBVUkxcblx0XHRcdC8vIFRPRE86IGN1cnJlbnRseSB0aGUgdGFyZ2V0IGNvbXBvbmVudCBjcmVhdGVzIHRoaXMgZG9jdW1lbnQgYnV0IHdlIHNoYWxsIG1vdmUgdGhpcyB0b1xuXHRcdFx0Ly8gYSBjZW50cmFsIHBsYWNlXG5cdFx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQgJiYgdGhpcy5fb1BhZ2VDb21wb25lbnQuY3JlYXRlRGVmZXJyZWRDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50LmNyZWF0ZURlZmVycmVkQ29udGV4dChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPy5saXN0QmluZGluZyxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ucGFyZW50Q29udGV4dCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8uZGF0YSxcblx0XHRcdFx0XHQhIW5hdmlnYXRpb25QYXJhbWV0ZXJzLmJBY3Rpb25DcmVhdGVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyByZW1vdmUgdGhlIGNvbnRleHQgdG8gYXZvaWQgc2hvd2luZyBvbGQgZGF0YVxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXG5cdFx0dGhpcy5hZnRlclNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHBhZ2UgZnJvbSBhIHBhdGgsIGlmIHRoZSBhcHAgaXMgc3RhcnRlZCB3aXRoIHRoZSBwcmVmZXJyZWQgbW9kZSBlZGl0LlxuXHQgKlxuXHQgKiBJZiB0aGUgY29udGV4dCBwb2ludHMgdG8gYW4gYWN0aXZlIGVudGl0eSwgaXQgaXMgZGlyZWN0bHkgY29udmVydGVkIHRvIGRyYWZ0IHVzaW5nIHRoZSBFZGl0RmxvdyBjb250cm9sbGVyIGV4dGVuc2lvbi5cblx0ICogQHBhcmFtIHRhcmdldFBhdGhcblx0ICogQHBhcmFtIG1vZGVsXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgb25jZSB0aGUgYmluZGluZyBoYXMgYmVlbiBzZXQgb24gdGhlIHBhZ2Vcblx0ICovXG5cdGFzeW5jIF9iaW5kUGFnZUZvckVkaXQodGFyZ2V0UGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8dm9pZCB8IENvbnRleHQ+IHtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9iaW5kUGFnZVRvQ29udGV4dChudWxsLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsUGF0aDogc3RyaW5nID0gYXdhaXQgcmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgbW9kZWwsIHRoaXMuX29Sb3V0aW5nU2VydmljZSwgdGhpcy5fb1JvdXRlcik7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdC8vIGNoZWNrIGZvciBzdGlja3kgJiBzdGlja3kgZWRpdCBzZXNzaW9uXG5cdFx0XHRjb25zdCBpc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuaXNTdGlja3lFZGl0TW9kZSh0aGlzLmJhc2UuZ2V0VmlldygpKTtcblx0XHRcdGNvbnN0IGlzU3RpY2t5ID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG1ldGFNb2RlbCk7XG5cdFx0XHRpZiAodGVjaG5pY2FsUGF0aC5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5PXRydWVcIikgfHwgKGlzU3RpY2t5ICYmICFpc1N0aWNreUVkaXRNb2RlKSkge1xuXHRcdFx0XHQvLyBjcmVhdGUgY29udGV4dCBvciB1c2UgdGhlIG9uZSB0aGUgdXNlciBjbGlja2VkIG9uXG5cdFx0XHRcdGNvbnN0IGFjdGl2ZUNvbnRleHQgPVxuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLnVzZUNvbnRleHQ/LmdldFBhdGgoKSA9PT0gdGVjaG5pY2FsUGF0aFxuXHRcdFx0XHRcdFx0PyBuYXZpZ2F0aW9uUGFyYW1ldGVycy51c2VDb250ZXh0XG5cdFx0XHRcdFx0XHQ6IHRoaXMuX2NyZWF0ZUNvbnRleHQodGVjaG5pY2FsUGF0aCwgbW9kZWwpO1xuXG5cdFx0XHRcdC8vIGVkaXQgZG9jdW1lbnRcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQoYWN0aXZlQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fYmluZFBhZ2VUb1BhdGgodGVjaG5pY2FsUGF0aCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHR0aGlzLm5hdmlnYXRlVG9NZXNzYWdlUGFnZShyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUlwiKSwge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgY29udGV4dFxuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVycyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIG9uY2UgdGhlIGJpbmRpbmcgb24gdGhlIHBhZ2UgaXMgc2V0XG5cdCAqL1xuXHRhc3luYyBfYmluZFBhZ2UodGFyZ2V0UGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0YXJnZXRQYXRoID09PSBcIlwiKSB7XG5cdFx0XHQvLyBUaGUgcGFnZSBiaW5kaW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIHRvIG1ha2Ugc3VyZSBfb25Sb3V0ZU1hdGNoZWQgaXMgY2FsbGVkIGZvciBhbGwgdGFyZ2V0cyBiZWZvcmUsIGFuZCB0aGUgYmluZGluZyBjbGVhbnVwIHByb21pc2VzIGFyZSBwcm9wZXJseSBzdG9yZWQgaW4gdGhlIHJvdXRpbmcgc2VydmljZS5cblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fYmluZFBhZ2VUb0NvbnRleHQobnVsbCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlY2huaWNhbFBhdGggPSBhd2FpdCByZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBtb2RlbCwgdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLCB0aGlzLl9vUm91dGVyKTtcblx0XHRcdHRoaXMuX2JpbmRQYWdlVG9QYXRoKHRlY2huaWNhbFBhdGgsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHBhZ2UgZnJvbSBhIHBhdGguXG5cdCAqIEBwYXJhbSBzVGFyZ2V0UGF0aCBUaGUgcGF0aCB0byBidWlsZCB0aGUgY29udGV4dCAodGhpcyBpcyBhIHBhdGggaW4gdGhlIG1vZGVsLCBzbyBvbmx5IHRlY2huaWNhbCBrZXlzIGFyZSBhbGxvd2VkKS5cblx0ICogQHBhcmFtIG9Nb2RlbCBUaGUgT0RhdGEgbW9kZWxcblx0ICogQHBhcmFtIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICovXG5cdF9iaW5kUGFnZVRvUGF0aChzVGFyZ2V0UGF0aDogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0N1cnJlbnRDb250ZXh0ID0gdGhpcy5fZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdHNDdXJyZW50UGF0aCA9IG9DdXJyZW50Q29udGV4dCAmJiBvQ3VycmVudENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b1VzZUNvbnRleHQgPSBvTmF2aWdhdGlvblBhcmFtZXRlcnMudXNlQ29udGV4dCBhcyBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuXHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXG5cdFx0Ly8gV2Ugc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgb25seSBpZiBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZVxuXHRcdC8vIG9yIGlmIHdlIGhhdmUgYSBjb250ZXh0IGFscmVhZHkgc2VsZWN0ZWRcblx0XHRpZiAob1VzZUNvbnRleHQgJiYgb1VzZUNvbnRleHQuZ2V0UGF0aCgpID09PSBzVGFyZ2V0UGF0aCkge1xuXHRcdFx0aWYgKG9Vc2VDb250ZXh0ICE9PSBvQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0bGV0IHNob3VsZFJlZnJlc2hDb250ZXh0ID0gZmFsc2U7XG5cdFx0XHRcdC8vIFdlIGFscmVhZHkgaGF2ZSB0aGUgY29udGV4dCB0byBiZSB1c2VkLCBhbmQgaXQncyBub3QgdGhlIGN1cnJlbnQgb25lXG5cblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBGQ0wsIGlmIHdlJ3JlIHJldXNpbmcgYSBjb250ZXh0IGZyb20gYSB0YWJsZSAodGhyb3VnaCBuYXZpZ2F0aW9uKSwgd2UgcmVmcmVzaCBpdCB0byBhdm9pZCBvdXRkYXRlZCBkYXRhXG5cdFx0XHRcdC8vIFdlIGRvbid0IHdhaXQgZm9yIHRoZSByZWZyZXNoIHRvIGJlIGNvbXBsZXRlZCAocmVxdWVzdFJlZnJlc2gpLCBzbyB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHF1ZXJ5IGdvZXMgaW50byB0aGUgc2FtZVxuXHRcdFx0XHQvLyBiYXRjaCBhcyB0aGUgb25lcyBmcm9tIGNvbnRyb2xzIGluIHRoZSBwYWdlLlxuXHRcdFx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSAmJiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uID09PSBOYXZpZ2F0aW9uUmVhc29uLlJvd1ByZXNzKSB7XG5cdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gb1VzZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0XHRpZiAoIW9Vc2VDb250ZXh0LmdldEJpbmRpbmcoKS5oYXNQZW5kaW5nQ2hhbmdlcygpICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBvVXNlQ29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdFx0XHRzaG91bGRSZWZyZXNoQ29udGV4dCA9IHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdHRoaXMuYmFzZS5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKSB8fFxuXHRcdFx0XHRcdFx0KE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBvVXNlQ29udGV4dC5nZXRQYXRoKCkpICYmXG5cdFx0XHRcdFx0XHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGJ1dCB3ZSdyZSBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0LCB3ZSBmb3JjZSB0aGUgcmVmcmVzaCAoZGlzY2FyZGluZyBwZW5kaW5nIGNoYW5nZXMpIGFzIHdlIG5lZWQgdG8gaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24uXG5cdFx0XHRcdFx0XHQvLyBXaGVuIG5hdmlnYXRpbmcgZnJvbSBMUiB0byBPUCwgdGhlIHZpZXcgaXMgbm90IGNvbm5lY3RlZCB5ZXQgLS0+IGNoZWNrIGlmIHdlJ3JlIGluIGRyYWZ0IHdpdGggY29sbGFib3JhdGlvbiBmcm9tIHRoZSBtZXRhbW9kZWxcblx0XHRcdFx0XHRcdG9Vc2VDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdHNob3VsZFJlZnJlc2hDb250ZXh0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fYmluZFBhZ2VUb0NvbnRleHQob1VzZUNvbnRleHQsIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKHNob3VsZFJlZnJlc2hDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5fb0FwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBvVXNlQ29udGV4dCwgb1VzZUNvbnRleHQuZ2V0QmluZGluZygpLmdldEdyb3VwSWQoKSlcblx0XHRcdFx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihgQ2Fubm90IHJlZnJlc2ggY29udGV4dDogJHtlcnJ9YCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uID09PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uKSB7XG5cdFx0XHRcdC8vIFdlIGhhdmUgdGhlIHNhbWUgY29udGV4dCBidXQgYW4gZWRpdGZsb3cgYWN0aW9uIGhhcHBlbmVkIChlLmcuIENhbmNlbERvY3VtZW50IGluIHN0aWNreSBtb2RlKVxuXHRcdFx0XHQvLyAtLT4gV2UgbmVlZCB0byBjYWxsIG9uQmVmb3JlL0FmdGVyQmluZGluZyB0byByZWZyZXNoIHRoZSBvYmplY3QgcGFnZSBwcm9wZXJseVxuXHRcdFx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG9Vc2VDb250ZXh0LCB7XG5cdFx0XHRcdFx0ZWRpdGFibGU6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5iVGFyZ2V0RWRpdGFibGUsXG5cdFx0XHRcdFx0bGlzdEJpbmRpbmc6IG9Vc2VDb250ZXh0LmdldEJpbmRpbmcoKSxcblx0XHRcdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdFx0XHRyZWFzb246IG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24sXG5cdFx0XHRcdFx0c2hvd1BsYWNlaG9sZGVyOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlNob3dQbGFjZWhvbGRlclxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5hZnRlclNldEJpbmRpbmdDb250ZXh0KG9Vc2VDb250ZXh0LCB7IHJlZGlyZWN0ZWRUb05vbkRyYWZ0OiBvTmF2aWdhdGlvblBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0IH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc0N1cnJlbnRQYXRoICE9PSBzVGFyZ2V0UGF0aCB8fCBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uID09PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb250ZXh0IGZvciBpdHMgcGF0aFxuXHRcdFx0dGhpcy5fYmluZFBhZ2VUb0NvbnRleHQodGhpcy5fY3JlYXRlQ29udGV4dChzVGFyZ2V0UGF0aCwgb01vZGVsKSwgb01vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uICE9PSBOYXZpZ2F0aW9uUmVhc29uLkFwcFN0YXRlQ2hhbmdlZCAmJlxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5SZXN0b3JlSGlzdG9yeSAmJlxuXHRcdFx0RWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSAmJlxuXHRcdFx0IW9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiZcblx0XHRcdG9DdXJyZW50Q29udGV4dFxuXHRcdCkge1xuXHRcdFx0dGhpcy5fcmVmcmVzaEJpbmRpbmdDb250ZXh0KG9DdXJyZW50Q29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEJpbmRzIHRoZSBwYWdlIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gYmUgYm91bmRcblx0ICogQHBhcmFtIG9Nb2RlbCBUaGUgT0RhdGEgbW9kZWxcblx0ICogQHBhcmFtIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICovXG5cdF9iaW5kUGFnZVRvQ29udGV4dChvQ29udGV4dDogQ29udGV4dCB8IG51bGwsIG9Nb2RlbDogT0RhdGFNb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiB2b2lkIHtcblx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0dGhpcy5hZnRlclNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9QYXJlbnRMaXN0QmluZGluZyA9IG9Db250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0aWYgKCFvUGFyZW50TGlzdEJpbmRpbmcgfHwgIW9QYXJlbnRMaXN0QmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgcGFyZW50QmluZGluZyBpcyBub3QgYSBsaXN0QmluZGluZywgd2UgY3JlYXRlIGEgbmV3IGNvbnRleHRcblx0XHRcdFx0b0NvbnRleHQgPSB0aGlzLl9jcmVhdGVDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSwgb01vZGVsKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5fc2V0S2VlcEFsaXZlKFxuXHRcdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0ICYmICF0aGlzLl9vQXBwQ29tcG9uZW50LmlzRXhpdGluZyAmJiBvUm9vdFZpZXdDb250cm9sbGVyLmlzQ29udGV4dFVzZWRJblBhZ2VzKG9Db250ZXh0KSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWUgLy8gTG9hZCBtZXNzYWdlcywgb3RoZXJ3aXNlIHRoZXkgZG9uJ3QgZ2V0IHJlZnJlc2hlZCBsYXRlciwgZS5nLiBmb3Igc2lkZSBlZmZlY3RzXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0Ly8gc2V0S2VlcEFsaXZlIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHBhcmVudCBsaXN0YmluZGluZyBkb2Vzbid0IGhhdmUgJCRvd25SZXF1ZXN0PXRydWVcblx0XHRcdFx0Ly8gVGhpcyBjYXNlIGZvciBjdXN0b20gZnJhZ21lbnRzIGlzIHN1cHBvcnRlZCwgYnV0IGFuIGVycm9yIGlzIGxvZ2dlZCB0byBtYWtlIHRoZSBsYWNrIG9mIHN5bmNocm9uaXphdGlvbiBhcHBhcmVudFxuXHRcdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdFx0YFZpZXcgZm9yICR7b0NvbnRleHQuZ2V0UGF0aCgpfSB3b24ndCBiZSBzeW5jaHJvbml6ZWQuIFBhcmVudCBsaXN0QmluZGluZyBtdXN0IGhhdmUgYmluZGluZyBwYXJhbWV0ZXIgJCRvd25SZXF1ZXN0PXRydWVgXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghb1BhcmVudExpc3RCaW5kaW5nIHx8IG9QYXJlbnRMaXN0QmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgY29udGV4dCBvdGhlcndpc2Ugd2UgZ2V0IGVycm9yc1xuXHRcdFx0b0NvbnRleHQgPSB0aGlzLl9jcmVhdGVDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSwgb01vZGVsKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB3aXRoIHRoZSBwcm9wZXIgYmVmb3JlL2FmdGVyIGNhbGxiYWNrc1xuXHRcdHRoaXMuYmVmb3JlU2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQsIHtcblx0XHRcdGVkaXRhYmxlOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlLFxuXHRcdFx0bGlzdEJpbmRpbmc6IG9QYXJlbnRMaXN0QmluZGluZyxcblx0XHRcdGJQZXJzaXN0T1BTY3JvbGw6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0cmVhc29uOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uLFxuXHRcdFx0c2hvd1BsYWNlaG9sZGVyOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlNob3dQbGFjZWhvbGRlclxuXHRcdH0pO1xuXG5cdFx0dGhpcy5fc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQpO1xuXHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCwgeyByZWRpcmVjdGVkVG9Ob25EcmFmdDogb05hdmlnYXRpb25QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgY29udGV4dCBmcm9tIGEgcGF0aC5cblx0ICogQHBhcmFtIHNQYXRoIFRoZSBwYXRoXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRleHRcblx0ICovXG5cdF9jcmVhdGVDb250ZXh0KHNQYXRoOiBzdHJpbmcsIG9Nb2RlbDogT0RhdGFNb2RlbCk6IENvbnRleHQge1xuXHRcdGNvbnN0IG9QYWdlQ29tcG9uZW50ID0gdGhpcy5fb1BhZ2VDb21wb25lbnQsXG5cdFx0XHRzRW50aXR5U2V0ID0gb1BhZ2VDb21wb25lbnQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0RW50aXR5U2V0ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCgpLFxuXHRcdFx0c0NvbnRleHRQYXRoID1cblx0XHRcdFx0KG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldENvbnRleHRQYXRoICYmIG9QYWdlQ29tcG9uZW50LmdldENvbnRleHRQYXRoKCkpIHx8IChzRW50aXR5U2V0ICYmIGAvJHtzRW50aXR5U2V0fWApLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdG1QYXJhbWV0ZXJzOiBCaW5kQ29udGV4dFBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIixcblx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcIiRhdXRvXCIsXG5cdFx0XHRcdCQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHM6IHRydWVcblx0XHRcdH07XG5cdFx0aWYgKHRoaXMuYmFzZS5pbmxpbmVFZGl0Rmxvdy5pc0lubGluZUVkaXRQb3NzaWJsZSgpKSB7XG5cdFx0XHQvLyBpZiBpbmxpbmUgZWRpdCBpcyBlbmFibGVkIG9uIHRoZSBwYWdlIGFuZCB0aGlzIGlzIHRoZSBhY3RpdmUgZW50aXR5LCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZ3JvdXAgaWQgdG8gaW5saW5lXG5cdFx0XHRtUGFyYW1ldGVycy4kJHVwZGF0ZUdyb3VwSWQgPSBzUGF0aC5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5PXRydWVcIikgPyBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQgOiBcIiRhdXRvXCI7XG5cdFx0fVxuXHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQ6ICRzZWxlY3QgdGhlIHN0YXRlIGZsYWdzIChIYXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBhbmQgSXNBY3RpdmVFbnRpdHkpIGFuZCBzZW1hbnRpYyBrZXlzIChmb3IgY3JlYXRpbmcgdGhlIHNlbWFudGljIFVSTClcblx0XHRjb25zdCBvRHJhZnRSb290ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YCk7XG5cdFx0Y29uc3Qgb0RyYWZ0Tm9kZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWApO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IHNDb250ZXh0UGF0aFxuXHRcdFx0PyBvTWV0YU1vZGVsLmdldENvbnRleHQoc0NvbnRleHRQYXRoKSAmJiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCkpXG5cdFx0XHQ6IG51bGw7XG5cdFx0Y29uc3QgYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyA9IE1vZGVsSGVscGVyLmdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVR5cGUgYXMgRW50aXR5VHlwZSxcblx0XHRcdGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VtYW50aWNLZXlzID0gb0RyYWZ0Um9vdFxuXHRcdFx0PyBkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleT8ubWFwKChrZXkpID0+IGtleS52YWx1ZSkgPz8gW11cblx0XHRcdDogW107XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5fZ2V0S2VlcEFsaXZlQ29udGV4dChvTW9kZWwsIHNQYXRoLCBmYWxzZSwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0aWYgKCFvQ29udGV4dCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUga2VlcEFsaXZlIGNvbnRleHQgJHtzUGF0aH1gKTtcblx0XHRcdH0gZWxzZSBpZiAob0RyYWZ0Um9vdCB8fCBvRHJhZnROb2RlKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb1JlcXVlc3QgPSBbXCJIYXNBY3RpdmVFbnRpdHlcIiwgXCJIYXNEcmFmdEVudGl0eVwiLCBcIklzQWN0aXZlRW50aXR5XCJdLmNvbmNhdChzZW1hbnRpY0tleXMpO1xuXHRcdFx0XHRpZiAob0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b0NvbnRleHQucmVxdWVzdFByb3BlcnR5KHByb3BlcnRpZXNUb1JlcXVlc3QpO1xuXHRcdFx0XHRcdGlmIChvRHJhZnRSb290KSB7XG5cdFx0XHRcdFx0XHRvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZHJhZnQgYW5kIGVkaXQgd2UgbmVlZCB0byBlbnN1cmUgdGhvc2UgcHJvcGVydGllcyBhcmUgcmVxdWVzdGVkIGFnYWluIGV2ZW4gaWYgdGhleSBhcmUgaW4gdGhlIGJpbmRpbmcncyBjYWNoZVxuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3aGVuIHlvdSBlZGl0IGFuZCBnbyB0byB0aGUgc2F2ZWQgdmVyc2lvbiB5b3UgaGF2ZSBubyB3YXkgb2Ygc3dpdGNoaW5nIGJhY2sgdG8gdGhlIGVkaXQgdmVyc2lvblxuXHRcdFx0XHRcdG9Db250ZXh0LnJlcXVlc3RTaWRlRWZmZWN0cyhvRHJhZnRSb290ID8gcHJvcGVydGllc1RvUmVxdWVzdC5jb25jYXQoW1wiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIl0pIDogcHJvcGVydGllc1RvUmVxdWVzdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9Db250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9TZWxlY3Q6IHN0cmluZ1tdID0gW107XG5cdFx0XHRpZiAoc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoKTtcblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9TZWxlY3QucHVzaChzTWVzc2FnZXNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRyYWZ0OiAkc2VsZWN0IHRoZSBzdGF0ZSBmbGFncyAoSGFzQWN0aXZlRW50aXR5LCBIYXNEcmFmdEVudGl0eSwgYW5kIElzQWN0aXZlRW50aXR5KVxuXHRcdFx0aWYgKG9EcmFmdFJvb3QgfHwgb0RyYWZ0Tm9kZSkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzVG9TZWxlY3QucHVzaChcIkhhc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0RyYWZ0RW50aXR5XCIsIFwiSXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKC4uLnNlbWFudGljS2V5cyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzVG9TZWxlY3QucHVzaCguLi5hbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzKTtcblxuXHRcdFx0aWYgKHByb3BlcnRpZXNUb1NlbGVjdC5sZW5ndGgpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMuJHNlbGVjdCA9IHByb3BlcnRpZXNUb1NlbGVjdC5qb2luKFwiLFwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0Y29uc3Qgb1ByZXZpb3VzQmluZGluZyA9IHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9QcmV2aW91c0JpbmRpbmcpIHtcblx0XHRcdFx0XHRvTW9kZWwucmVzZXRDaGFuZ2VzKG9QcmV2aW91c0JpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0XHRcdFx0XHRvUHJldmlvdXNCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvSGlkZGVuQmluZGluZyA9IG9Nb2RlbC5iaW5kQ29udGV4dChzUGF0aCwgdW5kZWZpbmVkLCBtUGFyYW1ldGVycyk7XG5cblx0XHRcdG9IaWRkZW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5fb1ZpZXcpO1xuXHRcdFx0XHR0aGlzLmJhc2UubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCh0aGlzLl9vVmlldyk7XG5cdFx0XHR9KTtcblx0XHRcdG9IaWRkZW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm9uRGF0YVJlY2VpdmVkLmJpbmQodGhpcykpO1xuXHRcdFx0cmV0dXJuIG9IaWRkZW5CaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRhc3luYyBvbkRhdGFSZWNlaXZlZChvRXZlbnQ6IEV2ZW50PHsgZXJyb3I6IHsgc3RhdHVzPzogbnVtYmVyOyBjYXVzZT86IHsgc3RhdHVzPzogbnVtYmVyIH07IG1lc3NhZ2U/OiBzdHJpbmcgfSB9Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGVycm9yID0gb0V2ZW50Py5nZXRQYXJhbWV0ZXIoXCJlcnJvclwiKTtcblx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLl9vVmlldykpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuX29WaWV3KTtcblx0XHR9XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdC8vIFRPRE86IGluIGNhc2Ugb2YgNDA0IHRoZSB0ZXh0IHNoYWxsIGJlIGRpZmZlcmVudFxuXHRcdFx0Y29uc3QgbWVzc2FnZUhhbmRsZXIgPSB0aGlzLmJhc2UubWVzc2FnZUhhbmRsZXI7XG5cdFx0XHRsZXQgbVBhcmFtczogU2hvd01lc3NhZ2VzUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0Y29uc3QgZXJyb3JTdGF0dXMgPSBlcnJvci5zdGF0dXMgPz8gZXJyb3IuY2F1c2U/LnN0YXR1cztcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0XHRcdGlmIChlcnJvclN0YXR1cyA9PT0gNTAzKSB7XG5cdFx0XHRcdFx0bVBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdGlzSW5pdGlhbExvYWQ1MDNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHNoZWxsQmFjazogdHJ1ZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSBpZiAoZXJyb3JTdGF0dXMgPT09IDQwMCkge1xuXHRcdFx0XHRcdG1QYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JfREVTQ1JJUFRJT05cIiksXG5cdFx0XHRcdFx0XHRpc0RhdGFSZWNlaXZlZEVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZXJyb3I/Lm1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRpc0RhdGFSZWNlaXZlZEVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdGhlIGNvcmUgcmVzb3VyY2UgYnVuZGxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0bVBhcmFtcy5jb250cm9sID0gdGhpcy5fb1ZpZXc7XG5cdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyhtUGFyYW1zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyLnJlbGVhc2VIb2xkQnlDb250cm9sKHRoaXMuX29WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgc2lkZSBlZmZlY3RzIG9uIGEgYmluZGluZyBjb250ZXh0IHRvIFwicmVmcmVzaFwiIGl0LlxuXHQgKiBUT0RPOiBnZXQgcmlkIG9mIHRoaXMgb25jZSBwcm92aWRlZCBieSB0aGUgbW9kZWxcblx0ICogYSByZWZyZXNoIG9uIHRoZSBiaW5kaW5nIGNvbnRleHQgZG9lcyBub3Qgd29yayBpbiBjYXNlIGEgY3JlYXRpb24gcm93IHdpdGggYSB0cmFuc2llbnQgY29udGV4dCBpc1xuXHQgKiB1c2VkLiBhbHNvIGEgcmVxdWVzdFNpZGVFZmZlY3RzIHdpdGggYW4gZW1wdHkgcGF0aCB3b3VsZCBmYWlsIGR1ZSB0byB0aGUgdHJhbnNpZW50IGNvbnRleHRcblx0ICogdGhlcmVmb3JlIHdlIGdldCBhbGwgZGVwZW5kZW50IGJpbmRpbmdzICh2aWEgcHJpdmF0ZSBtb2RlbCBtZXRob2QpIHRvIGRldGVybWluZSBhbGwgcGF0aHMgYW5kIHRoZW5cblx0ICogcmVxdWVzdCB0aGVtLlxuXHQgKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0IENvbnRleHQgdG8gYmUgcmVmcmVzaGVkXG5cdCAqL1xuXHRfcmVmcmVzaEJpbmRpbmdDb250ZXh0KG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9QYWdlQ29tcG9uZW50ID0gdGhpcy5fb1BhZ2VDb21wb25lbnQ7XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0Y29uc3Qgc1Jvb3RDb250ZXh0UGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc0VudGl0eVNldCA9IG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKTtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPVxuXHRcdFx0KG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldENvbnRleHRQYXRoICYmIG9QYWdlQ29tcG9uZW50LmdldENvbnRleHRQYXRoKCkpIHx8IChzRW50aXR5U2V0ICYmIGAvJHtzRW50aXR5U2V0fWApO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoO1xuXHRcdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBhUHJvcGVydHlQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSA9IHtcblx0XHRcdHRhcmdldFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0dGFyZ2V0RW50aXRpZXM6IFtdXG5cdFx0fTtcblxuXHRcdGZ1bmN0aW9uIGdldEJpbmRpbmdQYXRocyhvQmluZGluZzogQmluZGluZyk6IHZvaWQge1xuXHRcdFx0bGV0IGFEZXBlbmRlbnRCaW5kaW5ncztcblx0XHRcdGNvbnN0IHNSZWxhdGl2ZVBhdGggPSAob0JpbmRpbmcuZ2V0Q29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIikucmVwbGFjZShzUm9vdENvbnRleHRQYXRoLCBcIlwiKTsgLy8gSWYgbm8gY29udGV4dCwgdGhpcyBpcyBhbiBhYnNvbHV0ZSBiaW5kaW5nIHNvIG5vIHJlbGF0aXZlIHBhdGhcblx0XHRcdGNvbnN0IHNQYXRoID0gKHNSZWxhdGl2ZVBhdGggPyBgJHtzUmVsYXRpdmVQYXRoLnNsaWNlKDEpfS9gIDogc1JlbGF0aXZlUGF0aCkgKyBvQmluZGluZy5nZXRQYXRoKCk7XG5cblx0XHRcdGlmIChvQmluZGluZy5pc0E8T0RhdGFDb250ZXh0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHQvLyBpZiAoc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0Ly8gbm93IGdldCB0aGUgZGVwZW5kZW50IGJpbmRpbmdzXG5cdFx0XHRcdGFEZXBlbmRlbnRCaW5kaW5ncyA9IG9CaW5kaW5nLmdldERlcGVuZGVudEJpbmRpbmdzKCk7XG5cdFx0XHRcdGlmIChhRGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdFx0XHQvLyBhc2sgdGhlIGRlcGVuZGVudCBiaW5kaW5ncyAoYW5kIG9ubHkgdGhvc2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGdyb3VwSWRcblx0XHRcdFx0XHQvL2lmIChhRGVwZW5kZW50QmluZGluZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhRGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdFx0XHRcdGdldEJpbmRpbmdQYXRocyhpdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0aWYgKCFhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMuaW5jbHVkZXMoc1BhdGgpKSB7XG5cdFx0XHRcdFx0YU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLnB1c2goc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nLmlzQTxPRGF0YVByb3BlcnR5QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIikpIHtcblx0XHRcdFx0aWYgKCFhUHJvcGVydHlQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhUHJvcGVydHlQYXRocy5wdXNoKHNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzQ29udGV4dFBhdGgpIHtcblx0XHRcdHNNZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoKTtcblx0XHR9XG5cblx0XHQvLyBiaW5kaW5nIG9mIHRoZSBjb250ZXh0IG11c3QgaGF2ZSAkJFBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIHRydWUsIHRoaXMgYm91bmQgY29udGV4dCBtYXkgYmUgbmVlZGVkIHRvIGJlIGZldGNoZWQgZnJvbSB0aGUgZGVwZW5kZW50IGJpbmRpbmdcblx0XHRnZXRCaW5kaW5nUGF0aHMob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSk7XG5cblx0XHRsZXQgaTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMucHVzaCh7XG5cdFx0XHRcdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhTmF2aWdhdGlvblByb3BlcnR5UGF0aHNbaV1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA9IGFQcm9wZXJ0eVBhdGhzO1xuXHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcy5wdXNoKHNNZXNzYWdlc1BhdGgpO1xuXHRcdH1cblx0XHQvL2FsbCB0aGlzIGxvZ2ljIHRvIGJlIHJlcGxhY2VkIHdpdGggYSBTaWRlRWZmZWN0cyByZXF1ZXN0IGZvciBhbiBlbXB0eSBwYXRoIChyZWZyZXNoIGV2ZXJ5dGhpbmcpLCBhZnRlciB0ZXN0aW5nIHRyYW5zaWVudCBjb250ZXh0c1xuXHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzID0gb1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucmVkdWNlKCh0YXJnZXRzOiBzdHJpbmdbXSwgdGFyZ2V0UHJvcGVydHkpID0+IHtcblx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IHRhcmdldFByb3BlcnR5LmluZGV4T2YoXCIvXCIpO1xuXHRcdFx0XHR0YXJnZXRzLnB1c2goaW5kZXggPiAwID8gdGFyZ2V0UHJvcGVydHkuc2xpY2UoMCwgaW5kZXgpIDogdGFyZ2V0UHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhcmdldHM7XG5cdFx0fSwgW10pO1xuXHRcdC8vIE9EYXRhIG1vZGVsIHdpbGwgdGFrZSBjYXJlIG9mIGR1cGxpY2F0ZXNcblx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbLi4ub1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLCAuLi5vU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllc10sIG9CaW5kaW5nQ29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIG9yIHRoZSBjb21wb25lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGNvbnRleHRcblx0ICovXG5cdF9nZXRCaW5kaW5nQ29udGV4dCgpOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIG9yIHRoZSBjb21wb25lbnQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRfc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQ6IENvbnRleHQgfCBudWxsKTogdm9pZCB7XG5cdFx0bGV0IG9QcmV2aW91c0NvbnRleHQsIG9UYXJnZXRDb250cm9sO1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0b1ByZXZpb3VzQ29udGV4dCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdG9UYXJnZXRDb250cm9sID0gdGhpcy5fb1BhZ2VDb21wb25lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9QcmV2aW91c0NvbnRleHQgPSB0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0b1RhcmdldENvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHR9XG5cblx0XHRvVGFyZ2V0Q29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cblx0XHRpZiAob1ByZXZpb3VzQ29udGV4dD8uaXNLZWVwQWxpdmUoKSAmJiBvUHJldmlvdXNDb250ZXh0ICE9PSBvQ29udGV4dCkge1xuXHRcdFx0dGhpcy5fc2V0S2VlcEFsaXZlKG9QcmV2aW91c0NvbnRleHQsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZmxleGlibGUgY29sdW1uIGxheW91dCAoRkNMKSBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSB2aWV3ICgtMSBpZiB0aGUgYXBwIGlzIG5vdCBGQ0wpLlxuXHQgKiBAcmV0dXJucyBUaGUgbGV2ZWxcblx0ICovXG5cdGdldEZDTExldmVsKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX29UYXJnZXRJbmZvcm1hdGlvbi5GQ0xMZXZlbDtcblx0fVxuXG5cdF9zZXRLZWVwQWxpdmUoXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0YktlZXBBbGl2ZTogYm9vbGVhbixcblx0XHRmbkJlZm9yZURlc3Ryb3k/OiBQYXJhbWV0ZXJzPENvbnRleHRbXCJzZXRLZWVwQWxpdmVcIl0+WzFdLFxuXHRcdGJSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGlmIChvQ29udGV4dC5nZXRQYXRoKCkuZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHQvLyBXZSBrZWVwIHRoZSBjb250ZXh0IGFsaXZlIG9ubHkgaWYgdGhleSdyZSBwYXJ0IG9mIGEgY29sbGVjdGlvbiwgaS5lLiBpZiB0aGUgcGF0aCBlbmRzIHdpdGggYSAnKSdcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBzTWV0YVBhdGgpO1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGJLZWVwQWxpdmUsIGZuQmVmb3JlRGVzdHJveSwgISFzTWVzc2FnZXNQYXRoICYmIGJSZXF1ZXN0TWVzc2FnZXMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRLZWVwQWxpdmVDb250ZXh0KFxuXHRcdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRwYXRoOiBzdHJpbmcsXG5cdFx0YlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4sXG5cdFx0cGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVyc1xuXHQpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHQvLyBHZXQgdGhlIHBhdGggZm9yIHRoZSBjb250ZXh0IHRoYXQgaXMgcmVhbGx5IGtlcHQgYWxpdmUgKHBhcnQgb2YgYSBjb2xsZWN0aW9uKVxuXHRcdC8vIGkuZS4gcmVtb3ZlIGFsbCBzZWdtZW50cyBub3QgZW5kaW5nIHdpdGggYSAnKSdcblx0XHRjb25zdCBrZXB0QWxpdmVTZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGNvbnN0IGFkZGl0aW9ubmFsU2VnbWVudHM6IHN0cmluZ1tdID0gW107XG5cdFx0d2hpbGUgKGtlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCAmJiAha2VwdEFsaXZlU2VnbWVudHNba2VwdEFsaXZlU2VnbWVudHMubGVuZ3RoIC0gMV0uZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHRhZGRpdGlvbm5hbFNlZ21lbnRzLnB1c2goa2VwdEFsaXZlU2VnbWVudHMucG9wKCkhKTtcblx0XHR9XG5cblx0XHRpZiAoa2VwdEFsaXZlU2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtlcHRBbGl2ZVBhdGggPSBrZXB0QWxpdmVTZWdtZW50cy5qb2luKFwiL1wiKTtcblx0XHRjb25zdCBvS2VlcEFsaXZlQ29udGV4dCA9IG9Nb2RlbC5nZXRLZWVwQWxpdmVDb250ZXh0KGtlcHRBbGl2ZVBhdGgsIGJSZXF1ZXN0TWVzc2FnZXMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKGFkZGl0aW9ubmFsU2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gb0tlZXBBbGl2ZUNvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFkZGl0aW9ubmFsU2VnbWVudHMucmV2ZXJzZSgpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25uYWxQYXRoID0gYWRkaXRpb25uYWxTZWdtZW50cy5qb2luKFwiL1wiKTtcblx0XHRcdHJldHVybiBvTW9kZWwuYmluZENvbnRleHQoYWRkaXRpb25uYWxQYXRoLCBvS2VlcEFsaXZlQ29udGV4dCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN3aXRjaGVzIGJldHdlZW4gY29sdW1uIGFuZCBmdWxsLXNjcmVlbiBtb2RlIHdoZW4gRkNMIGlzIHVzZWQuXG5cdCAqXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRzd2l0Y2hGdWxsU2NyZWVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Tb3VyY2UgPSB0aGlzLmJhc2UuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9GQ0xIZWxwZXJNb2RlbCA9IG9Tb3VyY2UuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIiksXG5cdFx0XHRiSXNGdWxsU2NyZWVuID0gb0ZDTEhlbHBlck1vZGVsLmdldFByb3BlcnR5KFwiL2FjdGlvbkJ1dHRvbnNJbmZvL2lzRnVsbFNjcmVlblwiKSxcblx0XHRcdHNOZXh0TGF5b3V0ID0gb0ZDTEhlbHBlck1vZGVsLmdldFByb3BlcnR5KFxuXHRcdFx0XHRiSXNGdWxsU2NyZWVuID8gXCIvYWN0aW9uQnV0dG9uc0luZm8vZXhpdEZ1bGxTY3JlZW5cIiA6IFwiL2FjdGlvbkJ1dHRvbnNJbmZvL2Z1bGxTY3JlZW5cIlxuXHRcdFx0KSxcblx0XHRcdG9Sb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSAob1Jvb3RWaWV3Q29udHJvbGxlciBhcyBGY2xDb250cm9sbGVyKS5nZXRSaWdodG1vc3RDb250ZXh0XG5cdFx0XHQ/IChvUm9vdFZpZXdDb250cm9sbGVyIGFzIEZjbENvbnRyb2xsZXIpLmdldFJpZ2h0bW9zdENvbnRleHQoKSFcblx0XHRcdDogb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0dGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KG9Db250ZXh0LCB7IGxheW91dDogc05leHRMYXlvdXQgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJjYW5ub3Qgc3dpdGNoIGJldHdlZW4gY29sdW1uIGFuZCBmdWxsc2NyZWVuXCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgY29sdW1uIGZvciB0aGUgY3VycmVudCB2aWV3IGluIGEgRkNMLlxuXHQgKlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkJlZm9yZSlcblx0YXN5bmMgY2xvc2VDb2x1bW4oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdG5vUHJlc2VydmF0aW9uQ2FjaGU6IHRydWUsXG5cdFx0XHRsYXlvdXQ6IHRoaXMuX29WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLmdldFByb3BlcnR5KFwiL2FjdGlvbkJ1dHRvbnNJbmZvL2Nsb3NlQ29sdW1uXCIpXG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpPy5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLl9vQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdC5lbmFibGVkO1xuXG5cdFx0aWYgKCFpc0RvY3VtZW50TW9kaWZpZWQgJiYgaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRza2lwRGlzY2FyZFBvcG92ZXI6IHRydWUsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvbjogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSBpZiAob1ZpZXdEYXRhPy52aWV3TGV2ZWwgPT09IDEgJiYgTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBvQ29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdC8vIFdlIGRvbid0IGhhdmUgY2FsbEV4dGVuc2lvbj10cnVlIGluIHRoaXMgY2FzZSwgYXMgdGhlcmUncyBhIHVzZXIgdmFsaWRhdGlvbiB3aXRoIHRoZSBkYXRhbG9zcyBkaWFsb2dcblx0XHRcdFx0XHQvLyBhbmQgaXQgd291bGRuJ3QgbWFrZSBzZW5zZSB0byBjYW5jZWwgdGhlIG5hdmlnYXRpb24gYWZ0ZXIgdGhpcyBjb25maXJtYXRpb25cblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0LCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMuX29WaWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLmNhbGxFeHRlbnNpb24gPSB0cnVlO1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmVzIHRyYW5zaXRpb24gbWVzc2FnZSBmb3IgdGhlIHNwZWNpZmllZCBjb250ZXh0XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQob0NvbnRleHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVybmFsUm91dGluZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQ0E7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUtNQSxlQUFlLElBQUFDLElBQUEsR0FEcEJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBb0JqRUMsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU9oQkQsY0FBYyxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQXdDaEJDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBQyxLQUFBLEdBS25DTCxlQUFlLENBQUMsQ0FBQyxFQUFBTSxLQUFBLEdBQ2pCSixVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUcsS0FBQSxHQUtuQ1AsZUFBZSxDQUFDLENBQUMsRUFBQVEsS0FBQSxHQUNqQk4sVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQUFLLE1BQUEsR0FXbkNULGVBQWUsQ0FBQyxDQUFDLEVBQUFV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
|
|
988
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbFJvdXRpbmciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfZGVjNCIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiQmVmb3JlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyRXh0ZW5zaW9uIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uRXhpdCIsIl9vUm91dGluZ1NlcnZpY2UiLCJfZm5Sb3V0ZU1hdGNoZWRCb3VuZCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIm9uSW5pdCIsIl9vVmlldyIsImJhc2UiLCJnZXRWaWV3IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIl9vUGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiX29Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJfb1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJFcnJvciIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1JvdXRpbmdTZXJ2aWNlIiwiaXNBIiwiX29uUm91dGVNYXRjaGVkIiwiYmluZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIl9vVGFyZ2V0SW5mb3JtYXRpb24iLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNhdGNoIiwib25Sb3V0ZU1hdGNoZWQiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25CZWZvcmVCaW5kaW5nIiwiX2JpbmRpbmdDb250ZXh0IiwiX21QYXJhbWV0ZXJzIiwiYmVmb3JlU2V0QmluZGluZ0NvbnRleHQiLCJiaW5kaW5nQ29udGV4dCIsIm9Sb3V0aW5nIiwiZ2V0Q29udHJvbGxlciIsInJvdXRpbmciLCJvbkFmdGVyQmluZGluZyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIm9uQ29udGV4dEJvdW5kVG9WaWV3IiwiYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dCIsImRlZmVycmVkQ3JlYXRpb24iLCJuYXZpZ2F0ZVRvVGFyZ2V0Iiwib0NvbnRleHQiLCJzTmF2aWdhdGlvblRhcmdldE5hbWUiLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwib05hdmlnYXRpb25Db25maWd1cmF0aW9uIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJvRGV0YWlsUm91dGUiLCJkZXRhaWwiLCJzUm91dGVOYW1lIiwicm91dGUiLCJtUGFyYW1ldGVyTWFwcGluZyIsInBhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvIiwiZ2V0SGFzaEZvck5hdmlnYXRpb24iLCJjb250ZXh0IiwibmF2aWdhdGlvblRhcmdldE5hbWUiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsImRldGFpbFJvdXRlIiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvQ29udGV4dCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwibW9kZSIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsImNyZWF0ZUNvbnRleHRQcm9taXNlIiwiY3JlYXRlZENvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsImVkaXRhYmxlIiwicGVyc2lzdE9QU2Nyb2xsIiwidXBkYXRlRkNMTGV2ZWwiLCJmb3JjZUZvY3VzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJjYWxsRXh0ZW5zaW9uIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJjb250ZXh0VG9OYXZpZ2F0ZSIsImhpZGRlbkJpbmRpbmciLCJiYWNrUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsImdldFBhdGgiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm92ZXJyaWRlTmF2Iiwib25CZWZvcmVOYXZpZ2F0aW9uIiwiZGVzdHJveSIsIlByb21pc2UiLCJyZXNvbHZlIiwiRkNMTGV2ZWwiLCJnZXRGQ0xMZXZlbCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJSb3dQcmVzcyIsIm1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNQYXRoT25EcmFmdFJvb3QiLCJjb250ZXh0Rm9yTmF2aWdhdGlvbiIsImdldENvbnRleHRGb3JOYXZpZ2F0aW9uV2l0aENvbGxhYm9yYXRpb24iLCJnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUiLCJnZXRWaWV3RGF0YSIsIm9yaWdpbmFsQ29udGV4dCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJnZXRQcm9wZXJ0eSIsImRyYWZ0T3JBY3RpdmVDb250ZXh0IiwiZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0TWV0YUNvbnRleHQiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsInRhcmdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVySW5mbyIsIlR5cGVOYW1lIiwibmFtZSIsImlzRmNsRW5hYmxlZCIsImNvbnRleHRUb1JlcGxhY2VXaXRoIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsInJlcGxhY2VXaXRoIiwiRWRpdFN0YXRlIiwic2V0RWRpdFN0YXRlRGlydHkiLCJwYXJlbnRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJncm91cCIsImFnZ3JlZ2F0ZSIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwibmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJuYXZpZ2F0ZUJhY2tGcm9tVHJhbnNpZW50U3RhdGUiLCJzSGFzaCIsImdldEhhc2giLCJpbmNsdWRlcyIsIm5hdkJhY2siLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJzRXJyb3JNZXNzYWdlIiwibVBhcmFtZXRlcnMiLCJuYXZUb0hhc2giLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsImRpc3BsYXlFcnJvclBhZ2UiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJfaXNWaWV3UGFydE9mUm91dGUiLCJyb3V0ZUluZm9ybWF0aW9uIiwiYVRhcmdldHMiLCJ0YXJnZXRzIiwidGFyZ2V0TmFtZSIsInZpZXdMZXZlbCIsInJvdXRlTGV2ZWwiLCJnZXRSb3V0aW5nU2VydmljZSIsImFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZSIsInNldFRpbWVvdXQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJfc2V0QmluZGluZ0NvbnRleHQiLCJfYnVpbGRCaW5kaW5nUGF0aCIsInJvdXRlQXJndW1lbnRzIiwiYmluZGluZ1BhdHRlcm4iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsInBhdGgiLCJyZXBsYWNlIiwiZGVmZXJyZWQiLCJzS2V5Iiwic1ZhbHVlIiwiYlRhcmdldEVkaXRhYmxlIiwiYkFjdGlvbkNyZWF0ZSIsIm9FdmVudCIsImdldFBhcmFtZXRlciIsImdldEJpbmRpbmdDb250ZXh0UGF0dGVybiIsImNvbnRleHRQYXR0ZXJuIiwibUFyZ3VtZW50cyIsImdldFBhcmFtZXRlcnMiLCJvTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJiaW5kUHJvbWlzZSIsIm9Nb2RlbCIsIl9iaW5kRGVmZXJyZWQiLCJFZGl0Rmxvd0FjdGlvbiIsImlzT3BlbkluRWRpdE1vZGUiLCJfYmluZFBhZ2VGb3JFZGl0IiwiX2JpbmRQYWdlIiwiZmluYWxseSIsInRvU3RyaW5nIiwidXBkYXRlVUlTdGF0ZUZvclZpZXciLCJ0YXJnZXRQYXRoIiwiY3JlYXRlRGVmZXJyZWRDb250ZXh0IiwibGlzdEJpbmRpbmciLCJwYXJlbnRDb250ZXh0IiwiZGF0YSIsIl9iaW5kUGFnZVRvQ29udGV4dCIsInRlY2huaWNhbFBhdGgiLCJyZXNvbHZlUGF0aCIsImlzU3RpY2t5RWRpdE1vZGUiLCJpc1N0aWNreSIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImFjdGl2ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiX2NyZWF0ZUNvbnRleHQiLCJlZGl0RmxvdyIsImVkaXREb2N1bWVudCIsIl9iaW5kUGFnZVRvUGF0aCIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiZSIsIm1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VzIiwic1RhcmdldFBhdGgiLCJvQ3VycmVudENvbnRleHQiLCJfZ2V0QmluZGluZ0NvbnRleHQiLCJzQ3VycmVudFBhdGgiLCJvVXNlQ29udGV4dCIsIm9Sb290Vmlld0NvbnRyb2xsZXIiLCJzaG91bGRSZWZyZXNoQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiaXNEcmFmdFN1cHBvcnRlZCIsInJlc2V0Q2hhbmdlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0R3JvdXBJZCIsImVyciIsImJQZXJzaXN0T1BTY3JvbGwiLCJzaG93UGxhY2Vob2xkZXIiLCJiU2hvd1BsYWNlaG9sZGVyIiwiQXBwU3RhdGVDaGFuZ2VkIiwiUmVzdG9yZUhpc3RvcnkiLCJpc0VkaXRTdGF0ZURpcnR5IiwiX3JlZnJlc2hCaW5kaW5nQ29udGV4dCIsIm9QYXJlbnRMaXN0QmluZGluZyIsIl9zZXRLZWVwQWxpdmUiLCJpc0V4aXRpbmciLCJpc0NvbnRleHRVc2VkSW5QYWdlcyIsInNQYXRoIiwib1BhZ2VDb21wb25lbnQiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJvTWV0YU1vZGVsIiwiJCRncm91cElkIiwiJCR1cGRhdGVHcm91cElkIiwiJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyIsImlubGluZUVkaXRGbG93IiwiaXNJbmxpbmVFZGl0UG9zc2libGUiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJvRHJhZnRSb290IiwiZ2V0T2JqZWN0Iiwib0RyYWZ0Tm9kZSIsImRhdGFNb2RlbE9iamVjdCIsImdldENvbnRleHQiLCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsInRhcmdldEVudGl0eVNldCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5IiwibWFwIiwia2V5IiwidmFsdWUiLCJfZ2V0S2VlcEFsaXZlQ29udGV4dCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJjb25jYXQiLCJyZXF1ZXN0UHJvcGVydHkiLCJyZXF1ZXN0T2JqZWN0IiwicHJvcGVydGllc1RvU2VsZWN0Iiwic01lc3NhZ2VzUGF0aCIsImdldE1lc3NhZ2VzUGF0aCIsInB1c2giLCIkc2VsZWN0Iiwiam9pbiIsIm9QcmV2aW91c0JpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwib0hpZGRlbkJpbmRpbmciLCJhdHRhY2hFdmVudE9uY2UiLCJCdXN5TG9ja2VyIiwibG9jayIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJvbkRhdGFSZWNlaXZlZCIsImJvdW5kQ29udGV4dCIsImFkZFNlbGYiLCJpc0xvY2tlZCIsInVubG9jayIsIm1QYXJhbXMiLCJlcnJvclN0YXR1cyIsInN0YXR1cyIsImNhdXNlIiwib1Jlc291cmNlQnVuZGxlIiwiaXNJbml0aWFsTG9hZDUwM0Vycm9yIiwic2hlbGxCYWNrIiwiaXNEYXRhUmVjZWl2ZWRFcnJvciIsImNvbnRyb2wiLCJyZWxlYXNlSG9sZEJ5Q29udHJvbCIsIm9CaW5kaW5nQ29udGV4dCIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJzUm9vdENvbnRleHRQYXRoIiwiYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzIiwiYVByb3BlcnR5UGF0aHMiLCJvU2lkZUVmZmVjdHMiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwidGFyZ2V0RW50aXRpZXMiLCJnZXRCaW5kaW5nUGF0aHMiLCJvQmluZGluZyIsImFEZXBlbmRlbnRCaW5kaW5ncyIsInNSZWxhdGl2ZVBhdGgiLCJzbGljZSIsImdldERlcGVuZGVudEJpbmRpbmdzIiwiaXRlbSIsImkiLCJyZWR1Y2UiLCJ0YXJnZXRQcm9wZXJ0eSIsImluZGV4IiwiaW5kZXhPZiIsIm9QcmV2aW91c0NvbnRleHQiLCJvVGFyZ2V0Q29udHJvbCIsInNldEJpbmRpbmdDb250ZXh0IiwiaXNLZWVwQWxpdmUiLCJiS2VlcEFsaXZlIiwiZm5CZWZvcmVEZXN0cm95IiwiYlJlcXVlc3RNZXNzYWdlcyIsImVuZHNXaXRoIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzZXRLZWVwQWxpdmUiLCJrZXB0QWxpdmVTZWdtZW50cyIsInNwbGl0IiwiYWRkaXRpb25uYWxTZWdtZW50cyIsInBvcCIsImtlcHRBbGl2ZVBhdGgiLCJvS2VlcEFsaXZlQ29udGV4dCIsInJldmVyc2UiLCJhZGRpdGlvbm5hbFBhdGgiLCJzd2l0Y2hGdWxsU2NyZWVuIiwib1NvdXJjZSIsIm9GQ0xIZWxwZXJNb2RlbCIsImJJc0Z1bGxTY3JlZW4iLCJzTmV4dExheW91dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJfcm91dGluZyIsImxheW91dCIsIndhcm5pbmciLCJjbG9zZUNvbHVtbiIsIm9WaWV3RGF0YSIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJza2lwQmFja05hdmlnYXRpb24iLCJjYW5jZWxEb2N1bWVudCIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0IiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgeyBnZXREcmFmdE9yQWN0aXZlQ29udGV4dCwgaXNQYXRoT25EcmFmdFJvb3QsIHJlc29sdmVQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvQ29udGV4dFBhdGhIZWxwZXJcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nTmF2aWdhdGlvbkluZm8sIFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycywgUm91dGluZ1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvUm91dGluZ1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nVGFyZ2V0IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwiLi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNUYXJnZXRUeXBlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB7IGFkZFNlbGYgfSBmcm9tIFwiLi9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCIuL2VkaXRGbG93L2VkaXRGbG93Q29uc3RhbnRzXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuXG50eXBlIFJvdXRlSW5mb3JtYXRpb24gPSB7XG5cdHRhcmdldHM/OiB1bmtub3duW107XG5cdHJvdXRlTGV2ZWw6IG51bWJlcjtcbn07XG4vKipcbiAqIHtAbGluayBzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvbiBDb250cm9sbGVyIGV4dGVuc2lvbn1cbiAqIEBzaW5jZSAxLjc0LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxSb3V0aW5nXCIpXG5jbGFzcyBJbnRlcm5hbFJvdXRpbmcgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJpdmF0ZSBfb1ZpZXchOiBGRVZpZXc7XG5cblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblxuXHRwcml2YXRlIF9vUGFnZUNvbXBvbmVudCE6IEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PiB8IG51bGw7XG5cblx0cHJpdmF0ZSBfb1JvdXRlciE6IFJvdXRlcjtcblxuXHRwcml2YXRlIF9vUm91dGluZ1NlcnZpY2UhOiBSb3V0aW5nU2VydmljZTtcblxuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblxuXHRwcml2YXRlIF9mblJvdXRlTWF0Y2hlZEJvdW5kPzogRnVuY3Rpb247XG5cblx0cHJvdGVjdGVkIF9vVGFyZ2V0SW5mb3JtYXRpb24hOiBSb3V0aW5nVGFyZ2V0O1xuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fb1JvdXRpbmdTZXJ2aWNlICYmIHRoaXMuX2ZuUm91dGVNYXRjaGVkQm91bmQpIHtcblx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZS5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuX29WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl9vVmlldykgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+O1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblxuXHRcdGlmICghdGhpcy5fb0FwcENvbXBvbmVudCB8fCAhdGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRyb2xlciBleHRlbnNpb24gJ3NhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlc2lvbnMuSW50ZXJuYWxSb3V0aW5nXCIpO1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHRoaXMuX29BcHBDb21wb25lbnQgPT09IHRoaXMuX29QYWdlQ29tcG9uZW50KSB7XG5cdFx0XHQvLyBUaGUgdmlldyBpc24ndCBob3N0ZWQgaW4gYSBkZWRpY2F0ZWQgVUlDb21wb25lbnQsIGJ1dCBkaXJlY3RseSBpbiB0aGUgYXBwXG5cdFx0XHQvLyAtLT4ganVzdCBrZWVwIHRoZSB2aWV3XG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKVxuXHRcdFx0LnRoZW4oKG9Sb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlID0gb1JvdXRpbmdTZXJ2aWNlO1xuXHRcdFx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQ/LmlzQShcInNhcC5mZS5jb3JlLlJldXNlQ29tcG9uZW50XCIpICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Ly8gUmV1c2UgY29tcG9uZW50cyBjYW4gcG90ZW50aWFsbHkgZW1iZWQgYSB2aWV3IHdpdGggYSBwYWdlIGNvbnRyb2xsZXIsIHdlIHdhbnQgdG8gYXZvaWQgYXR0YWNoaW5nIHRoZSByb3V0ZSBtYXRjaGVkIGV2ZW50IGluIHRoaXMgY2FzZVxuXHRcdFx0XHRcdHRoaXMuX2ZuUm91dGVNYXRjaGVkQm91bmQgPSB0aGlzLl9vblJvdXRlTWF0Y2hlZC5iaW5kKHRoaXMpO1xuXHRcdFx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZS5hdHRhY2hSb3V0ZU1hdGNoZWQoe30sIHRoaXMuX2ZuUm91dGVNYXRjaGVkQm91bmQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX29UYXJnZXRJbmZvcm1hdGlvbiA9IG9Sb3V0aW5nU2VydmljZS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcih0aGlzLl9vUGFnZUNvbXBvbmVudCB8fCB0aGlzLl9vVmlldykhID8/IHt9O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBjb250cm9sbGVyIGV4dGVuc2lvbiBjYW5ub3Qgd29yayB3aXRob3V0IGEgJ3JvdXRpbmdTZXJ2aWNlJyBvbiB0aGUgbWFpbiBBcHBDb21wb25lbnRcIik7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VyZWQgZXZlcnkgdGltZSB0aGlzIGNvbnRyb2xsZXIgaXMgYSBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25Sb3V0ZU1hdGNoZWQoKTogdm9pZCB7XG5cdFx0LyoqL1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJvdXRlTWF0Y2hlZEZpbmlzaGVkKCk6IHZvaWQge1xuXHRcdC8qKi9cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25CZWZvcmVCaW5kaW5nKF9iaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHt9XG5cblx0YmVmb3JlU2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBfbVBhcmFtZXRlcnM/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5vbkJlZm9yZUJpbmRpbmcoYmluZGluZ0NvbnRleHQsIF9tUGFyYW1ldGVycyk7XG5cdFx0Y29uc3Qgb1JvdXRpbmcgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5yb3V0aW5nO1xuXHRcdGlmIChvUm91dGluZyAmJiBvUm91dGluZy5vbkJlZm9yZUJpbmRpbmcpIHtcblx0XHRcdG9Sb3V0aW5nLm9uQmVmb3JlQmluZGluZyhiaW5kaW5nQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLm9uQ29udGV4dEJvdW5kVG9WaWV3KGJpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdGFmdGVyU2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBfbVBhcmFtZXRlcnM/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLm9uQWZ0ZXJCaW5kaW5nKGJpbmRpbmdDb250ZXh0LCB7IC4uLl9tUGFyYW1ldGVycywgZGVmZXJyZWRDcmVhdGlvbjogdHJ1ZSB9KTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQWZ0ZXJCaW5kaW5nKSB7XG5cdFx0XHRvUm91dGluZy5vbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gTWV0aG9kcyB0cmlnZ2VyaW5nIGEgbmF2aWdhdGlvbiBhZnRlciBhIHVzZXIgYWN0aW9uXG5cdC8vIChlLmcuIGNsaWNrIG9uIGEgdGFibGUgcm93LCBidXR0b24sIGV0Yy4uLilcblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBzTmF2aWdhdGlvblRhcmdldE5hbWUgTmFtZSBvZiB0aGUgbmF2aWdhdGlvbiB0YXJnZXRcblx0ICogQHBhcmFtIGJQcmVzZXJ2ZUhpc3RvcnkgVHJ1ZSB0byBmb3JjZSB0aGUgbmV3IFVSTCB0byBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBicm93c2VyIGhpc3RvcnkgKG5vIHJlcGxhY2UpXG5cdCAqIEBwYXJhbSBkZWxheWVkVXNhZ2UgVHJ1ZSB0byByZXR1cm4gYSBmdW5jdGlvbiBmb3IgZXhlY3V0aW5nIHRoZSBuYXZpZ2F0aW9uLCBGYWxzZSB0byBleGVjdXRlIHRoZSBuYXZpZ2F0aW9uIGltbWVkaWF0ZWx5XG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvVGFyZ2V0KFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNOYXZpZ2F0aW9uVGFyZ2V0TmFtZTogc3RyaW5nLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IHRydWVcblx0KTogUHJvbWlzZTwoKSA9PiB2b2lkPjtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVUb1RhcmdldChcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzTmF2aWdhdGlvblRhcmdldE5hbWU6IHN0cmluZyxcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD4ge1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiA9XG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCAmJlxuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24gJiZcblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50LmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKHNOYXZpZ2F0aW9uVGFyZ2V0TmFtZSk7XG5cdFx0aWYgKG9OYXZpZ2F0aW9uQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3Qgb0RldGFpbFJvdXRlID0gb05hdmlnYXRpb25Db25maWd1cmF0aW9uLmRldGFpbDtcblx0XHRcdGNvbnN0IHNSb3V0ZU5hbWUgPSBvRGV0YWlsUm91dGUucm91dGU7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVyTWFwcGluZyA9IG9EZXRhaWxSb3V0ZS5wYXJhbWV0ZXJzO1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvKG9Db250ZXh0LCBzUm91dGVOYW1lLCBtUGFyYW1ldGVyTWFwcGluZywgYlByZXNlcnZlSGlzdG9yeSwgZGVsYXllZFVzYWdlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvKG9Db250ZXh0LCBudWxsLCBudWxsLCBiUHJlc2VydmVIaXN0b3J5LCBkZWxheWVkVXNhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEhhc2ggd2UncmUgbmF2aWdhdGluZyB0by5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblRhcmdldE5hbWUgTmFtZSBvZiB0aGUgbmF2aWdhdGlvbiB0YXJnZXRcblx0ICogQHJldHVybnMgVGhlIEhhc2ggd2UncmUgbmF2aWdhdGluZyB0b1xuXHQgKi9cblx0YXN5bmMgZ2V0SGFzaEZvck5hdmlnYXRpb24oY29udGV4dDogQ29udGV4dCwgbmF2aWdhdGlvblRhcmdldE5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24gPSB0aGlzPy5fb1BhZ2VDb21wb25lbnQ/LmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXROYW1lKTtcblx0XHRpZiAobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IGRldGFpbFJvdXRlID0gbmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24uZGV0YWlsO1xuXHRcdFx0Y29uc3Qgcm91dGVOYW1lID0gZGV0YWlsUm91dGUucm91dGU7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJNYXBwaW5nID0gZGV0YWlsUm91dGUucGFyYW1ldGVycztcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0SGFzaEZyb21Sb3V0ZShjb250ZXh0LCByb3V0ZU5hbWUsIHBhcmFtZXRlck1hcHBpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmdldEhhc2hGcm9tUm91dGUoY29udGV4dCwgbnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIG5hdmlnYXRpb24gdGFyZ2V0IHJvdXRlLlxuXHQgKiBAcGFyYW0gc1RhcmdldFJvdXRlTmFtZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIFtvUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZTogc3RyaW5nLCBvUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWUsIG9QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgdG8gJ3RydWUnIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLCAnZmFsc2UnIGlmIHRoZSBuYXZpZ2F0aW9uIGRpZCBub3QgaGFwcGVuXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgT0RhdGFMaXN0QmluZGluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoY29udGV4dC5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0aWYgKHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/Lm1vZGUgPT09IFwiQXN5bmNcIikge1xuXHRcdFx0XHQvLyB0aGUgY29udGV4dCBpcyBlaXRoZXIgY3JlYXRlZCBhc3luYyAoUHJvbWlzZSlcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhY3RpdmF0ZSB0aGUgcm91dGVNYXRjaFN5bmNocm8gb24gdGhlIFJvdXRlclByb3h5IHRvIGF2b2lkIHRoYXRcblx0XHRcdFx0Ly8gdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBuYXZpZ2F0ZVRvQ29udGV4dCBjb25mbGljdHMgd2l0aCB0aGUgY3VycmVudCBvbmVcblx0XHRcdFx0dGhpcy5fb1JvdXRlclByb3h5LmFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbigpO1xuXG5cdFx0XHRcdHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMuY3JlYXRlQ29udGV4dFByb21pc2Vcblx0XHRcdFx0XHQudGhlbihhc3luYyAoY3JlYXRlZENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdC8vIG9uY2UgdGhlIGNvbnRleHQgaXMgcmV0dXJuZWQgd2UgbmF2aWdhdGUgaW50byBpdFxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUb0NvbnRleHQoY3JlYXRlZENvbnRleHQsIHtcblx0XHRcdFx0XHRcdFx0Y2hlY2tOb0hhc2hDaGFuZ2U6IHBhcmFtZXRlcnMuY2hlY2tOb0hhc2hDaGFuZ2UsXG5cdFx0XHRcdFx0XHRcdGVkaXRhYmxlOiBwYXJhbWV0ZXJzLmVkaXRhYmxlLFxuXHRcdFx0XHRcdFx0XHRwZXJzaXN0T1BTY3JvbGw6IHBhcmFtZXRlcnMucGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0XHRcdFx0XHR1cGRhdGVGQ0xMZXZlbDogcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCxcblx0XHRcdFx0XHRcdFx0Zm9yY2VGb2N1czogcGFyYW1ldGVycy5mb3JjZUZvY3VzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aXRoIHRoZSBhc3luYyBjb250ZXh0XCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPy5tb2RlICE9PSBcIkRlZmVycmVkXCIpIHtcblx0XHRcdFx0Ly8gTmF2aWdhdGUgdG8gYSBsaXN0IGJpbmRpbmcgbm90IHlldCBzdXBwb3J0ZWRcblx0XHRcdFx0dGhyb3cgXCJuYXZpZ2F0aW9uIHRvIGEgbGlzdCBiaW5kaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNhbGxFeHRlbnNpb24pIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblxuXHRcdFx0Ly8gU3RvcmluZyB0aGUgc2VsZWN0ZWQgY29udGV4dCB0byB1c2UgaXQgaW4gaW50ZXJuYWwgcm91dGUgbmF2aWdhdGlvbiBpZiBuZWNlc3NhcnkuXG5cdFx0XHRsZXQgY29udGV4dFRvTmF2aWdhdGU6IENvbnRleHQgfCBudWxsID0gY29udGV4dDtcblx0XHRcdGxldCBoaWRkZW5CaW5kaW5nOiBPRGF0YUNvbnRleHRCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPT09IC0xKSB7XG5cdFx0XHRcdC8vIElmIHdlJ3JlIG5hdmlnYXRpbmcgYmFjaywgd2UgbmVlZCB0byBmaW5kIHRoZSBcInBhcmVudFwiIGNvbnRleHRcblx0XHRcdFx0Y29uc3QgYmFja1BhdGggPSB0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0UGF0aFRvTmF2aWdhdGVCYWNrKGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Ly8gQXMgd2UgZG9uJ3QgY2FsbCB0aGUgZXh0ZW5zaW9uIHdoZW4gbmF2aWdhdGluZyBiYWNrIHRvIHRoZSBMUiwgYmFja1BhdGggaXMgbmV2ZXIgZW1wdHkgc28gd2UgY2FuIHNhZmVseSBjcmVhdGUgYSBjb250ZXh0XG5cdFx0XHRcdGhpZGRlbkJpbmRpbmcgPSBjb250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQoYmFja1BhdGgpO1xuXHRcdFx0XHRjb250ZXh0VG9OYXZpZ2F0ZSA9IGhpZGRlbkJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvdmVycmlkZU5hdiA9IGF3YWl0IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmcub25CZWZvcmVOYXZpZ2F0aW9uKHsgYmluZGluZ0NvbnRleHQ6IGNvbnRleHRUb05hdmlnYXRlIH0pO1xuXHRcdFx0aGlkZGVuQmluZGluZz8uZGVzdHJveSgpO1xuXHRcdFx0aWYgKG92ZXJyaWRlTmF2KSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cGFyYW1ldGVycy5GQ0xMZXZlbCA9IHRoaXMuZ2V0RkNMTGV2ZWwoKTtcblxuXHRcdC8vIEluIGNhc2Ugd2UncmUgbmF2aWdhdGluZyBmcm9tIGEgdGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIHRoZXJlJ3Mgc3BlY2lhbCBoYW5kbGluZyBmb3IgY29sbGFib3JhdGlvbiBhbmQgdHJlZSB0YWJsZS5cblx0XHQvLyBXZSBtYXkgbm90IG5hdmlnYXRlIHRvIHRoZSBjb250ZXh0IHRoZSB1c2VyIGNsaWNrZWQgb24uXG5cdFx0aWYgKHBhcmFtZXRlcnMucmVhc29uID09PSBOYXZpZ2F0aW9uUmVhc29uLlJvd1ByZXNzICYmIGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRcdGlmIChpc1BhdGhPbkRyYWZ0Um9vdChjb250ZXh0LmdldFBhdGgoKSwgbWV0YU1vZGVsKSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Rm9yTmF2aWdhdGlvbiA9XG5cdFx0XHRcdFx0KGF3YWl0IHRoaXMuZ2V0Q29udGV4dEZvck5hdmlnYXRpb25XaXRoQ29sbGFib3JhdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKSkgPz9cblx0XHRcdFx0XHQoYXdhaXQgdGhpcy5nZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUoY29udGV4dCkpO1xuXG5cdFx0XHRcdC8vIFVzZSBhbm90aGVyIGluc3RhbmNlIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdGlmIChjb250ZXh0Rm9yTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0Rm9yTmF2aWdhdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycywgdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKSwgdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgdG8gdXNlIGZvciBuYXZpZ2F0aW9uIGluIGNhc2Ugd2UncmUgbmF2aWdhdGluZyB0byBhIGRyYWZ0IGluc3RhbmNlIGZyb20gdGhlIExSIGFuZCB3ZSdyZSBpbiBhIGNvbGxhYm9yYXRpb24gYXBwbGljYXRpb24uXG5cdCAqIEBwYXJhbSBvcmlnaW5hbENvbnRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgdG8gdXNlIGZvciBuYXZpZ2F0aW9uIGlmIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIGNvbnRleHQsIG51bGwgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldENvbnRleHRGb3JOYXZpZ2F0aW9uV2l0aENvbGxhYm9yYXRpb24oXG5cdFx0b3JpZ2luYWxDb250ZXh0OiBDb250ZXh0LFxuXHRcdHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHQpOiBQcm9taXNlPENvbnRleHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSBvcmlnaW5hbENvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKSAmJiBvcmlnaW5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdC8vIElmIHdlJ3JlIGluIGEgY29sbGFib3JhdGlvbiBhcHBsaWNhdGlvbiwgYW5kIHdlJ3JlIG5hdmlnYXRpbmcgdG8gYSBkcmFmdCBpbnN0YW5jZSBmcm9tIHRoZSBMUixcblx0XHRcdC8vIFdlIHdhbnQgdG8gY2hlY2sgaWYgdGhlIGRyYWZ0IGluc3RhbmNlIGV4aXN0cyBmaXJzdC4gT3RoZXJ3aXNlIHdlIG5hdmlnYXRlIHRvIHRoZSBvcmlnaW5hbCAoZHJhZnQpIHZlcnNpb24uXG5cdFx0XHRjb25zdCBkcmFmdE9yQWN0aXZlQ29udGV4dCA9IGF3YWl0IGdldERyYWZ0T3JBY3RpdmVDb250ZXh0KG9yaWdpbmFsQ29udGV4dCk7XG5cblx0XHRcdGlmIChkcmFmdE9yQWN0aXZlQ29udGV4dCAhPT0gbnVsbCAmJiBvcmlnaW5hbENvbnRleHQuZ2V0UGF0aCgpICE9PSBkcmFmdE9yQWN0aXZlQ29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0Ly8gTm90aWZ5IHRoZSB1c2VyIHRoYXQgd2UgaGF2ZSBuYXZpZ2F0ZWQgdG8gdGhlIHNhdmVkIGluc3RhbmNlXG5cdFx0XHRcdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9yaWdpbmFsQ29udGV4dC5nZXRQYXRoKCkpKTtcblx0XHRcdFx0cGFyYW1ldGVycy5yZWRpcmVjdGVkVG9Ob25EcmFmdCA9XG5cdFx0XHRcdFx0KG9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmcpID8/XG5cdFx0XHRcdFx0b2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hbWU7XG5cblx0XHRcdFx0aWYgKHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0XHQvLyBGQ0w6IHJlcGxhY2UgdGhlIGNvbnRleHQgaW4gdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRUb1JlcGxhY2VXaXRoID0gbW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChkcmFmdE9yQWN0aXZlQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdG9yaWdpbmFsQ29udGV4dC5yZXBsYWNlV2l0aChjb250ZXh0VG9SZXBsYWNlV2l0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRnVsbHNjcmVlbjogdHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVEaXJ0eSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXNlIHRoZSBzYXZlZCBpbnN0YW5jZSBmb3IgbmF2aWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gZHJhZnRPckFjdGl2ZUNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBjb250ZXh0XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250ZXh0IHRvIHVzZSBmb3IgbmF2aWdhdGlvbiBpbiBjYXNlIHdlJ3JlIG5hdmlnYXRpbmcgdG8gYW4gYWN0aXZlIGluc3RhbmNlIGZyb20gdGhlIExSIGFuZCB3ZSdyZSBpbiBhIFRyZWUgb3IgQW5hbHl0aWNhbCB0YWJsZS5cblx0ICogQHBhcmFtIG9yaWdpbmFsQ29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCB0byB1c2UgZm9yIG5hdmlnYXRpb24gaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgY29udGV4dCwgbnVsbCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Q29udGV4dEZvck5hdmlnYXRpb25Gcm9tVHJlZU9yQW5hbHl0aWNhbFRhYmxlKG9yaWdpbmFsQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8Q29udGV4dCB8IG51bGw+IHtcblx0XHRjb25zdCBwYXJlbnRCaW5kaW5nID0gb3JpZ2luYWxDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRpZiAoIXBhcmVudEJpbmRpbmcuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIFRoZSBjb250ZXh0IGRvZXNuJ3QgYmVsb25nIHRvIGEgbGlzdCBiaW5kaW5nXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBwYXJlbnRCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXNcblx0XHRcdHwgeyBoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7IGdyb3VwPzogb2JqZWN0OyBhZ2dyZWdhdGU/OiBvYmplY3QgfVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFhZ2dyZWdhdGlvbj8uaGllcmFyY2h5UXVhbGlmaWVyICYmICFhZ2dyZWdhdGlvbj8uZ3JvdXAgJiYgIWFnZ3JlZ2F0aW9uPy5hZ2dyZWdhdGUpIHtcblx0XHRcdC8vIFRoZSBjb250ZXh0IGRvZXNuJ3QgYmVsb25nIHRvIGEgaGllcmFyY2hpY2FsL2FuYWx5dGljYWwgbGlzdCBiaW5kaW5nXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAob3JpZ2luYWxDb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IHRydWUgJiYgb3JpZ2luYWxDb250ZXh0LmdldFByb3BlcnR5KFwiSGFzRHJhZnRFbnRpdHlcIikgPT09IHRydWUpIHtcblx0XHRcdC8vIElmIHdlJ3JlIGluIGEgVHJlZS9BbmFseXRpY2FsIHRhYmxlLCBhbmQgd2UncmUgbmF2aWdhdGluZyB0byBhbiBhY3RpdmUgaW5zdGFuY2UgaW5zdGFuY2UgdGhhdCBoYXMgYSBkcmFmdCxcblx0XHRcdC8vIC0tPiBXZSB0cnkgdG8gbmF2aWdhdGUgdG8gdGhlIGRyYWZ0IGluc3RhbmNlIChpZiBpdCBzdGlsbCBleGlzdHMpXG5cdFx0XHRjb25zdCBkcmFmdE9yQWN0aXZlQ29udGV4dCA9IGF3YWl0IGdldERyYWZ0T3JBY3RpdmVDb250ZXh0KG9yaWdpbmFsQ29udGV4dCk7XG5cblx0XHRcdGlmIChkcmFmdE9yQWN0aXZlQ29udGV4dCAhPT0gbnVsbCAmJiBvcmlnaW5hbENvbnRleHQuZ2V0UGF0aCgpICE9PSBkcmFmdE9yQWN0aXZlQ29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0Ly8gVXNlIHRoZSBkcmFmdCBpbnN0YW5jZSBmb3IgbmF2aWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gZHJhZnRPckFjdGl2ZUNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBjb250ZXh0XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGJhY2t3YXJkcyBmcm9tIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgZnJvbVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPSAtMTtcblxuXHRcdHJldHVybiB0aGlzLm5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBmb3J3YXJkcyB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdH1cblxuXHRcdHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGJhY2sgaW4gaGlzdG9yeSBpZiB0aGUgY3VycmVudCBoYXNoIGNvcnJlc3BvbmRzIHRvIGEgdHJhbnNpZW50IHN0YXRlLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlQmFja0Zyb21UcmFuc2llbnRTdGF0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBzSGFzaCA9IHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cblx0XHQvLyBpZiB0cmlnZ2VyZWQgd2hpbGUgbmF2aWdhdGluZyB0byAoLi4uKSwgd2UgbmVlZCB0byBuYXZpZ2F0ZSBiYWNrXG5cdFx0aWYgKHNIYXNoLmluY2x1ZGVzKFwiKC4uLilcIikpIHtcblx0XHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5uYXZCYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIGFuIGVycm9yIChpbGx1c3RyYXRlZCBtZXNzYWdlKSBpbiB0aGUgcGFnZS5cblx0ICogQHBhcmFtIHNFcnJvck1lc3NhZ2Vcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb01lc3NhZ2VQYWdlKHNFcnJvck1lc3NhZ2U6IHN0cmluZywgbVBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMgfHwge307XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJpLWFjdGlvbj1jcmVhdGVcIikgfHwgdGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWF1dG9DcmVhdGVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGVyUHJveHkubmF2VG9IYXNoKHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXREZWZhdWx0Q3JlYXRlSGFzaCgpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuZGlzcGxheUVycm9yUGFnZShzRXJyb3JNZXNzYWdlLCBtUGFyYW1ldGVycywgdGhpcy5nZXRGQ0xMZXZlbCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIG9uZSBvZiB0aGUgY3VycmVudCB2aWV3cyBvbiB0aGUgc2NyZWVuIGlzIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICogQHBhcmFtIG9Db250ZXh0XG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RhdGUgaXMgaW1wYWN0ZWQgYnkgdGhlIGNvbnRleHRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dCk7XG5cdH1cblxuXHRfaXNWaWV3UGFydE9mUm91dGUocm91dGVJbmZvcm1hdGlvbj86IFJvdXRlSW5mb3JtYXRpb24pOiBib29sZWFuIHtcblx0XHRjb25zdCBhVGFyZ2V0cyA9IHJvdXRlSW5mb3JtYXRpb24/LnRhcmdldHM7XG5cdFx0aWYgKCFhVGFyZ2V0cyB8fCAhYVRhcmdldHMuaW5jbHVkZXModGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLnRhcmdldE5hbWUpKSB7XG5cdFx0XHQvLyBJZiB0aGUgdGFyZ2V0IGZvciB0aGlzIHZpZXcgaGFzIGEgdmlldyBsZXZlbCBncmVhdGVyIHRoYW4gdGhlIHJvdXRlIGxldmVsLCBpdCBtZWFucyB0aGlzIHZpZXcgY29tZXMgXCJhZnRlclwiIHRoZSByb3V0ZVxuXHRcdFx0Ly8gaW4gdGVybXMgb2YgbmF2aWdhdGlvbi5cblx0XHRcdC8vIEluIHN1Y2ggY2FzZSwgd2UgcmVtb3ZlIGl0cyBiaW5kaW5nIGNvbnRleHQsIHRvIGF2b2lkIHRoaXMgdmlldyB0byBoYXZlIGRhdGEgaWYgd2UgbmF2aWdhdGUgdG8gaXQgbGF0ZXIgb25cblx0XHRcdC8vIFRoaXMgaXMgZG9uZSBpbiBhIHRpbWVvdXQgdG8gYWxsb3cgZm9yIGZvY3Vzb3V0IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQgYmVmb3JlIHByb3Blcmx5IGluIGNvbGxhYm9yYXRpdmUgZHJhZnRcblx0XHRcdGlmICgodGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLnZpZXdMZXZlbCA/PyAwKSA+PSAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA/PyAwKSkge1xuXHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuYWRkQmluZGluZ0NsZWFudXBQcm9taXNlKFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKHJvdXRlSW5mb3JtYXRpb24/LnJvdXRlTGV2ZWwgPT09IDAgJiYgdGhpcy5iYXNlLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIHJvdXRlIGhhcyBsZXZlbCAwIC0tPiB3ZSBuZWVkIHRvIGxlYXZlIHRoZSBjb2xsYWJvcmF0aW9uIHNlc3Npb24gYXMgbm8gT1AgaXMgZGlzcGxheWVkXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0QmluZGluZ0NvbnRleHQobnVsbCk7IC8vIFRoaXMgYWxzbyBjYWxsIHNldEtlZXBBbGl2ZShmYWxzZSkgb24gdGhlIGN1cnJlbnQgY29udGV4dFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0X2J1aWxkQmluZGluZ1BhdGgoXG5cdFx0cm91dGVBcmd1bWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG9iamVjdD4sXG5cdFx0YmluZGluZ1BhdHRlcm46IHN0cmluZyxcblx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvXG5cdCk6IHsgcGF0aDogc3RyaW5nOyBkZWZlcnJlZDogYm9vbGVhbiB9IHtcblx0XHRsZXQgcGF0aCA9IGJpbmRpbmdQYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRsZXQgZGVmZXJyZWQgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBpbiByb3V0ZUFyZ3VtZW50cykge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gcm91dGVBcmd1bWVudHNbc0tleV07XG5cblx0XHRcdGlmICh0eXBlb2Ygc1ZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1ZhbHVlID09PSBcIi4uLlwiICYmIGJpbmRpbmdQYXR0ZXJuLmluY2x1ZGVzKGB7JHtzS2V5fX1gKSkge1xuXHRcdFx0XHRkZWZlcnJlZCA9IHRydWU7XG5cdFx0XHRcdC8vIFNvbWV0aW1lcyBpbiBwcmVmZXJyZWRNb2RlID0gY3JlYXRlLCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24gaW4gYmFja2dyb3VuZCB3aGVuIHRoZVxuXHRcdFx0XHQvLyBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZyBzaG93cyB1cCwgc2V0dGluZyBiVGFyZ2V0RWRpdGFibGUgcGFzc2VzIGVkaXRhYmxlIGFzIHRydWVcblx0XHRcdFx0Ly8gdG8gb25CZWZvcmVCaW5kaW5nIGluIF9iaW5kVGFyZ2V0UGFnZSBmdW5jdGlvblxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iVGFyZ2V0RWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZShgeyR7c0tleX19YCwgc1ZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChyb3V0ZUFyZ3VtZW50c1tcIj9xdWVyeVwiXSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KT8uW1wiaS1hY3Rpb25cIl0/LmluY2x1ZGVzKFwiY3JlYXRlXCIpKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGUgYmluZGluZyBwYXRoIGlzIGFsd2F5cyBhYnNvbHV0ZVxuXHRcdGlmIChwYXRoICYmIHBhdGhbMF0gIT09IFwiL1wiKSB7XG5cdFx0XHRwYXRoID0gYC8ke3BhdGh9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBwYXRoLCBkZWZlcnJlZCB9O1xuXHR9XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gTWV0aG9kcyB0byBiaW5kIHRoZSBwYWdlIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogQnVpbGRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZnJvbSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLCBhbmQgYmluZCB0aGUgcGFnZSBhY2NvcmRpbmdseS5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKFxuXHRcdG9FdmVudDogRXZlbnQ8e1xuXHRcdFx0cm91dGVJbmZvcm1hdGlvbj86IFJvdXRlSW5mb3JtYXRpb247XG5cdFx0XHRyb3V0ZVBhdHRlcm46IHN0cmluZztcblx0XHRcdG5hdmlnYXRpb25JbmZvOiBSb3V0aW5nTmF2aWdhdGlvbkluZm87XG5cdFx0XHRhcmd1bWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG9iamVjdD47XG5cdFx0fT5cblx0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIHRhcmdldCBmb3IgdGhpcyB2aWV3IGlzIHBhcnQgb2YgdGhlIGV2ZW50IHRhcmdldHMgKGkuZS4gaXMgYSB0YXJnZXQgZm9yIHRoZSBjdXJyZW50IHJvdXRlKS5cblx0XHQvLyBJZiBub3QsIHdlIGRvbid0IG5lZWQgdG8gYmluZCBpdCAtLT4gcmV0dXJuXG5cdFx0aWYgKCF0aGlzLl9pc1ZpZXdQYXJ0T2ZSb3V0ZShvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicm91dGVJbmZvcm1hdGlvblwiKSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXRyaWV2ZSB0aGUgYmluZGluZyBjb250ZXh0IHBhdHRlcm5cblx0XHRsZXQgYmluZGluZ1BhdHRlcm47XG5cdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50ICYmIHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0UGF0dGVybikge1xuXHRcdFx0YmluZGluZ1BhdHRlcm4gPSB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dFBhdHRlcm4oKTtcblx0XHR9XG5cdFx0YmluZGluZ1BhdHRlcm4gPSBiaW5kaW5nUGF0dGVybiA/PyB0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24uY29udGV4dFBhdHRlcm47XG5cblx0XHRpZiAoYmluZGluZ1BhdHRlcm4gPT09IG51bGwgfHwgYmluZGluZ1BhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gRG9uJ3QgZG8gdGhpcyBpZiB3ZSBhbHJlYWR5IGdvdCBzVGFyZ2V0ID09ICcnLCB3aGljaCBpcyBhIHZhbGlkIHRhcmdldCBwYXR0ZXJuXG5cdFx0XHRiaW5kaW5nUGF0dGVybiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJyb3V0ZVBhdHRlcm5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gUmVwbGFjZSB0aGUgcGFyYW1ldGVycyBieSB0aGVpciB2YWx1ZXMgaW4gdGhlIGJpbmRpbmcgY29udGV4dCBwYXR0ZXJuXG5cdFx0Y29uc3QgbUFyZ3VtZW50cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkuYXJndW1lbnRzO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYXZpZ2F0aW9uSW5mb1wiKTtcblx0XHRjb25zdCB7IHBhdGgsIGRlZmVycmVkIH0gPSB0aGlzLl9idWlsZEJpbmRpbmdQYXRoKG1Bcmd1bWVudHMsIGJpbmRpbmdQYXR0ZXJuLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXG5cdFx0dGhpcy5vblJvdXRlTWF0Y2hlZCgpO1xuXG5cdFx0bGV0IGJpbmRQcm9taXNlO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCk7XG5cdFx0aWYgKGRlZmVycmVkKSB7XG5cdFx0XHRiaW5kUHJvbWlzZSA9IHRoaXMuX2JpbmREZWZlcnJlZChwYXRoLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uICE9PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uICYmXG5cdFx0XHQodGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWVkaXRcIikgfHwgKHRoaXMuX29QYWdlQ29tcG9uZW50Py5pc09wZW5JbkVkaXRNb2RlPy4oKSA/PyBmYWxzZSkpXG5cdFx0KSB7XG5cdFx0XHRiaW5kUHJvbWlzZSA9IHRoaXMuX2JpbmRQYWdlRm9yRWRpdChwYXRoLCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJpbmRQcm9taXNlID0gdGhpcy5fYmluZFBhZ2UocGF0aCwgb01vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblxuXHRcdGJpbmRQcm9taXNlXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25Sb3V0ZU1hdGNoZWRGaW5pc2hlZCgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHBhZ2UgYmluZGluZyBcIiArIGVycm9yLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnVwZGF0ZVVJU3RhdGVGb3JWaWV3KHRoaXMuX29WaWV3LCB0aGlzLmdldEZDTExldmVsKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmVycmVkIGJpbmRpbmcgKGR1cmluZyBvYmplY3QgY3JlYXRpb24pLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgZGVmZmVyZWQgY29udGV4dFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX2JpbmREZWZlcnJlZCh0YXJnZXRQYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG51bGwsIHsgZWRpdGFibGU6IG5hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSB9KTtcblxuXHRcdGlmICghbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgfHwgbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMubW9kZSA9PT0gXCJEZWZlcnJlZFwiKSB7XG5cdFx0XHQvLyBlaXRoZXIgdGhlIGNvbnRleHQgc2hhbGwgYmUgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHBhZ2UgKGRlZmVycmVkIENvbnRleHQpIG9yIGl0IHNoYWxsXG5cdFx0XHQvLyBiZSBjcmVhdGVkIGFzeW5jIGJ1dCB0aGUgdXNlciByZWZyZXNoZWQgdGhlIHBhZ2UgLyBib29rbWFya2VkIHRoaXMgVVJMXG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHkgdGhlIHRhcmdldCBjb21wb25lbnQgY3JlYXRlcyB0aGlzIGRvY3VtZW50IGJ1dCB3ZSBzaGFsbCBtb3ZlIHRoaXMgdG9cblx0XHRcdC8vIGEgY2VudHJhbCBwbGFjZVxuXHRcdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50ICYmIHRoaXMuX29QYWdlQ29tcG9uZW50LmNyZWF0ZURlZmVycmVkQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5jcmVhdGVEZWZlcnJlZENvbnRleHQoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LnBhcmVudENvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LmRhdGEsXG5cdFx0XHRcdFx0ISFuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBjb250ZXh0IHRvIGF2b2lkIHNob3dpbmcgb2xkIGRhdGFcblx0XHR0aGlzLl9zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblxuXHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSBwYWdlIGZyb20gYSBwYXRoLCBpZiB0aGUgYXBwIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdC5cblx0ICpcblx0ICogSWYgdGhlIGNvbnRleHQgcG9pbnRzIHRvIGFuIGFjdGl2ZSBlbnRpdHksIGl0IGlzIGRpcmVjdGx5IGNvbnZlcnRlZCB0byBkcmFmdCB1c2luZyB0aGUgRWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb24uXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEBwYXJhbSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIG9uY2UgdGhlIGJpbmRpbmcgaGFzIGJlZW4gc2V0IG9uIHRoZSBwYWdlXG5cdCAqL1xuXHRhc3luYyBfYmluZFBhZ2VGb3JFZGl0KHRhcmdldFBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYmluZFBhZ2VUb0NvbnRleHQobnVsbCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKSk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlY2huaWNhbFBhdGg6IHN0cmluZyA9IGF3YWl0IHJlc29sdmVQYXRoKHRhcmdldFBhdGgsIG1vZGVsLCB0aGlzLl9vUm91dGluZ1NlcnZpY2UsIHRoaXMuX29Sb3V0ZXIpO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBmb3Igc3RpY2t5ICYgc3RpY2t5IGVkaXQgc2Vzc2lvblxuXHRcdFx0Y29uc3QgaXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0XHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChtZXRhTW9kZWwpO1xuXHRcdFx0aWYgKHRlY2huaWNhbFBhdGguaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpIHx8IChpc1N0aWNreSAmJiAhaXNTdGlja3lFZGl0TW9kZSkpIHtcblx0XHRcdFx0Ly8gY3JlYXRlIGNvbnRleHQgb3IgdXNlIHRoZSBvbmUgdGhlIHVzZXIgY2xpY2tlZCBvblxuXHRcdFx0XHRjb25zdCBhY3RpdmVDb250ZXh0ID1cblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy51c2VDb250ZXh0Py5nZXRQYXRoKCkgPT09IHRlY2huaWNhbFBhdGhcblx0XHRcdFx0XHRcdD8gbmF2aWdhdGlvblBhcmFtZXRlcnMudXNlQ29udGV4dFxuXHRcdFx0XHRcdFx0OiB0aGlzLl9jcmVhdGVDb250ZXh0KHRlY2huaWNhbFBhdGgsIG1vZGVsKTtcblxuXHRcdFx0XHQvLyBlZGl0IGRvY3VtZW50XG5cdFx0XHRcdHJldHVybiBhd2FpdCB0aGlzLmJhc2UuZWRpdEZsb3cuZWRpdERvY3VtZW50KGFjdGl2ZUNvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2JpbmRQYWdlVG9QYXRoKHRlY2huaWNhbFBhdGgsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdFx0dGhpcy5uYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIiksIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IChlcnJvciBhcyBFcnJvcikubWVzc2FnZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBmcm9tIGEgcGF0aC5cblx0ICogQHBhcmFtIHRhcmdldFBhdGggVGhlIHBhdGggdG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBiaW5kaW5nIG9uIHRoZSBwYWdlIGlzIHNldFxuXHQgKi9cblx0YXN5bmMgX2JpbmRQYWdlKHRhcmdldFBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gXCJcIikge1xuXHRcdFx0Ly8gVGhlIHBhZ2UgYmluZGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LCB0byBtYWtlIHN1cmUgX29uUm91dGVNYXRjaGVkIGlzIGNhbGxlZCBmb3IgYWxsIHRhcmdldHMgYmVmb3JlLCBhbmQgdGhlIGJpbmRpbmcgY2xlYW51cCBwcm9taXNlcyBhcmUgcHJvcGVybHkgc3RvcmVkIGluIHRoZSByb3V0aW5nIHNlcnZpY2UuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG51bGwsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgbW9kZWwsIHRoaXMuX29Sb3V0aW5nU2VydmljZSwgdGhpcy5fb1JvdXRlcik7XG5cdFx0XHR0aGlzLl9iaW5kUGFnZVRvUGF0aCh0ZWNobmljYWxQYXRoLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe30pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKiBAcGFyYW0gc1RhcmdldFBhdGggVGhlIHBhdGggdG8gYnVpbGQgdGhlIGNvbnRleHQgKHRoaXMgaXMgYSBwYXRoIGluIHRoZSBtb2RlbCwgc28gb25seSB0ZWNobmljYWwga2V5cyBhcmUgYWxsb3dlZCkuXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb1BhdGgoc1RhcmdldFBhdGg6IHN0cmluZywgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IG9DdXJyZW50Q29udGV4dCA9IHRoaXMuX2dldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRzQ3VycmVudFBhdGggPSBvQ3VycmVudENvbnRleHQgJiYgb0N1cnJlbnRDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Vc2VDb250ZXh0ID0gb05hdmlnYXRpb25QYXJhbWV0ZXJzLnVzZUNvbnRleHQgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblxuXHRcdC8vIFdlIHNldCB0aGUgYmluZGluZyBjb250ZXh0IG9ubHkgaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHQvLyBvciBpZiB3ZSBoYXZlIGEgY29udGV4dCBhbHJlYWR5IHNlbGVjdGVkXG5cdFx0aWYgKG9Vc2VDb250ZXh0ICYmIG9Vc2VDb250ZXh0LmdldFBhdGgoKSA9PT0gc1RhcmdldFBhdGgpIHtcblx0XHRcdGlmIChvVXNlQ29udGV4dCAhPT0gb0N1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGxldCBzaG91bGRSZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHQvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNvbnRleHQgdG8gYmUgdXNlZCwgYW5kIGl0J3Mgbm90IHRoZSBjdXJyZW50IG9uZVxuXG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSdyZSByZXVzaW5nIGEgY29udGV4dCBmcm9tIGEgdGFibGUgKHRocm91Z2ggbmF2aWdhdGlvbiksIHdlIHJlZnJlc2ggaXQgdG8gYXZvaWQgb3V0ZGF0ZWQgZGF0YVxuXHRcdFx0XHQvLyBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBiZSBjb21wbGV0ZWQgKHJlcXVlc3RSZWZyZXNoKSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBnb2VzIGludG8gdGhlIHNhbWVcblx0XHRcdFx0Ly8gYmF0Y2ggYXMgdGhlIG9uZXMgZnJvbSBjb250cm9scyBpbiB0aGUgcGFnZS5cblx0XHRcdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiYgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG9Vc2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdFx0aWYgKCFvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgb1VzZUNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHR0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkgfHxcblx0XHRcdFx0XHRcdChNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgb1VzZUNvbnRleHQuZ2V0UGF0aCgpKSAmJlxuXHRcdFx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBidXQgd2UncmUgaW4gY29sbGFib3JhdGlvbiBkcmFmdCwgd2UgZm9yY2UgdGhlIHJlZnJlc2ggKGRpc2NhcmRpbmcgcGVuZGluZyBjaGFuZ2VzKSBhcyB3ZSBuZWVkIHRvIGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXHRcdFx0XHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1AsIHRoZSB2aWV3IGlzIG5vdCBjb25uZWN0ZWQgeWV0IC0tPiBjaGVjayBpZiB3ZSdyZSBpbiBkcmFmdCB3aXRoIGNvbGxhYm9yYXRpb24gZnJvbSB0aGUgbWV0YW1vZGVsXG5cdFx0XHRcdFx0XHRvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRzaG91bGRSZWZyZXNoQ29udGV4dCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG9Vc2VDb250ZXh0LCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChzaG91bGRSZWZyZXNoQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX29BcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhbeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIiB9XSwgb1VzZUNvbnRleHQsIG9Vc2VDb250ZXh0LmdldEJpbmRpbmcoKS5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoYENhbm5vdCByZWZyZXNoIGNvbnRleHQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRoZSBzYW1lIGNvbnRleHQgYnV0IGFuIGVkaXRmbG93IGFjdGlvbiBoYXBwZW5lZCAoZS5nLiBDYW5jZWxEb2N1bWVudCBpbiBzdGlja3kgbW9kZSlcblx0XHRcdFx0Ly8gLS0+IFdlIG5lZWQgdG8gY2FsbCBvbkJlZm9yZS9BZnRlckJpbmRpbmcgdG8gcmVmcmVzaCB0aGUgb2JqZWN0IHBhZ2UgcHJvcGVybHlcblx0XHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwge1xuXHRcdFx0XHRcdGVkaXRhYmxlOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlLFxuXHRcdFx0XHRcdGxpc3RCaW5kaW5nOiBvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCksXG5cdFx0XHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0cmVhc29uOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uLFxuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwgeyByZWRpcmVjdGVkVG9Ob25EcmFmdDogb05hdmlnYXRpb25QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNDdXJyZW50UGF0aCAhPT0gc1RhcmdldFBhdGggfHwgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29udGV4dCBmb3IgaXRzIHBhdGhcblx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KHRoaXMuX2NyZWF0ZUNvbnRleHQoc1RhcmdldFBhdGgsIG9Nb2RlbCksIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5BcHBTdGF0ZUNoYW5nZWQgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uUmVzdG9yZUhpc3RvcnkgJiZcblx0XHRcdEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkgJiZcblx0XHRcdCFvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpICYmXG5cdFx0XHRvQ3VycmVudENvbnRleHRcblx0XHQpIHtcblx0XHRcdHRoaXMuX3JlZnJlc2hCaW5kaW5nQ29udGV4dChvQ3VycmVudENvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBCaW5kcyB0aGUgcGFnZSB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIGJlIGJvdW5kXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb0NvbnRleHQob0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBvTW9kZWw6IE9EYXRhTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvKTogdm9pZCB7XG5cdFx0aWYgKCFvQ29udGV4dCkge1xuXHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvUGFyZW50TGlzdEJpbmRpbmcgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdGlmICghb1BhcmVudExpc3RCaW5kaW5nIHx8ICFvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHBhcmVudEJpbmRpbmcgaXMgbm90IGEgbGlzdEJpbmRpbmcsIHdlIGNyZWF0ZSBhIG5ldyBjb250ZXh0XG5cdFx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuX3NldEtlZXBBbGl2ZShcblx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dCAmJiAhdGhpcy5fb0FwcENvbXBvbmVudC5pc0V4aXRpbmcgJiYgb1Jvb3RWaWV3Q29udHJvbGxlci5pc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlIC8vIExvYWQgbWVzc2FnZXMsIG90aGVyd2lzZSB0aGV5IGRvbid0IGdldCByZWZyZXNoZWQgbGF0ZXIsIGUuZy4gZm9yIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdC8vIHNldEtlZXBBbGl2ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwYXJlbnQgbGlzdGJpbmRpbmcgZG9lc24ndCBoYXZlICQkb3duUmVxdWVzdD10cnVlXG5cdFx0XHRcdC8vIFRoaXMgY2FzZSBmb3IgY3VzdG9tIGZyYWdtZW50cyBpcyBzdXBwb3J0ZWQsIGJ1dCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gbWFrZSB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gYXBwYXJlbnRcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBWaWV3IGZvciAke29Db250ZXh0LmdldFBhdGgoKX0gd29uJ3QgYmUgc3luY2hyb25pemVkLiBQYXJlbnQgbGlzdEJpbmRpbmcgbXVzdCBoYXZlIGJpbmRpbmcgcGFyYW1ldGVyICQkb3duUmVxdWVzdD10cnVlYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCBvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQgb3RoZXJ3aXNlIHdlIGdldCBlcnJvcnNcblx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvcGVyIGJlZm9yZS9hZnRlciBjYWxsYmFja3Ncblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0LCB7XG5cdFx0XHRlZGl0YWJsZTogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSxcblx0XHRcdGxpc3RCaW5kaW5nOiBvUGFyZW50TGlzdEJpbmRpbmcsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdHJlYXNvbjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbixcblx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHR9KTtcblxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQsIHsgcmVkaXJlY3RlZFRvTm9uRHJhZnQ6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQgfSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGNvbnRleHQgZnJvbSBhIHBhdGguXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0XG5cdCAqL1xuXHRfY3JlYXRlQ29udGV4dChzUGF0aDogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBDb250ZXh0IHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LFxuXHRcdFx0c0VudGl0eVNldCA9IG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdHNDb250ZXh0UGF0aCA9XG5cdFx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9NZXRhTW9kZWwpLFxuXHRcdFx0bVBhcmFtZXRlcnM6IEJpbmRDb250ZXh0UGFyYW1ldGVycyA9IHtcblx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiLFxuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIixcblx0XHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZVxuXHRcdFx0fTtcblx0XHRpZiAodGhpcy5iYXNlLmlubGluZUVkaXRGbG93LmlzSW5saW5lRWRpdFBvc3NpYmxlKCkpIHtcblx0XHRcdC8vIGlmIGlubGluZSBlZGl0IGlzIGVuYWJsZWQgb24gdGhlIHBhZ2UgYW5kIHRoaXMgaXMgdGhlIGFjdGl2ZSBlbnRpdHksIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBncm91cCBpZCB0byBpbmxpbmVcblx0XHRcdG1QYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IHNQYXRoLmluY2x1ZGVzKFwiSXNBY3RpdmVFbnRpdHk9dHJ1ZVwiKSA/IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCA6IFwiJGF1dG9cIjtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBkcmFmdDogJHNlbGVjdCB0aGUgc3RhdGUgZmxhZ3MgKEhhc0FjdGl2ZUVudGl0eSwgSGFzRHJhZnRFbnRpdHksIGFuZCBJc0FjdGl2ZUVudGl0eSkgYW5kIHNlbWFudGljIGtleXMgKGZvciBjcmVhdGluZyB0aGUgc2VtYW50aWMgVVJMKVxuXHRcdGNvbnN0IG9EcmFmdFJvb3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgKTtcblx0XHRjb25zdCBvRHJhZnROb2RlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlYCk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gc0NvbnRleHRQYXRoXG5cdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzQ29udGV4dFBhdGgpICYmIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0NvbnRleHRQYXRoKSlcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzID0gTW9kZWxIZWxwZXIuZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyhcblx0XHRcdGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0XG5cdFx0KTtcblx0XHRjb25zdCBzZW1hbnRpY0tleXMgPSBvRHJhZnRSb290XG5cdFx0XHQ/IGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5Py5tYXAoKGtleSkgPT4ga2V5LnZhbHVlKSA/PyBbXVxuXHRcdFx0OiBbXTtcblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9nZXRLZWVwQWxpdmVDb250ZXh0KG9Nb2RlbCwgc1BhdGgsIGZhbHNlLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBrZWVwQWxpdmUgY29udGV4dCAke3NQYXRofWApO1xuXHRcdFx0fSBlbHNlIGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvUmVxdWVzdCA9IFtcIkhhc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0RyYWZ0RW50aXR5XCIsIFwiSXNBY3RpdmVFbnRpdHlcIl0uY29uY2F0KHNlbWFudGljS2V5cyk7XG5cdFx0XHRcdGlmIChvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkocHJvcGVydGllc1RvUmVxdWVzdCk7XG5cdFx0XHRcdFx0aWYgKG9EcmFmdFJvb3QpIHtcblx0XHRcdFx0XHRcdG9Db250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBkcmFmdCBhbmQgZWRpdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBwcm9wZXJ0aWVzIGFyZSByZXF1ZXN0ZWQgYWdhaW4gZXZlbiBpZiB0aGV5IGFyZSBpbiB0aGUgYmluZGluZydzIGNhY2hlXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdoZW4geW91IGVkaXQgYW5kIGdvIHRvIHRoZSBzYXZlZCB2ZXJzaW9uIHlvdSBoYXZlIG5vIHdheSBvZiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgZWRpdCB2ZXJzaW9uXG5cdFx0XHRcdFx0b0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKG9EcmFmdFJvb3QgPyBwcm9wZXJ0aWVzVG9SZXF1ZXN0LmNvbmNhdChbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSkgOiBwcm9wZXJ0aWVzVG9SZXF1ZXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb0NvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb1NlbGVjdDogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChzQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKHNNZXNzYWdlc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQ6ICRzZWxlY3QgdGhlIHN0YXRlIGZsYWdzIChIYXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBhbmQgSXNBY3RpdmVFbnRpdHkpXG5cdFx0XHRpZiAob0RyYWZ0Um9vdCB8fCBvRHJhZnROb2RlKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKFwiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRcdFx0cHJvcGVydGllc1RvU2VsZWN0LnB1c2goLi4uc2VtYW50aWNLZXlzKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKC4uLmFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMpO1xuXG5cdFx0XHRpZiAoaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQgJiYgb0RyYWZ0Um9vdCkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzVG9TZWxlY3QucHVzaChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0QWRtaW5pc3RyYXRpdmVVc2VyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJvcGVydGllc1RvU2VsZWN0Lmxlbmd0aCkge1xuXHRcdFx0XHRtUGFyYW1ldGVycy4kc2VsZWN0ID0gcHJvcGVydGllc1RvU2VsZWN0LmpvaW4oXCIsXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRjb25zdCBvUHJldmlvdXNCaW5kaW5nID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1ByZXZpb3VzQmluZGluZykge1xuXHRcdFx0XHRcdG9Nb2RlbC5yZXNldENoYW5nZXMob1ByZXZpb3VzQmluZGluZy5nZXRVcGRhdGVHcm91cElkKCkpO1xuXHRcdFx0XHRcdG9QcmV2aW91c0JpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9IaWRkZW5CaW5kaW5nID0gb01vZGVsLmJpbmRDb250ZXh0KHNQYXRoLCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdFx0b0hpZGRlbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLl9vVmlldyk7XG5cdFx0XHRcdHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKHRoaXMuX29WaWV3KTtcblx0XHRcdH0pO1xuXHRcdFx0b0hpZGRlbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIHRoaXMub25EYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7XG5cdFx0XHRjb25zdCBib3VuZENvbnRleHQgPSBvSGlkZGVuQmluZGluZy5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGlmIChpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCAmJiBzUGF0aC5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5PWZhbHNlXCIpKSB7XG5cdFx0XHRcdGFkZFNlbGYob01ldGFNb2RlbCwgc0NvbnRleHRQYXRoISwgb01vZGVsLCBib3VuZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGJvdW5kQ29udGV4dDtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0YXN5bmMgb25EYXRhUmVjZWl2ZWQob0V2ZW50OiBFdmVudDx7IGVycm9yOiB7IHN0YXR1cz86IG51bWJlcjsgY2F1c2U/OiB7IHN0YXR1cz86IG51bWJlciB9OyBtZXNzYWdlPzogc3RyaW5nIH0gfT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBlcnJvciA9IG9FdmVudD8uZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIik7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5fb1ZpZXcpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLl9vVmlldyk7XG5cdFx0fVxuXG5cdFx0aWYgKGVycm9yKSB7XG5cdFx0XHQvLyBUT0RPOiBpbiBjYXNlIG9mIDQwNCB0aGUgdGV4dCBzaGFsbCBiZSBkaWZmZXJlbnRcblx0XHRcdGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyO1xuXHRcdFx0bGV0IG1QYXJhbXM6IFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgPSB7fTtcblx0XHRcdGNvbnN0IGVycm9yU3RhdHVzID0gZXJyb3Iuc3RhdHVzID8/IGVycm9yLmNhdXNlPy5zdGF0dXM7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0XHRpZiAoZXJyb3JTdGF0dXMgPT09IDUwMykge1xuXHRcdFx0XHRcdG1QYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRpc0luaXRpYWxMb2FkNTAzRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRzaGVsbEJhY2s6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVycm9yU3RhdHVzID09PSA0MDApIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9EQVRBX1JFQ0VJVkVEX0VSUk9SX0RFU0NSSVBUSU9OXCIpLFxuXHRcdFx0XHRcdFx0aXNEYXRhUmVjZWl2ZWRFcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHNoZWxsQmFjazogdHJ1ZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bVBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yPy5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0aXNEYXRhUmVjZWl2ZWRFcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHNoZWxsQmFjazogdHJ1ZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBjb3JlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdG1QYXJhbXMuY29udHJvbCA9IHRoaXMuX29WaWV3O1xuXHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMobVBhcmFtcyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5yZWxlYXNlSG9sZEJ5Q29udHJvbCh0aGlzLl9vVmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHNpZGUgZWZmZWN0cyBvbiBhIGJpbmRpbmcgY29udGV4dCB0byBcInJlZnJlc2hcIiBpdC5cblx0ICogVE9ETzogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgcHJvdmlkZWQgYnkgdGhlIG1vZGVsXG5cdCAqIGEgcmVmcmVzaCBvbiB0aGUgYmluZGluZyBjb250ZXh0IGRvZXMgbm90IHdvcmsgaW4gY2FzZSBhIGNyZWF0aW9uIHJvdyB3aXRoIGEgdHJhbnNpZW50IGNvbnRleHQgaXNcblx0ICogdXNlZC4gYWxzbyBhIHJlcXVlc3RTaWRlRWZmZWN0cyB3aXRoIGFuIGVtcHR5IHBhdGggd291bGQgZmFpbCBkdWUgdG8gdGhlIHRyYW5zaWVudCBjb250ZXh0XG5cdCAqIHRoZXJlZm9yZSB3ZSBnZXQgYWxsIGRlcGVuZGVudCBiaW5kaW5ncyAodmlhIHByaXZhdGUgbW9kZWwgbWV0aG9kKSB0byBkZXRlcm1pbmUgYWxsIHBhdGhzIGFuZCB0aGVuXG5cdCAqIHJlcXVlc3QgdGhlbS5cblx0ICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dCBDb250ZXh0IHRvIGJlIHJlZnJlc2hlZFxuXHQgKi9cblx0X3JlZnJlc2hCaW5kaW5nQ29udGV4dChvQmluZGluZ0NvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IHNSb290Q29udGV4dFBhdGggPSBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID1cblx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDtcblx0XHRjb25zdCBhTmF2aWdhdGlvblByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgYVByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1RhcmdldFR5cGUgPSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdHRhcmdldEVudGl0aWVzOiBbXVxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXRCaW5kaW5nUGF0aHMob0JpbmRpbmc6IEJpbmRpbmcpOiB2b2lkIHtcblx0XHRcdGxldCBhRGVwZW5kZW50QmluZGluZ3M7XG5cdFx0XHRjb25zdCBzUmVsYXRpdmVQYXRoID0gKG9CaW5kaW5nLmdldENvbnRleHQoKT8uZ2V0UGF0aCgpID8/IFwiXCIpLnJlcGxhY2Uoc1Jvb3RDb250ZXh0UGF0aCwgXCJcIik7IC8vIElmIG5vIGNvbnRleHQsIHRoaXMgaXMgYW4gYWJzb2x1dGUgYmluZGluZyBzbyBubyByZWxhdGl2ZSBwYXRoXG5cdFx0XHRjb25zdCBzUGF0aCA9IChzUmVsYXRpdmVQYXRoID8gYCR7c1JlbGF0aXZlUGF0aC5zbGljZSgxKX0vYCA6IHNSZWxhdGl2ZVBhdGgpICsgb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAob0JpbmRpbmcuaXNBPE9EYXRhQ29udGV4dEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Ly8gaWYgKHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRcdC8vIG5vdyBnZXQgdGhlIGRlcGVuZGVudCBiaW5kaW5nc1xuXHRcdFx0XHRhRGVwZW5kZW50QmluZGluZ3MgPSBvQmluZGluZy5nZXREZXBlbmRlbnRCaW5kaW5ncygpO1xuXHRcdFx0XHRpZiAoYURlcGVuZGVudEJpbmRpbmdzKSB7XG5cdFx0XHRcdFx0Ly8gYXNrIHRoZSBkZXBlbmRlbnQgYmluZGluZ3MgKGFuZCBvbmx5IHRob3NlIHdpdGggdGhlIHNwZWNpZmllZCBncm91cElkXG5cdFx0XHRcdFx0Ly9pZiAoYURlcGVuZGVudEJpbmRpbmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYURlcGVuZGVudEJpbmRpbmdzKSB7XG5cdFx0XHRcdFx0XHRnZXRCaW5kaW5nUGF0aHMoaXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKCFhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMuaW5jbHVkZXMoc1BhdGgpKSB7XG5cdFx0XHRcdFx0YU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLnB1c2goc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGlmICghYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5wdXNoKHNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZy5pc0E8T0RhdGFQcm9wZXJ0eUJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGlmICghYVByb3BlcnR5UGF0aHMuaW5jbHVkZXMoc1BhdGgpKSB7XG5cdFx0XHRcdFx0YVByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRzTWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCk7XG5cdFx0fVxuXG5cdFx0Ly8gYmluZGluZyBvZiB0aGUgY29udGV4dCBtdXN0IGhhdmUgJCRQYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyB0cnVlLCB0aGlzIGJvdW5kIGNvbnRleHQgbWF5IGJlIG5lZWRlZCB0byBiZSBmZXRjaGVkIGZyb20gdGhlIGRlcGVuZGVudCBiaW5kaW5nXG5cdFx0Z2V0QmluZGluZ1BhdGhzKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpO1xuXG5cdFx0bGV0IGk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzW2ldXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPSBhUHJvcGVydHlQYXRocztcblx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucHVzaChzTWVzc2FnZXNQYXRoKTtcblx0XHR9XG5cdFx0Ly9hbGwgdGhpcyBsb2dpYyB0byBiZSByZXBsYWNlZCB3aXRoIGEgU2lkZUVmZmVjdHMgcmVxdWVzdCBmb3IgYW4gZW1wdHkgcGF0aCAocmVmcmVzaCBldmVyeXRoaW5nKSwgYWZ0ZXIgdGVzdGluZyB0cmFuc2llbnQgY29udGV4dHNcblx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA9IG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnJlZHVjZSgodGFyZ2V0czogc3RyaW5nW10sIHRhcmdldFByb3BlcnR5KSA9PiB7XG5cdFx0XHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSB0YXJnZXRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKTtcblx0XHRcdFx0dGFyZ2V0cy5wdXNoKGluZGV4ID4gMCA/IHRhcmdldFByb3BlcnR5LnNsaWNlKDAsIGluZGV4KSA6IHRhcmdldFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRzO1xuXHRcdH0sIFtdKTtcblx0XHQvLyBPRGF0YSBtb2RlbCB3aWxsIHRha2UgY2FyZSBvZiBkdXBsaWNhdGVzXG5cdFx0b1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoWy4uLm9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcywgLi4ub1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXNdLCBvQmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBvciB0aGUgY29tcG9uZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRfZ2V0QmluZGluZ0NvbnRleHQoKTogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBvciB0aGUgY29tcG9uZW50LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0X3NldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0OiBDb250ZXh0IHwgbnVsbCk6IHZvaWQge1xuXHRcdGxldCBvUHJldmlvdXNDb250ZXh0LCBvVGFyZ2V0Q29udHJvbDtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdG9QcmV2aW91c0NvbnRleHQgPSB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRvVGFyZ2V0Q29udHJvbCA9IHRoaXMuX29QYWdlQ29tcG9uZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUHJldmlvdXNDb250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdG9UYXJnZXRDb250cm9sID0gdGhpcy5fb1ZpZXc7XG5cdFx0fVxuXG5cdFx0b1RhcmdldENvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQpO1xuXG5cdFx0aWYgKG9QcmV2aW91c0NvbnRleHQ/LmlzS2VlcEFsaXZlKCkgJiYgb1ByZXZpb3VzQ29udGV4dCAhPT0gb0NvbnRleHQpIHtcblx0XHRcdHRoaXMuX3NldEtlZXBBbGl2ZShvUHJldmlvdXNDb250ZXh0LCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZsZXhpYmxlIGNvbHVtbiBsYXlvdXQgKEZDTCkgbGV2ZWwgY29ycmVzcG9uZGluZyB0byB0aGUgdmlldyAoLTEgaWYgdGhlIGFwcCBpcyBub3QgRkNMKS5cblx0ICogQHJldHVybnMgVGhlIGxldmVsXG5cdCAqL1xuXHRnZXRGQ0xMZXZlbCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24uRkNMTGV2ZWw7XG5cdH1cblxuXHRfc2V0S2VlcEFsaXZlKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdGJLZWVwQWxpdmU6IGJvb2xlYW4sXG5cdFx0Zm5CZWZvcmVEZXN0cm95PzogUGFyYW1ldGVyczxDb250ZXh0W1wic2V0S2VlcEFsaXZlXCJdPlsxXSxcblx0XHRiUmVxdWVzdE1lc3NhZ2VzPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob0NvbnRleHQuZ2V0UGF0aCgpLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0Ly8gV2Uga2VlcCB0aGUgY29udGV4dCBhbGl2ZSBvbmx5IGlmIHRoZXkncmUgcGFydCBvZiBhIGNvbGxlY3Rpb24sIGkuZS4gaWYgdGhlIHBhdGggZW5kcyB3aXRoIGEgJyknXG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgob01ldGFNb2RlbCwgc01ldGFQYXRoKTtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShiS2VlcEFsaXZlLCBmbkJlZm9yZURlc3Ryb3ksICEhc01lc3NhZ2VzUGF0aCAmJiBiUmVxdWVzdE1lc3NhZ2VzKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0S2VlcEFsaXZlQ29udGV4dChcblx0XHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0cGF0aDogc3RyaW5nLFxuXHRcdGJSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuLFxuXHRcdHBhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnNcblx0KTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gR2V0IHRoZSBwYXRoIGZvciB0aGUgY29udGV4dCB0aGF0IGlzIHJlYWxseSBrZXB0IGFsaXZlIChwYXJ0IG9mIGEgY29sbGVjdGlvbilcblx0XHQvLyBpLmUuIHJlbW92ZSBhbGwgc2VnbWVudHMgbm90IGVuZGluZyB3aXRoIGEgJyknXG5cdFx0Y29uc3Qga2VwdEFsaXZlU2VnbWVudHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBhZGRpdGlvbm5hbFNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHdoaWxlIChrZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggJiYgIWtlcHRBbGl2ZVNlZ21lbnRzW2tlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0YWRkaXRpb25uYWxTZWdtZW50cy5wdXNoKGtlcHRBbGl2ZVNlZ21lbnRzLnBvcCgpISk7XG5cdFx0fVxuXG5cdFx0aWYgKGtlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBrZXB0QWxpdmVQYXRoID0ga2VwdEFsaXZlU2VnbWVudHMuam9pbihcIi9cIik7XG5cdFx0Y29uc3Qgb0tlZXBBbGl2ZUNvbnRleHQgPSBvTW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChrZXB0QWxpdmVQYXRoLCBiUmVxdWVzdE1lc3NhZ2VzLCBwYXJhbWV0ZXJzKTtcblxuXHRcdGlmIChhZGRpdGlvbm5hbFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIG9LZWVwQWxpdmVDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRpdGlvbm5hbFNlZ21lbnRzLnJldmVyc2UoKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9ubmFsUGF0aCA9IGFkZGl0aW9ubmFsU2VnbWVudHMuam9pbihcIi9cIik7XG5cdFx0XHRyZXR1cm4gb01vZGVsLmJpbmRDb250ZXh0KGFkZGl0aW9ubmFsUGF0aCwgb0tlZXBBbGl2ZUNvbnRleHQpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTd2l0Y2hlcyBiZXR3ZWVuIGNvbHVtbiBhbmQgZnVsbC1zY3JlZW4gbW9kZSB3aGVuIEZDTCBpcyB1c2VkLlxuXHQgKlxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0c3dpdGNoRnVsbFNjcmVlbigpOiB2b2lkIHtcblx0XHRjb25zdCBvU291cmNlID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHRjb25zdCBvRkNMSGVscGVyTW9kZWwgPSBvU291cmNlLmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLFxuXHRcdFx0YklzRnVsbFNjcmVlbiA9IG9GQ0xIZWxwZXJNb2RlbC5nZXRQcm9wZXJ0eShcIi9hY3Rpb25CdXR0b25zSW5mby9pc0Z1bGxTY3JlZW5cIiksXG5cdFx0XHRzTmV4dExheW91dCA9IG9GQ0xIZWxwZXJNb2RlbC5nZXRQcm9wZXJ0eShcblx0XHRcdFx0YklzRnVsbFNjcmVlbiA/IFwiL2FjdGlvbkJ1dHRvbnNJbmZvL2V4aXRGdWxsU2NyZWVuXCIgOiBcIi9hY3Rpb25CdXR0b25zSW5mby9mdWxsU2NyZWVuXCJcblx0XHRcdCksXG5cdFx0XHRvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblxuXHRcdGNvbnN0IG9Db250ZXh0ID0gKG9Sb290Vmlld0NvbnRyb2xsZXIgYXMgRmNsQ29udHJvbGxlcikuZ2V0UmlnaHRtb3N0Q29udGV4dFxuXHRcdFx0PyAob1Jvb3RWaWV3Q29udHJvbGxlciBhcyBGY2xDb250cm9sbGVyKS5nZXRSaWdodG1vc3RDb250ZXh0KCkhXG5cdFx0XHQ6IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdHRoaXMuYmFzZS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChvQ29udGV4dCwgeyBsYXlvdXQ6IHNOZXh0TGF5b3V0IH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiY2Fubm90IHN3aXRjaCBiZXR3ZWVuIGNvbHVtbiBhbmQgZnVsbHNjcmVlblwiKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGNvbHVtbiBmb3IgdGhlIGN1cnJlbnQgdmlldyBpbiBhIEZDTC5cblx0ICpcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5CZWZvcmUpXG5cdGFzeW5jIGNsb3NlQ29sdW1uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCk7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRub1ByZXNlcnZhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdFx0bGF5b3V0OiB0aGlzLl9vVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5nZXRQcm9wZXJ0eShcIi9hY3Rpb25CdXR0b25zSW5mby9jbG9zZUNvbHVtblwiKVxuXHRcdH07XG5cblx0XHRjb25zdCBpc0RvY3VtZW50TW9kaWZpZWQgPVxuXHRcdFx0ISF0aGlzLmdldFZpZXcoKT8uZ2V0TW9kZWwoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fCAhb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5fb0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQuZW5hYmxlZDtcblxuXHRcdGlmICghaXNEb2N1bWVudE1vZGlmaWVkICYmIGlzSGlkZGVuRHJhZnRFbmFibGVkKSB7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0c2tpcERpc2NhcmRQb3BvdmVyOiB0cnVlLFxuXHRcdFx0XHRza2lwQmFja05hdmlnYXRpb246IHRydWVcblx0XHRcdH07XG5cdFx0XHRhd2FpdCB0aGlzLmJhc2UuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdHRoaXMubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKG9WaWV3RGF0YT8udmlld0xldmVsID09PSAxICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob01ldGFNb2RlbCwgb0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHQvLyBXZSBkb24ndCBoYXZlIGNhbGxFeHRlbnNpb249dHJ1ZSBpbiB0aGlzIGNhc2UsIGFzIHRoZXJlJ3MgYSB1c2VyIHZhbGlkYXRpb24gd2l0aCB0aGUgZGF0YWxvc3MgZGlhbG9nXG5cdFx0XHRcdFx0Ly8gYW5kIGl0IHdvdWxkbid0IG1ha2Ugc2Vuc2UgdG8gY2FuY2VsIHRoZSBuYXZpZ2F0aW9uIGFmdGVyIHRoaXMgY29uZmlybWF0aW9uXG5cdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLl9vVmlldy5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jYWxsRXh0ZW5zaW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0Ly8gUmVtb3ZlcyB0cmFuc2l0aW9uIG1lc3NhZ2UgZm9yIHRoZSBzcGVjaWZpZWQgY29udGV4dFxuXHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbFJvdXRpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTRDQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBS01BLGVBQWUsSUFBQUMsSUFBQSxHQURwQkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVBQUFDLEtBQUEsR0FvQmpFQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBT2hCRCxjQUFjLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBd0NoQkMsZUFBZSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUNqQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQUFDLEtBQUEsR0FLbkNMLGVBQWUsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FDakJKLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBRyxLQUFBLEdBS25DUCxlQUFlLENBQUMsQ0FBQyxFQUFBUSxLQUFBLEdBQ2pCTixVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUssTUFBQSxHQVduQ1QsZUFBZSxDQUFDLENBQUMsRUFBQVUsTUFBQSxHQUNqQlIsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQUFPLE1BQUEsR0FnQ25DWCxlQUFlLENBQUMsQ0FBQyxFQUFBWSxNQUFBLEdBNkNqQlosZUFBZSxDQUFDLENBQUMsRUFBQWEsTUFBQSxHQTZMakJiLGVBQWUsQ0FBQyxDQUFDLEVBQUFjLE1BQUEsR0FDakJDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0E4QmhCaEIsZUFBZSxDQUFDLENBQUMsRUFBQWlCLE1BQUEsR0FDakJGLGNBQWMsQ0FBQyxDQUFDLEVBQUFHLE1BQUEsR0FpZGhCbEIsZUFBZSxDQUFDLENBQUMsRUFBQW1CLE1BQUEsR0EyTmpCbkIsZUFBZSxDQUFDLENBQUMsRUFBQW9CLE1BQUEsR0FDakJMLGNBQWMsQ0FBQyxD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
|