@sapui5/sap.fe.core 1.141.2 → 1.143.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 +4 -1
- package/src/sap/fe/core/ActionRuntime.js +78 -23
- package/src/sap/fe/core/ActionRuntime.ts +91 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +91 -8
- package/src/sap/fe/core/AppStateHandler.js +7 -7
- package/src/sap/fe/core/AppStateHandler.ts +9 -8
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -11
- package/src/sap/fe/core/ExtensionAPI.ts +3 -16
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +12 -1
- package/src/sap/fe/core/TemplateComponent.ts +16 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
- package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
- 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/OperationMessage.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
- package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
- package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
- package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
- package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
- package/src/sap/fe/core/fpm/manifest.json +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
- package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
- package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
- package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
- package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +33 -3
- package/src/sap/fe/core/library.ts +31 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -1
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +9 -2
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -810,4 +810,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
|
|
|
810
810
|
}(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "addControlSideEffects", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "addControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeControlSideEffects", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "removeControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getContextForSideEffects", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "getContextForSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "waitForSideEffectExecutions", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "waitForSideEffectExecutions"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getFieldSideEffectsMap", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getFieldSideEffectsMap"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getSideEffectsMapForFieldGroups", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "getSideEffectsMapForFieldGroups"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearFieldGroupsValidity", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "clearFieldGroupsValidity"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isFieldGroupValid", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "isFieldGroupValid"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getTargetProperty", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "getTargetProperty"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareDeferredSideEffectsForField", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareDeferredSideEffectsForField"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldChange", [_dec23, _dec24], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldGroupChange", [_dec25, _dec26], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldGroupChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handlePageChangeContext", [_dec27, _dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "handlePageChangeContext"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffects", [_dec29, _dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffectsForEvent", [_dec31, _dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffectsForEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getDataRefreshText", [_dec33, _dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "getDataRefreshText"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredFailedRequests", [_dec35, _dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredFailedRequests"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "registerFailedSideEffects", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "registerFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFailedSideEffectsForAContext", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFailedSideEffectsForAContext"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFailedSideEffects", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "registerFieldGroupSideEffects", [_dec43, _dec44], Object.getOwnPropertyDescriptor(_class2.prototype, "registerFieldGroupSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFieldGroupSideEffects", [_dec45, _dec46], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFieldGroupSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredSideEffectsForFieldGroup", [_dec47, _dec48], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredSideEffectsForFieldGroup"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredSideEffectsForContext", [_dec49, _dec50], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredSideEffectsForContext"), _class2.prototype), _class2)) || _class);
|
|
811
811
|
return SideEffectsControllerExtension;
|
|
812
812
|
}, false);
|
|
813
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTU1FRElBVEVfUkVRVUVTVCIsIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM0IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiX2RlYzIzIiwiX2RlYzI0IiwiX2RlYzI1IiwiX2RlYzI2IiwiX2RlYzI3IiwiX2RlYzI4IiwiX2RlYzI5IiwiX2RlYzMwIiwiX2RlYzMxIiwiX2RlYzMyIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsIl9kZWMzMyIsIl9kZWMzNCIsIl9kZWMzNSIsIl9kZWMzNiIsIl9kZWMzNyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMzgiLCJfZGVjMzkiLCJfZGVjNDAiLCJfZGVjNDEiLCJfZGVjNDIiLCJfZGVjNDMiLCJfZGVjNDQiLCJfZGVjNDUiLCJfZGVjNDYiLCJfZGVjNDciLCJfZGVjNDgiLCJfZGVjNDkiLCJfZGVjNTAiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJyZXF1ZXN0RXhlY3V0aW9ucyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiX3ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9wYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJfc2lkZUVmZmVjdHNTZXJ2aWNlIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJfcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXAiLCJfZmllbGRHcm91cEludmFsaWRpdHkiLCJfcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzIiwiYWRkQ29udHJvbFNpZGVFZmZlY3RzIiwiZW50aXR5VHlwZSIsImNvbnRyb2xTaWRlRWZmZWN0cyIsInJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyIsImNvbnRyb2wiLCJjb250cm9sSWQiLCJpc0EiLCJnZXRJZCIsImdldENvbnRleHRGb3JTaWRlRWZmZWN0cyIsImJpbmRpbmdDb250ZXh0Iiwic2lkZUVmZmVjdEVudGl0eVR5cGUiLCJjb250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsInVuZGVmaW5lZCIsIndhaXRGb3JTaWRlRWZmZWN0RXhlY3V0aW9ucyIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZ2V0RmllbGRTaWRlRWZmZWN0c01hcCIsImZpZWxkIiwic2lkZUVmZmVjdHNNYXAiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwiZmllbGRHcm91cElkcyIsImdldEZpZWxkR3JvdXBJZHMiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld0VudGl0eVR5cGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZmllbGRQYXRoIiwiZ2V0VGFyZ2V0UHJvcGVydHkiLCJjb250ZXh0IiwiY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic2lkZUVmZmVjdHNOYW1lIiwib0NvbnRyb2xTaWRlRWZmZWN0cyIsInNvdXJjZVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsIm5hbWUiLCJpbW1lZGlhdGUiLCJzaWRlRWZmZWN0cyIsImZpZWxkQ29udGV4dCIsIm1TaWRlRWZmZWN0c01hcCIsImZpZWxkR3JvdXBJZCIsIl9nZXRTaWRlRWZmZWN0c1Byb3BlcnR5Rm9yRmllbGRHcm91cCIsIm9Db250ZXh0IiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiaXNGaWVsZEdyb3VwVmFsaWQiLCJpZCIsIl9nZXRGaWVsZEdyb3VwSW5kZXgiLCJsZW5ndGgiLCJkYXRhIiwibWV0YU1vZGVsIiwidmlld0JpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInZpZXdNZXRhTW9kZWxQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXBsYWNlIiwicHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZCIsImV2ZW50IiwiZmllbGRWYWxpZGl0eSIsImZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJnZXRTb3VyY2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpbHRlciIsInNpZGVFZmZlY3RzUHJvcGVydGllcyIsInJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24iLCJhcmd1bWVudHMiLCJfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQiLCJoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlIiwiZ2V0UGFyYW1ldGVyIiwiY3VzdG9tU2lkZUVmZmVjdEhhbmRsaW5nIiwic29tZSIsInN0YXJ0c1dpdGgiLCJzaWRlRWZmZWN0UmVxdWVzdFByb21pc2VzIiwiY3VzdG9tSW1tZWRpYXRlU2lkZUVmZmVjdFByb21pc2VzIiwiaGFuZGxlQ3VzdG9tRmllbGRGaWVsZEdyb3VwQ2hhbmdlIiwicHVzaCIsInRoZW4iLCJmaWVsZEdyb3Vwc1NpZGVFZmZlY3RzIiwicmVkdWNlIiwicmVzdWx0cyIsImNvbmNhdCIsImdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAiLCJtYXAiLCJmaWVsZEdyb3VwU2lkZUVmZmVjdHMiLCJfcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJkZWJ1ZyIsInZhbHVlcyIsInNpZGVFZmZlY3REZWYiLCJyZXNvbHZlIiwiaW1tZWRpYXRlU2lkZUVmZmVjdHMiLCJyZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyIsImhhbmRsZVBhZ2VDaGFuZ2VDb250ZXh0Iiwic2lkZUVmZmVjdHNGaWVsZEdyb3VwT25QYWdlIiwiZ2V0UmVnaXN0ZXJlZFNpZGVFZmZlY3RzRm9yQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImdyb3VwSWQiLCJmbkdldFRhcmdldHMiLCJpZ25vcmVUcmlnZ2VyQWN0aW9ucyIsImZuVHJpZ2dlckNhbGxiYWNrcyIsInRyaWdnZXJDYWxsYmFja3MiLCJiaW5kIiwidGFyZ2V0cyIsInRyaWdnZXJBY3Rpb24iLCJ0YXJnZXRFbnRpdGllcyIsInRhcmdldFByb3BlcnRpZXMiLCJpc0NvbnRyb2xTaWRlRWZmZWN0cyIsImV4ZWN1dGVBY3Rpb24iLCJyZXF1ZXN0VGFyZ2V0cyIsImFzeW5jIiwidGFyZ2V0IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQiLCJldmVudE5hbWUiLCJwYXRoIiwiaXNEYXRhUGF0aFJlbGV2YW50IiwiZWRpdEZsb3ciLCJzeW5jVGFzayIsIl9maW5kUmVsZXZhbnRDb250ZXh0IiwiX2V2ZW50TmFtZSIsIl9jb250ZXh0SXNSZWxldmFudCIsImdldENhbm9uaWNhbFBhdGgiLCJtb2RlbCIsImRlcGVuZGVudEJpbmRpbmdzIiwiZ2V0RGVwZW5kZW50QmluZGluZ3MiLCJjb250ZXh0SXNBY3RpdmVFbnRpdHkiLCJnZXRPYmplY3QiLCJJc0FjdGl2ZUVudGl0eSIsImJpbmRpbmciLCJiaW5kaW5nUGF0aCIsInByb3BlcnR5VGFyZ2V0IiwiZmV0Y2hVcGRhdGVEYXRhIiwiZ2V0UmVzdWx0IiwiZW50aXR5UGF0aCIsImVkaXRVcmwiLCJnZXRCb3VuZENvbnRleHQiLCJsaXN0Q29udGV4dHMiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJsaXN0Q29udGV4dCIsImdldERhdGFSZWZyZXNoVGV4dCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsIm5vdGlmeURhdGFSZWZyZXNoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldENvbnRyb2xsZXIiLCJfc2lkZUVmZmVjdHMiLCJjb25maXJtRGF0YVJlZnJlc2giLCJpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4iLCJyZWplY3QiLCJ0ZXh0IiwiY29uZmlybWF0aW9uRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsImNvbnRlbnQiLCJUZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsImNsb3NlIiwiZW5kQnV0dG9uIiwiYWZ0ZXJDbG9zZSIsImRlc3Ryb3kiLCJhZGRTdHlsZUNsYXNzIiwib3BlbiIsIm11bHRpU2lkZUVmZmVjdHMiLCJwcm9wZXJ0aWVzIiwiU2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJhY3Rpb25zIiwic2lkZUVmZmVjdEFjdGlvbiIsImZudHJpZ2dlckNhbGxiYWNrcyIsImFjdGlvbiIsIm15U2V0IiwicHJvcGVydHkiLCJhZGQiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJBcnJheSIsImZyb20iLCJnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMiLCJpc05vdEFscmVhZHlMaXN0ZWQiLCJldmVyeSIsIm1GYWlsZWRTaWRlRWZmZWN0cyIsInVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0c0ZvckFDb250ZXh0IiwidW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWUiLCJwcm9taXNlIiwic2lkZUVmZmVjdFByb3BlcnR5IiwidW5yZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsInJlZ2lzdHJ5SW5kZXgiLCJzaWRlRWZmZWN0UGFydHMiLCJzcGxpdCIsInNpZGVFZmZlY3RQYXRoIiwiZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzVG9FeGVjdXRlIiwiYWRkU2lkZUVmZmVjdHMiLCJmYWlsZWRTaWRlRWZmZWN0cyIsImZhaWxlZFNpZGVFZmZlY3QiLCJlIiwibmF2aWdhdGlvbiIsIm5hdiIsInJlZ2lzdGVyQ2FsbEJhY2siLCJnZXRSZWdpc3RlcmVkQ2FsbGJhY2siLCJzdWNjZXNzIiwia2V5IiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNpZGVFZmZlY3RzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNTZXJ2aWNlLFxuXHRTaWRlRWZmZWN0c1RhcmdldCxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSB7IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vUmFkaW9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi9QYWdlQ29udHJvbGxlclwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCIuLi9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuXG50eXBlIEJhc2VTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZSAmIHtcblx0Y29udGV4dDogQ29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG5leHBvcnQgdHlwZSBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZT47XG5cbnR5cGUgRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBTaWRlRWZmZWN0c1R5cGVbXT47XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG59O1xuXG5jb25zdCBJTU1FRElBVEVfUkVRVUVTVCA9IFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCI7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiKVxuY2xhc3MgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJpdmF0ZSBfdmlldyE6IEZFVmlldztcblxuXHRwcml2YXRlIF9wYWdlQ29tcG9uZW50OiBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXAhOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGU+O1xuXG5cdHByaXZhdGUgX2ZpZWxkR3JvdXBJbnZhbGlkaXR5ITogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+O1xuXG5cdHByaXZhdGUgX3NpZGVFZmZlY3RzU2VydmljZSE6IFNpZGVFZmZlY3RzU2VydmljZTtcblxuXHRwcml2YXRlIF9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMhOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblxuXHRwcml2YXRlIGlzQ29uZmlybWF0aW9uRGlhbG9nT3Blbj86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXF1ZXN0RXhlY3V0aW9uczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl92aWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9wYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX3ZpZXcpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZSA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCA9IHt9O1xuXHRcdHRoaXMuX2ZpZWxkR3JvdXBJbnZhbGlkaXR5ID0ge307XG5cdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIFNpZGVFZmZlY3RzIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIE5hbWUgb2YgdGhlIGVudGl0eSB3aGVyZSB0aGUgU2lkZUVmZmVjdHMgY29udHJvbCB3aWxsIGJlIHJlZ2lzdGVyZWRcblx0ICogQHBhcmFtIGNvbnRyb2xTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byByZWdpc3Rlci4gRW5zdXJlIHRoZSBzb3VyY2VDb250cm9sSWQgbWF0Y2hlcyB0aGUgYXNzb2NpYXRlZCBTQVBVSTUgY29udHJvbCBJRC5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhZGRDb250cm9sU2lkZUVmZmVjdHMoZW50aXR5VHlwZTogc3RyaW5nLCBjb250cm9sU2lkZUVmZmVjdHM6IE9taXQ8Q29udHJvbFNpZGVFZmZlY3RzVHlwZSwgXCJmdWxseVF1YWxpZmllZE5hbWVcIj4pOiB2b2lkIHtcblx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuYWRkQ29udHJvbFNpZGVFZmZlY3RzKGVudGl0eVR5cGUsIGNvbnRyb2xTaWRlRWZmZWN0cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBTaWRlRWZmZWN0cyBjcmVhdGVkIGJ5IGEgY29udHJvbC5cblx0ICogQHBhcmFtIGNvbnRyb2wgU0FQVUk1IENvbnRyb2xcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoY29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IGNvbnRyb2wuaXNBPy4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpICYmIGNvbnRyb2wuZ2V0SWQoKTtcblxuXHRcdGlmIChjb250cm9sSWQpIHtcblx0XHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5yZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoY29udHJvbElkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgY29udGV4dCBvbiB3aGljaCBTaWRlRWZmZWN0cyBjYW4gYmUgcmVxdWVzdGVkLlxuXHQgKiBUaGUgY29ycmVjdCBvbmUgbXVzdCBoYXZlIHRoZSBiaW5kaW5nIHBhcmFtZXRlciAkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzLlxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgSW5pdGlhbCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RFbnRpdHlUeXBlIEVudGl0eVR5cGUgb2YgdGhlIHNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zIFNBUFVJNSBDb250ZXh0IG9yIHVuZGVmaW5lZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhiaW5kaW5nQ29udGV4dDogQ29udGV4dCwgc2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZyk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBiaW5kaW5nQ29udGV4dCxcblx0XHRcdGVudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0Y29udGV4dEZvclNpZGVFZmZlY3RzID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmdldENvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0aWYgKGNvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRlbnRpdHlUeXBlID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRpZiAoc2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IGVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRjb250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBjb250ZXh0Rm9yU2lkZUVmZmVjdHMuZ2V0QmluZGluZygpLmdldENvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0XHRcdGlmIChjb250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0XHRcdGVudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdFx0XHRpZiAoc2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IGVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGV4dEZvclNpZGVFZmZlY3RzIHx8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IEZvciBhbGwgc2lkZUVmZmVjdHMgZXhlY3V0aW9uIHRvIGJlIGNvbXBsZXRlZC5cblx0ICpcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyB3YWl0Rm9yU2lkZUVmZmVjdEV4ZWN1dGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMucmVxdWVzdEV4ZWN1dGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIG1hcCBmb3IgYSBmaWVsZFxuXHQgKiBUaGVzZSBTaWRlRWZmZWN0cyBhcmVcblx0ICogLSBsaXN0ZWQgaW50byBGaWVsZEdyb3VwSWRzIChjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlKVxuXHQgKiAtIGdlbmVyYXRlZCBieSBhIGNvbnRyb2wgb3IgY29udHJvbHMgYW5kIHRoYXQgY29uZmlndXJlIHRoaXMgZmllbGQgYXMgU291cmNlUHJvcGVydGllcy5cblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZDogQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGxldCBzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9O1xuXHRcdGlmICh0aGlzLl9wYWdlQ29tcG9uZW50KSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSB0aGlzLl9wYWdlQ29tcG9uZW50LmdldEVudGl0eVNldD8uKCk7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IHRoaXMuX3BhZ2VDb21wb25lbnQuZ2V0Q29udGV4dFBhdGg/LigpIHx8IChlbnRpdHlTZXQgJiYgYC8ke2VudGl0eVNldH1gKTtcblxuXHRcdFx0aWYgKGNvbnRleHRQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBmaWVsZC5nZXRGaWVsZEdyb3VwSWRzKCksXG5cdFx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdFx0dGhpcy5fdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBTaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlXG5cdFx0XHRcdHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHMsXG5cdFx0XHRcdFx0ZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZFxuXHRcdFx0XHQpIGFzIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0XHRcdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gY29udHJvbChzKVxuXHRcdFx0XHRpZiAoY29udGV4dERhdGFNb2RlbE9iamVjdCkge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXdFbnRpdHlUeXBlID0gY29udGV4dERhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRcdGZpZWxkUGF0aCA9IHRoaXMuZ2V0VGFyZ2V0UHJvcGVydHkoZmllbGQpLFxuXHRcdFx0XHRcdFx0Y29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCwgdmlld0VudGl0eVR5cGUpO1xuXG5cdFx0XHRcdFx0aWYgKGZpZWxkUGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyh2aWV3RW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlKS5mb3JFYWNoKChzaWRlRWZmZWN0c05hbWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xTaWRlRWZmZWN0cyA9IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGVbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYgKG9Db250cm9sU2lkZUVmZmVjdHMuc291cmNlUHJvcGVydGllcy5pbmNsdWRlcyhmaWVsZFBhdGgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmFtZSA9IGAke3NpZGVFZmZlY3RzTmFtZX06OiR7dmlld0VudGl0eVR5cGV9YDtcblx0XHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0c01hcFtuYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb0NvbnRyb2xTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHNpZGVFZmZlY3RzIG1hcCBmb3IgZmllbGRHcm91cHMuXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWRzIEZpZWxkIGdyb3VwIGlkc1xuXHQgKiBAcGFyYW0gZmllbGRDb250ZXh0IEZpZWxkIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyBtYXBcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMoXG5cdFx0ZmllbGRHcm91cElkczogc3RyaW5nW10sXG5cdFx0ZmllbGRDb250ZXh0PzogQ29udGV4dCB8IG51bGxcblx0KTogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0Y29uc3QgbVNpZGVFZmZlY3RzTWFwOiBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfCBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0ge307XG5cdFx0ZmllbGRHcm91cElkcy5mb3JFYWNoKChmaWVsZEdyb3VwSWQpID0+IHtcblx0XHRcdGNvbnN0IHsgbmFtZSwgaW1tZWRpYXRlLCBzaWRlRWZmZWN0cywgc2lkZUVmZmVjdEVudGl0eVR5cGUgfSA9IHRoaXMuX2dldFNpZGVFZmZlY3RzUHJvcGVydHlGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZCk7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IGZpZWxkQ29udGV4dCA/ICh0aGlzLmdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhmaWVsZENvbnRleHQsIHNpZGVFZmZlY3RFbnRpdHlUeXBlKSBhcyBDb250ZXh0KSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzaWRlRWZmZWN0cyAmJiAoIWZpZWxkQ29udGV4dCB8fCAoZmllbGRDb250ZXh0ICYmIG9Db250ZXh0KSkpIHtcblx0XHRcdFx0bVNpZGVFZmZlY3RzTWFwW25hbWVdID0ge1xuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0aW1tZWRpYXRlLFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChmaWVsZENvbnRleHQpIHtcblx0XHRcdFx0XHQobVNpZGVFZmZlY3RzTWFwW25hbWVdIGFzIEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZSkuY29udGV4dCA9IG9Db250ZXh0ITtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBtU2lkZUVmZmVjdHNNYXA7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgcmVjb3JkZWQgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSgpOiB2b2lkIHtcblx0XHR0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eSA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHJlY29yZGVkIHZhbGlkYXRpb24gc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGZpZWxkR3JvdXBJZCBGaWVsZCBncm91cCBpZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEByZXR1cm5zIFNBUFVJNSBDb250ZXh0IG9yIHVuZGVmaW5lZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGlzRmllbGRHcm91cFZhbGlkKGZpZWxkR3JvdXBJZDogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaWQgPSB0aGlzLl9nZXRGaWVsZEdyb3VwSW5kZXgoZmllbGRHcm91cElkLCBjb250ZXh0KTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdID8/IHt9KS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcmVsYXRpdmUgdGFyZ2V0IHByb3BlcnR5IHJlbGF0ZWQgdG8gdGhlIEZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGQgRmllbGQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBSZWxhdGl2ZSB0YXJnZXQgcHJvcGVydHlcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRUYXJnZXRQcm9wZXJ0eShmaWVsZDogQ29udHJvbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZmllbGRQYXRoID0gZmllbGQuZGF0YShcInNvdXJjZVBhdGhcIikgYXMgc3RyaW5nO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuX3ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCB2aWV3QmluZGluZ1BhdGggPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRjb25zdCB2aWV3TWV0YU1vZGVsUGF0aCA9IHZpZXdCaW5kaW5nUGF0aCA/IGAke21ldGFNb2RlbC5nZXRNZXRhUGF0aCh2aWV3QmluZGluZ1BhdGgpfS9gIDogXCJcIjtcblx0XHRyZXR1cm4gZmllbGRQYXRoPy5yZXBsYWNlKHZpZXdNZXRhTW9kZWxQYXRoLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkLlxuXHQgKiBAcGFyYW0gZXZlbnQgU0FQVUk1IGV2ZW50IHRoYXQgY29tZXMgZnJvbSBhIGZpZWxkIGNoYW5nZVxuXHQgKiBAcGFyYW0gZmllbGRWYWxpZGl0eVxuXHQgKiBAcGFyYW0gZmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChcblx0XHRldmVudDogRmllbGQkQ2hhbmdlRXZlbnQgfCBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfCBSYWRpb0J1dHRvbkdyb3VwJFNlbGVjdEV2ZW50LFxuXHRcdGZpZWxkVmFsaWRpdHk6IGJvb2xlYW4sXG5cdFx0ZmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8dW5rbm93bj5cblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgZmllbGQgPSAoZXZlbnQgYXMgVUk1RXZlbnQ8e30sIENvbnRyb2w+KS5nZXRTb3VyY2UoKTtcblx0XHR0aGlzLl9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKGZpZWxkLCBmaWVsZFZhbGlkaXR5KTtcblx0XHRpZiAoIWZpZWxkVmFsaWRpdHkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHNNYXAgPSB0aGlzLmdldEZpZWxkU2lkZUVmZmVjdHNNYXAoZmllbGQpO1xuXG5cdFx0Ly8gcmVnaXN0ZXIgZmllbGQgZ3JvdXAgU2lkZUVmZmVjdHNcblx0XHRPYmplY3Qua2V5cyhzaWRlRWZmZWN0c01hcClcblx0XHRcdC5maWx0ZXIoKHNpZGVFZmZlY3RzTmFtZSkgPT4gc2lkZUVmZmVjdHNNYXBbc2lkZUVmZmVjdHNOYW1lXS5pbW1lZGlhdGUgIT09IHRydWUpXG5cdFx0XHQuZm9yRWFjaCgoc2lkZUVmZmVjdHNOYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzUHJvcGVydGllcyA9IHNpZGVFZmZlY3RzTWFwW3NpZGVFZmZlY3RzTmFtZV07XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLCBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHdvcmtmbG93IGZvciBTaWRlRWZmZWN0cyB3aXRoIHJlbGF0ZWQgY2hhbmdlcyB0byBhIGZpZWxkXG5cdCAqIFRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zIGFyZSBtYW5hZ2VkOlxuXHQgKiAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkXG5cdCAqIC0gRXhlY3V0ZTogdHJpZ2dlcnMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGlmIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZXZlbnQgaXMgZnVsZmlsbGVkLlxuXHQgKiBAcGFyYW0gZXZlbnQgU0FQVUk1IGV2ZW50IHRoYXQgY29tZXMgZnJvbSBhIGZpZWxkIGNoYW5nZVxuXHQgKiBAcGFyYW0gZmllbGRWYWxpZGl0eVxuXHQgKiBAcGFyYW0gZmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24gSWYgdHJ1ZSB0aGVuIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlZ2lzdGVyZWQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHJlZ2lzdHJhdGlvbiBvZiBkZWZlcnJlZCBzaWRlIGVmZmVjdHMgYW5kIHRyaWdnZXJpbmcgbmVlZHMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5LlxuXHQgKiBAcmV0dXJucyAgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgaGFuZGxlRmllbGRDaGFuZ2UoXG5cdFx0ZXZlbnQ6IEZpZWxkJENoYW5nZUV2ZW50IHwgTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IHwgUmFkaW9CdXR0b25Hcm91cCRTZWxlY3RFdmVudCxcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuLFxuXHRcdGZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPHVua25vd24+LFxuXHRcdHNraXBEZWZlcnJlZFJlZ2lzdHJhdGlvbiA9IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIFVJNUV2ZW50PHt9LCBDb250cm9sPikuZ2V0U291cmNlKCk7XG5cdFx0aWYgKCFza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24pIHtcblx0XHRcdHRoaXMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChldmVudCwgZmllbGRWYWxpZGl0eSwgZmllbGRHcm91cFByZVJlcXVpc2l0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdFx0aWYgKCFmaWVsZFZhbGlkaXR5KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX21hbmFnZVNpZGVFZmZlY3RzRnJvbUZpZWxkKGZpZWxkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIFNpZGVFZmZlY3RzIHdpdGggYSByZWxhdGVkICdmb2N1cyBvdXQnIHRvIGEgZmllbGQgZ3JvdXAuXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgRXZlbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgU2lkZUVmZmVjdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiBQcm9taXNlPHZvaWQgfCB2b2lkW10+IHtcblx0XHRjb25zdCBmaWVsZCA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZmllbGRHcm91cElkczogc3RyaW5nW10gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWVsZEdyb3VwSWRzXCIpID8/IFtdLFxuXHRcdFx0Y3VzdG9tU2lkZUVmZmVjdEhhbmRsaW5nID0gZmllbGRHcm91cElkcy5zb21lKChmaWVsZEdyb3VwSWQpID0+IGZpZWxkR3JvdXBJZC5zdGFydHNXaXRoKFwiZmVfc2lkZUVmZmVjdEhhbmRsaW5nX1wiKSk7XG5cblx0XHRsZXQgc2lkZUVmZmVjdFJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdGlmIChjdXN0b21TaWRlRWZmZWN0SGFuZGxpbmcpIHtcblx0XHRcdGNvbnN0IGN1c3RvbUltbWVkaWF0ZVNpZGVFZmZlY3RQcm9taXNlcyA9IHRoaXMuaGFuZGxlQ3VzdG9tRmllbGRGaWVsZEdyb3VwQ2hhbmdlKGV2ZW50KTtcblx0XHRcdGlmIChjdXN0b21JbW1lZGlhdGVTaWRlRWZmZWN0UHJvbWlzZXMpIHtcblx0XHRcdFx0c2lkZUVmZmVjdFJlcXVlc3RQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdGN1c3RvbUltbWVkaWF0ZVNpZGVFZmZlY3RQcm9taXNlcy50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGZpZWxkR3JvdXBzU2lkZUVmZmVjdHMgPSBmaWVsZEdyb3VwSWRzLnJlZHVjZSgocmVzdWx0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10sIGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlc3VsdHMuY29uY2F0KHRoaXMuZ2V0UmVnaXN0ZXJlZFNpZGVFZmZlY3RzRm9yRmllbGRHcm91cChmaWVsZEdyb3VwSWQpKTtcblx0XHR9LCBbXSk7XG5cdFx0c2lkZUVmZmVjdFJlcXVlc3RQcm9taXNlcyA9IHNpZGVFZmZlY3RSZXF1ZXN0UHJvbWlzZXMuY29uY2F0KFxuXHRcdFx0ZmllbGRHcm91cHNTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKGZpZWxkR3JvdXBTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyhmaWVsZEdyb3VwU2lkZUVmZmVjdHMpO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHNpZGVFZmZlY3RSZXF1ZXN0UHJvbWlzZXMpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0cyBvbiBjb250ZXh0ICR7Y29udGV4dFBhdGh9YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgU2lkZUVmZmVjdHMgd2hlbiB0aGUgZmllbGRHcm91cENoYW5nZSBldmVudCBpcyBmaXJlZCBmb3IgYSBjdXN0b20gZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBpbW1lZGlhdGUgc2lkZSBlZmZlY3RzIHJlcXVlc3QgaWYgdGhlcmUgYXJlIGFueVxuXHQgKi9cblx0aGFuZGxlQ3VzdG9tRmllbGRGaWVsZEdyb3VwQ2hhbmdlKGV2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogbnVsbCB8IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpZWxkID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgY29udHJvbFNpZGVFZmZlY3RzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmdldEZpZWxkU2lkZUVmZmVjdHNNYXAoZmllbGQpKTtcblxuXHRcdC8vIHJlZ2lzdGVyIHRoZSBub24gaW1tZWRpYXRlIHNpZGUgZWZmZWN0c1xuXHRcdGNvbnRyb2xTaWRlRWZmZWN0c1xuXHRcdFx0LmZpbHRlcigoc2lkZUVmZmVjdERlZikgPT4gc2lkZUVmZmVjdERlZi5pbW1lZGlhdGUgIT09IHRydWUpXG5cdFx0XHQuZm9yRWFjaCgoc2lkZUVmZmVjdERlZikgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3REZWYsIFByb21pc2UucmVzb2x2ZSgpKTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gZXhlY3V0ZSB0aGUgaW1tZWRpYXRlIHNpZGUgZWZmZWN0cyBvZiB0aGUgY29udHJvbFxuXHRcdGNvbnN0IGltbWVkaWF0ZVNpZGVFZmZlY3RzID0gY29udHJvbFNpZGVFZmZlY3RzXG5cdFx0XHQuZmlsdGVyKChzaWRlRWZmZWN0RGVmKSA9PiBzaWRlRWZmZWN0RGVmLmltbWVkaWF0ZSA9PT0gdHJ1ZSlcblx0XHRcdC5tYXAoKHNpZGVFZmZlY3REZWYpID0+IHNpZGVFZmZlY3REZWYuc2lkZUVmZmVjdHMpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0aWYgKGltbWVkaWF0ZVNpZGVFZmZlY3RzLmxlbmd0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhpbW1lZGlhdGVTaWRlRWZmZWN0cywgY29udGV4dCBhcyBDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiBNYW5hZ2VzIHRoZSBkZWZlcnJlZCBTaWRlRWZmZWN0cyB3aGljaCBoYXZlIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNvbnRleHQgb2YgdGhlIHBhZ2UgY2hhbmdlcyAoc2F2aW5nIGEgZG9jdW1lbnQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgcGFnZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybnMgdHJ1ZSBpZiB0aGUgU2lkZUVmZmVjdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZVBhZ2VDaGFuZ2VDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c0ZpZWxkR3JvdXBPblBhZ2UgPSB0aGlzLmdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckNvbnRleHQoY29udGV4dCk7XG5cdFx0Ly8gV2UgdHJpZ2dlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBkZWZlcnJlZCBzaWRlRWZmZWN0cyBhbmQgd2FpdCBmb3IgdGhlIGV4ZWN1dGlvbiB0byBiZSBjb21wbGV0ZWQuXG5cdFx0Ly8gV2UgYWxzbyB3YWl0IGZvciB0aGUgY3VycmVudCBzaWRlRWZmZWN0cycgZXhlY3V0aW9uIHRvIGJlIGNvbXBsZXRlZFxuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdHNpZGVFZmZlY3RzRmllbGRHcm91cE9uUGFnZVxuXHRcdFx0XHQubWFwKGFzeW5jIChmaWVsZEdyb3VwU2lkZUVmZmVjdHMpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyhmaWVsZEdyb3VwU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY29uY2F0KHRoaXMud2FpdEZvclNpZGVFZmZlY3RFeGVjdXRpb25zKCkpXG5cdFx0KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBvbiBwYWdlIGNvbnRleHQgJHtjb250ZXh0LmdldFBhdGgoKX1gLCBlcnJvcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWRcblx0ICogQHBhcmFtIGZuR2V0VGFyZ2V0cyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBnaXZlIHVzIHRoZSB0YXJnZXRzIGFuZCBhY3Rpb25zIGlmIGl0IHdhcyBjb21pbmcgdGhyb3VnaCBzb21lIHNwZWNpZmljIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gaWdub3JlVHJpZ2dlckFjdGlvbnMgSWYgdHJ1ZSwgd2UgZG8gbm90IHRyaWdnZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBzaWRlIGVmZmVjdFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGUsXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRncm91cElkPzogc3RyaW5nLFxuXHRcdGZuR2V0VGFyZ2V0cz86IChzaWRlRWZmZWN0c0RlZjogU2lkZUVmZmVjdHNUeXBlKSA9PiB7IHRhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W107IHRyaWdnZXJBY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuXHRcdGlnbm9yZVRyaWdnZXJBY3Rpb25zID0gZmFsc2Vcblx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgZm5UcmlnZ2VyQ2FsbGJhY2tzID0gdGhpcy50cmlnZ2VyQ2FsbGJhY2tzLmJpbmQodGhpcyk7XG5cdFx0Y29uc3QgeyB0YXJnZXRzLCB0cmlnZ2VyQWN0aW9uIH0gPSBmbkdldFRhcmdldHNcblx0XHRcdD8gZm5HZXRUYXJnZXRzKHNpZGVFZmZlY3RzKVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0dGFyZ2V0czogWy4uLihzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcyA/PyBbXSksIC4uLihzaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzID8/IFtdKV0sXG5cdFx0XHRcdFx0dHJpZ2dlckFjdGlvbjogIXRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5pc0NvbnRyb2xTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cykgPyBzaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9uIDogdW5kZWZpbmVkXG5cdFx0XHQgIH07XG5cdFx0aWYgKHRyaWdnZXJBY3Rpb24gJiYgIWlnbm9yZVRyaWdnZXJBY3Rpb25zKSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RFeGVjdXRpb25zLnB1c2godGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24odHJpZ2dlckFjdGlvbiwgY29udGV4dCwgeyBncm91cElkIH0pKTtcblx0XHR9XG5cblx0XHRpZiAodGFyZ2V0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHJlcXVlc3RUYXJnZXRzID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHModGFyZ2V0cywgY29udGV4dCwgZ3JvdXBJZClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gYXN5bmMoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZuVHJpZ2dlckNhbGxiYWNrcyhzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcz8ubWFwKCh0YXJnZXQpID0+IHRhcmdldC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgfHwgW10pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKFtzaWRlRWZmZWN0c10sIGNvbnRleHQpO1xuXHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMucmVxdWVzdEV4ZWN1dGlvbnMucHVzaChyZXF1ZXN0VGFyZ2V0cyk7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdFRhcmdldHM7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBzaWRlRWZmZWN0IGV2ZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB0byBleGVjdXRlIHRoZSBzaWRlIGVmZmVjdCBvbiB0aGUgcGFnZSdzIGNvbnRleHQsIGJ1dCBwYWdlcyAobGlrZSB0aGUgTFIpIG1pZ2h0IG92ZXJyaWRlIHRoaXMgbWV0aG9kLlxuXHQgKiBAcGFyYW0gZXZlbnROYW1lIFRoZSBTaWRlRWZmZWN0cyBldmVudCB0aGF0IGlzIHRyaWdnZXJlZFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmb3Igd2hpY2ggdGhpcyBldmVudCB3YXMgdHJpZ2dlcmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaXNEYXRhUGF0aFJlbGV2YW50KHBhdGgsIGV2ZW50TmFtZSkpIHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0Ly8gdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFNpZGVFZmZlY3RzIFNlcnZpY2Vcblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckV2ZW50KGV2ZW50TmFtZSwgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWMgZGF0YSBwYXRoIGlzIHZpc2libGUgb24gdGhlIHBhZ2UuXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIF9ldmVudE5hbWUgU2lkZUVmZmVjdHMgZXZlbnQgd2hpY2ggd2FzIHRyaWdnZXJlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIHBhdGggaXMgc2hvd24gb24gdGhlIFVJXG5cdCAqL1xuXHRpc0RhdGFQYXRoUmVsZXZhbnQocGF0aDogc3RyaW5nLCBfZXZlbnROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gISF0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIGNvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGdpdmVuIGNvbnRleHQgZml0cyB0byBhIGdpdmVuIHBhdGguXG5cdCAqXG5cdCAqIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyBib3RoIHRoZSBuYXZpZ2F0aW9uIHBhdGggYW5kIHRoZSBjYW5vbmljYWwgcGF0aC5cblx0ICogV2UgYWxzbyBjaGVjayBkZXBlbmRlbnQgcHJvcGVydHkgYmluZGluZ3MgaWYgdGhleSBmb2xsb3cgYSBuYXZpZ2F0aW9uIHBhdGggdG8gdGhlIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb250ZXh0IGZpdHMgdG8gdGhlIGdpdmVuIHBhdGhcblx0ICovXG5cdF9jb250ZXh0SXNSZWxldmFudChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRpZiAoY29udGV4dD8uZ2V0UGF0aCgpID09PSBwYXRoIHx8IGNvbnRleHQ/LmdldENhbm9uaWNhbFBhdGgoKSA9PT0gcGF0aCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gY2hlY2sgaWYgYSBkZXBlbmRlbnQgYmluZGluZyBmb2xsb3dzIGEgbmF2aWdhdGlvbiBwYXRoIGFuZCBmaXRzIHRvIHRoaXMgcGF0aFxuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGRlcGVuZGVudEJpbmRpbmdzID0gbW9kZWwuZ2V0RGVwZW5kZW50QmluZGluZ3MoY29udGV4dCk7XG5cdFx0Y29uc3QgY29udGV4dElzQWN0aXZlRW50aXR5ID0gY29udGV4dC5nZXRPYmplY3QoKT8uSXNBY3RpdmVFbnRpdHk7IC8vIFN0aWNreSBkb24ndCBoYXZlIGFjdGl2ZSBlbnRpdHlcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgZGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gYmluZGluZy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHRcdGlmIChcblx0XHRcdFx0YmluZGluZ1BhdGguc3RhcnRzV2l0aChcIkAkdWk1XCIpIHx8IC8vIGlnbm9yZSBVSTUgaW50ZXJuYWwgYmluZGluZ3Ncblx0XHRcdFx0KCEhY29udGV4dElzQWN0aXZlRW50aXR5ICYmIC8vIGlnbm9yZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBvbiBhY3RpdmUgdmVyc2lvblxuXHRcdFx0XHRcdGJpbmRpbmdQYXRoLmluY2x1ZGVzKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvXCIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlUYXJnZXQgPSBtZXRhTW9kZWwuZmV0Y2hVcGRhdGVEYXRhKGJpbmRpbmdQYXRoLCBjb250ZXh0KS5nZXRSZXN1bHQoKTtcblx0XHRcdFx0aWYgKHByb3BlcnR5VGFyZ2V0Py5lbnRpdHlQYXRoID09PSBwYXRoIHx8IFwiL1wiICsgcHJvcGVydHlUYXJnZXQ/LmVkaXRVcmwgPT09IHBhdGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBjaGVja2luZyAke2JpbmRpbmdQYXRofSBvbiBwYWdlIGNvbnRleHQgYCwgZXJyb3IgYXMgc3RyaW5nIHwgRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBjb250ZXh0IGZvciBhIGdpdmVuIHBhdGggYnkgY2hlY2tpbmcgZGVwZW5kZW50IGJpbmRpbmdzLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBiZSBjaGVja2VkXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBwYXJlbnQgY29udGV4dFxuXHQgKiBAcmV0dXJucyBDb250ZXh0IGlmIGZvdW5kLCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGg6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBjb250ZXh0KSkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVwZW5kZW50QmluZGluZ3MgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0RGVwZW5kZW50QmluZGluZ3MoY29udGV4dCk7XG5cdFx0Zm9yIChjb25zdCBiaW5kaW5nIG9mIGRlcGVuZGVudEJpbmRpbmdzKSB7XG5cdFx0XHRpZiAoYmluZGluZy5pc0E8T0RhdGFDb250ZXh0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgYmluZGluZy5nZXRCb3VuZENvbnRleHQoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gYmluZGluZy5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGxpc3RDb250ZXh0cyA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbGlzdENvbnRleHQgb2YgbGlzdENvbnRleHRzKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGxpc3RDb250ZXh0KSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGxpc3RDb250ZXh0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGV4dCB0byBiZSBzaG93biBmb3IgdXNlciB0byBpbmRpY2F0ZSBkYXRhIHJlZnJlc2guXG5cdCAqXG5cdCAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBTaWRlRWZmZWN0cyBldmVudHMuIFBhZ2VzIChsaWtlIHRoZSBMUikgbWlnaHQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuXG5cdCAqIEByZXR1cm5zIFRleHQgdG8gYmUgc2hvd24gdG8gdGhlIHVzZXIgaW4gY2FzZSBvZiBhIGRhdGEgcmVmcmVzaFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0Z2V0RGF0YVJlZnJlc2hUZXh0KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy5nZXRWaWV3KCkpO1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1NFUlZFUl9FVkVOVFNfTkVXX0RBVEFfSVRFTVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZnkgdGhlIHVzZXIgdGhhdCBkYXRhIHdhcyByZWZyZXNoZWQuXG5cdCAqXG5cdCAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBTaWRlRWZmZWN0cyBldmVudHMuXG5cdCAqL1xuXG5cdG5vdGlmeURhdGFSZWZyZXNoKCk6IHZvaWQge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLl9zaWRlRWZmZWN0cy5nZXREYXRhUmVmcmVzaFRleHQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQXNrIHRoZSB1c2VyIGZvciBjb25maXJtYXRpb24gb2YgYSBkYXRhIHJlZnJlc2guXG5cdCAqXG5cdCAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBTaWRlRWZmZWN0cyBldmVudHMuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBpZiB0aGUgdXNlciBjb25maXJtcyBhbmQgcmVqZWN0cyBpZiB0aGUgdXNlciBjYW5jZWxzLlxuXHQgKi9cblx0YXN5bmMgY29uZmlybURhdGFSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5pc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4pIHtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSB0aGlzLmdldERhdGFSZWZyZXNoVGV4dCgpO1xuXHRcdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRcdFx0Y29uc3QgY29uZmlybWF0aW9uRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IG5ldyBUZXh0KHsgdGV4dDogdGV4dCB9KSxcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKSxcblx0XHRcdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRhZnRlckNsb3NlOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0dGhpcy5pc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4gPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdHRoaXMuaXNDb25maXJtYXRpb25EaWFsb2dPcGVuID0gdHJ1ZTtcblx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLm9wZW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0IG11bHRpcGxlIFNpZGVFZmZlY3RzIG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICogQHBhcmFtIG11bHRpU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBuZWVkIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cCBpZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgcmVxdWVzdCBvbiBTQVBVSTUgY29udGV4dFxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdE11bHRpcGxlU2lkZUVmZmVjdHMobXVsdGlTaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlW10sIGNvbnRleHQ6IENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRsZXQgcHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGxldCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBtdWx0aVNpZGVFZmZlY3RzLnJlZHVjZSgoYWN0aW9ucywgc2lkZUVmZmVjdHMpID0+IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RBY3Rpb24gPSAoc2lkZUVmZmVjdHMgYXMgT0RhdGFTaWRlRWZmZWN0c1R5cGUpLnRyaWdnZXJBY3Rpb247XG5cdFx0XHRpZiAoc2lkZUVmZmVjdEFjdGlvbikge1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goc2lkZUVmZmVjdEFjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWN0aW9ucztcblx0XHR9LCBbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZm50cmlnZ2VyQ2FsbGJhY2tzID0gdGhpcy50cmlnZ2VyQ2FsbGJhY2tzLmJpbmQodGhpcyk7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihhY3Rpb24sIGNvbnRleHQsIHsgZ3JvdXBJZCB9KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdHByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA/PyBbXSkucmVkdWNlKChteVNldCwgcHJvcGVydHkpID0+IG15U2V0LmFkZChwcm9wZXJ0eSksIHByb3BlcnRpZXMpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMgPz8gW10pLnJlZHVjZShcblx0XHRcdFx0KG15U2V0LCBuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG15U2V0LmFkZChuYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0Li4uQXJyYXkuZnJvbShwcm9wZXJ0aWVzKSxcblx0XHRcdFx0XHQuLi5BcnJheS5mcm9tKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKS5tYXAoKG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eSB9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdGdyb3VwSWRcblx0XHRcdClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuXHRcdFx0XHRyZXR1cm4gZm50cmlnZ2VyQ2FsbGJhY2tzKEFycmF5LmZyb20obmF2aWdhdGlvblByb3BlcnRpZXMpKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzLCBjb250ZXh0KTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICogQHJldHVybnMgUmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgcmVxdWVzdCBvbiB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gbXVsdGlTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKG11bHRpU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IGlzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0uZXZlcnkoXG5cdFx0XHRcdChtRmFpbGVkU2lkZUVmZmVjdHMpID0+IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHRcdGlmIChpc05vdEFscmVhZHlMaXN0ZWQpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5wdXNoKHNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBTaWRlRWZmZWN0cyBpbiB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0cyBmb3IgYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggQ29udGV4dCBwYXRoIHdoZXJlIFNpZGVFZmZlY3RzIGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0dW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZSBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAodGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXT8ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5maWx0ZXIoXG5cdFx0XHRcdChzaWRlRWZmZWN0cykgPT4gc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lICE9PSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgYSBGaWVsZEdyb3VwXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gZXZlbnQgcmVsYXRlZCB0byB0aGUgZmllbGQgZ3JvdXAgY2hhbmdlIGlzIGZpcmVkLlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNQcm9wZXJ0aWVzIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBmdWxsZmlsIGJlZm9yZSBleGVjdXRpbmcgdGhlIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlLCBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KHNpZGVFZmZlY3RzUHJvcGVydGllcy5uYW1lLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCk7XG5cdFx0aWYgKCF0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtpZF0pIHtcblx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwW2lkXSA9IHtcblx0XHRcdFx0cHJvbWlzZTogZmllbGRHcm91cFByZVJlcXVpc2l0ZSA/PyBQcm9taXNlLnJlc29sdmUoKSxcblx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBzaWRlRWZmZWN0c1Byb3BlcnRpZXNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIGEgRmllbGRHcm91cC5cblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzUHJvcGVydGllcyBTaWRlRWZmZWN0cyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRleHQsIG5hbWUgfSA9IHNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbaWRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgaW50byB0aGUgcXVldWUgZm9yIGEgZmllbGQgZ3JvdXAgaWQuXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgRmllbGQgZ3JvdXAgaWRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyBhbmQgdGhlaXIgcHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkOiBzdHJpbmcpOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGVbXSB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJ5SW5kZXggb2YgT2JqZWN0LmtleXModGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXApKSB7XG5cdFx0XHRpZiAocmVnaXN0cnlJbmRleC5zdGFydHNXaXRoKGAke2ZpZWxkR3JvdXBJZH1fYCkpIHtcblx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaCh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtyZWdpc3RyeUluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWdpc3RlcmVkIFNpZGVFZmZlY3RzIGludG8gdGhlIHF1ZXVlIGZvciBhIGNvbnRleHQgYW5kIGl0cyBjaGlsZHJlbi5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyBhbmQgdGhlaXIgcHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZVtdIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0cnlJbmRleCBvZiBPYmplY3Qua2V5cyh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCkpIHtcblx0XHRcdGlmICh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcClcblx0XHRcdFx0aWYgKHJlZ2lzdHJ5SW5kZXguaW5jbHVkZXMoYF8ke2NvbnRleHQuZ2V0UGF0aCgpfWApKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaCh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtyZWdpc3RyeUluZGV4XSk7XG5cdFx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYSBzdGF0dXMgaW5kZXguXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgVGhlIGZpZWxkIGdyb3VwIGlkXG5cdCAqIEBwYXJhbSBjb250ZXh0IFNBUFVJNSBDb250ZXh0XG5cdCAqIEByZXR1cm5zIEluZGV4XG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZEdyb3VwSW5kZXgoZmllbGRHcm91cElkOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgJHtmaWVsZEdyb3VwSWR9XyR7Y29udGV4dC5nZXRQYXRoKCl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHNpZGVFZmZlY3RzIHByb3BlcnRpZXMgZnJvbSBhIGZpZWxkIGdyb3VwIGlkXG5cdCAqIFRoZSBwcm9wZXJ0aWVzIGFyZTpcblx0ICogLSBuYW1lXG5cdCAqIC0gc2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKiAtIHNpZGVFZmZlY3RzIGVudGl0eSB0eXBlXG5cdCAqIC0gaW1tZWRpYXRlIHNpZGVFZmZlY3RzLlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgX2dldFNpZGVFZmZlY3RzUHJvcGVydHlGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZDogc3RyaW5nKToge1xuXHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGltbWVkaWF0ZTogYm9vbGVhbjtcblx0XHRzaWRlRWZmZWN0czogT0RhdGFTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQ7XG5cdH0ge1xuXHRcdC8qKlxuXHRcdCAqIHN0cmluZyBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiIGlzIGFkZGVkIHRvIHRoZSBTaWRlRWZmZWN0cyBuYW1lIGR1cmluZyB0ZW1wbGF0aW5nIHRvIGtub3dcblx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHQgKiBiZSBkZWZlcnJlZCAob24gZmllbGQgZ3JvdXAgZm9jdXMgb3V0KVxuXHRcdCAqXG5cdFx0ICovXG5cdFx0Y29uc3QgaW1tZWRpYXRlID0gZmllbGRHcm91cElkLmluY2x1ZGVzKElNTUVESUFURV9SRVFVRVNUKSxcblx0XHRcdG5hbWUgPSBmaWVsZEdyb3VwSWQucmVwbGFjZShJTU1FRElBVEVfUkVRVUVTVCwgXCJcIiksXG5cdFx0XHRzaWRlRWZmZWN0UGFydHMgPSBuYW1lLnNwbGl0KFwiI1wiKSxcblx0XHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlID0gc2lkZUVmZmVjdFBhcnRzWzBdLFxuXHRcdFx0c2lkZUVmZmVjdFBhdGggPSBgJHtzaWRlRWZmZWN0RW50aXR5VHlwZX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzJHtcblx0XHRcdFx0c2lkZUVmZmVjdFBhcnRzLmxlbmd0aCA9PT0gMiA/IGAjJHtzaWRlRWZmZWN0UGFydHNbMV19YCA6IFwiXCJcblx0XHRcdH1gLFxuXHRcdFx0c2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkID1cblx0XHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoc2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc2lkZUVmZmVjdFBhdGhdO1xuXHRcdHJldHVybiB7IG5hbWUsIGltbWVkaWF0ZSwgc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RFbnRpdHlUeXBlIH07XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVsYXRlZCB0byB0aGUgcmVxdWVzdGVkIGltbWVkaWF0ZSBzaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQoZmllbGQ6IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzVG9FeGVjdXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXTsgY29udGV4dDogQ29udGV4dCB9PiA9IHt9O1xuXHRcdFx0Y29uc3QgYWRkU2lkZUVmZmVjdHMgPSAoY29udGV4dDogQ29udGV4dCwgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoc2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdLnNpZGVFZmZlY3RzLnB1c2goc2lkZUVmZmVjdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzVG9FeGVjdXRlW2NvbnRleHRQYXRoXSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogW3NpZGVFZmZlY3RzXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdC8vR2V0IEltbWVkaWF0ZSBTaWRlRWZmZWN0c1xuXHRcdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgb2YgT2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c01hcCkuZmlsdGVyKFxuXHRcdFx0XHQoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PiBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuaW1tZWRpYXRlID09PSB0cnVlXG5cdFx0XHQpKSB7XG5cdFx0XHRcdC8vIGlmIHRoaXMgU2lkZUVmZmVjdHMgaXMgcmVjb3JkZWQgYXMgZmFpbGVkIFNpZGVFZmZlY3RzLCBuZWVkIHRvIHJlbW92ZSBpdC5cblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpO1xuXHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9SZXBsYXkgZmFpbGVkIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gdGhlIHZpZXcgb3IgRmllbGRcblx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBbZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSwgdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpXS5maWx0ZXIoXG5cdFx0XHRcdChjb250ZXh0KTogY29udGV4dCBpcyBDb250ZXh0ID0+ICEhY29udGV4dFxuXHRcdFx0KSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBmYWlsZWRTaWRlRWZmZWN0cyA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0gPz8gW107XG5cdFx0XHRcdHRoaXMudW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZhaWxlZFNpZGVFZmZlY3Qgb2YgZmFpbGVkU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhjb250ZXh0LCBmYWlsZWRTaWRlRWZmZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNUb0V4ZWN1dGUpLm1hcChhc3luYyAoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PlxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvcGVydGllcy5zaWRlRWZmZWN0cy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHRcdD8gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzWzBdLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dClcblx0XHRcdFx0XHRcdDogdGhpcy5yZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgbWFuYWdpbmcgRmllbGQgU2lkZUVmZmVjdHNgLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgdHJpZ2dlckNhbGxiYWNrcyhuYXZpZ2F0aW9uOiBzdHJpbmdbXSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRuYXZpZ2F0aW9uLm1hcCgobmF2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlZ2lzdGVyQ2FsbEJhY2sgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0UmVnaXN0ZXJlZENhbGxiYWNrKG5hdik7XG5cdFx0XHRcdGlmIChyZWdpc3RlckNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZ2lzdGVyQ2FsbEJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhIGZpZWxkR3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwU2lkZUVmZmVjdHMgRmllbGQgZ3JvdXAgc2lkZUVmZmVjdHMgd2l0aCBpdHMgcHJvbWlzZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyB0cnVlIGlmIHRoZSBTaWRlRWZmZWN0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy51bnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHkpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBmaWVsZEdyb3VwU2lkZUVmZmVjdHMucHJvbWlzZTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgc2lkZUVmZmVjdHMsIGNvbnRleHQsIG5hbWUgfSA9IGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHk7XG5cdFx0XHRpZiAodGhpcy5pc0ZpZWxkR3JvdXBWYWxpZChuYW1lLCBjb250ZXh0KSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBleGVjdXRpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIHZhbGlkYXRpb24gc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBhIGZpZWxkIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgY29udHJvbFxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdGF0dXMgb2YgdGhlIGZpZWxkIHZhbGlkYXRpb25cblx0ICovXG5cdHByaXZhdGUgX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQ6IENvbnRyb2wsIHN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXApLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIGNvbnRleHQgfSA9IHNpZGVFZmZlY3RzTWFwW2tleV07XG5cdFx0XHRpZiAoIWltbWVkaWF0ZSkge1xuXHRcdFx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdPy5bZmllbGQuZ2V0SWQoKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdID0ge1xuXHRcdFx0XHRcdFx0Li4udGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdLFxuXHRcdFx0XHRcdFx0Li4ueyBbZmllbGQuZ2V0SWQoKV06IHRydWUgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3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
|
|
813
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTU1FRElBVEVfUkVRVUVTVCIsIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM0IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiX2RlYzIzIiwiX2RlYzI0IiwiX2RlYzI1IiwiX2RlYzI2IiwiX2RlYzI3IiwiX2RlYzI4IiwiX2RlYzI5IiwiX2RlYzMwIiwiX2RlYzMxIiwiX2RlYzMyIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiSW5zdGVhZCIsIl9kZWMzMyIsIl9kZWMzNCIsIl9kZWMzNSIsIl9kZWMzNiIsIl9kZWMzNyIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMzgiLCJfZGVjMzkiLCJfZGVjNDAiLCJfZGVjNDEiLCJfZGVjNDIiLCJfZGVjNDMiLCJfZGVjNDQiLCJfZGVjNDUiLCJfZGVjNDYiLCJfZGVjNDciLCJfZGVjNDgiLCJfZGVjNDkiLCJfZGVjNTAiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJfdGhpcyIsImNhbGwiLCJyZXF1ZXN0RXhlY3V0aW9ucyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiX3ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9wYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJfc2lkZUVmZmVjdHNTZXJ2aWNlIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJfcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXAiLCJfZmllbGRHcm91cEludmFsaWRpdHkiLCJfcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzIiwiYWRkQ29udHJvbFNpZGVFZmZlY3RzIiwiZW50aXR5VHlwZSIsImNvbnRyb2xTaWRlRWZmZWN0cyIsInJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyIsImNvbnRyb2wiLCJjb250cm9sSWQiLCJpc0EiLCJnZXRJZCIsImdldENvbnRleHRGb3JTaWRlRWZmZWN0cyIsImJpbmRpbmdDb250ZXh0Iiwic2lkZUVmZmVjdEVudGl0eVR5cGUiLCJjb250ZXh0Rm9yU2lkZUVmZmVjdHMiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsInVuZGVmaW5lZCIsIndhaXRGb3JTaWRlRWZmZWN0RXhlY3V0aW9ucyIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZ2V0RmllbGRTaWRlRWZmZWN0c01hcCIsImZpZWxkIiwic2lkZUVmZmVjdHNNYXAiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwiZmllbGRHcm91cElkcyIsImdldEZpZWxkR3JvdXBJZHMiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld0VudGl0eVR5cGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZmllbGRQYXRoIiwiZ2V0VGFyZ2V0UHJvcGVydHkiLCJjb250ZXh0IiwiY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwic2lkZUVmZmVjdHNOYW1lIiwib0NvbnRyb2xTaWRlRWZmZWN0cyIsInNvdXJjZVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsIm5hbWUiLCJpbW1lZGlhdGUiLCJzaWRlRWZmZWN0cyIsImZpZWxkQ29udGV4dCIsIm1TaWRlRWZmZWN0c01hcCIsImZpZWxkR3JvdXBJZCIsIl9nZXRTaWRlRWZmZWN0c1Byb3BlcnR5Rm9yRmllbGRHcm91cCIsIm9Db250ZXh0IiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiaXNGaWVsZEdyb3VwVmFsaWQiLCJpZCIsIl9nZXRGaWVsZEdyb3VwSW5kZXgiLCJsZW5ndGgiLCJkYXRhIiwibWV0YU1vZGVsIiwidmlld0JpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInZpZXdNZXRhTW9kZWxQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXBsYWNlIiwicHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZCIsImV2ZW50IiwiZmllbGRWYWxpZGl0eSIsImZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJnZXRTb3VyY2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpbHRlciIsInNpZGVFZmZlY3RzUHJvcGVydGllcyIsInJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24iLCJhcmd1bWVudHMiLCJfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQiLCJoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlIiwiZ2V0UGFyYW1ldGVyIiwiY3VzdG9tU2lkZUVmZmVjdEhhbmRsaW5nIiwic29tZSIsInN0YXJ0c1dpdGgiLCJzaWRlRWZmZWN0UmVxdWVzdFByb21pc2VzIiwiY3VzdG9tSW1tZWRpYXRlU2lkZUVmZmVjdFByb21pc2VzIiwiaGFuZGxlQ3VzdG9tRmllbGRGaWVsZEdyb3VwQ2hhbmdlIiwicHVzaCIsInRoZW4iLCJmaWVsZEdyb3Vwc1NpZGVFZmZlY3RzIiwicmVkdWNlIiwicmVzdWx0cyIsImNvbmNhdCIsImdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAiLCJtYXAiLCJmaWVsZEdyb3VwU2lkZUVmZmVjdHMiLCJfcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsImFsbCIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJkZWJ1ZyIsInZhbHVlcyIsInNpZGVFZmZlY3REZWYiLCJyZXNvbHZlIiwiaW1tZWRpYXRlU2lkZUVmZmVjdHMiLCJyZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyIsImhhbmRsZVBhZ2VDaGFuZ2VDb250ZXh0Iiwic2lkZUVmZmVjdHNGaWVsZEdyb3VwT25QYWdlIiwiZ2V0UmVnaXN0ZXJlZFNpZGVFZmZlY3RzRm9yQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImdyb3VwSWQiLCJmbkdldFRhcmdldHMiLCJpZ25vcmVUcmlnZ2VyQWN0aW9ucyIsImZuVHJpZ2dlckNhbGxiYWNrcyIsInRyaWdnZXJDYWxsYmFja3MiLCJiaW5kIiwidGFyZ2V0cyIsInRyaWdnZXJBY3Rpb24iLCJ0YXJnZXRFbnRpdGllcyIsInRhcmdldFByb3BlcnRpZXMiLCJpc0NvbnRyb2xTaWRlRWZmZWN0cyIsImV4ZWN1dGVBY3Rpb24iLCJyZXF1ZXN0VGFyZ2V0cyIsImFzeW5jIiwidGFyZ2V0IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQiLCJldmVudE5hbWUiLCJwYXRoIiwiaXNEYXRhUGF0aFJlbGV2YW50IiwiZWRpdEZsb3ciLCJzeW5jVGFzayIsIl9maW5kUmVsZXZhbnRDb250ZXh0IiwiX2V2ZW50TmFtZSIsIl9jb250ZXh0SXNSZWxldmFudCIsImdldENhbm9uaWNhbFBhdGgiLCJtb2RlbCIsImRlcGVuZGVudEJpbmRpbmdzIiwiZ2V0RGVwZW5kZW50QmluZGluZ3MiLCJjb250ZXh0SXNBY3RpdmVFbnRpdHkiLCJnZXRPYmplY3QiLCJJc0FjdGl2ZUVudGl0eSIsImJpbmRpbmciLCJiaW5kaW5nUGF0aCIsInByb3BlcnR5VGFyZ2V0IiwiZmV0Y2hVcGRhdGVEYXRhIiwiZ2V0UmVzdWx0IiwiZW50aXR5UGF0aCIsImVkaXRVcmwiLCJnZXRCb3VuZENvbnRleHQiLCJsaXN0Q29udGV4dHMiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJsaXN0Q29udGV4dCIsImdldERhdGFSZWZyZXNoVGV4dCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsIm5vdGlmeURhdGFSZWZyZXNoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldENvbnRyb2xsZXIiLCJfc2lkZUVmZmVjdHMiLCJjb25maXJtRGF0YVJlZnJlc2giLCJpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4iLCJyZWplY3QiLCJ0ZXh0IiwiY29uZmlybWF0aW9uRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsImNvbnRlbnQiLCJUZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsImNsb3NlIiwiZW5kQnV0dG9uIiwiYWZ0ZXJDbG9zZSIsImRlc3Ryb3kiLCJhZGRTdHlsZUNsYXNzIiwib3BlbiIsIm11bHRpU2lkZUVmZmVjdHMiLCJwcm9wZXJ0aWVzIiwiU2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJhY3Rpb25zIiwic2lkZUVmZmVjdEFjdGlvbiIsImZudHJpZ2dlckNhbGxiYWNrcyIsImFjdGlvbiIsIm15U2V0IiwicHJvcGVydHkiLCJhZGQiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJBcnJheSIsImZyb20iLCJnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMiLCJpc05vdEFscmVhZHlMaXN0ZWQiLCJldmVyeSIsIm1GYWlsZWRTaWRlRWZmZWN0cyIsInVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0c0ZvckFDb250ZXh0IiwidW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWUiLCJwcm9taXNlIiwic2lkZUVmZmVjdFByb3BlcnR5IiwidW5yZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsInJlZ2lzdHJ5SW5kZXgiLCJzaWRlRWZmZWN0UGFydHMiLCJzcGxpdCIsInNpZGVFZmZlY3RQYXRoIiwiZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzVG9FeGVjdXRlIiwiYWRkU2lkZUVmZmVjdHMiLCJmYWlsZWRTaWRlRWZmZWN0cyIsImZhaWxlZFNpZGVFZmZlY3QiLCJlIiwibmF2aWdhdGlvbiIsIm5hdiIsInJlZ2lzdGVyQ2FsbEJhY2siLCJnZXRSZWdpc3RlcmVkQ2FsbGJhY2siLCJzdWNjZXNzIiwia2V5IiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNpZGVFZmZlY3RzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNTZXJ2aWNlLFxuXHRTaWRlRWZmZWN0c1RhcmdldCxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSB7IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vUmFkaW9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi9QYWdlQ29udHJvbGxlclwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENoZWNrQm94JFNlbGVjdEV2ZW50IH0gZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgdHlwZSB7IElucHV0QmFzZSRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCB0eXBlIHsgUmF0aW5nSW5kaWNhdG9yJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwiLi4vVGVtcGxhdGVDb21wb25lbnRcIjtcblxudHlwZSBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRpbW1lZGlhdGU/OiBib29sZWFuO1xuXHRzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0gQmFzZVNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgJiB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlPjtcblxuZXhwb3J0IHR5cGUgTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgQmFzZVNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG50eXBlIEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdHNUeXBlW10+O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUgPSB7XG5cdHByb21pc2U6IFByb21pc2U8dW5rbm93bj47XG5cdHNpZGVFZmZlY3RQcm9wZXJ0eTogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlO1xufTtcblxuY29uc3QgSU1NRURJQVRFX1JFUVVFU1QgPSBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiO1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuU2lkZUVmZmVjdHNcIilcbmNsYXNzIFNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX3ZpZXchOiBGRVZpZXc7XG5cblx0cHJpdmF0ZSBfcGFnZUNvbXBvbmVudDogRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwITogUmVjb3JkPHN0cmluZywgRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlPjtcblxuXHRwcml2YXRlIF9maWVsZEdyb3VwSW52YWxpZGl0eSE6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcblxuXHRwcml2YXRlIF9zaWRlRWZmZWN0c1NlcnZpY2UhOiBTaWRlRWZmZWN0c1NlcnZpY2U7XG5cblx0cHJpdmF0ZSBfcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzITogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0cHJpdmF0ZSBpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdEV4ZWN1dGlvbnM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl92aWV3KSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldykuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXAgPSB7fTtcblx0XHR0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eSA9IHt9O1xuXHRcdHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBTaWRlRWZmZWN0cyBjb250cm9sLlxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBOYW1lIG9mIHRoZSBlbnRpdHkgd2hlcmUgdGhlIFNpZGVFZmZlY3RzIGNvbnRyb2wgd2lsbCBiZSByZWdpc3RlcmVkXG5cdCAqIEBwYXJhbSBjb250cm9sU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gcmVnaXN0ZXIuIEVuc3VyZSB0aGUgc291cmNlQ29udHJvbElkIG1hdGNoZXMgdGhlIGFzc29jaWF0ZWQgU0FQVUk1IGNvbnRyb2wgSUQuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YWRkQ29udHJvbFNpZGVFZmZlY3RzKGVudGl0eVR5cGU6IHN0cmluZywgY29udHJvbFNpZGVFZmZlY3RzOiBPbWl0PENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsIFwiZnVsbHlRdWFsaWZpZWROYW1lXCI+KTogdm9pZCB7XG5cdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmFkZENvbnRyb2xTaWRlRWZmZWN0cyhlbnRpdHlUeXBlLCBjb250cm9sU2lkZUVmZmVjdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgU2lkZUVmZmVjdHMgY3JlYXRlZCBieSBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBjb250cm9sIFNBUFVJNSBDb250cm9sXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKGNvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sSWQgPSBjb250cm9sLmlzQT8uKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKSAmJiBjb250cm9sLmdldElkKCk7XG5cblx0XHRpZiAoY29udHJvbElkKSB7XG5cdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UucmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKGNvbnRyb2xJZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgb24gd2hpY2ggU2lkZUVmZmVjdHMgY2FuIGJlIHJlcXVlc3RlZC5cblx0ICogVGhlIGNvcnJlY3Qgb25lIG11c3QgaGF2ZSB0aGUgYmluZGluZyBwYXJhbWV0ZXIgJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cy5cblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEluaXRpYWwgYmluZGluZyBjb250ZXh0XG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0RW50aXR5VHlwZSBFbnRpdHlUeXBlIG9mIHRoZSBzaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyBTQVBVSTUgQ29udGV4dCBvciB1bmRlZmluZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMoYmluZGluZ0NvbnRleHQ6IENvbnRleHQsIHNpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmcpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29udGV4dEZvclNpZGVFZmZlY3RzID0gYmluZGluZ0NvbnRleHQsXG5cdFx0XHRlbnRpdHlUeXBlID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRpZiAoc2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IGVudGl0eVR5cGUpIHtcblx0XHRcdGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGlmIChjb250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0Y29udGV4dEZvclNpZGVFZmZlY3RzID0gY29udGV4dEZvclNpZGVFZmZlY3RzLmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdFx0XHRpZiAoY29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRcdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRleHRGb3JTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBGb3IgYWxsIHNpZGVFZmZlY3RzIGV4ZWN1dGlvbiB0byBiZSBjb21wbGV0ZWQuXG5cdCAqXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgd2FpdEZvclNpZGVFZmZlY3RFeGVjdXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLnJlcXVlc3RFeGVjdXRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBTaWRlRWZmZWN0cyBtYXAgZm9yIGEgZmllbGRcblx0ICogVGhlc2UgU2lkZUVmZmVjdHMgYXJlXG5cdCAqIC0gbGlzdGVkIGludG8gRmllbGRHcm91cElkcyAoY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZSlcblx0ICogLSBnZW5lcmF0ZWQgYnkgYSBjb250cm9sIG9yIGNvbnRyb2xzIGFuZCB0aGF0IGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGFzIFNvdXJjZVByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEZpZWxkU2lkZUVmZmVjdHNNYXAoZmllbGQ6IENvbnRyb2wpOiBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHtcblx0XHRsZXQgc2lkZUVmZmVjdHNNYXA6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSB7fTtcblx0XHRpZiAodGhpcy5fcGFnZUNvbXBvbmVudCkge1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gdGhpcy5fcGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQ/LigpO1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSB0aGlzLl9wYWdlQ29tcG9uZW50LmdldENvbnRleHRQYXRoPy4oKSB8fCAoZW50aXR5U2V0ICYmIGAvJHtlbnRpdHlTZXR9YCk7XG5cblx0XHRcdGlmIChjb250ZXh0UGF0aCkge1xuXHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gZmllbGQuZ2V0RmllbGRHcm91cElkcygpLFxuXHRcdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoPEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdHRoaXMuX3ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdFx0XHRzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3Vwcyhcblx0XHRcdFx0XHRmaWVsZEdyb3VwSWRzLFxuXHRcdFx0XHRcdGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWRcblx0XHRcdFx0KSBhcyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXG5cdFx0XHRcdC8vIFNpZGVFZmZlY3RzIGNvbWluZyBmcm9tIGNvbnRyb2wocylcblx0XHRcdFx0aWYgKGNvbnRleHREYXRhTW9kZWxPYmplY3QpIHtcblx0XHRcdFx0XHRjb25zdCB2aWV3RW50aXR5VHlwZSA9IGNvbnRleHREYXRhTW9kZWxPYmplY3QudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRmaWVsZFBhdGggPSB0aGlzLmdldFRhcmdldFByb3BlcnR5KGZpZWxkKSxcblx0XHRcdFx0XHRcdGNvbnRleHQgPSB0aGlzLmdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsIHZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0XHRcdGlmIChmaWVsZFBhdGggJiYgY29udGV4dCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRDb250cm9sRW50aXR5U2lkZUVmZmVjdHModmlld0VudGl0eVR5cGUpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSkuZm9yRWFjaCgoc2lkZUVmZmVjdHNOYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Db250cm9sU2lkZUVmZmVjdHMgPSBjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlW3NpZGVFZmZlY3RzTmFtZV07XG5cdFx0XHRcdFx0XHRcdGlmIChvQ29udHJvbFNpZGVFZmZlY3RzLnNvdXJjZVByb3BlcnRpZXMuaW5jbHVkZXMoZmllbGRQYXRoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBgJHtzaWRlRWZmZWN0c05hbWV9Ojoke3ZpZXdFbnRpdHlUeXBlfWA7XG5cdFx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdHNNYXBbbmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9Db250cm9sU2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzaWRlRWZmZWN0cyBtYXAgZm9yIGZpZWxkR3JvdXBzLlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkcyBGaWVsZCBncm91cCBpZHNcblx0ICogQHBhcmFtIGZpZWxkQ29udGV4dCBGaWVsZCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdGZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdLFxuXHRcdGZpZWxkQ29udGV4dD86IENvbnRleHQgfCBudWxsXG5cdCk6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB8IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c01hcDogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9O1xuXHRcdGZpZWxkR3JvdXBJZHMuZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRjb25zdCB7IG5hbWUsIGltbWVkaWF0ZSwgc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RFbnRpdHlUeXBlIH0gPSB0aGlzLl9nZXRTaWRlRWZmZWN0c1Byb3BlcnR5Rm9yRmllbGRHcm91cChmaWVsZEdyb3VwSWQpO1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBmaWVsZENvbnRleHQgPyAodGhpcy5nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMoZmllbGRDb250ZXh0LCBzaWRlRWZmZWN0RW50aXR5VHlwZSkgYXMgQ29udGV4dCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMgJiYgKCFmaWVsZENvbnRleHQgfHwgKGZpZWxkQ29udGV4dCAmJiBvQ29udGV4dCkpKSB7XG5cdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtuYW1lXSA9IHtcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGltbWVkaWF0ZSxcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoZmllbGRDb250ZXh0KSB7XG5cdFx0XHRcdFx0KG1TaWRlRWZmZWN0c01hcFtuYW1lXSBhcyBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpLmNvbnRleHQgPSBvQ29udGV4dCE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbVNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHJlY29yZGVkIHZhbGlkYXRpb24gc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcy5cblx0ICpcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTogdm9pZCB7XG5cdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHkgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgRmllbGQgZ3JvdXAgaWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcmV0dXJucyBTQVBVSTUgQ29udGV4dCBvciB1bmRlZmluZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRpc0ZpZWxkR3JvdXBWYWxpZChmaWVsZEdyb3VwSWQ6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KGZpZWxkR3JvdXBJZCwgY29udGV4dCk7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkR3JvdXBJbnZhbGlkaXR5W2lkXSA/PyB7fSkubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlbGF0aXZlIHRhcmdldCBwcm9wZXJ0eSByZWxhdGVkIHRvIHRoZSBGaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgUmVsYXRpdmUgdGFyZ2V0IHByb3BlcnR5XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0VGFyZ2V0UHJvcGVydHkoZmllbGQ6IENvbnRyb2wpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGZpZWxkUGF0aCA9IGZpZWxkLmRhdGEoXCJzb3VyY2VQYXRoXCIpIGFzIHN0cmluZztcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgdmlld0JpbmRpbmdQYXRoID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgdmlld01ldGFNb2RlbFBhdGggPSB2aWV3QmluZGluZ1BhdGggPyBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgodmlld0JpbmRpbmdQYXRoKX0vYCA6IFwiXCI7XG5cdFx0cmV0dXJuIGZpZWxkUGF0aD8ucmVwbGFjZSh2aWV3TWV0YU1vZGVsUGF0aCwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ2FjaGVzIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBGaWVsZEdyb3VwIGlzIHVuZm9jdXNlZC5cblx0ICogQHBhcmFtIGV2ZW50IFNBUFVJNSBldmVudCB0aGF0IGNvbWVzIGZyb20gYSBmaWVsZCBjaGFuZ2Vcblx0ICogQHBhcmFtIGZpZWxkVmFsaWRpdHlcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQoXG5cdFx0ZXZlbnQ6XG5cdFx0XHR8IENoZWNrQm94JFNlbGVjdEV2ZW50XG5cdFx0XHR8IElucHV0QmFzZSRDaGFuZ2VFdmVudFxuXHRcdFx0fCBGaWVsZCRDaGFuZ2VFdmVudFxuXHRcdFx0fCBSYXRpbmdJbmRpY2F0b3IkQ2hhbmdlRXZlbnRcblx0XHRcdHwgTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50XG5cdFx0XHR8IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQsXG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbixcblx0XHRmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBVSTVFdmVudDx7fSwgQ29udHJvbD4pLmdldFNvdXJjZSgpO1xuXHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdGlmICghZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cblx0XHQvLyByZWdpc3RlciBmaWVsZCBncm91cCBTaWRlRWZmZWN0c1xuXHRcdE9iamVjdC5rZXlzKHNpZGVFZmZlY3RzTWFwKVxuXHRcdFx0LmZpbHRlcigoc2lkZUVmZmVjdHNOYW1lKSA9PiBzaWRlRWZmZWN0c01hcFtzaWRlRWZmZWN0c05hbWVdLmltbWVkaWF0ZSAhPT0gdHJ1ZSlcblx0XHRcdC5mb3JFYWNoKChzaWRlRWZmZWN0c05hbWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzID0gc2lkZUVmZmVjdHNNYXBbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0dGhpcy5yZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMsIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqIC0gUmVnaXN0ZXI6IGNhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWRcblx0ICogLSBFeGVjdXRlOiB0cmlnZ2VycyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMgcmVxdWVzdHMgaWYgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCBldmVudCBpcyBmdWxmaWxsZWQuXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSBmaWVsZFZhbGlkaXR5XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkIGJlZm9yZSBleGVjdXRpbmcgZGVmZXJyZWQgU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHNraXBEZWZlcnJlZFJlZ2lzdHJhdGlvbiBJZiB0cnVlIHRoZW4gZGVmZXJyZWQgc2lkZSBlZmZlY3RzIGFyZSBub3QgcmVnaXN0ZXJlZC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgcmVnaXN0cmF0aW9uIG9mIGRlZmVycmVkIHNpZGUgZWZmZWN0cyBhbmQgdHJpZ2dlcmluZyBuZWVkcyB0byBiZSBkb25lIHNlcGFyYXRlbHkuXG5cdCAqIEByZXR1cm5zICBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3Qocylcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBoYW5kbGVGaWVsZENoYW5nZShcblx0XHRldmVudDpcblx0XHRcdHwgQ2hlY2tCb3gkU2VsZWN0RXZlbnRcblx0XHRcdHwgSW5wdXRCYXNlJENoYW5nZUV2ZW50XG5cdFx0XHR8IEZpZWxkJENoYW5nZUV2ZW50XG5cdFx0XHR8IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudFxuXHRcdFx0fCBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnRcblx0XHRcdHwgUmFkaW9CdXR0b25Hcm91cCRTZWxlY3RFdmVudCxcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuLFxuXHRcdGZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPHVua25vd24+LFxuXHRcdHNraXBEZWZlcnJlZFJlZ2lzdHJhdGlvbiA9IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIFVJNUV2ZW50PHt9LCBDb250cm9sPikuZ2V0U291cmNlKCk7XG5cdFx0aWYgKCFza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24pIHtcblx0XHRcdHRoaXMucHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZChldmVudCwgZmllbGRWYWxpZGl0eSwgZmllbGRHcm91cFByZVJlcXVpc2l0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdFx0aWYgKCFmaWVsZFZhbGlkaXR5KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX21hbmFnZVNpZGVFZmZlY3RzRnJvbUZpZWxkKGZpZWxkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIFNpZGVFZmZlY3RzIHdpdGggYSByZWxhdGVkICdmb2N1cyBvdXQnIHRvIGEgZmllbGQgZ3JvdXAuXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgRXZlbnRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgU2lkZUVmZmVjdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UoZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpOiBQcm9taXNlPHZvaWQgfCB2b2lkW10+IHtcblx0XHRjb25zdCBmaWVsZCA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZmllbGRHcm91cElkczogc3RyaW5nW10gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWVsZEdyb3VwSWRzXCIpID8/IFtdLFxuXHRcdFx0Y3VzdG9tU2lkZUVmZmVjdEhhbmRsaW5nID0gZmllbGRHcm91cElkcy5zb21lKChmaWVsZEdyb3VwSWQpID0+IGZpZWxkR3JvdXBJZC5zdGFydHNXaXRoKFwiZmVfc2lkZUVmZmVjdEhhbmRsaW5nX1wiKSk7XG5cblx0XHRsZXQgc2lkZUVmZmVjdFJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdGlmIChjdXN0b21TaWRlRWZmZWN0SGFuZGxpbmcpIHtcblx0XHRcdGNvbnN0IGN1c3RvbUltbWVkaWF0ZVNpZGVFZmZlY3RQcm9taXNlcyA9IHRoaXMuaGFuZGxlQ3VzdG9tRmllbGRGaWVsZEdyb3VwQ2hhbmdlKGV2ZW50KTtcblx0XHRcdGlmIChjdXN0b21JbW1lZGlhdGVTaWRlRWZmZWN0UHJvbWlzZXMpIHtcblx0XHRcdFx0c2lkZUVmZmVjdFJlcXVlc3RQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdGN1c3RvbUltbWVkaWF0ZVNpZGVFZmZlY3RQcm9taXNlcy50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGZpZWxkR3JvdXBzU2lkZUVmZmVjdHMgPSBmaWVsZEdyb3VwSWRzLnJlZHVjZSgocmVzdWx0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10sIGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlc3VsdHMuY29uY2F0KHRoaXMuZ2V0UmVnaXN0ZXJlZFNpZGVFZmZlY3RzRm9yRmllbGRHcm91cChmaWVsZEdyb3VwSWQpKTtcblx0XHR9LCBbXSk7XG5cdFx0c2lkZUVmZmVjdFJlcXVlc3RQcm9taXNlcyA9IHNpZGVFZmZlY3RSZXF1ZXN0UHJvbWlzZXMuY29uY2F0KFxuXHRcdFx0ZmllbGRHcm91cHNTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKGZpZWxkR3JvdXBTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyhmaWVsZEdyb3VwU2lkZUVmZmVjdHMpO1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHNpZGVFZmZlY3RSZXF1ZXN0UHJvbWlzZXMpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0cyBvbiBjb250ZXh0ICR7Y29udGV4dFBhdGh9YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgU2lkZUVmZmVjdHMgd2hlbiB0aGUgZmllbGRHcm91cENoYW5nZSBldmVudCBpcyBmaXJlZCBmb3IgYSBjdXN0b20gZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBpbW1lZGlhdGUgc2lkZSBlZmZlY3RzIHJlcXVlc3QgaWYgdGhlcmUgYXJlIGFueVxuXHQgKi9cblx0aGFuZGxlQ3VzdG9tRmllbGRGaWVsZEdyb3VwQ2hhbmdlKGV2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogbnVsbCB8IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpZWxkID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgY29udHJvbFNpZGVFZmZlY3RzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmdldEZpZWxkU2lkZUVmZmVjdHNNYXAoZmllbGQpKTtcblxuXHRcdC8vIHJlZ2lzdGVyIHRoZSBub24gaW1tZWRpYXRlIHNpZGUgZWZmZWN0c1xuXHRcdGNvbnRyb2xTaWRlRWZmZWN0c1xuXHRcdFx0LmZpbHRlcigoc2lkZUVmZmVjdERlZikgPT4gc2lkZUVmZmVjdERlZi5pbW1lZGlhdGUgIT09IHRydWUpXG5cdFx0XHQuZm9yRWFjaCgoc2lkZUVmZmVjdERlZikgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3REZWYsIFByb21pc2UucmVzb2x2ZSgpKTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gZXhlY3V0ZSB0aGUgaW1tZWRpYXRlIHNpZGUgZWZmZWN0cyBvZiB0aGUgY29udHJvbFxuXHRcdGNvbnN0IGltbWVkaWF0ZVNpZGVFZmZlY3RzID0gY29udHJvbFNpZGVFZmZlY3RzXG5cdFx0XHQuZmlsdGVyKChzaWRlRWZmZWN0RGVmKSA9PiBzaWRlRWZmZWN0RGVmLmltbWVkaWF0ZSA9PT0gdHJ1ZSlcblx0XHRcdC5tYXAoKHNpZGVFZmZlY3REZWYpID0+IHNpZGVFZmZlY3REZWYuc2lkZUVmZmVjdHMpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0aWYgKGltbWVkaWF0ZVNpZGVFZmZlY3RzLmxlbmd0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhpbW1lZGlhdGVTaWRlRWZmZWN0cywgY29udGV4dCBhcyBDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKiBNYW5hZ2VzIHRoZSBkZWZlcnJlZCBTaWRlRWZmZWN0cyB3aGljaCBoYXZlIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNvbnRleHQgb2YgdGhlIHBhZ2UgY2hhbmdlcyAoc2F2aW5nIGEgZG9jdW1lbnQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgcGFnZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybnMgdHJ1ZSBpZiB0aGUgU2lkZUVmZmVjdHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZVBhZ2VDaGFuZ2VDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c0ZpZWxkR3JvdXBPblBhZ2UgPSB0aGlzLmdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckNvbnRleHQoY29udGV4dCk7XG5cdFx0Ly8gV2UgdHJpZ2dlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBkZWZlcnJlZCBzaWRlRWZmZWN0cyBhbmQgd2FpdCBmb3IgdGhlIGV4ZWN1dGlvbiB0byBiZSBjb21wbGV0ZWQuXG5cdFx0Ly8gV2UgYWxzbyB3YWl0IGZvciB0aGUgY3VycmVudCBzaWRlRWZmZWN0cycgZXhlY3V0aW9uIHRvIGJlIGNvbXBsZXRlZFxuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdHNpZGVFZmZlY3RzRmllbGRHcm91cE9uUGFnZVxuXHRcdFx0XHQubWFwKGFzeW5jIChmaWVsZEdyb3VwU2lkZUVmZmVjdHMpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyhmaWVsZEdyb3VwU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY29uY2F0KHRoaXMud2FpdEZvclNpZGVFZmZlY3RFeGVjdXRpb25zKCkpXG5cdFx0KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBvbiBwYWdlIGNvbnRleHQgJHtjb250ZXh0LmdldFBhdGgoKX1gLCBlcnJvcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWRcblx0ICogQHBhcmFtIGZuR2V0VGFyZ2V0cyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBnaXZlIHVzIHRoZSB0YXJnZXRzIGFuZCBhY3Rpb25zIGlmIGl0IHdhcyBjb21pbmcgdGhyb3VnaCBzb21lIHNwZWNpZmljIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gaWdub3JlVHJpZ2dlckFjdGlvbnMgSWYgdHJ1ZSwgd2UgZG8gbm90IHRyaWdnZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBzaWRlIGVmZmVjdFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGUsXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRncm91cElkPzogc3RyaW5nLFxuXHRcdGZuR2V0VGFyZ2V0cz86IChzaWRlRWZmZWN0c0RlZjogU2lkZUVmZmVjdHNUeXBlKSA9PiB7IHRhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W107IHRyaWdnZXJBY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuXHRcdGlnbm9yZVRyaWdnZXJBY3Rpb25zID0gZmFsc2Vcblx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgZm5UcmlnZ2VyQ2FsbGJhY2tzID0gdGhpcy50cmlnZ2VyQ2FsbGJhY2tzLmJpbmQodGhpcyk7XG5cdFx0Y29uc3QgeyB0YXJnZXRzLCB0cmlnZ2VyQWN0aW9uIH0gPSBmbkdldFRhcmdldHNcblx0XHRcdD8gZm5HZXRUYXJnZXRzKHNpZGVFZmZlY3RzKVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0dGFyZ2V0czogWy4uLihzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcyA/PyBbXSksIC4uLihzaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzID8/IFtdKV0sXG5cdFx0XHRcdFx0dHJpZ2dlckFjdGlvbjogIXRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5pc0NvbnRyb2xTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cykgPyBzaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9uIDogdW5kZWZpbmVkXG5cdFx0XHQgIH07XG5cdFx0aWYgKHRyaWdnZXJBY3Rpb24gJiYgIWlnbm9yZVRyaWdnZXJBY3Rpb25zKSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RFeGVjdXRpb25zLnB1c2godGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24odHJpZ2dlckFjdGlvbiwgY29udGV4dCwgeyBncm91cElkIH0pKTtcblx0XHR9XG5cblx0XHRpZiAodGFyZ2V0cy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHJlcXVlc3RUYXJnZXRzID0gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHModGFyZ2V0cywgY29udGV4dCwgZ3JvdXBJZClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gYXN5bmMoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZuVHJpZ2dlckNhbGxiYWNrcyhzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcz8ubWFwKCh0YXJnZXQpID0+IHRhcmdldC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgfHwgW10pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKFtzaWRlRWZmZWN0c10sIGNvbnRleHQpO1xuXHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMucmVxdWVzdEV4ZWN1dGlvbnMucHVzaChyZXF1ZXN0VGFyZ2V0cyk7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdFRhcmdldHM7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBzaWRlRWZmZWN0IGV2ZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB0byBleGVjdXRlIHRoZSBzaWRlIGVmZmVjdCBvbiB0aGUgcGFnZSdzIGNvbnRleHQsIGJ1dCBwYWdlcyAobGlrZSB0aGUgTFIpIG1pZ2h0IG92ZXJyaWRlIHRoaXMgbWV0aG9kLlxuXHQgKiBAcGFyYW0gZXZlbnROYW1lIFRoZSBTaWRlRWZmZWN0cyBldmVudCB0aGF0IGlzIHRyaWdnZXJlZFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmb3Igd2hpY2ggdGhpcyBldmVudCB3YXMgdHJpZ2dlcmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaXNEYXRhUGF0aFJlbGV2YW50KHBhdGgsIGV2ZW50TmFtZSkpIHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0Ly8gdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFNpZGVFZmZlY3RzIFNlcnZpY2Vcblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckV2ZW50KGV2ZW50TmFtZSwgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWMgZGF0YSBwYXRoIGlzIHZpc2libGUgb24gdGhlIHBhZ2UuXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIF9ldmVudE5hbWUgU2lkZUVmZmVjdHMgZXZlbnQgd2hpY2ggd2FzIHRyaWdnZXJlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIHBhdGggaXMgc2hvd24gb24gdGhlIFVJXG5cdCAqL1xuXHRpc0RhdGFQYXRoUmVsZXZhbnQocGF0aDogc3RyaW5nLCBfZXZlbnROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gISF0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIGNvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGdpdmVuIGNvbnRleHQgZml0cyB0byBhIGdpdmVuIHBhdGguXG5cdCAqXG5cdCAqIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyBib3RoIHRoZSBuYXZpZ2F0aW9uIHBhdGggYW5kIHRoZSBjYW5vbmljYWwgcGF0aC5cblx0ICogV2UgYWxzbyBjaGVjayBkZXBlbmRlbnQgcHJvcGVydHkgYmluZGluZ3MgaWYgdGhleSBmb2xsb3cgYSBuYXZpZ2F0aW9uIHBhdGggdG8gdGhlIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb250ZXh0IGZpdHMgdG8gdGhlIGdpdmVuIHBhdGhcblx0ICovXG5cdF9jb250ZXh0SXNSZWxldmFudChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRpZiAoY29udGV4dD8uZ2V0UGF0aCgpID09PSBwYXRoIHx8IGNvbnRleHQ/LmdldENhbm9uaWNhbFBhdGgoKSA9PT0gcGF0aCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gY2hlY2sgaWYgYSBkZXBlbmRlbnQgYmluZGluZyBmb2xsb3dzIGEgbmF2aWdhdGlvbiBwYXRoIGFuZCBmaXRzIHRvIHRoaXMgcGF0aFxuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGRlcGVuZGVudEJpbmRpbmdzID0gbW9kZWwuZ2V0RGVwZW5kZW50QmluZGluZ3MoY29udGV4dCk7XG5cdFx0Y29uc3QgY29udGV4dElzQWN0aXZlRW50aXR5ID0gY29udGV4dC5nZXRPYmplY3QoKT8uSXNBY3RpdmVFbnRpdHk7IC8vIFN0aWNreSBkb24ndCBoYXZlIGFjdGl2ZSBlbnRpdHlcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgZGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gYmluZGluZy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHRcdGlmIChcblx0XHRcdFx0YmluZGluZ1BhdGguc3RhcnRzV2l0aChcIkAkdWk1XCIpIHx8IC8vIGlnbm9yZSBVSTUgaW50ZXJuYWwgYmluZGluZ3Ncblx0XHRcdFx0KCEhY29udGV4dElzQWN0aXZlRW50aXR5ICYmIC8vIGlnbm9yZSBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBvbiBhY3RpdmUgdmVyc2lvblxuXHRcdFx0XHRcdGJpbmRpbmdQYXRoLmluY2x1ZGVzKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvXCIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlUYXJnZXQgPSBtZXRhTW9kZWwuZmV0Y2hVcGRhdGVEYXRhKGJpbmRpbmdQYXRoLCBjb250ZXh0KS5nZXRSZXN1bHQoKTtcblx0XHRcdFx0aWYgKHByb3BlcnR5VGFyZ2V0Py5lbnRpdHlQYXRoID09PSBwYXRoIHx8IFwiL1wiICsgcHJvcGVydHlUYXJnZXQ/LmVkaXRVcmwgPT09IHBhdGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBjaGVja2luZyAke2JpbmRpbmdQYXRofSBvbiBwYWdlIGNvbnRleHQgYCwgZXJyb3IgYXMgc3RyaW5nIHwgRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBjb250ZXh0IGZvciBhIGdpdmVuIHBhdGggYnkgY2hlY2tpbmcgZGVwZW5kZW50IGJpbmRpbmdzLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBiZSBjaGVja2VkXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBwYXJlbnQgY29udGV4dFxuXHQgKiBAcmV0dXJucyBDb250ZXh0IGlmIGZvdW5kLCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWRcblx0ICovXG5cdF9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGg6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBjb250ZXh0KSkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVwZW5kZW50QmluZGluZ3MgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0RGVwZW5kZW50QmluZGluZ3MoY29udGV4dCk7XG5cdFx0Zm9yIChjb25zdCBiaW5kaW5nIG9mIGRlcGVuZGVudEJpbmRpbmdzKSB7XG5cdFx0XHRpZiAoYmluZGluZy5pc0E8T0RhdGFDb250ZXh0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgYmluZGluZy5nZXRCb3VuZENvbnRleHQoKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gYmluZGluZy5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGxpc3RDb250ZXh0cyA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbGlzdENvbnRleHQgb2YgbGlzdENvbnRleHRzKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGxpc3RDb250ZXh0KSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGxpc3RDb250ZXh0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGV4dCB0byBiZSBzaG93biBmb3IgdXNlciB0byBpbmRpY2F0ZSBkYXRhIHJlZnJlc2guXG5cdCAqXG5cdCAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBTaWRlRWZmZWN0cyBldmVudHMuIFBhZ2VzIChsaWtlIHRoZSBMUikgbWlnaHQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuXG5cdCAqIEByZXR1cm5zIFRleHQgdG8gYmUgc2hvd24gdG8gdGhlIHVzZXIgaW4gY2FzZSBvZiBhIGRhdGEgcmVmcmVzaFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0Z2V0RGF0YVJlZnJlc2hUZXh0KCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy5nZXRWaWV3KCkpO1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1NFUlZFUl9FVkVOVFNfTkVXX0RBVEFfSVRFTVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZnkgdGhlIHVzZXIgdGhhdCBkYXRhIHdhcyByZWZyZXNoZWQuXG5cdCAqXG5cdCAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBTaWRlRWZmZWN0cyBldmVudHMuXG5cdCAqL1xuXG5cdG5vdGlmeURhdGFSZWZyZXNoKCk6IHZvaWQge1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLl9zaWRlRWZmZWN0cy5nZXREYXRhUmVmcmVzaFRleHQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQXNrIHRoZSB1c2VyIGZvciBjb25maXJtYXRpb24gb2YgYSBkYXRhIHJlZnJlc2guXG5cdCAqXG5cdCAqIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBTaWRlRWZmZWN0cyBldmVudHMuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBpZiB0aGUgdXNlciBjb25maXJtcyBhbmQgcmVqZWN0cyBpZiB0aGUgdXNlciBjYW5jZWxzLlxuXHQgKi9cblx0YXN5bmMgY29uZmlybURhdGFSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5pc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4pIHtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSB0aGlzLmdldERhdGFSZWZyZXNoVGV4dCgpO1xuXHRcdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRcdFx0Y29uc3QgY29uZmlybWF0aW9uRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IG5ldyBUZXh0KHsgdGV4dDogdGV4dCB9KSxcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9SRUZSRVNIXCIpLFxuXHRcdFx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKSxcblx0XHRcdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRhZnRlckNsb3NlOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0dGhpcy5pc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4gPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdHRoaXMuaXNDb25maXJtYXRpb25EaWFsb2dPcGVuID0gdHJ1ZTtcblx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLm9wZW4oKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0IG11bHRpcGxlIFNpZGVFZmZlY3RzIG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICogQHBhcmFtIG11bHRpU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBuZWVkIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cCBpZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgcmVxdWVzdCBvbiBTQVBVSTUgY29udGV4dFxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdE11bHRpcGxlU2lkZUVmZmVjdHMobXVsdGlTaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlW10sIGNvbnRleHQ6IENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRsZXQgcHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGxldCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBtdWx0aVNpZGVFZmZlY3RzLnJlZHVjZSgoYWN0aW9ucywgc2lkZUVmZmVjdHMpID0+IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RBY3Rpb24gPSAoc2lkZUVmZmVjdHMgYXMgT0RhdGFTaWRlRWZmZWN0c1R5cGUpLnRyaWdnZXJBY3Rpb247XG5cdFx0XHRpZiAoc2lkZUVmZmVjdEFjdGlvbikge1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goc2lkZUVmZmVjdEFjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWN0aW9ucztcblx0XHR9LCBbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZm50cmlnZ2VyQ2FsbGJhY2tzID0gdGhpcy50cmlnZ2VyQ2FsbGJhY2tzLmJpbmQodGhpcyk7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihhY3Rpb24sIGNvbnRleHQsIHsgZ3JvdXBJZCB9KTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdHByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA/PyBbXSkucmVkdWNlKChteVNldCwgcHJvcGVydHkpID0+IG15U2V0LmFkZChwcm9wZXJ0eSksIHByb3BlcnRpZXMpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMgPz8gW10pLnJlZHVjZShcblx0XHRcdFx0KG15U2V0LCBuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG15U2V0LmFkZChuYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0Li4uQXJyYXkuZnJvbShwcm9wZXJ0aWVzKSxcblx0XHRcdFx0XHQuLi5BcnJheS5mcm9tKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKS5tYXAoKG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eSB9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdGdyb3VwSWRcblx0XHRcdClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuXHRcdFx0XHRyZXR1cm4gZm50cmlnZ2VyQ2FsbGJhY2tzKEFycmF5LmZyb20obmF2aWdhdGlvblByb3BlcnRpZXMpKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzLCBjb250ZXh0KTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICogQHJldHVybnMgUmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgcmVxdWVzdCBvbiB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gbXVsdGlTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKG11bHRpU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IGlzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0uZXZlcnkoXG5cdFx0XHRcdChtRmFpbGVkU2lkZUVmZmVjdHMpID0+IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHRcdGlmIChpc05vdEFscmVhZHlMaXN0ZWQpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5wdXNoKHNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBTaWRlRWZmZWN0cyBpbiB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0cyBmb3IgYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggQ29udGV4dCBwYXRoIHdoZXJlIFNpZGVFZmZlY3RzIGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0dW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZSBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAodGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXT8ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5maWx0ZXIoXG5cdFx0XHRcdChzaWRlRWZmZWN0cykgPT4gc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lICE9PSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgYSBGaWVsZEdyb3VwXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gZXZlbnQgcmVsYXRlZCB0byB0aGUgZmllbGQgZ3JvdXAgY2hhbmdlIGlzIGZpcmVkLlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNQcm9wZXJ0aWVzIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBmdWxsZmlsIGJlZm9yZSBleGVjdXRpbmcgdGhlIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlLCBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KHNpZGVFZmZlY3RzUHJvcGVydGllcy5uYW1lLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCk7XG5cdFx0aWYgKCF0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtpZF0pIHtcblx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwW2lkXSA9IHtcblx0XHRcdFx0cHJvbWlzZTogZmllbGRHcm91cFByZVJlcXVpc2l0ZSA/PyBQcm9taXNlLnJlc29sdmUoKSxcblx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBzaWRlRWZmZWN0c1Byb3BlcnRpZXNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIGEgRmllbGRHcm91cC5cblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzUHJvcGVydGllcyBTaWRlRWZmZWN0cyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRleHQsIG5hbWUgfSA9IHNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbaWRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgaW50byB0aGUgcXVldWUgZm9yIGEgZmllbGQgZ3JvdXAgaWQuXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgRmllbGQgZ3JvdXAgaWRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyBhbmQgdGhlaXIgcHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkOiBzdHJpbmcpOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGVbXSB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJ5SW5kZXggb2YgT2JqZWN0LmtleXModGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXApKSB7XG5cdFx0XHRpZiAocmVnaXN0cnlJbmRleC5zdGFydHNXaXRoKGAke2ZpZWxkR3JvdXBJZH1fYCkpIHtcblx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaCh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtyZWdpc3RyeUluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWdpc3RlcmVkIFNpZGVFZmZlY3RzIGludG8gdGhlIHF1ZXVlIGZvciBhIGNvbnRleHQgYW5kIGl0cyBjaGlsZHJlbi5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyBhbmQgdGhlaXIgcHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZVtdIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcmVnaXN0cnlJbmRleCBvZiBPYmplY3Qua2V5cyh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCkpIHtcblx0XHRcdGlmICh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcClcblx0XHRcdFx0aWYgKHJlZ2lzdHJ5SW5kZXguaW5jbHVkZXMoYF8ke2NvbnRleHQuZ2V0UGF0aCgpfWApKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaCh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtyZWdpc3RyeUluZGV4XSk7XG5cdFx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNpZGVFZmZlY3RzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYSBzdGF0dXMgaW5kZXguXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgVGhlIGZpZWxkIGdyb3VwIGlkXG5cdCAqIEBwYXJhbSBjb250ZXh0IFNBUFVJNSBDb250ZXh0XG5cdCAqIEByZXR1cm5zIEluZGV4XG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZEdyb3VwSW5kZXgoZmllbGRHcm91cElkOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgJHtmaWVsZEdyb3VwSWR9XyR7Y29udGV4dC5nZXRQYXRoKCl9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHNpZGVFZmZlY3RzIHByb3BlcnRpZXMgZnJvbSBhIGZpZWxkIGdyb3VwIGlkXG5cdCAqIFRoZSBwcm9wZXJ0aWVzIGFyZTpcblx0ICogLSBuYW1lXG5cdCAqIC0gc2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKiAtIHNpZGVFZmZlY3RzIGVudGl0eSB0eXBlXG5cdCAqIC0gaW1tZWRpYXRlIHNpZGVFZmZlY3RzLlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgX2dldFNpZGVFZmZlY3RzUHJvcGVydHlGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZDogc3RyaW5nKToge1xuXHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGltbWVkaWF0ZTogYm9vbGVhbjtcblx0XHRzaWRlRWZmZWN0czogT0RhdGFTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQ7XG5cdH0ge1xuXHRcdC8qKlxuXHRcdCAqIHN0cmluZyBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiIGlzIGFkZGVkIHRvIHRoZSBTaWRlRWZmZWN0cyBuYW1lIGR1cmluZyB0ZW1wbGF0aW5nIHRvIGtub3dcblx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHQgKiBiZSBkZWZlcnJlZCAob24gZmllbGQgZ3JvdXAgZm9jdXMgb3V0KVxuXHRcdCAqXG5cdFx0ICovXG5cdFx0Y29uc3QgaW1tZWRpYXRlID0gZmllbGRHcm91cElkLmluY2x1ZGVzKElNTUVESUFURV9SRVFVRVNUKSxcblx0XHRcdG5hbWUgPSBmaWVsZEdyb3VwSWQucmVwbGFjZShJTU1FRElBVEVfUkVRVUVTVCwgXCJcIiksXG5cdFx0XHRzaWRlRWZmZWN0UGFydHMgPSBuYW1lLnNwbGl0KFwiI1wiKSxcblx0XHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlID0gc2lkZUVmZmVjdFBhcnRzWzBdLFxuXHRcdFx0c2lkZUVmZmVjdFBhdGggPSBgJHtzaWRlRWZmZWN0RW50aXR5VHlwZX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzJHtcblx0XHRcdFx0c2lkZUVmZmVjdFBhcnRzLmxlbmd0aCA9PT0gMiA/IGAjJHtzaWRlRWZmZWN0UGFydHNbMV19YCA6IFwiXCJcblx0XHRcdH1gLFxuXHRcdFx0c2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkID1cblx0XHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoc2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc2lkZUVmZmVjdFBhdGhdO1xuXHRcdHJldHVybiB7IG5hbWUsIGltbWVkaWF0ZSwgc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RFbnRpdHlUeXBlIH07XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVsYXRlZCB0byB0aGUgcmVxdWVzdGVkIGltbWVkaWF0ZSBzaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQoZmllbGQ6IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzVG9FeGVjdXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXTsgY29udGV4dDogQ29udGV4dCB9PiA9IHt9O1xuXHRcdFx0Y29uc3QgYWRkU2lkZUVmZmVjdHMgPSAoY29udGV4dDogQ29udGV4dCwgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoc2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdLnNpZGVFZmZlY3RzLnB1c2goc2lkZUVmZmVjdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzVG9FeGVjdXRlW2NvbnRleHRQYXRoXSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogW3NpZGVFZmZlY3RzXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdC8vR2V0IEltbWVkaWF0ZSBTaWRlRWZmZWN0c1xuXHRcdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgb2YgT2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c01hcCkuZmlsdGVyKFxuXHRcdFx0XHQoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PiBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuaW1tZWRpYXRlID09PSB0cnVlXG5cdFx0XHQpKSB7XG5cdFx0XHRcdC8vIGlmIHRoaXMgU2lkZUVmZmVjdHMgaXMgcmVjb3JkZWQgYXMgZmFpbGVkIFNpZGVFZmZlY3RzLCBuZWVkIHRvIHJlbW92ZSBpdC5cblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpO1xuXHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9SZXBsYXkgZmFpbGVkIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gdGhlIHZpZXcgb3IgRmllbGRcblx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBbZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSwgdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpXS5maWx0ZXIoXG5cdFx0XHRcdChjb250ZXh0KTogY29udGV4dCBpcyBDb250ZXh0ID0+ICEhY29udGV4dFxuXHRcdFx0KSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBmYWlsZWRTaWRlRWZmZWN0cyA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0gPz8gW107XG5cdFx0XHRcdHRoaXMudW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZhaWxlZFNpZGVFZmZlY3Qgb2YgZmFpbGVkU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhjb250ZXh0LCBmYWlsZWRTaWRlRWZmZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNUb0V4ZWN1dGUpLm1hcChhc3luYyAoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PlxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvcGVydGllcy5zaWRlRWZmZWN0cy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHRcdD8gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzWzBdLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dClcblx0XHRcdFx0XHRcdDogdGhpcy5yZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgbWFuYWdpbmcgRmllbGQgU2lkZUVmZmVjdHNgLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgdHJpZ2dlckNhbGxiYWNrcyhuYXZpZ2F0aW9uOiBzdHJpbmdbXSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRuYXZpZ2F0aW9uLm1hcCgobmF2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlZ2lzdGVyQ2FsbEJhY2sgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0UmVnaXN0ZXJlZENhbGxiYWNrKG5hdik7XG5cdFx0XHRcdGlmIChyZWdpc3RlckNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZ2lzdGVyQ2FsbEJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhIGZpZWxkR3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwU2lkZUVmZmVjdHMgRmllbGQgZ3JvdXAgc2lkZUVmZmVjdHMgd2l0aCBpdHMgcHJvbWlzZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyB0cnVlIGlmIHRoZSBTaWRlRWZmZWN0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy51bnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHkpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBmaWVsZEdyb3VwU2lkZUVmZmVjdHMucHJvbWlzZTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgc2lkZUVmZmVjdHMsIGNvbnRleHQsIG5hbWUgfSA9IGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHk7XG5cdFx0XHRpZiAodGhpcy5pc0ZpZWxkR3JvdXBWYWxpZChuYW1lLCBjb250ZXh0KSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBleGVjdXRpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIHZhbGlkYXRpb24gc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBhIGZpZWxkIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgY29udHJvbFxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdGF0dXMgb2YgdGhlIGZpZWxkIHZhbGlkYXRpb25cblx0ICovXG5cdHByaXZhdGUgX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQ6IENvbnRyb2wsIHN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXApLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIGNvbnRleHQgfSA9IHNpZGVFZmZlY3RzTWFwW2tleV07XG5cdFx0XHRpZiAoIWltbWVkaWF0ZSkge1xuXHRcdFx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdPy5bZmllbGQuZ2V0SWQoKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdID0ge1xuXHRcdFx0XHRcdFx0Li4udGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdLFxuXHRcdFx0XHRcdFx0Li4ueyBbZmllbGQuZ2V0SWQoKV06IHRydWUgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyREEsTUFBTUEsaUJBQWlCLEdBQUcsb0JBQW9CO0VBQUMsSUFFekNDLDhCQUE4QixJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsOENBQThDLENBQUMsRUFBQUMsS0FBQSxHQXdCN0RDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FnQmhCQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBU2hCSCxlQUFlLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBQ2pCRixjQUFjLENBQUMsQ0FBQyxFQUFBRyxLQUFBLEdBZ0JoQkwsZUFBZSxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNqQkosY0FBYyxDQUFDLENBQUMsRUFBQUssS0FBQSxHQTRCaEJQLGVBQWUsQ0FBQyxDQUFDLEVBQUFRLE1BQUEsR0FDakJOLGNBQWMsQ0FBQyxDQUFDLEVBQUFPLE1BQUEsR0FhaEJULGVBQWUsQ0FBQyxDQUFDLEVBQUFVLE1BQUEsR0FDakJSLGNBQWMsQ0FBQyxDQUFD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
|
|
@@ -30,6 +30,9 @@ import CommonUtils from "../CommonUtils";
|
|
|
30
30
|
import type PageController from "../PageController";
|
|
31
31
|
|
|
32
32
|
import type { EntitySet, NavigationProperty } from "@sap-ux/vocabularies-types";
|
|
33
|
+
import type { CheckBox$SelectEvent } from "sap/m/CheckBox";
|
|
34
|
+
import type { InputBase$ChangeEvent } from "sap/m/InputBase";
|
|
35
|
+
import type { RatingIndicator$ChangeEvent } from "sap/m/RatingIndicator";
|
|
33
36
|
import Component from "sap/ui/core/Component";
|
|
34
37
|
import type TemplateComponent from "../TemplateComponent";
|
|
35
38
|
|
|
@@ -291,7 +294,13 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
291
294
|
@publicExtension()
|
|
292
295
|
@finalExtension()
|
|
293
296
|
prepareDeferredSideEffectsForField(
|
|
294
|
-
event:
|
|
297
|
+
event:
|
|
298
|
+
| CheckBox$SelectEvent
|
|
299
|
+
| InputBase$ChangeEvent
|
|
300
|
+
| Field$ChangeEvent
|
|
301
|
+
| RatingIndicator$ChangeEvent
|
|
302
|
+
| MultiValueField$ChangeEvent
|
|
303
|
+
| RadioButtonGroup$SelectEvent,
|
|
295
304
|
fieldValidity: boolean,
|
|
296
305
|
fieldGroupPreRequisite?: Promise<unknown>
|
|
297
306
|
): void {
|
|
@@ -325,7 +334,13 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
325
334
|
@publicExtension()
|
|
326
335
|
@finalExtension()
|
|
327
336
|
async handleFieldChange(
|
|
328
|
-
event:
|
|
337
|
+
event:
|
|
338
|
+
| CheckBox$SelectEvent
|
|
339
|
+
| InputBase$ChangeEvent
|
|
340
|
+
| Field$ChangeEvent
|
|
341
|
+
| RatingIndicator$ChangeEvent
|
|
342
|
+
| MultiValueField$ChangeEvent
|
|
343
|
+
| RadioButtonGroup$SelectEvent,
|
|
329
344
|
fieldValidity: boolean,
|
|
330
345
|
fieldGroupPreRequisite?: Promise<unknown>,
|
|
331
346
|
skipDeferredRegistration = false
|
|
@@ -56,7 +56,7 @@ sap.ui.define(["sap/fe/core/controllerextensions/collaboration/CollaborationComm
|
|
|
56
56
|
additionalParameters["userID"] = user.id;
|
|
57
57
|
additionalParameters["userName"] = user.initialName ?? "";
|
|
58
58
|
}
|
|
59
|
-
const webSocket = createWebSocket(ChannelType.CollaborationDraft, view.
|
|
59
|
+
const webSocket = createWebSocket(ChannelType.CollaborationDraft, view.getController().getAppComponent(), additionalParameters);
|
|
60
60
|
internalModel.setProperty(WEBSOCKETSTATUS, WEBSOCKET_STATUS.CONNECTING);
|
|
61
61
|
internalModel.setProperty(CONNECTION, webSocket);
|
|
62
62
|
internalModel.setProperty(CURRENTDRAFTID, draftUUID);
|
|
@@ -119,4 +119,4 @@ sap.ui.define(["sap/fe/core/controllerextensions/collaboration/CollaborationComm
|
|
|
119
119
|
_exports.endCollaboration = endCollaboration;
|
|
120
120
|
return _exports;
|
|
121
121
|
}, false);
|
|
122
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT0xMQUJPUkFUSU9OIiwiQ09OTkVDVElPTiIsIkNVUlJFTlREUkFGVElEIiwiV0VCU09DS0VUU1RBVFVTIiwiaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwiaW50ZXJuYWxNb2RlbCIsImdldFByb3BlcnR5IiwiV0VCU09DS0VUX1NUQVRVUyIsIkNPTk5FQ1RFRCIsIl9leHBvcnRzIiwiaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24iLCJ1c2VyIiwiZHJhZnRVVUlEIiwicmVjZWl2ZUNhbGxiYWNrIiwidmlldyIsInNlbmRVc2VySW5mbyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImVuZENvbGxhYm9yYXRpb24iLCJhY3RpdmVVc2VycyIsInNldFByb3BlcnR5IiwiYWN0aXZpdGllcyIsImFkZGl0aW9uYWxQYXJhbWV0ZXJzIiwiZHJhZnQiLCJVUkxTZWFyY2hQYXJhbXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNlYXJjaCIsImdldCIsImlkIiwiaW5pdGlhbE5hbWUiLCJ3ZWJTb2NrZXQiLCJjcmVhdGVXZWJTb2NrZXQiLCJDaGFubmVsVHlwZSIsIkNvbGxhYm9yYXRpb25EcmFmdCIsImdldE1vZGVsIiwiQ09OTkVDVElORyIsImF0dGFjaE1lc3NhZ2UiLCJldmVudCIsIm1lc3NhZ2UiLCJnZXRQYXJhbWV0ZXIiLCJhdHRhY2hPcGVuIiwic2hvd0Nvbm5lY3Rpb25Mb3N0RGlhbG9nIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJsb3N0T2ZDb25uZWN0aW9uVGV4dCIsImdldFRleHQiLCJNZXNzYWdlQm94Iiwid2FybmluZyIsImFjdGlvbnMiLCJBY3Rpb24iLCJPSyIsImVtcGhhc2l6ZWRBY3Rpb24iLCJhdHRhY2hFcnJvciIsImluY2x1ZGVzIiwiRVJST1IiLCJhdHRhY2hDbG9zZSIsImV2dCIsIkNMT1NFRCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwiYWN0aW9uIiwiY29udGVudCIsInRyaWdnZXJlZEFjdGlvbk5hbWUiLCJyZWZyZXNoTGlzdEJpbmRpbmciLCJyZXF1ZXN0ZWRQcm9wZXJ0aWVzIiwic2VuZCIsImNsaWVudEFjdGlvbiIsImNsaWVudENvbnRlbnQiLCJjbGllbnRUcmlnZ2VyZWRBY3Rpb25OYW1lIiwiY2xpZW50UmVmcmVzaExpc3RCaW5kaW5nIiwiY2xpZW50UmVxdWVzdGVkUHJvcGVydGllcyIsIkFjdGl2aXR5IiwiQWN0aXZhdGUiLCJEaXNjYXJkIiwiQ0xPU0lORyIsImNsb3NlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpdml0eUJhc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgVXNlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgV2ViU29ja2V0UGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvV2ViU29ja2V0XCI7XG5pbXBvcnQgeyBDaGFubmVsVHlwZSwgV0VCU09DS0VUX1NUQVRVUywgY3JlYXRlV2ViU29ja2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvV2ViU29ja2V0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBTYXBQY3BXZWJTb2NrZXQgZnJvbSBcInNhcC91aS9jb3JlL3dzL1NhcFBjcFdlYlNvY2tldFwiO1xuaW1wb3J0IHR5cGUgeyBXZWJTb2NrZXQkQ2xvc2VFdmVudCwgV2ViU29ja2V0JE1lc3NhZ2VFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS93cy9XZWJTb2NrZXRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbmNvbnN0IENPTExBQk9SQVRJT04gPSBcIi9jb2xsYWJvcmF0aW9uXCI7XG5jb25zdCBDT05ORUNUSU9OID0gXCIvY29sbGFib3JhdGlvbi9jb25uZWN0aW9uXCI7XG5jb25zdCBDVVJSRU5URFJBRlRJRCA9IFwiL2NvbGxhYm9yYXRpb24vRHJhZnRJRFwiO1xuY29uc3QgV0VCU09DS0VUU1RBVFVTID0gXCIvY29sbGFib3JhdGlvbi93ZWJzb2NrZXRfc3RhdHVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxhYm9yYXRpb25Db25uZWN0ZWQoaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsKTogYm9vbGVhbiB7XG5cdHJldHVybiBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFdFQlNPQ0tFVFNUQVRVUykgPT09IFdFQlNPQ0tFVF9TVEFUVVMuQ09OTkVDVEVEO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBjb2xsYWJvcmF0aW9uIHdlYnNvY2tldC5cbiAqIEBwYXJhbSB1c2VyXG4gKiBAcGFyYW0gZHJhZnRVVUlEXG4gKiBAcGFyYW0gaW50ZXJuYWxNb2RlbFxuICogQHBhcmFtIHJlY2VpdmVDYWxsYmFja1xuICogQHBhcmFtIHZpZXdcbiAqIEBwYXJhbSBzZW5kVXNlckluZm9cbiAqIEByZXR1cm5zIFRydWUgaWYgYSBuZXcgd2Vic29ja2V0IHdhcyBjcmVhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ29sbGFib3JhdGlvbihcblx0dXNlcjogVXNlcixcblx0ZHJhZnRVVUlEOiBzdHJpbmcsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0cmVjZWl2ZUNhbGxiYWNrOiAoXzogTWVzc2FnZSkgPT4gdm9pZCxcblx0dmlldzogRkVWaWV3LFxuXHRzZW5kVXNlckluZm8gPSBmYWxzZVxuKTogYm9vbGVhbiB7XG5cdGlmIChpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KENPTk5FQ1RJT04pKSB7XG5cdFx0Ly8gQSBjb25uZWN0aW9uIGlzIGFscmVhZHkgZXN0YWJsaXNoZWRcblx0XHRpZiAoaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShDVVJSRU5URFJBRlRJRCkgPT09IGRyYWZ0VVVJRCkge1xuXHRcdFx0Ly8gQ29ubmVjdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgc2FtZSBkcmFmdCAtPiBub3RoaW5nIHRvIGRvXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRoZXJlIHdhcyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlciBkcmFmdCAtPiB3ZSBjbG9zZSBpdCBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lXG5cdFx0XHQvLyBUaGlzIGNhbiBoYXBwZW4gZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGl0ZW1zIGluIEZDTFxuXHRcdFx0ZW5kQ29sbGFib3JhdGlvbihpbnRlcm5hbE1vZGVsKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBhY3RpdmVVc2VyczogVXNlcltdID0gW3VzZXJdO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KENPTExBQk9SQVRJT04sIHsgYWN0aXZlVXNlcnM6IGFjdGl2ZVVzZXJzLCBhY3Rpdml0aWVzOiB7fSB9KTtcblxuXHRjb25zdCBhZGRpdGlvbmFsUGFyYW1ldGVyczogV2ViU29ja2V0UGFyYW1ldGVyID0ge1xuXHRcdGRyYWZ0OiBkcmFmdFVVSURcblx0fTtcblx0aWYgKHNlbmRVc2VySW5mbyB8fCBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcInVzZUZMUFVzZXJcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0Ly8gdXNlZCBmb3IgaW50ZXJuYWwgdGVzdGluZ1xuXHRcdGFkZGl0aW9uYWxQYXJhbWV0ZXJzW1widXNlcklEXCJdID0gdXNlci5pZDtcblx0XHRhZGRpdGlvbmFsUGFyYW1ldGVyc1tcInVzZXJOYW1lXCJdID0gdXNlci5pbml0aWFsTmFtZSA/PyBcIlwiO1xuXHR9XG5cblx0Y29uc3Qgd2ViU29ja2V0ID0gY3JlYXRlV2ViU29ja2V0KENoYW5uZWxUeXBlLkNvbGxhYm9yYXRpb25EcmFmdCwgdmlldy5nZXRNb2RlbCgpLCBhZGRpdGlvbmFsUGFyYW1ldGVycyk7XG5cblx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShXRUJTT0NLRVRTVEFUVVMsIFdFQlNPQ0tFVF9TVEFUVVMuQ09OTkVDVElORyk7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQ09OTkVDVElPTiwgd2ViU29ja2V0KTtcblx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShDVVJSRU5URFJBRlRJRCwgZHJhZnRVVUlEKTtcblxuXHR3ZWJTb2NrZXQuYXR0YWNoTWVzc2FnZShmdW5jdGlvbiAoZXZlbnQ6IFdlYlNvY2tldCRNZXNzYWdlRXZlbnQgJiBFdmVudDx7IHBjcEZpZWxkcz86IE1lc3NhZ2UgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwicGNwRmllbGRzXCIpO1xuXHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRyZWNlaXZlQ2FsbGJhY2sobWVzc2FnZSk7XG5cdFx0fVxuXHR9KTtcblxuXHR3ZWJTb2NrZXQuYXR0YWNoT3BlbihmdW5jdGlvbiAoKSB7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShXRUJTT0NLRVRTVEFUVVMsIFdFQlNPQ0tFVF9TVEFUVVMuQ09OTkVDVEVEKTtcblx0fSk7XG5cblx0ZnVuY3Rpb24gc2hvd0Nvbm5lY3Rpb25Mb3N0RGlhbG9nKCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHZpZXcpO1xuXHRcdGNvbnN0IGxvc3RPZkNvbm5lY3Rpb25UZXh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfQ09OTkVDVElPTl9MT1NUXCIpO1xuXG5cdFx0TWVzc2FnZUJveC53YXJuaW5nKGxvc3RPZkNvbm5lY3Rpb25UZXh0LCB7XG5cdFx0XHRhY3Rpb25zOiBbTWVzc2FnZUJveC5BY3Rpb24uT0tdLFxuXHRcdFx0ZW1waGFzaXplZEFjdGlvbjogTWVzc2FnZUJveC5BY3Rpb24uT0tcblx0XHR9KTtcblx0fVxuXG5cdHdlYlNvY2tldC5hdHRhY2hFcnJvcihmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKFtXRUJTT0NLRVRfU1RBVFVTLkNPTk5FQ1RJTkcsIFdFQlNPQ0tFVF9TVEFUVVMuQ09OTkVDVEVEXS5pbmNsdWRlcyhpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFdFQlNPQ0tFVFNUQVRVUykpKSB7XG5cdFx0XHRzaG93Q29ubmVjdGlvbkxvc3REaWFsb2coKTtcblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShXRUJTT0NLRVRTVEFUVVMsIFdFQlNPQ0tFVF9TVEFUVVMuRVJST1IpO1xuXHR9KTtcblxuXHR3ZWJTb2NrZXQuYXR0YWNoQ2xvc2UoZnVuY3Rpb24gKGV2dDogV2ViU29ja2V0JENsb3NlRXZlbnQpIHtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFdFQlNPQ0tFVFNUQVRVUywgV0VCU09DS0VUX1NUQVRVUy5DTE9TRUQpO1xuXHRcdC8vIFJGQyA2NDU1IGRlZmluZXMgdGhlIHN0YXR1cyBjb2RlcyB3aGVuIGNsb3NpbmcgYW4gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiA6ICBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjRcblx0XHQvLyBzdGF0dXMgY29kZSAxMDAwIG1lYW5zIG5vcm1hbCBjbG9zdXJlXG5cdFx0aWYgKChldnQuZ2V0UGFyYW1ldGVyKFwiY29kZVwiKSBhcyBudW1iZXIgfCB1bmRlZmluZWQpICE9PSAxMDAwKSB7XG5cdFx0XHRzaG93Q29ubmVjdGlvbkxvc3REaWFsb2coKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoXG5cdGFjdGlvbjogQWN0aXZpdHksXG5cdGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHR0cmlnZ2VyZWRBY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRyZWZyZXNoTGlzdEJpbmRpbmc/OiBib29sZWFuLFxuXHRyZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nXG4pOiB2b2lkIHtcblx0aWYgKGlzQ29sbGFib3JhdGlvbkNvbm5lY3RlZChpbnRlcm5hbE1vZGVsKSkge1xuXHRcdGNvbnN0IHdlYlNvY2tldCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQ09OTkVDVElPTikgYXMgU2FwUGNwV2ViU29ja2V0O1xuXG5cdFx0d2ViU29ja2V0LnNlbmQoXCJcIiwge1xuXHRcdFx0Y2xpZW50QWN0aW9uOiBhY3Rpb24sXG5cdFx0XHRjbGllbnRDb250ZW50OiBjb250ZW50LFxuXHRcdFx0Y2xpZW50VHJpZ2dlcmVkQWN0aW9uTmFtZTogdHJpZ2dlcmVkQWN0aW9uTmFtZSxcblx0XHRcdGNsaWVudFJlZnJlc2hMaXN0QmluZGluZzogcmVmcmVzaExpc3RCaW5kaW5nLFxuXHRcdFx0Y2xpZW50UmVxdWVzdGVkUHJvcGVydGllczogcmVxdWVzdGVkUHJvcGVydGllc1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFjdGlvbiA9PT0gQWN0aXZpdHkuQWN0aXZhdGUgfHwgYWN0aW9uID09PSBBY3Rpdml0eS5EaXNjYXJkKSB7XG5cdFx0XHRlbmRDb2xsYWJvcmF0aW9uKGludGVybmFsTW9kZWwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kQ29sbGFib3JhdGlvbihpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0Y29uc3Qgd2ViU29ja2V0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShDT05ORUNUSU9OKSBhcyBTYXBQY3BXZWJTb2NrZXQgfCB1bmRlZmluZWQ7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQ09MTEFCT1JBVElPTiwge30pO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFdFQlNPQ0tFVFNUQVRVUywgV0VCU09DS0VUX1NUQVRVUy5DTE9TSU5HKTtcblx0d2ViU29ja2V0Py5jbG9zZSgpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBWUEsTUFBTUEsYUFBYSxHQUFHLGdCQUFnQjtFQUN0QyxNQUFNQyxVQUFVLEdBQUcsMkJBQTJCO0VBQzlDLE1BQU1DLGNBQWMsR0FBRyx3QkFBd0I7RUFDL0MsTUFBTUMsZUFBZSxHQUFHLGlDQUFpQztFQUVsRCxTQUFTQyx3QkFBd0JBLENBQUNDLGFBQXdCLEVBQVc7SUFDM0UsT0FBT0EsYUFBYSxDQUFDQyxXQUFXLENBQUNILGVBQWUsQ0FBQyxLQUFLSSxnQkFBZ0IsQ0FBQ0MsU0FBUztFQUNqRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBQyxRQUFBLENBQUFMLHdCQUFBLEdBQUFBLHdCQUFBO0VBVU8sU0FBU00sdUJBQXVCQSxDQUN0Q0MsSUFBVSxFQUNWQyxTQUFpQixFQUNqQlAsYUFBd0IsRUFDeEJRLGVBQXFDLEVBQ3JDQyxJQUFZLEVBRUY7SUFBQSxJQURWQyxZQUFZLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFFcEIsSUFBSVgsYUFBYSxDQUFDQyxXQUFXLENBQUNMLFVBQVUsQ0FBQyxFQUFFO01BQzFDO01B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QUNvRCxNQUFNLENBQUM7TUFDbkU7TUFDQTtNQUNBLElBQUtELEdBQUcsQ0FBQ2pCLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBNEIsSUFBSSxFQUFFO1FBQzlERSx3QkFBd0IsQ0FBQyxDQUFDO01BQzNCO0lBQ0QsQ0FBQyxDQUFDO0lBRUYsT0FBTyxJQUFJO0VBQ1o7RUFBQ2xDLFFBQUEsQ0FBQUMsdUJBQUEsR0FBQUEsdUJBQUE7RUFFTSxTQUFTa0QsNkJBQTZCQSxDQUM1Q0MsTUFBZ0IsRUFDaEJDLE9BQTJCLEVBQzNCekQsYUFBd0IsRUFDeEIwRCxtQkFBNEIsRUFDNUJDLGtCQUE0QixFQUM1QkMsbUJBQTRCLEVBQ3JCO0lBQ1AsSUFBSTdELHdCQUF3QixDQUFDQyxhQUFhLENBQUMsRUFBRTtNQUM1QyxNQUFNMkIsU0FBUyxHQUFHM0IsYUFBYSxDQUFDQyxXQUFXLENBQUNMLFVBQVUsQ0FBb0I7TUFFMUUrQixTQUFTLENBQUNrQyxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2xCQyxZQUFZLEVBQUVOLE1BQU07UUFDcEJPLGFBQWEsRUFBRU4sT0FBTztRQUN0Qk8seUJBQXlCLEVBQUVOLG1CQUFtQjtRQUM5Q08sd0JBQXdCLEVBQUVOLGtCQUFrQjtRQUM1Q08seUJBQXlCLEVBQUVOO01BQzVCLENBQUMsQ0FBQztNQUVGLElBQUlKLE1BQU0sS0FBS1csUUFBUSxDQUFDQyxRQUFRLElBQUlaLE1BQU0sS0FBS1csUUFBUSxDQUFDRSxPQUFPLEVBQUU7UUFDaEV2RCxnQkFBZ0IsQ0FBQ2QsYUFBYSxDQUFDO01BQ2hDO0lBQ0Q7RUFDRDtFQUFDSSxRQUFBLENBQUFtRCw2QkFBQSxHQUFBQSw2QkFBQTtFQUVNLFNBQVN6QyxnQkFBZ0JBLENBQUNkLGFBQXdCLEVBQVE7SUFDaEUsTUFBTTJCLFNBQVMsR0FBRzNCLGFBQWEsQ0FBQ0MsV0FBVyxDQUFDTCxVQUFVLENBQWdDO0lBQ3RGSSxhQUFhLENBQUNnQixXQUFXLENBQUNyQixhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUNLLGFBQWEsQ0FBQ2dCLFdBQVcsQ0FBQ2xCLGVBQWUsRUFBRUksZ0JBQWdCLENBQUNvRSxPQUFPLENBQUM7SUFDcEUzQyxTQUFTLEVBQUU0QyxLQUFLLENBQUMsQ0FBQztFQUNuQjtFQUFDbkUsUUFBQSxDQUFBVSxnQkFBQSxHQUFBQSxnQkFBQTtFQUFBLE9BQUFWLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT0xMQUJPUkFUSU9OIiwiQ09OTkVDVElPTiIsIkNVUlJFTlREUkFGVElEIiwiV0VCU09DS0VUU1RBVFVTIiwiaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwiaW50ZXJuYWxNb2RlbCIsImdldFByb3BlcnR5IiwiV0VCU09DS0VUX1NUQVRVUyIsIkNPTk5FQ1RFRCIsIl9leHBvcnRzIiwiaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24iLCJ1c2VyIiwiZHJhZnRVVUlEIiwicmVjZWl2ZUNhbGxiYWNrIiwidmlldyIsInNlbmRVc2VySW5mbyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImVuZENvbGxhYm9yYXRpb24iLCJhY3RpdmVVc2VycyIsInNldFByb3BlcnR5IiwiYWN0aXZpdGllcyIsImFkZGl0aW9uYWxQYXJhbWV0ZXJzIiwiZHJhZnQiLCJVUkxTZWFyY2hQYXJhbXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNlYXJjaCIsImdldCIsImlkIiwiaW5pdGlhbE5hbWUiLCJ3ZWJTb2NrZXQiLCJjcmVhdGVXZWJTb2NrZXQiLCJDaGFubmVsVHlwZSIsIkNvbGxhYm9yYXRpb25EcmFmdCIsImdldENvbnRyb2xsZXIiLCJnZXRBcHBDb21wb25lbnQiLCJDT05ORUNUSU5HIiwiYXR0YWNoTWVzc2FnZSIsImV2ZW50IiwibWVzc2FnZSIsImdldFBhcmFtZXRlciIsImF0dGFjaE9wZW4iLCJzaG93Q29ubmVjdGlvbkxvc3REaWFsb2ciLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImxvc3RPZkNvbm5lY3Rpb25UZXh0IiwiZ2V0VGV4dCIsIk1lc3NhZ2VCb3giLCJ3YXJuaW5nIiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsImF0dGFjaEVycm9yIiwiaW5jbHVkZXMiLCJFUlJPUiIsImF0dGFjaENsb3NlIiwiZXZ0IiwiQ0xPU0VEIiwiYnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJhY3Rpb24iLCJjb250ZW50IiwidHJpZ2dlcmVkQWN0aW9uTmFtZSIsInJlZnJlc2hMaXN0QmluZGluZyIsInJlcXVlc3RlZFByb3BlcnRpZXMiLCJzZW5kIiwiY2xpZW50QWN0aW9uIiwiY2xpZW50Q29udGVudCIsImNsaWVudFRyaWdnZXJlZEFjdGlvbk5hbWUiLCJjbGllbnRSZWZyZXNoTGlzdEJpbmRpbmciLCJjbGllbnRSZXF1ZXN0ZWRQcm9wZXJ0aWVzIiwiQWN0aXZpdHkiLCJBY3RpdmF0ZSIsIkRpc2NhcmQiLCJDTE9TSU5HIiwiY2xvc2UiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFjdGl2aXR5QmFzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBVc2VyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBXZWJTb2NrZXRQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9XZWJTb2NrZXRcIjtcbmltcG9ydCB7IENoYW5uZWxUeXBlLCBXRUJTT0NLRVRfU1RBVFVTLCBjcmVhdGVXZWJTb2NrZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9XZWJTb2NrZXRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIFNhcFBjcFdlYlNvY2tldCBmcm9tIFwic2FwL3VpL2NvcmUvd3MvU2FwUGNwV2ViU29ja2V0XCI7XG5pbXBvcnQgdHlwZSB7IFdlYlNvY2tldCRDbG9zZUV2ZW50LCBXZWJTb2NrZXQkTWVzc2FnZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3dzL1dlYlNvY2tldFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxuY29uc3QgQ09MTEFCT1JBVElPTiA9IFwiL2NvbGxhYm9yYXRpb25cIjtcbmNvbnN0IENPTk5FQ1RJT04gPSBcIi9jb2xsYWJvcmF0aW9uL2Nvbm5lY3Rpb25cIjtcbmNvbnN0IENVUlJFTlREUkFGVElEID0gXCIvY29sbGFib3JhdGlvbi9EcmFmdElEXCI7XG5jb25zdCBXRUJTT0NLRVRTVEFUVVMgPSBcIi9jb2xsYWJvcmF0aW9uL3dlYnNvY2tldF9zdGF0dXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sbGFib3JhdGlvbkNvbm5lY3RlZChpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiBib29sZWFuIHtcblx0cmV0dXJuIGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoV0VCU09DS0VUU1RBVFVTKSA9PT0gV0VCU09DS0VUX1NUQVRVUy5DT05ORUNURUQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGNvbGxhYm9yYXRpb24gd2Vic29ja2V0LlxuICogQHBhcmFtIHVzZXJcbiAqIEBwYXJhbSBkcmFmdFVVSURcbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG4gKiBAcGFyYW0gcmVjZWl2ZUNhbGxiYWNrXG4gKiBAcGFyYW0gdmlld1xuICogQHBhcmFtIHNlbmRVc2VySW5mb1xuICogQHJldHVybnMgVHJ1ZSBpZiBhIG5ldyB3ZWJzb2NrZXQgd2FzIGNyZWF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVDb2xsYWJvcmF0aW9uKFxuXHR1c2VyOiBVc2VyLFxuXHRkcmFmdFVVSUQ6IHN0cmluZyxcblx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRyZWNlaXZlQ2FsbGJhY2s6IChfOiBNZXNzYWdlKSA9PiB2b2lkLFxuXHR2aWV3OiBGRVZpZXcsXG5cdHNlbmRVc2VySW5mbyA9IGZhbHNlXG4pOiBib29sZWFuIHtcblx0aWYgKGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQ09OTkVDVElPTikpIHtcblx0XHQvLyBBIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBlc3RhYmxpc2hlZFxuXHRcdGlmIChpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KENVUlJFTlREUkFGVElEKSA9PT0gZHJhZnRVVUlEKSB7XG5cdFx0XHQvLyBDb25uZWN0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBzYW1lIGRyYWZ0IC0+IG5vdGhpbmcgdG8gZG9cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGhlcmUgd2FzIGEgY29ubmVjdGlvbiB0byBhbm90aGVyIGRyYWZ0IC0+IHdlIGNsb3NlIGl0IGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmVcblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gaXRlbXMgaW4gRkNMXG5cdFx0XHRlbmRDb2xsYWJvcmF0aW9uKGludGVybmFsTW9kZWwpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFjdGl2ZVVzZXJzOiBVc2VyW10gPSBbdXNlcl07XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQ09MTEFCT1JBVElPTiwgeyBhY3RpdmVVc2VyczogYWN0aXZlVXNlcnMsIGFjdGl2aXRpZXM6IHt9IH0pO1xuXG5cdGNvbnN0IGFkZGl0aW9uYWxQYXJhbWV0ZXJzOiBXZWJTb2NrZXRQYXJhbWV0ZXIgPSB7XG5cdFx0ZHJhZnQ6IGRyYWZ0VVVJRFxuXHR9O1xuXHRpZiAoc2VuZFVzZXJJbmZvIHx8IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KFwidXNlRkxQVXNlclwiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHQvLyB1c2VkIGZvciBpbnRlcm5hbCB0ZXN0aW5nXG5cdFx0YWRkaXRpb25hbFBhcmFtZXRlcnNbXCJ1c2VySURcIl0gPSB1c2VyLmlkO1xuXHRcdGFkZGl0aW9uYWxQYXJhbWV0ZXJzW1widXNlck5hbWVcIl0gPSB1c2VyLmluaXRpYWxOYW1lID8/IFwiXCI7XG5cdH1cblxuXHRjb25zdCB3ZWJTb2NrZXQgPSBjcmVhdGVXZWJTb2NrZXQoQ2hhbm5lbFR5cGUuQ29sbGFib3JhdGlvbkRyYWZ0LCB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRBcHBDb21wb25lbnQoKSwgYWRkaXRpb25hbFBhcmFtZXRlcnMpO1xuXG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoV0VCU09DS0VUU1RBVFVTLCBXRUJTT0NLRVRfU1RBVFVTLkNPTk5FQ1RJTkcpO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KENPTk5FQ1RJT04sIHdlYlNvY2tldCk7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQ1VSUkVOVERSQUZUSUQsIGRyYWZ0VVVJRCk7XG5cblx0d2ViU29ja2V0LmF0dGFjaE1lc3NhZ2UoZnVuY3Rpb24gKGV2ZW50OiBXZWJTb2NrZXQkTWVzc2FnZUV2ZW50ICYgRXZlbnQ8eyBwY3BGaWVsZHM/OiBNZXNzYWdlIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcInBjcEZpZWxkc1wiKTtcblx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0cmVjZWl2ZUNhbGxiYWNrKG1lc3NhZ2UpO1xuXHRcdH1cblx0fSk7XG5cblx0d2ViU29ja2V0LmF0dGFjaE9wZW4oZnVuY3Rpb24gKCkge1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoV0VCU09DS0VUU1RBVFVTLCBXRUJTT0NLRVRfU1RBVFVTLkNPTk5FQ1RFRCk7XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIHNob3dDb25uZWN0aW9uTG9zdERpYWxvZygpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh2aWV3KTtcblx0XHRjb25zdCBsb3N0T2ZDb25uZWN0aW9uVGV4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0NPTk5FQ1RJT05fTE9TVFwiKTtcblxuXHRcdE1lc3NhZ2VCb3gud2FybmluZyhsb3N0T2ZDb25uZWN0aW9uVGV4dCwge1xuXHRcdFx0YWN0aW9uczogW01lc3NhZ2VCb3guQWN0aW9uLk9LXSxcblx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IE1lc3NhZ2VCb3guQWN0aW9uLk9LXG5cdFx0fSk7XG5cdH1cblxuXHR3ZWJTb2NrZXQuYXR0YWNoRXJyb3IoZnVuY3Rpb24gKCkge1xuXHRcdGlmIChbV0VCU09DS0VUX1NUQVRVUy5DT05ORUNUSU5HLCBXRUJTT0NLRVRfU1RBVFVTLkNPTk5FQ1RFRF0uaW5jbHVkZXMoaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShXRUJTT0NLRVRTVEFUVVMpKSkge1xuXHRcdFx0c2hvd0Nvbm5lY3Rpb25Mb3N0RGlhbG9nKCk7XG5cdFx0fVxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoV0VCU09DS0VUU1RBVFVTLCBXRUJTT0NLRVRfU1RBVFVTLkVSUk9SKTtcblx0fSk7XG5cblx0d2ViU29ja2V0LmF0dGFjaENsb3NlKGZ1bmN0aW9uIChldnQ6IFdlYlNvY2tldCRDbG9zZUV2ZW50KSB7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShXRUJTT0NLRVRTVEFUVVMsIFdFQlNPQ0tFVF9TVEFUVVMuQ0xPU0VEKTtcblx0XHQvLyBSRkMgNjQ1NSBkZWZpbmVzIHRoZSBzdGF0dXMgY29kZXMgd2hlbiBjbG9zaW5nIGFuIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24gOiAgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy40XG5cdFx0Ly8gc3RhdHVzIGNvZGUgMTAwMCBtZWFucyBub3JtYWwgY2xvc3VyZVxuXHRcdGlmICgoZXZ0LmdldFBhcmFtZXRlcihcImNvZGVcIikgYXMgbnVtYmVyIHwgdW5kZWZpbmVkKSAhPT0gMTAwMCkge1xuXHRcdFx0c2hvd0Nvbm5lY3Rpb25Mb3N0RGlhbG9nKCk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKFxuXHRhY3Rpb246IEFjdGl2aXR5LFxuXHRjb250ZW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCxcblx0dHJpZ2dlcmVkQWN0aW9uTmFtZT86IHN0cmluZyxcblx0cmVmcmVzaExpc3RCaW5kaW5nPzogYm9vbGVhbixcblx0cmVxdWVzdGVkUHJvcGVydGllcz86IHN0cmluZ1xuKTogdm9pZCB7XG5cdGlmIChpc0NvbGxhYm9yYXRpb25Db25uZWN0ZWQoaW50ZXJuYWxNb2RlbCkpIHtcblx0XHRjb25zdCB3ZWJTb2NrZXQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KENPTk5FQ1RJT04pIGFzIFNhcFBjcFdlYlNvY2tldDtcblxuXHRcdHdlYlNvY2tldC5zZW5kKFwiXCIsIHtcblx0XHRcdGNsaWVudEFjdGlvbjogYWN0aW9uLFxuXHRcdFx0Y2xpZW50Q29udGVudDogY29udGVudCxcblx0XHRcdGNsaWVudFRyaWdnZXJlZEFjdGlvbk5hbWU6IHRyaWdnZXJlZEFjdGlvbk5hbWUsXG5cdFx0XHRjbGllbnRSZWZyZXNoTGlzdEJpbmRpbmc6IHJlZnJlc2hMaXN0QmluZGluZyxcblx0XHRcdGNsaWVudFJlcXVlc3RlZFByb3BlcnRpZXM6IHJlcXVlc3RlZFByb3BlcnRpZXNcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gPT09IEFjdGl2aXR5LkFjdGl2YXRlIHx8IGFjdGlvbiA9PT0gQWN0aXZpdHkuRGlzY2FyZCkge1xuXHRcdFx0ZW5kQ29sbGFib3JhdGlvbihpbnRlcm5hbE1vZGVsKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZENvbGxhYm9yYXRpb24oaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdGNvbnN0IHdlYlNvY2tldCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQ09OTkVDVElPTikgYXMgU2FwUGNwV2ViU29ja2V0IHwgdW5kZWZpbmVkO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KENPTExBQk9SQVRJT04sIHt9KTtcblx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShXRUJTT0NLRVRTVEFUVVMsIFdFQlNPQ0tFVF9TVEFUVVMuQ0xPU0lORyk7XG5cdHdlYlNvY2tldD8uY2xvc2UoKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQVlBLE1BQU1BLGFBQWEsR0FBRyxnQkFBZ0I7RUFDdEMsTUFBTUMsVUFBVSxHQUFHLDJCQUEyQjtFQUM5QyxNQUFNQyxjQUFjLEdBQUcsd0JBQXdCO0VBQy9DLE1BQU1DLGVBQWUsR0FBRyxpQ0FBaUM7RUFFbEQsU0FBU0Msd0JBQXdCQSxDQUFDQyxhQUF3QixFQUFXO0lBQzNFLE9BQU9BLGFBQWEsQ0FBQ0MsV0FBVyxDQUFDSCxlQUFlLENBQUMsS0FBS0ksZ0JBQWdCLENBQUNDLFNBQVM7RUFDakY7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQUMsUUFBQSxDQUFBTCx3QkFBQSxHQUFBQSx3QkFBQTtFQVVPLFNBQVNNLHVCQUF1QkEsQ0FDdENDLElBQVUsRUFDVkMsU0FBaUIsRUFDakJQLGFBQXdCLEVBQ3hCUSxlQUFxQyxFQUNyQ0MsSUFBWSxFQUVGO0lBQUEsSUFEVkMsWUFBWSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBRXBCLElBQUlY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QVVDLEdBQXlCLEVBQUU7TUFDMUR0RCxhQUFhLENBQUNnQixXQUFXLENBQUNsQixlQUFlLEVBQUVJLGdCQUFnQixDQUFDcUQsTUFBTSxDQUFDO01BQ25FO01BQ0E7TUFDQSxJQUFLRCxHQUFHLENBQUNqQixZQUFZLENBQUMsTUFBTSxDQUFDLEtBQTRCLElBQUksRUFBRTtRQUM5REUsd0JBQXdCLENBQUMsQ0FBQztNQUMzQjtJQUNELENBQUMsQ0FBQztJQUVGLE9BQU8sSUFBSTtFQUNaO0VBQUNuQyxRQUFBLENBQUFDLHVCQUFBLEdBQUFBLHVCQUFBO0VBRU0sU0FBU21ELDZCQUE2QkEsQ0FDNUNDLE1BQWdCLEVBQ2hCQyxPQUEyQixFQUMzQjFELGFBQXdCLEVBQ3hCMkQsbUJBQTRCLEVBQzVCQyxrQkFBNEIsRUFDNUJDLG1CQUE0QixFQUNyQjtJQUNQLElBQUk5RCx3QkFBd0IsQ0FBQ0MsYUFBYSxDQUFDLEVBQUU7TUFDNUMsTUFBTTJCLFNBQVMsR0FBRzNCLGFBQWEsQ0FBQ0MsV0FBVyxDQUFDTCxVQUFVLENBQW9CO01BRTFFK0IsU0FBUyxDQUFDbUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNsQkMsWUFBWSxFQUFFTixNQUFNO1FBQ3BCTyxhQUFhLEVBQUVOLE9BQU87UUFDdEJPLHlCQUF5QixFQUFFTixtQkFBbUI7UUFDOUNPLHdCQUF3QixFQUFFTixrQkFBa0I7UUFDNUNPLHlCQUF5QixFQUFFTjtNQUM1QixDQUFDLENBQUM7TUFFRixJQUFJSixNQUFNLEtBQUtXLFFBQVEsQ0FBQ0MsUUFBUSxJQUFJWixNQUFNLEtBQUtXLFFBQVEsQ0FBQ0UsT0FBTyxFQUFFO1FBQ2hFeEQsZ0JBQWdCLENBQUNkLGFBQWEsQ0FBQztNQUNoQztJQUNEO0VBQ0Q7RUFBQ0ksUUFBQSxDQUFBb0QsNkJBQUEsR0FBQUEsNkJBQUE7RUFFTSxTQUFTMUMsZ0JBQWdCQSxDQUFDZCxhQUF3QixFQUFRO0lBQ2hFLE1BQU0yQixTQUFTLEdBQUczQixhQUFhLENBQUNDLFdBQVcsQ0FBQ0wsVUFBVSxDQUFnQztJQUN0RkksYUFBYSxDQUFDZ0IsV0FBVyxDQUFDckIsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDSyxhQUFhLENBQUNnQixXQUFXLENBQUNsQixlQUFlLEVBQUVJLGdCQUFnQixDQUFDcUUsT0FBTyxDQUFDO0lBQ3BFNUMsU0FBUyxFQUFFNkMsS0FBSyxDQUFDLENBQUM7RUFDbkI7RUFBQ3BFLFFBQUEsQ0FBQVUsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFBQSxPQUFBVixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -61,7 +61,7 @@ export function initializeCollaboration(
|
|
|
61
61
|
additionalParameters["userName"] = user.initialName ?? "";
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
const webSocket = createWebSocket(ChannelType.CollaborationDraft, view.
|
|
64
|
+
const webSocket = createWebSocket(ChannelType.CollaborationDraft, view.getController().getAppComponent(), additionalParameters);
|
|
65
65
|
|
|
66
66
|
internalModel.setProperty(WEBSOCKETSTATUS, WEBSOCKET_STATUS.CONNECTING);
|
|
67
67
|
internalModel.setProperty(CONNECTION, webSocket);
|