@sapui5/sap.fe.core 1.134.0 → 1.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
|
@@ -54,7 +54,7 @@ T_OP_TITLE_OP=\u7269\u4EF6\u9801\u9762
|
|
|
54
54
|
|
|
55
55
|
C_TRANSACTION_HELPER_OBJECT_CREATED=\u5DF2\u5EFA\u7ACB\u7269\u4EF6
|
|
56
56
|
|
|
57
|
-
C_TRANSACTION_HELPER_OBJECT_SAVED=\u5DF2\u5132\u5B58\u7269\u4EF6
|
|
57
|
+
C_TRANSACTION_HELPER_OBJECT_SAVED=\u5DF2\u5132\u5B58\u7269\u4EF6
|
|
58
58
|
|
|
59
59
|
C_DRAFT_EDIT_STATE_DRAFT_ALL_FILTER=\u5168\u90E8
|
|
60
60
|
|
|
@@ -184,6 +184,8 @@ C_COLLABORATIONDRAFT_USER_NO_CHANGES_MADE=\u672A\u9032\u884C\u66F4\u6539
|
|
|
184
184
|
|
|
185
185
|
C_COLLABORATIONDRAFT_CONNECTION_LOST=\u7531\u65BC\u9023\u7DDA\u554F\u984C\uFF0C\u56E0\u6B64\u76EE\u524D\u5354\u540C\u8349\u7A3F\u7121\u6CD5\u540C\u6B65\u5316\u3002\n \u60A8\u4ECD\u53EF\u91DD\u5C0D\u6B64\u7269\u4EF6\u9032\u884C\u66F4\u6539\uFF0C\u4F46\u5176\u4ED6\u4F7F\u7528\u8005\u770B\u4E0D\u5230\u60A8\u7684\u66F4\u6539\u5167\u5BB9\uFF0C\u53CD\u4E4B\u4EA6\u7136\u3002\n \u60A8\u53EF\u5617\u8A66\u900F\u904E\u91CD\u65B0\u6574\u7406\u700F\u89BD\u5668\u4EE5\u91CD\u65B0\u5EFA\u7ACB\u5354\u540C\u8349\u7A3F\u3002
|
|
186
186
|
|
|
187
|
+
C_SIDEEFFECT_CONNECTION_LOST=\u7531\u65BC\u9023\u7DDA\u554F\u984C\uFF0C\u7121\u6CD5\u6536\u5230\u4EE5\u4E8B\u4EF6\u70BA\u5C0E\u5411\u7684\u526F\u4F5C\u7528\u3002\n \u60A8\u4ECD\u53EF\u91DD\u5C0D\u6B64\u9801\u9762\u9032\u884C\u66F4\u6539\uFF0C\u4F46\u53EF\u80FD\u7121\u6CD5\u986F\u793A\u60A8\u7684\u66F4\u6539\u5167\u5BB9\uFF0C\u4EE5\u53CA\u4F86\u81EA\u4F3A\u670D\u5668\u7684\u66F4\u65B0\u5167\u5BB9\u3002\n \u60A8\u53EF\u5617\u8A66\u900F\u904E\u91CD\u65B0\u6574\u7406\u700F\u89BD\u5668\u4EE5\u91CD\u65B0\u5EFA\u7ACB\u9023\u7DDA\u3002
|
|
188
|
+
|
|
187
189
|
C_COLLABORATIONDRAFT_DISCARD_TABLE_TOOLBAR_TITLE=\u555F\u7528\u4E2D\u5354\u540C\u5408\u4F5C\u8005
|
|
188
190
|
|
|
189
191
|
C_COLLABORATIONDRAFT_DISCARD_TABLE_USER_COLUMN=\u4F7F\u7528\u8005
|
|
@@ -242,9 +244,9 @@ M_CHANGESET_CANCEL_MESSAGES=\u60A8\u5DF2\u53D6\u6D88\u6B64\u52D5\u4F5C\uFF0C\u76
|
|
|
242
244
|
|
|
243
245
|
T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_GENERAL=\u4E00\u822C
|
|
244
246
|
|
|
245
|
-
T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_OTHER_PAGES=\u5176\u4ED6\u9801\u9762
|
|
247
|
+
T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_OTHER_PAGES=\u5176\u4ED6\u9801\u9762
|
|
246
248
|
|
|
247
|
-
T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_CURRENT_PAGE=\u76EE\u524D\u9801\u9762
|
|
249
|
+
T_MESSAGE_BUTTON_SAPFE_MESSAGE_GROUP_CURRENT_PAGE=\u76EE\u524D\u9801\u9762
|
|
248
250
|
|
|
249
251
|
T_MESSAGE_GROUP_TITLE_TABLE_DENOMINATOR=\u8868\u683C
|
|
250
252
|
|
|
@@ -511,3 +513,22 @@ C_NEW_ELEMENT_NOT_DISPLAYED=\u5DF2\u5EFA\u7ACB\u65B0\u5143\u7D20\uFF0C\u4F46\u75
|
|
|
511
513
|
C_UNAVAILABLE_SERVER_MESSAGE_SECONDS=\u65BC {0} \u79D2\u5F8C\u81EA\u52D5\u91CD\u8A66\u3002
|
|
512
514
|
|
|
513
515
|
C_UNAVAILABLE_SERVER_MESSAGE_MINUTES_SECONDS=\u65BC {0} \u5206 {1} \u79D2\u5F8C\u81EA\u52D5\u91CD\u8A66\u3002
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
C_INLINE_EDIT_SAVED=\u5DF2\u5132\u5B58\u60A8\u7684\u66F4\u6539\u5167\u5BB9\u3002
|
|
519
|
+
|
|
520
|
+
C_INLINE_EDIT_DIALOG_SAVE=\u5132\u5B58
|
|
521
|
+
|
|
522
|
+
C_INLINE_EDIT_DIALOG_DISCARD=\u6368\u68C4
|
|
523
|
+
|
|
524
|
+
C_INLINE_EDIT_BEFOREACTION_MESSAGE=\u57F7\u884C\u52D5\u4F5C\u524D\uFF0C\u60A8\u5FC5\u9808\u5148\u5132\u5B58\u6216\u6368\u68C4\u66F4\u6539\u5167\u5BB9\u3002
|
|
525
|
+
|
|
526
|
+
C_INLINE_EDIT_BEFORENAVIGATION_SAVE_RBL=\u5132\u5B58
|
|
527
|
+
|
|
528
|
+
C_INLINE_EDIT_BEFORENAVIGATION_SAVE_TOL=\u66F4\u6539\u5167\u5BB9\u5C07\u6703\u5132\u5B58\u3002
|
|
529
|
+
|
|
530
|
+
C_INLINE_EDIT_BEFORENAVIGATION_DISCARD_RBL=\u6368\u68C4\u66F4\u6539\u5167\u5BB9
|
|
531
|
+
|
|
532
|
+
C_INLINE_EDIT_BEFORENAVIGATION_DISCARD_TOL=\u66F4\u6539\u5167\u5BB9\u5C07\u6703\u907A\u5931\u3002
|
|
533
|
+
|
|
534
|
+
C_INLINE_EDIT_BEFORENAVIGATION_MESSAGE=\u60A8\u5DF2\u66F4\u6539\u81F3\u5C11\u4E00\u500B\u6B04\u4F4D\u3002\n\u60A8\u8981\u57F7\u884C\u4EC0\u9EBC\u52D5\u4F5C\uFF1F
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/f/library", "sap/fe/base/ClassSupport", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ManifestHelper", "sap/m/Button", "sap/m/FlexBox", "sap/m/IllustratedMessage", "sap/m/Page", "../CommonUtils", "./RootViewBaseController"], function (Log, FlexibleColumnLayoutSemanticHelper, fLibrary, ClassSupport, ViewState, KeepAliveHelper, ManifestHelper, Button, FlexBox, IllustratedMessage, Page, CommonUtils, BaseController) {
|
|
6
6
|
"use strict";
|
|
@@ -261,7 +261,7 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
|
|
|
261
261
|
const illustratedMessage = new IllustratedMessage({
|
|
262
262
|
title: errorMessage,
|
|
263
263
|
description: parameters.description ?? "",
|
|
264
|
-
illustrationType: parameters.errorType ? `sapIllus-${parameters.errorType}` : "sapIllus-
|
|
264
|
+
illustrationType: parameters.errorType ? `sapIllus-${parameters.errorType}` : "sapIllus-UnableToLoad"
|
|
265
265
|
});
|
|
266
266
|
messagePage.removeAllContent();
|
|
267
267
|
messagePage.addContent(header);
|
|
@@ -588,10 +588,14 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
|
|
|
588
588
|
// the URL has been manually modified
|
|
589
589
|
const aTargets = oEvent.getParameter("config")?.target;
|
|
590
590
|
sLayout = this._correctLayoutForTargets(sLayout, aTargets);
|
|
591
|
+
// we store a first time the layout for the updateUIStateForView to be done with the correct number of columns : SNOW DINC0449277
|
|
592
|
+
if (sLayout) {
|
|
593
|
+
this.getFclControl().setLayout(sLayout);
|
|
594
|
+
}
|
|
591
595
|
await this.isWritingFCLState;
|
|
592
596
|
sLayout = await this.getStoredLayout(sLayout);
|
|
593
597
|
|
|
594
|
-
// Update the layout of the FlexibleColumnLayout
|
|
598
|
+
// Update the layout of the FlexibleColumnLayout.
|
|
595
599
|
if (sLayout) {
|
|
596
600
|
this.getFclControl().setLayout(sLayout);
|
|
597
601
|
}
|
|
@@ -833,11 +837,11 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
|
|
|
833
837
|
}
|
|
834
838
|
return false;
|
|
835
839
|
};
|
|
836
|
-
_proto._setShellMenuTitle = async function _setShellMenuTitle(oAppComponent, sTitle, sAppTitle) {
|
|
840
|
+
_proto._setShellMenuTitle = async function _setShellMenuTitle(oAppComponent, sTitle, sAppTitle, browerTitle) {
|
|
837
841
|
if (this.getHelper().getCurrentUIState().isFullScreen !== true) {
|
|
838
|
-
await oAppComponent.getShellServices().setTitle(sAppTitle);
|
|
842
|
+
await oAppComponent.getShellServices().setTitle(sAppTitle, browerTitle);
|
|
839
843
|
} else {
|
|
840
|
-
await oAppComponent.getShellServices().setTitle(sTitle);
|
|
844
|
+
await oAppComponent.getShellServices().setTitle(sTitle, browerTitle);
|
|
841
845
|
}
|
|
842
846
|
}
|
|
843
847
|
|
|
@@ -944,4 +948,4 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
|
|
|
944
948
|
}), _class2)) || _class);
|
|
945
949
|
return FclController;
|
|
946
950
|
}, false);
|
|
947
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXlvdXRUeXBlIiwiZkxpYnJhcnkiLCJGY2xDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlZpZXdTdGF0ZSIsIm92ZXJyaWRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0QWxsVmlzaWJsZVZpZXdzIiwiZm9yRWFjaCIsIm9DaGlsZFZpZXciLCJwQ2hpbGRWaWV3IiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwiYWRhcHRTdGF0ZUNvbnRyb2xzIiwiYVN0YXRlQ29udHJvbHMiLCJvblJlc3RvcmUiLCJmY2xDb250cm9sbGVyIiwiYXBwQ29udGVudENvbnRhaW5lciIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJpbnRlcm5hbE1vZGVsIiwiZ2V0TW9kZWwiLCJwYWdlcyIsImdldFByb3BlcnR5IiwiY29tcG9uZW50SWQiLCJzZXRQcm9wZXJ0eSIsIm9uQ29udGFpbmVyUmVhZHkiLCJvblN1c3BlbmQiLCJmY2xDb250cm9sIiwiZ2V0RmNsQ29udHJvbCIsImJlZ2luQ29sdW1uUGFnZXMiLCJnZXRCZWdpbkNvbHVtblBhZ2VzIiwibWlkQ29sdW1uUGFnZXMiLCJnZXRNaWRDb2x1bW5QYWdlcyIsImVuZENvbHVtblBhZ2VzIiwiZ2V0RW5kQ29sdW1uUGFnZXMiLCJjb25jYXQiLCJnZXRWaWV3c0Zyb21QYWdlcyIsInZpZXciLCJjb250cm9sbGVyIiwidmlld1N0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CYXNlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIiwiX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybiIsIm1lc3NhZ2VQYWdlcyIsInVuZGVmaW5lZCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiX2ludGVybmFsSW5pdCIsInNldENvbHVtbkRpc3RyaWJ1dGlvbk1vZGVsIiwibWFuYWdlRGF0YVJlY2VpdmVkIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJwYXRoIiwidGFyZ2V0ZWRWaWV3IiwiZmluZCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UGF0aCIsImlzS2VlcEFsaXZlIiwiX3JvdXRpbmciLCJvbkRhdGFSZWNlaXZlZCIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJhdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQiLCJfdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiIsIm9uQmVmb3JlUm91dGVNYXRjaGVkIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwib25Sb3V0ZU1hdGNoZWQiLCJhdHRhY2hTdGF0ZUNoYW5nZSIsIl9zYXZlTGF5b3V0IiwiX29Sb3V0ZXJQcm94eSIsInNDdXJyZW50Um91dGVOYW1lIiwic0N1cnJlbnRBcmd1bWVudHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib0RhdGFNb2RlbCIsImF0dGFjaEV2ZW50IiwiYmluZCIsImdldFJvdXRlclByb3h5IiwiX29GQ0xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0Iiwicm91dGluZyIsImNvbmZpZyIsImZsZXhpYmxlQ29sdW1uTGF5b3V0Iiwib0ZDTE1hbmlmZXN0Q29uZmlnIiwiZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUiLCJkZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlIiwibGltaXRGQ0xUb1R3b0NvbHVtbnMiLCJjb250cm9sQWdncmVnYXRpb24iLCJkZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uIiwiX2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbiIsIl9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24iLCJvblN0YXRlQ2hhbmdlZCIsImF0dGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUiLCJnZXRGY2xDb25maWciLCJvRXZlbnQiLCJzUHJldmlvdXNMYXlvdXQiLCJnZXRQYXJhbWV0ZXJzIiwibGF5b3V0IiwiYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkIiwicmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCIsImF0dGFjaEV2ZW50T25jZSIsInZpZXdzIiwicmlnaHRNb3N0Vmlld0N1cnJlbnQiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsInZpZXdMZXZlbEJlZm9yZSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwidmlld0xldmVsQWZ0ZXIiLCJvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24iLCJnZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uIiwib25FeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwiZGV0YWNoU3RhdGVDaGFuZ2UiLCJkZXRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlIiwiQmFzZUNvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZXJyb3JNZXNzYWdlIiwicGFyYW1ldGVycyIsImZjbExldmVsIiwicmVqZWN0IiwibGVnYWN5UGFyYW1ldGVycyIsIkZDTExldmVsIiwibWVzc2FnZVBhZ2UiLCJQYWdlIiwic2hvd0hlYWRlciIsImFkZEJlZ2luQ29sdW1uUGFnZSIsImFkZE1pZENvbHVtblBhZ2UiLCJhZGRFbmRDb2x1bW5QYWdlIiwiZnJvbVBhZ2UiLCJoZWFkZXIiLCJGbGV4Qm94IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJCdXR0b24iLCJ0eXBlIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsImhhbmRsZVNoZWxsQmFjayIsInRvIiwiZ2V0SWQiLCJ3aW5kb3ciLCJoaXN0b3J5IiwiYmFjayIsImFkZFN0eWxlQ2xhc3MiLCJpbGx1c3RyYXRlZE1lc3NhZ2UiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiaWxsdXN0cmF0aW9uVHlwZSIsImVycm9yVHlwZSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50IiwiYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSIsImdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UiLCJnZXRDdXJyZW50TWlkQ29sdW1uUGFnZSIsImdldEN1cnJlbnRFbmRDb2x1bW5QYWdlIiwiQ29tbW9uVXRpbHMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJmcm9tVmlldyIsIl9ldmVudCIsImlzQSIsInBhZ2VSZWFkeSIsImZvcmNlUGFnZVJlYWR5IiwiZSIsIkxvZyIsImluZm8iLCJvTWFuaWZlc3QiLCJvVGFyZ2V0cyIsInRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwic1RhcmdldE5hbWUiLCJvVGFyZ2V0IiwiYWdncmVnYXRpb24iLCJwYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJhUm91dGVzIiwicm91dGVzIiwicm91dGUiLCJ0YXJnZXQiLCJnZXRDdXJyZW50QXJndW1lbnQiLCJnZXRDdXJyZW50Um91dGVOYW1lIiwiZ2V0VGFyZ2V0QWdncmVnYXRpb24iLCJzUm91dGVOYW1lIiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiYVZpZXdzIiwib0FkZGl0aW9uYWxWaWV3IiwiaW5jbHVkZXMiLCJpbmRleCIsIm9WaWV3Iiwib1ByZXZpb3VzVmlldyIsImJpbmRpbmdDb250ZXh0IiwicHJldmlvdXNWaWV3Q29udHJvbGxlciIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsImJJc05hdmlnYXRpb25BcnJvdyIsIl9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMiLCJuYXZUbyIsImdldFJpZ2h0bW9zdFZpZXciLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJvRmNsIiwiZ2V0U291cmNlIiwib1BhZ2VzIiwib1BhZ2UiLCJvQnJlYWRDcnVtYnMiLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3Q29sdW1uIiwic0xheW91dCIsImJTaG93U2hhcmVJY29uIiwiX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkiLCJoaWRkZW5EcmFmdCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiYkVkaXRCdXR0b25WaXNpYmxlIiwiX3VwZGF0ZVNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxpdHkiLCJiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGUiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIm9VSVN0YXRlIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJvRmNsQ29sTmFtZSIsImdldExheW91dCIsInNldE1vZGVsIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiYWN0aW9uQnV0dG9uc0luZm8iLCJtaWRDb2x1bW4iLCJlbmRDb2x1bW4iLCJmdWxsU2NyZWVuIiwiZXhpdEZ1bGxTY3JlZW4iLCJjbG9zZUNvbHVtbiIsImJlZ2luQ29sdW1uIiwib0FjdGlvbkJ1dHRvbkluZm9zIiwiYXNzaWduIiwic3dpdGNoVmlzaWJsZSIsInN3aXRjaEljb24iLCJpc0Z1bGxTY3JlZW4iLCJjbG9zZVZpc2libGUiLCJvUXVlcnlQYXJhbXMiLCJvTmV4dFVJU3RhdGUiLCJnZXROZXh0VUlTdGF0ZSIsImFUYXJnZXRzIiwiX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzIiwiaXNXcml0aW5nRkNMU3RhdGUiLCJnZXRTdG9yZWRMYXlvdXQiLCJzZXRMYXlvdXQiLCJGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIiwiZ2V0SW5zdGFuY2VGb3IiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic0hhc2giLCJzUHJvcG9zZWRMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIm9Sb3V0ZSIsImdldFJvdXRlQnlIYXNoIiwiZ2V0UGF0dGVybiIsImFsbEFsbG93ZWRMYXlvdXRzIiwiaXNBcnJheSIsImFMYXlvdXRzIiwidG9TdHJpbmciLCJkZWZhdWx0TGF5b3V0IiwiX2dldERlZmF1bHRMYXlvdXQiLCJzVGFyZ2V0QWdncmVnYXRpb24iLCJnZXRSb3V0ZVRhcmdldE5hbWUiLCJPbmVDb2x1bW4iLCJNaWRDb2x1bW5GdWxsU2NyZWVuIiwiRW5kQ29sdW1uRnVsbFNjcmVlbiIsIm51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZSIsImdldEluc3RhbmNlZFZpZXdzIiwiY29tcG9uZW50Q29udGFpbmVycyIsImdldFZpc2libGVWaWV3cyIsImZvckxheW91dCIsInZpc2libGVWaWV3cyIsImFkZFZpZXciLCJwYWdlIiwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQiLCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZCIsIlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkIiwiVHdvQ29sdW1uc01pZEV4cGFuZGVkIiwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW4iLCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuIiwiZXJyb3IiLCJfZ2V0QWxsVmlld3MiLCJhbGxWaWV3cyIsImxheW91dFdoZW5FeGl0RnVsbFNjcmVlbiIsInN0YXJ0c1dpdGgiLCJhUmVzdG9yZVByb21pc2VzIiwicmVkdWNlIiwiYVByb21pc2VzIiwib1RhcmdldFZpZXciLCJLZWVwQWxpdmVIZWxwZXIiLCJyZXN0b3JlVmlldyIsImFsbCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJwb3AiLCJpc0NvbnRleHRVc2VkSW5QYWdlcyIsIm9Db250ZXh0IiwiYUFsbFZpc2libGVWaWV3cyIsIl9zZXRTaGVsbE1lbnVUaXRsZSIsInNUaXRsZSIsInNBcHBUaXRsZSIsInNldFRpdGxlIiwiZ2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSIsInNoZWxsU2VydmljZXMiLCJlbXB0eUZDTFN0YXRlIiwiZGVmYXVsdExheW91dHMiLCJjb2x1bW5zRGlzdHJpYnV0aW9uIiwiZGVza3RvcCIsInRhYmxldCIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YSIsInNldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEiLCJmY2xTdGF0ZSIsInNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YSIsIm1vZGVsIiwib25Db2x1bW5zRGlzdHJpYnV0aW9uQ2hhbmdlIiwibWVkaWEiLCJjb2x1bW5zU2l6ZXMiLCJuYkNvbHVtbnNEaXNwbGF5ZWQiLCJnZXROdW1iZXJPZkNvbHVtbnNGcm9tTGF5b3V0IiwiZXhlYyIsInByb3Bvc2VkTGF5b3V0IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGY2wuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEZsZXhpYmxlQ29sdW1uTGF5b3V0IGZyb20gXCJzYXAvZi9GbGV4aWJsZUNvbHVtbkxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBGbGV4aWJsZUNvbHVtbkxheW91dCRBZnRlckVuZENvbHVtbk5hdmlnYXRlRXZlbnQsIEZsZXhpYmxlQ29sdW1uTGF5b3V0JFN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgQ29sdW1uc05hdmlnYXRpb25BY3Rpb25zLCBOYXZpZ2F0aW9uQWN0aW9uc1RhcmdldHMgfSBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlclwiO1xuaW1wb3J0IEZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXIgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXJcIjtcbmltcG9ydCBmTGlicmFyeSBmcm9tIFwic2FwL2YvbGlicmFyeVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IFBhZ2UgZnJvbSBcInNhcC9tL1BhZ2VcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuXG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRPYmplY3QkTW9kZWxDb250ZXh0Q2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBSb3V0ZSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIkQmVmb3JlUm91dGVNYXRjaGVkRXZlbnQsIFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCIuL1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcblxuY29uc3QgTGF5b3V0VHlwZSA9IGZMaWJyYXJ5LkxheW91dFR5cGU7XG50eXBlIExheW91dFR5cGVUeXBlID0ga2V5b2YgdHlwZW9mIExheW91dFR5cGU7XG5cbnR5cGUgRGVmYXVsdExheW91dHMgPSB7XG5cdDE/OiBMYXlvdXRUeXBlVHlwZTtcblx0Mj86IExheW91dFR5cGVUeXBlO1xuXHQzPzogTGF5b3V0VHlwZVR5cGU7XG59O1xuXG50eXBlIEZDTENvbHVtbkRpc3RyaWJ1dGlvblN0YXRlID0ge1xuXHR0YWJsZXQ6IHsgW2tleSBpbiBMYXlvdXRUeXBlVHlwZV0/OiBzdHJpbmcgfTtcblx0ZGVza3RvcDogeyBba2V5IGluIExheW91dFR5cGVUeXBlXT86IHN0cmluZyB9O1xufTtcblxudHlwZSBGQ0xDb25maWcgPSB7XG5cdG1heENvbHVtbnNDb3VudDogbnVtYmVyO1xuXHRkZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZT86IExheW91dFR5cGVUeXBlO1xuXHRkZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlPzogTGF5b3V0VHlwZVR5cGU7XG5cdGRlZmF1bHRDb250cm9sQWdncmVnYXRpb24/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBGQ0xTdGF0ZSA9IHtcblx0Y29sdW1uc0Rpc3RyaWJ1dGlvbjogRkNMQ29sdW1uRGlzdHJpYnV0aW9uU3RhdGU7XG5cdGRlZmF1bHRMYXlvdXRzOiBEZWZhdWx0TGF5b3V0cztcbn07XG5cbi8qKlxuICogQmFzZSBjb250cm9sbGVyIGNsYXNzIGZvciB5b3VyIG93biByb290IHZpZXcgd2l0aCBhbiBzYXAuZi5GbGV4aWJsZUNvbHVtbkxheW91dCBjb250cm9sLlxuICpcbiAqIEJ5IHVzaW5nIG9yIGV4dGVuZGluZyB0aGlzIGNvbnRyb2xsZXIsIHlvdSBjYW4gdXNlIHlvdXIgb3duIHJvb3QgdmlldyB3aXRoIHRoZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYW5kXG4gKiB5b3UgY2FuIG1ha2UgdXNlIG9mIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlcyBhbmQgU0FQIEZpb3JpIGVsZW1lbnRzIGJ1aWxkaW5nIGJsb2Nrcy5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjExMC4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbFwiKVxuY2xhc3MgRmNsQ29udHJvbGxlciBleHRlbmRzIEJhc2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFZpZXdTdGF0ZS5vdmVycmlkZSh7XG5cdFx0XHRhcHBseUluaXRpYWxTdGF0ZU9ubHk6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYUNvbnRyb2xzOiBQcm9taXNlPFZpZXc+W10pOiB2b2lkIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5fZ2V0QWxsVmlzaWJsZVZpZXdzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NoaWxkVmlldzogVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IHBDaGlsZFZpZXcgPSBQcm9taXNlLnJlc29sdmUob0NoaWxkVmlldyk7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gocENoaWxkVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGFkYXB0U3RhdGVDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYVN0YXRlQ29udHJvbHM6IFByb21pc2U8Vmlldz5bXSk6IHZvaWQge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLl9nZXRBbGxWaXNpYmxlVmlld3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hpbGRWaWV3OiBWaWV3KSB7XG5cdFx0XHRcdFx0Y29uc3QgcENoaWxkVmlldyA9IFByb21pc2UucmVzb2x2ZShvQ2hpbGRWaWV3KTtcblx0XHRcdFx0XHRhU3RhdGVDb250cm9scy5wdXNoKHBDaGlsZFZpZXcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHRvblJlc3RvcmU6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUpIHtcblx0XHRcdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyO1xuXHRcdFx0XHRjb25zdCBhcHBDb250ZW50Q29udGFpbmVyID0gZmNsQ29udHJvbGxlci5nZXRBcHBDb250ZW50Q29udGFpbmVyKCk7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb250ZW50Q29udGFpbmVyLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRjb25zdCBwYWdlcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnZXNcIik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb21wb25lbnRJZCBpbiBwYWdlcykge1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYC9wYWdlcy8ke2NvbXBvbmVudElkfS9yZXN0b3JlU3RhdHVzYCwgXCJwZW5kaW5nXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZjbENvbnRyb2xsZXIub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0fSxcblx0XHRcdG9uU3VzcGVuZDogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSkge1xuXHRcdFx0XHRjb25zdCBmY2xDb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IGZjbENvbnRyb2wgPSBmY2xDb250cm9sbGVyLmdldEZjbENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3QgYmVnaW5Db2x1bW5QYWdlcyA9IGZjbENvbnRyb2wuZ2V0QmVnaW5Db2x1bW5QYWdlcygpO1xuXHRcdFx0XHRjb25zdCBtaWRDb2x1bW5QYWdlcyA9IGZjbENvbnRyb2wuZ2V0TWlkQ29sdW1uUGFnZXMoKTtcblx0XHRcdFx0Y29uc3QgZW5kQ29sdW1uUGFnZXMgPSBmY2xDb250cm9sLmdldEVuZENvbHVtblBhZ2VzKCk7XG5cdFx0XHRcdGNvbnN0IHBhZ2VzID0gKFtdIGFzIENvbnRyb2xbXSkuY29uY2F0KGJlZ2luQ29sdW1uUGFnZXMsIG1pZENvbHVtblBhZ2VzLCBlbmRDb2x1bW5QYWdlcyk7XG5cblx0XHRcdFx0ZmNsQ29udHJvbGxlci5nZXRWaWV3c0Zyb21QYWdlcyhwYWdlcykuZm9yRWFjaCgodmlldykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlciB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAoY29udHJvbGxlcj8udmlld1N0YXRlPy5vblN1c3BlbmQpIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIudmlld1N0YXRlLm9uU3VzcGVuZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0cHJvdGVjdGVkIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblxuXHRwcml2YXRlIHNDdXJyZW50Um91dGVOYW1lPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgc0N1cnJlbnRBcmd1bWVudHM/OiB7IG5vUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuOyBiSXNTdGlja3lNb2RlPzogYm9vbGVhbjsgW1wiP3F1ZXJ5XCJdPzogeyBsYXlvdXQ/OiBzdHJpbmcgfSB9O1xuXG5cdHByaXZhdGUgc1ByZXZpb3VzTGF5b3V0Pzoga2V5b2YgdHlwZW9mIExheW91dFR5cGU7XG5cblx0cHJvdGVjdGVkIF9vRkNMQ29uZmlnITogRkNMQ29uZmlnO1xuXG5cdHByaXZhdGUgb0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uPzogVmlldztcblxuXHRwcml2YXRlIF9vVGFyZ2V0c0FnZ3JlZ2F0aW9uOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdGFnZ3JlZ2F0aW9uOiBzdHJpbmc7XG5cdFx0XHRwYXR0ZXJuPzogc3RyaW5nIHwgbnVsbDtcblx0XHR9XG5cdD4gPSB7fTtcblxuXHRwcml2YXRlIF9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm46IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdIHwgdW5kZWZpbmVkPiA9IHt9O1xuXG5cdHByaXZhdGUgbWVzc2FnZVBhZ2VzOiAoUGFnZSB8IHVuZGVmaW5lZClbXSA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcblxuXHRwcml2YXRlIGlzV3JpdGluZ0ZDTFN0YXRlPzogUHJvbWlzZTxGQ0xTdGF0ZT47XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdHRoaXMuX2ludGVybmFsSW5pdCgpO1xuXHRcdHRoaXMuc2V0Q29sdW1uRGlzdHJpYnV0aW9uTW9kZWwoKTtcblx0fVxuXG5cdG1hbmFnZURhdGFSZWNlaXZlZChldmVudDogRXZlbnQ8eyBlcnJvcjogeyBzdGF0dXM6IG51bWJlciB9OyBwYXRoOiBzdHJpbmcgfT4pOiB2b2lkIHtcblx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIikpIHtcblx0XHRcdGNvbnN0IHBhdGggPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpO1xuXHRcdFx0Y29uc3QgdGFyZ2V0ZWRWaWV3ID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCkuZmluZCgodmlldykgPT4gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IHBhdGgpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBtYW5hZ2UgZXJyb3Igd2hlbiB0aGUgcmVxdWVzdCBpcyByZWxhdGVkIHRvIGEgZm9ybSAgaW50byBhbiBPYmplY3RQYWdlXG5cdFx0XHRpZiAocGF0aCAmJiAodGFyZ2V0ZWRWaWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpPy5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRcdCh0YXJnZXRlZFZpZXchLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX3JvdXRpbmcub25EYXRhUmVjZWl2ZWQoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiwgdGhpcyk7XG5cdFx0c3VwZXIuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdHRoaXMuX2ludGVybmFsSW5pdCgpO1xuXG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5vbkJlZm9yZVJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZWQodGhpcy5vblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5fc2F2ZUxheW91dCwgdGhpcyk7XG5cdH1cblxuXHRfaW50ZXJuYWxJbml0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vUm91dGVyUHJveHkpIHtcblx0XHRcdHJldHVybjsgLy8gQWxyZWFkeSBpbml0aWFsaXplZFxuXHRcdH1cblxuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUgPSBcIlwiO1xuXHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgPSB7fTtcblxuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXG5cdFx0Y29uc3Qgb0RhdGFNb2RlbCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoKTtcblx0XHRvRGF0YU1vZGVsPy5hdHRhY2hFdmVudChcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm1hbmFnZURhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTtcblxuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblxuXHRcdC8vIEdldCBGQ0wgY29uZmlndXJhdGlvbiBpbiB0aGUgbWFuaWZlc3Rcblx0XHR0aGlzLl9vRkNMQ29uZmlnID0geyBtYXhDb2x1bW5zQ291bnQ6IDMgfTtcblx0XHRjb25zdCBvUm91dGluZ0NvbmZpZyA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl0ucm91dGluZztcblxuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8uY29uZmlnPy5mbGV4aWJsZUNvbHVtbkxheW91dCkge1xuXHRcdFx0Y29uc3Qgb0ZDTE1hbmlmZXN0Q29uZmlnID0gb1JvdXRpbmdDb25maWcuY29uZmlnLmZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXG5cdFx0XHQvLyBEZWZhdWx0IGxheW91dCBmb3IgMiBjb2x1bW5zXG5cdFx0XHRpZiAob0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlKSB7XG5cdFx0XHRcdHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUgPSBvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlZmF1bHQgbGF5b3V0IGZvciAzIGNvbHVtbnNcblx0XHRcdGlmIChvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZSkge1xuXHRcdFx0XHR0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGUgPSBvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTGltaXQgRkNMIHRvIDIgY29sdW1ucyA/XG5cdFx0XHRpZiAob0ZDTE1hbmlmZXN0Q29uZmlnLmxpbWl0RkNMVG9Ud29Db2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50ID0gMjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LmNvbnRyb2xBZ2dyZWdhdGlvbikge1xuXHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uID0gb1JvdXRpbmdDb25maWcuY29uZmlnLmNvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHR9XG5cblx0XHR0aGlzLl9pbml0aWFsaXplVGFyZ2V0QWdncmVnYXRpb24ob0FwcENvbXBvbmVudCk7XG5cdFx0dGhpcy5faW5pdGlhbGl6ZVJvdXRlc0luZm9ybWF0aW9uKG9BcHBDb21wb25lbnQpO1xuXG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0fVxuXG5cdGdldEZjbENvbnRyb2woKTogRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbnRlbnRDb250YWluZXIoKSBhcyBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxuXG5cdGdldEZjbENvbmZpZygpOiBGQ0xDb25maWcge1xuXHRcdHJldHVybiB0aGlzLl9vRkNMQ29uZmlnO1xuXHR9XG5cblx0X3NhdmVMYXlvdXQob0V2ZW50OiBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5zUHJldmlvdXNMYXlvdXQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpLmxheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGFkZGl0aW9uYWwgdmlldyAob24gdG9wIG9mIHRoZSB2aXNpYmxlIHZpZXdzKSwgdG8gYmUgYWJsZSB0byBjb21wdXRlIHRoZSBsYXRlc3QgdGFibGUgbmF2aWdhdGVkIHJvd3Mgb2Zcblx0ICogdGhlIG1vc3QgcmlnaHQgdmlzaWJsZSB2aWV3IGFmdGVyIGEgbmF2IGJhY2sgb3IgY29sdW1uIGZ1bGxzY3JlZW4uXG5cdCAqXG5cdCAqL1xuXG5cdF91cGRhdGVWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZCA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cyh0aGlzLnNQcmV2aW91c0xheW91dCk7XG5cdFx0Y29uc3QgcmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCA9IGFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZC5sZW5ndGhcblx0XHRcdD8gYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkW2FsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZC5sZW5ndGggLSAxXVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEV2ZW50T25jZShcInJvdXRlTWF0Y2hlZFwiLCAoZXZlbnQ6IEV2ZW50PHsgdmlld3M6IENvbnRyb2xbXSB9PikgPT4ge1xuXHRcdFx0Y29uc3Qgdmlld3MgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdFZpZXdDdXJyZW50ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcih2aWV3c1t2aWV3cy5sZW5ndGggLSAxXSk7XG5cblx0XHRcdGlmIChyaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkICYmIHJpZ2h0TW9zdFZpZXdDdXJyZW50KSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbEJlZm9yZSA9IChyaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkLmdldFZpZXdEYXRhKCkgYXMgeyB2aWV3TGV2ZWw/OiBudW1iZXIgfSk/LnZpZXdMZXZlbDtcblx0XHRcdFx0Y29uc3Qgdmlld0xldmVsQWZ0ZXIgPSAocmlnaHRNb3N0Vmlld0N1cnJlbnQuZ2V0Vmlld0RhdGEoKSBhcyB7IHZpZXdMZXZlbD86IG51bWJlciB9KT8udmlld0xldmVsO1xuXG5cdFx0XHRcdC8vIE5hdmlnYXRpb24gZm9yd2FyZCBmcm9tIEwyIHRvIHZpZXcgbGV2ZWwgTDMgKEZ1bGxTY3JlZW5MYXlvdXQpOlxuXHRcdFx0XHRpZiAodmlld0xldmVsQWZ0ZXIgPT09IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHRcdFx0dGhpcy5vQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24gPSByaWdodE1vc3RWaWV3Q3VycmVudDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBOYXZpZ2F0aW9ucyBiYWNrd2FyZCBmcm9tIEwzIGRvd24gdG8gTDIsIEwxLCBMMCAoVGhyZWVDb2x1bW4gbGF5b3V0KTpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHZpZXdMZXZlbEJlZm9yZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0dmlld0xldmVsQWZ0ZXIgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdHZpZXdMZXZlbEJlZm9yZSA8IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50ICYmXG5cdFx0XHRcdFx0dmlld0xldmVsQmVmb3JlID4gdmlld0xldmVsQWZ0ZXIgJiZcblx0XHRcdFx0XHRyaWdodE1vc3RWaWV3Q3VycmVudCAhPT0gcmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbiA9IHJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24oKTogVmlldyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMub25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkKHRoaXMub25CZWZvcmVSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmRldGFjaFN0YXRlQ2hhbmdlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmRldGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cblx0XHRCYXNlQ29udHJvbGxlci5wcm90b3R5cGUub25FeGl0LmJpbmQodGhpcykoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgRkNMIGNvbXBvbmVudCBpcyBlbmFibGVkLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgc2luY2Ugd2UgYXJlIGluIEZDTCBzY2VuYXJpb1xuXHQgKiBAZmluYWxcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiB0aGlzIGlzIEZjbENvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgUGFnZSB0byBkaXNwbGF5IHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2UgY29udGFpbmluZyB0aGUgY3VycmVudCBlcnJvci5cblx0ICogQHBhcmFtIGVycm9yTWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gZmNsTGV2ZWxcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgY3JlYXRlcyBhIFBhZ2UgdG8gZGlzcGxheSB0aGUgZXJyb3Jcblx0ICovXG5cdGFzeW5jIGRpc3BsYXlFcnJvclBhZ2UoZXJyb3JNZXNzYWdlOiBzdHJpbmcsIHBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCwgZmNsTGV2ZWwgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGZjbENvbnRyb2wgPSB0aGlzLmdldEZjbENvbnRyb2woKTtcblxuXHRcdFx0XHQvLyBNYW5hZ2UgdGhlIG9sZCBBUEkgd2hlcmUgdGhlIEZDTCBsZXZlbCB3YXMgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IGxlZ2FjeVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIGFzIHsgRkNMTGV2ZWw/OiBudW1iZXIgfTtcblx0XHRcdFx0aWYgKGxlZ2FjeVBhcmFtZXRlcnMuRkNMTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBmY2xMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRcdGZjbExldmVsID0gbGVnYWN5UGFyYW1ldGVycy5GQ0xMZXZlbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLl9vRkNMQ29uZmlnICYmIGZjbExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHRcdFx0ZmNsTGV2ZWwgPSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZjbExldmVsIDwgMCB8fCBmY2xMZXZlbCA+IDIpIHtcblx0XHRcdFx0XHRmY2xMZXZlbCA9IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgbWVzc2FnZVBhZ2UgPSB0aGlzLm1lc3NhZ2VQYWdlc1tmY2xMZXZlbF07XG5cblx0XHRcdFx0aWYgKCFtZXNzYWdlUGFnZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VQYWdlID0gbmV3IFBhZ2Uoe1xuXHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2Vcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZVBhZ2VzW2ZjbExldmVsXSA9IG1lc3NhZ2VQYWdlO1xuXG5cdFx0XHRcdFx0c3dpdGNoIChmY2xMZXZlbCkge1xuXHRcdFx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLmFkZEJlZ2luQ29sdW1uUGFnZShtZXNzYWdlUGFnZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0XHRcdGZjbENvbnRyb2wuYWRkTWlkQ29sdW1uUGFnZShtZXNzYWdlUGFnZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLmFkZEVuZENvbHVtblBhZ2UobWVzc2FnZVBhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBmcm9tUGFnZTogQ29udHJvbDtcblx0XHRcdFx0Y29uc3QgaGVhZGVyID0gbmV3IEZsZXhCb3goe1xuXHRcdFx0XHRcdGFsaWduSXRlbXM6IFwiU3RhcnRcIixcblx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogXCJFbmRcIixcblx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiVHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0aWNvbjogXCJzYXAtaWNvbjovL2RlY2xpbmVcIixcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogXCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fU0FQRkVfQ0xPU0V9XCIsXG5cdFx0XHRcdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLnRvKGZyb21QYWdlLmdldElkKCksIHt9LCB7fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUxhcmdlTWFyZ2luRW5kXCIpXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZSh7XG5cdFx0XHRcdFx0dGl0bGU6IGVycm9yTWVzc2FnZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcGFyYW1ldGVycy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IHBhcmFtZXRlcnMuZXJyb3JUeXBlID8gYHNhcElsbHVzLSR7cGFyYW1ldGVycy5lcnJvclR5cGV9YCA6IFwic2FwSWxsdXMtRXJyb3JTY3JlZW5cIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWVzc2FnZVBhZ2UucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0XHRtZXNzYWdlUGFnZS5hZGRDb250ZW50KGhlYWRlcik7XG5cdFx0XHRcdG1lc3NhZ2VQYWdlLmFkZENvbnRlbnQoaWxsdXN0cmF0ZWRNZXNzYWdlKTtcblxuXHRcdFx0XHRsZXQgYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRzd2l0Y2ggKGZjbExldmVsKSB7XG5cdFx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdFx0ZnJvbVBhZ2UgPSBmY2xDb250cm9sLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKTtcblx0XHRcdFx0XHRcdGFmdGVyTmF2aWdhdGVFdmVudE5hbWUgPSBcImFmdGVyQmVnaW5Db2x1bW5OYXZpZ2F0ZVwiO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0XHRmcm9tUGFnZSA9IGZjbENvbnRyb2wuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKTtcblx0XHRcdFx0XHRcdGFmdGVyTmF2aWdhdGVFdmVudE5hbWUgPSBcImFmdGVyTWlkQ29sdW1uTmF2aWdhdGVcIjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGZyb21QYWdlID0gZmNsQ29udHJvbC5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpO1xuXHRcdFx0XHRcdFx0YWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSA9IFwiYWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChmcm9tUGFnZSk7XG5cdFx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0ZmNsQ29udHJvbC50byhmcm9tUGFnZS5nZXRJZCgpLCB7fSwge30pO1xuXHRcdFx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZyb21WaWV3ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcihmcm9tUGFnZSk7XG5cdFx0XHRcdGZjbENvbnRyb2wuYXR0YWNoRXZlbnRPbmNlKGFmdGVyTmF2aWdhdGVFdmVudE5hbWUsIChfZXZlbnQ6IEV2ZW50PHsgZnJvbTogQ29udHJvbCB9PikgPT4ge1xuXHRcdFx0XHRcdGlmIChmcm9tVmlldyAmJiBmcm9tVmlldy5pc0E8Vmlldz4oXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdFx0XHRcdFx0KGZyb21WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucGFnZVJlYWR5Py5mb3JjZVBhZ2VSZWFkeSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRmY2xDb250cm9sLnRvKG1lc3NhZ2VQYWdlLmdldElkKCksIHt9LCB7fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChmYWxzZSk7XG5cdFx0XHRcdExvZy5pbmZvKGAke2V9YCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgb2JqZWN0IF9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIHRoYXQgZGVmaW5lcyBmb3IgZWFjaCByb3V0ZSB0aGUgcmVsZXZhbnQgYWdncmVnYXRpb24gYW5kIHBhdHRlcm4uXG5cdCAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFJlZmVyZW5jZSB0byB0aGUgQXBwQ29tcG9uZW50XG5cdCAqL1xuXHRfaW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9NYW5pZmVzdCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKSxcblx0XHRcdG9UYXJnZXRzID0gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nID8gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nLnRhcmdldHMgOiBudWxsO1xuXG5cdFx0dGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbiA9IHt9O1xuXG5cdFx0aWYgKG9UYXJnZXRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhvVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0ID0gb1RhcmdldHNbc1RhcmdldE5hbWVdO1xuXHRcdFx0XHRpZiAob1RhcmdldC5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uW3NUYXJnZXROYW1lXSA9IHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uOiBvVGFyZ2V0LmNvbnRyb2xBZ2dyZWdhdGlvbixcblx0XHRcdFx0XHRcdHBhdHRlcm46IG9UYXJnZXQuY29udGV4dFBhdHRlcm5cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb25bc1RhcmdldE5hbWVdID0ge1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb246IFwicGFnZVwiLFxuXHRcdFx0XHRcdFx0cGF0dGVybjogbnVsbFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgbWFwcGluZyBiZXR3ZWVuIGEgcm91dGUgKGlkZW50aWZlZCBhcyBpdHMgcGF0dGVybikgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHNcblx0ICogQHBhcmFtIG9BcHBDb21wb25lbnQgcmVmIHRvIHRoZSBBcHBDb21wb25lbnRcblx0ICovXG5cblx0X2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvTWFuaWZlc3QgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCksXG5cdFx0XHRhUm91dGVzID0gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nID8gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nLnJvdXRlcyA6IG51bGw7XG5cblx0XHR0aGlzLl9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm4gPSB7fTtcblxuXHRcdGlmIChhUm91dGVzKSB7XG5cdFx0XHRhUm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyb3V0ZS5wYXR0ZXJuKSB7XG5cdFx0XHRcdFx0dGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuW3JvdXRlLnBhdHRlcm5dID0gcm91dGUudGFyZ2V0IGFzIHN0cmluZ1tdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJyZW50QXJndW1lbnQoKTogdW5rbm93biB7XG5cdFx0cmV0dXJuIHRoaXMuc0N1cnJlbnRBcmd1bWVudHM7XG5cdH1cblxuXHRnZXRDdXJyZW50Um91dGVOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0dGVyIGZvciBvVGFyZ2V0c0FnZ3JlZ2F0aW9uIGFycmF5LlxuXHQgKiBAcmV0dXJucyBUaGUgX29UYXJnZXRzQWdncmVnYXRpb24gYXJyYXlcblx0ICovXG5cdGdldFRhcmdldEFnZ3JlZ2F0aW9uKCk6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0YWdncmVnYXRpb246IHN0cmluZztcblx0XHRcdHBhdHRlcm4/OiBzdHJpbmcgfCBudWxsO1xuXHRcdH1cblx0PiB7XG5cdFx0cmV0dXJuIHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb247XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHRoZSByb3V0ZXIgUm91dGVNYXRjaGVkIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRvblJvdXRlTWF0Y2hlZChvRXZlbnQ6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IHNSb3V0ZU5hbWUgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmFtZVwiKTtcblxuXHRcdC8vIFNhdmUgdGhlIGN1cnJlbnQvcHJldmlvdXMgcm91dGVzIGFuZCBhcmd1bWVudHNcblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gc1JvdXRlTmFtZTtcblx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImFyZ3VtZW50c1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJpbmcgdGhlIHRhYmxlIHNjcm9sbCB0byB0aGUgbmF2aWdhdGVkIHJvdyBhZnRlciBlYWNoIGxheW91dCBjaGFuZ2UuXG5cdCAqXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHRjb25zdCBhVmlld3MgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKTtcblx0XHQvL1RoZSBzY3JvbGxzIGFyZSB0cmlnZ2VyZWQgb25seSBpZiB0aGUgbGF5b3V0IGlzIHdpdGggc2V2ZXJhbCBjb2x1bW5zIG9yIHdoZW4gc3dpdGNoaW5nIHRoZSBtb3N0UmlnaHQgY29sdW1uIGluIGZ1bGwgc2NyZWVuXG5cdFx0aWYgKFxuXHRcdFx0YVZpZXdzLmxlbmd0aCA+IDEgfHxcblx0XHRcdChhVmlld3MubGVuZ3RoICYmIChhVmlld3NbMF0uZ2V0Vmlld0RhdGEoKSBhcyB7IHZpZXdMZXZlbDogbnVtYmVyIH0pLnZpZXdMZXZlbCA8IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb0FkZGl0aW9uYWxWaWV3ID0gdGhpcy5nZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCk7XG5cdFx0XHRpZiAob0FkZGl0aW9uYWxWaWV3ICYmICFhVmlld3MuaW5jbHVkZXMob0FkZGl0aW9uYWxWaWV3KSkge1xuXHRcdFx0XHRhVmlld3MucHVzaChvQWRkaXRpb25hbFZpZXcpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZXQgaW5kZXggPSBhVmlld3MubGVuZ3RoIC0gMTsgaW5kZXggPiAwOyBpbmRleC0tKSB7XG5cdFx0XHRcdGNvbnN0IG9WaWV3ID0gYVZpZXdzW2luZGV4XSxcblx0XHRcdFx0XHRvUHJldmlvdXNWaWV3ID0gYVZpZXdzW2luZGV4IC0gMV07XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNWaWV3Q29udHJvbGxlciA9IG9QcmV2aW91c1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIHsgX3Njcm9sbFRhYmxlc1RvUm93PzogRnVuY3Rpb24gfTtcblx0XHRcdFx0aWYgKGJpbmRpbmdDb250ZXh0ICYmIHByZXZpb3VzVmlld0NvbnRyb2xsZXIuX3Njcm9sbFRhYmxlc1RvUm93KSB7XG5cdFx0XHRcdFx0cHJldmlvdXNWaWV3Q29udHJvbGxlci5fc2Nyb2xsVGFibGVzVG9Sb3coYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIEZDTCBTdGF0ZUNoYW5nZWQgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdG9uU3RhdGVDaGFuZ2VkKG9FdmVudDogRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0JEFmdGVyRW5kQ29sdW1uTmF2aWdhdGVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGJJc05hdmlnYXRpb25BcnJvdyA9IChvRXZlbnQgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwiaXNOYXZpZ2F0aW9uQXJyb3dcIik7XG5cdFx0aWYgKHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLnNDdXJyZW50QXJndW1lbnRzW1wiP3F1ZXJ5XCJdKSB7XG5cdFx0XHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHNbXCI/cXVlcnlcIl0gPSB7fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHNbXCI/cXVlcnlcIl0ubGF5b3V0ID0gKG9FdmVudCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJsYXlvdXRcIik7XG5cdFx0fVxuXHRcdHRoaXMuX2ZvcmNlTW9kZWxDb250ZXh0Q2hhbmdlT25CcmVhZENydW1icyhvRXZlbnQpO1xuXG5cdFx0Ly8gUmVwbGFjZSB0aGUgVVJMIHdpdGggdGhlIG5ldyBsYXlvdXQgaWYgYSBuYXZpZ2F0aW9uIGFycm93IHdhcyB1c2VkXG5cdFx0aWYgKGJJc05hdmlnYXRpb25BcnJvdyAmJiB0aGlzLnNDdXJyZW50Um91dGVOYW1lKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVyUHJveHkubmF2VG8odGhpcy5zQ3VycmVudFJvdXRlTmFtZSwgdGhpcy5zQ3VycmVudEFyZ3VtZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFJpZ2h0bW9zdFZpZXcoKTtcblx0XHRpZiAob1ZpZXcpIHtcblx0XHRcdHRoaXMuY29tcHV0ZVRpdGxlSGllcmFyY2h5KG9WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2UgZXZlbnQgb24gYWxsIGJyZWFkY3J1bWJzICggb24gZWFjaCBPYmplY3RQYWdlcykuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMob0V2ZW50OiBFdmVudDxNYW5hZ2VkT2JqZWN0JE1vZGVsQ29udGV4dENoYW5nZUV2ZW50UGFyYW1ldGVycywgRmxleGlibGVDb2x1bW5MYXlvdXQ+KTogdm9pZCB7XG5cdFx0Ly9mb3JjZSBtb2RlbGNvbnRleHRjaGFuZ2Ugb24gT2JqZWN0UGFnZXMgdG8gcmVmcmVzaCB0aGUgYnJlYWRjcnVtYnMgbGluayBocmVmc1xuXHRcdGNvbnN0IG9GY2wgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IG9QYWdlczogQ29udHJvbFtdID0gW107XG5cdFx0b1BhZ2VzID0gb1BhZ2VzLmNvbmNhdChvRmNsLmdldEJlZ2luQ29sdW1uUGFnZXMoKSkuY29uY2F0KG9GY2wuZ2V0TWlkQ29sdW1uUGFnZXMoKSkuY29uY2F0KG9GY2wuZ2V0RW5kQ29sdW1uUGFnZXMoKSk7XG5cdFx0b1BhZ2VzLmZvckVhY2goKG9QYWdlKSA9PiB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIob1BhZ2UpO1xuXHRcdFx0Y29uc3Qgb0JyZWFkQ3J1bWJzID0gb1ZpZXc/LmJ5SWQgJiYgb1ZpZXcuYnlJZChcImJyZWFkY3J1bWJzXCIpO1xuXHRcdFx0aWYgKG9CcmVhZENydW1icykge1xuXHRcdFx0XHRvQnJlYWRDcnVtYnMuZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCB0byB1cGRhdGUgdGhlIFNoYXJlIGJ1dHRvbiBWaXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gdmlld0NvbHVtbiBOYW1lIG9mIHRoZSBjdXJyZW50IGNvbHVtbiAoXCJiZWdpbkNvbHVtblwiLCBcIm1pZENvbHVtblwiLCBcImVuZENvbHVtblwiKVxuXHQgKiBAcGFyYW0gc0xheW91dCBUaGUgY3VycmVudCBsYXlvdXQgdXNlZCBieSB0aGUgRkNMXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZSBidXR0b24gdmlzaWJpbGl0eVxuXHQgKi9cblx0X3VwZGF0ZVNoYXJlQnV0dG9uVmlzaWJpbGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGxldCBiU2hvd1NoYXJlSWNvbjtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgXCJPbmVDb2x1bW5cIjpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSB2aWV3Q29sdW1uID09PSBcImJlZ2luQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdGNhc2UgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiOlxuXHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IHZpZXdDb2x1bW4gPT09IFwibWlkQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gdmlld0NvbHVtbiA9PT0gXCJlbmRDb2x1bW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gYlNob3dTaGFyZUljb247XG5cdH1cblxuXHRfdXBkYXRlRWRpdEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQ7XG5cdFx0bGV0IGJFZGl0QnV0dG9uVmlzaWJsZSA9IHRydWU7XG5cdFx0c3dpdGNoICh2aWV3Q29sdW1uKSB7XG5cdFx0XHRjYXNlIFwibWlkQ29sdW1uXCI6XG5cdFx0XHRcdHN3aXRjaCAoc0xheW91dCkge1xuXHRcdFx0XHRcdGNhc2UgXCJUd29Db2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlblwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0aWYgKCFoaWRkZW5EcmFmdCkge1xuXHRcdFx0XHRcdFx0XHRiRWRpdEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0YkVkaXRCdXR0b25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJlbmRDb2x1bW5cIjpcblx0XHRcdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRpZiAoIWhpZGRlbkRyYWZ0KSB7XG5cdFx0XHRcdFx0XHRcdGJFZGl0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBiRWRpdEJ1dHRvblZpc2libGU7XG5cdH1cblxuXHRfdXBkYXRlU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQ7XG5cdFx0bGV0IGJTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsZSA9IHRydWU7XG5cdFx0c3dpdGNoICh2aWV3Q29sdW1uKSB7XG5cdFx0XHRjYXNlIFwibWlkQ29sdW1uXCI6XG5cdFx0XHRcdHN3aXRjaCAoc0xheW91dCkge1xuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0aWYgKGhpZGRlbkRyYWZ0KSB7XG5cdFx0XHRcdFx0XHRcdGJTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGU7XG5cdH1cblxuXHR1cGRhdGVVSVN0YXRlRm9yVmlldyhvVmlldzogRkVWaWV3LCBGQ0xMZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1VJU3RhdGUgPSB0aGlzLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCksXG5cdFx0XHRvRmNsQ29sTmFtZSA9IFtcImJlZ2luQ29sdW1uXCIsIFwibWlkQ29sdW1uXCIsIFwiZW5kQ29sdW1uXCJdLFxuXHRcdFx0c0xheW91dCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpO1xuXHRcdGxldCB2aWV3Q29sdW1uO1xuXG5cdFx0aWYgKCFvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKSkge1xuXHRcdFx0b1ZpZXcuc2V0TW9kZWwodGhpcy5fY3JlYXRlSGVscGVyTW9kZWwoKSwgXCJmY2xoZWxwZXJcIik7XG5cdFx0fVxuXHRcdGlmICghb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8pIHtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uKSB7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4gPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4pIHtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbiA9IHt9O1xuXHRcdH1cblx0XHRpZiAoRkNMTGV2ZWwgPj0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdC8vIFRoZSB2aWV3IGlzIG9uIGEgbGV2ZWwgPiBtYXggbnVtYmVyIG9mIGNvbHVtbnMuIEl0J3MgYWx3YXlzIGZ1bGxzY3JlZW4gd2l0aG91dCBjbG9zZS9leGl0IGJ1dHRvbnNcblx0XHRcdHZpZXdDb2x1bW4gPSBvRmNsQ29sTmFtZVt0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCAtIDFdO1xuXG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uZnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uZXhpdEZ1bGxTY3JlZW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmNsb3NlQ29sdW1uID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5leGl0RnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uZnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uY2xvc2VDb2x1bW4gPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29sdW1uID0gb0ZjbENvbE5hbWVbRkNMTGV2ZWxdO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdEZDTExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IHx8XG5cdFx0XHRzTGF5b3V0ID09PSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIiB8fFxuXHRcdFx0c0xheW91dCA9PT0gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgfHxcblx0XHRcdHNMYXlvdXQgPT09IFwiT25lQ29sdW1uXCJcblx0XHQpIHtcblx0XHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2JyZWFkQ3J1bWJJc1Zpc2libGVcIiwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2JyZWFkQ3J1bWJJc1Zpc2libGVcIiwgZmFsc2UpO1xuXHRcdH1cblx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgRkNMSGVscGVyIGRvZXNuJ3QgcHJvdmlkZSBhY3Rpb25CdXR0b24gdmFsdWVzIGZvciB0aGUgZmlyc3QgY29sdW1uXG5cdFx0Ly8gc28gd2UgaGF2ZSB0byBhZGQgdGhpcyBpbmZvIG1hbnVhbGx5XG5cdFx0KG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvIGFzIHsgYmVnaW5Db2x1bW4/OiBvYmplY3QgfSkuYmVnaW5Db2x1bW4gPSB7XG5cdFx0XHRmdWxsU2NyZWVuOiBudWxsLFxuXHRcdFx0ZXhpdEZ1bGxTY3JlZW46IG51bGwsXG5cdFx0XHRjbG9zZUNvbHVtbjogbnVsbFxuXHRcdH07XG5cblx0XHRjb25zdCBvQWN0aW9uQnV0dG9uSW5mb3M6IE5hdmlnYXRpb25BY3Rpb25zVGFyZ2V0cyAmIHtcblx0XHRcdHN3aXRjaFZpc2libGU/OiBib29sZWFuO1xuXHRcdFx0c3dpdGNoSWNvbj86IHN0cmluZztcblx0XHRcdGlzRnVsbFNjcmVlbj86IGJvb2xlYW47XG5cdFx0XHRjbG9zZVZpc2libGU/OiBib29sZWFuO1xuXHRcdH0gPSBPYmplY3QuYXNzaWduKHt9LCBvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mb1t2aWV3Q29sdW1uIGFzIGtleW9mIENvbHVtbnNOYXZpZ2F0aW9uQWN0aW9uc10pO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5zd2l0Y2hWaXNpYmxlID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gIT09IG51bGwgfHwgb0FjdGlvbkJ1dHRvbkluZm9zLmV4aXRGdWxsU2NyZWVuICE9PSBudWxsO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5zd2l0Y2hJY29uID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gIT09IG51bGwgPyBcInNhcC1pY29uOi8vZnVsbC1zY3JlZW5cIiA6IFwic2FwLWljb246Ly9leGl0LWZ1bGwtc2NyZWVuXCI7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLmlzRnVsbFNjcmVlbiA9IG9BY3Rpb25CdXR0b25JbmZvcy5mdWxsU2NyZWVuID09PSBudWxsO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5jbG9zZVZpc2libGUgPSBvQWN0aW9uQnV0dG9uSW5mb3MuY2xvc2VDb2x1bW4gIT09IG51bGw7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9hY3Rpb25CdXR0b25zSW5mb1wiLCBvQWN0aW9uQnV0dG9uSW5mb3MpO1xuXG5cdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvc2hvd0VkaXRCdXR0b25cIiwgdGhpcy5fdXBkYXRlRWRpdEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uLCBzTGF5b3V0KSk7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCB0aGlzLl91cGRhdGVTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL3Nob3dTaGFyZUljb25cIiwgdGhpcy5fdXBkYXRlU2hhcmVCdXR0b25WaXNpYmlsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHJvdXRlciBCZWZvcmVSb3V0ZU1hdGNoZWQgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdGFzeW5jIG9uQmVmb3JlUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGVyJEJlZm9yZVJvdXRlTWF0Y2hlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9FdmVudCkge1xuXHRcdFx0Y29uc3Qgb1F1ZXJ5UGFyYW1zID0gKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkuYXJndW1lbnRzISBhcyBSZWNvcmQ8c3RyaW5nLCB7IGxheW91dDogTGF5b3V0VHlwZVR5cGUgfT4pW1wiP3F1ZXJ5XCJdO1xuXHRcdFx0bGV0IHNMYXlvdXQgPSBvUXVlcnlQYXJhbXMgPyBvUXVlcnlQYXJhbXMubGF5b3V0IDogdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBubyBsYXlvdXQgcGFyYW1ldGVyLCBxdWVyeSBmb3IgdGhlIGRlZmF1bHQgbGV2ZWwgMCBsYXlvdXQgKG5vcm1hbGx5IE9uZUNvbHVtbilcblx0XHRcdGlmICghc0xheW91dCkge1xuXHRcdFx0XHRjb25zdCBvTmV4dFVJU3RhdGUgPSB0aGlzLmdldEhlbHBlcigpLmdldE5leHRVSVN0YXRlKDApO1xuXHRcdFx0XHRzTGF5b3V0ID0gb05leHRVSVN0YXRlLmxheW91dCBhcyBMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxheW91dCBpZiBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlciBvZiB0YXJnZXRzXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgdGhlIGNhc2UgZm9yIG5vcm1hbCBuYXZpZ2F0aW9uLCBqdXN0IG5lZWRlZCBpbiBjYXNlXG5cdFx0XHQvLyB0aGUgVVJMIGhhcyBiZWVuIG1hbnVhbGx5IG1vZGlmaWVkXG5cdFx0XHRjb25zdCBhVGFyZ2V0cyA9IChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZmlnXCIpIGFzIHsgdGFyZ2V0Pzogc3RyaW5nW10gfSk/LnRhcmdldDtcblx0XHRcdHNMYXlvdXQgPSB0aGlzLl9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzTGF5b3V0ISwgYVRhcmdldHMpO1xuXG5cdFx0XHRhd2FpdCB0aGlzLmlzV3JpdGluZ0ZDTFN0YXRlO1xuXHRcdFx0c0xheW91dCA9IGF3YWl0IHRoaXMuZ2V0U3RvcmVkTGF5b3V0KHNMYXlvdXQpO1xuXG5cdFx0XHQvLyBVcGRhdGUgdGhlIGxheW91dCBvZiB0aGUgRmxleGlibGVDb2x1bW5MYXlvdXRcblx0XHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLnNldExheW91dChzTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIGZvciB0aGUgRkNMIENvbXBvbmVudC5cblx0ICogQHJldHVybnMgSW5zdGFuY2Ugb2YgYSBzZW1hbnRpYyBoZWxwZXJcblx0ICovXG5cdGdldEhlbHBlcigpOiBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIHtcblx0XHRyZXR1cm4gRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlci5nZXRJbnN0YW5jZUZvcih0aGlzLmdldEZjbENvbnRyb2woKSwgdGhpcy5fb0ZDTENvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgRkNMIGxheW91dCBmb3IgYSBnaXZlbiBGQ0wgbGV2ZWwgYW5kIGEgdGFyZ2V0IGhhc2guXG5cdCAqIEBwYXJhbSBpTmV4dEZDTExldmVsIEZDTCBsZXZlbCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gc1Byb3Bvc2VkTGF5b3V0IFRoZSBwcm9wb3NlZCBsYXlvdXRcblx0ICogQHBhcmFtIGtlZXBDdXJyZW50TGF5b3V0IFRydWUgaWYgd2Ugd2FudCB0byBrZWVwIHRoZSBjdXJyZW50IGxheW91dCBpZiBwb3NzaWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBsYXlvdXRcblx0ICovXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogTGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdC8vIEZpcnN0LCBhc2sgdGhlIEZDTCBoZWxwZXIgdG8gY2FsY3VsYXRlIHRoZSBsYXlvdXQgaWYgbm90aGluZyBpcyBwcm9wb3NlZFxuXHRcdGlmICghc1Byb3Bvc2VkTGF5b3V0KSB7XG5cdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSAoXG5cdFx0XHRcdGtlZXBDdXJyZW50TGF5b3V0ID8gdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCkgOiB0aGlzLmdldEhlbHBlcigpLmdldE5leHRVSVN0YXRlKGlOZXh0RkNMTGV2ZWwpLmxheW91dFxuXHRcdFx0KSBhcyBMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGVuIGNoYW5nZSB0aGlzIHZhbHVlIGlmIG5lY2Vzc2FyeSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiB0YXJnZXRzXG5cdFx0Y29uc3Qgb1JvdXRlID0gKHRoaXMuZ2V0Um91dGVyKCkgYXMgeyBnZXRSb3V0ZUJ5SGFzaD86IChoYXNoOiBzdHJpbmcpID0+IFJvdXRlIH0pLmdldFJvdXRlQnlIYXNoPy4oXG5cdFx0XHRgJHtzSGFzaH0/bGF5b3V0PSR7c1Byb3Bvc2VkTGF5b3V0fWBcblx0XHQpO1xuXHRcdGNvbnN0IGFUYXJnZXRzID0gdGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuW29Sb3V0ZSEuZ2V0UGF0dGVybigpXTtcblxuXHRcdHJldHVybiB0aGlzLl9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzUHJvcG9zZWRMYXlvdXQhLCBhVGFyZ2V0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBGQ0wgbGF5b3V0IGlzIGNvbXBhdGlibGUgd2l0aCBhbiBhcnJheSBvZiB0YXJnZXRzLlxuXHQgKiBAcGFyYW0gc1Byb3Bvc2VkTGF5b3V0IFByb3Bvc2VkIHZhbHVlIGZvciB0aGUgRkNMIGxheW91dFxuXHQgKiBAcGFyYW0gYVRhcmdldHMgQXJyYXkgb2YgdGFyZ2V0IG5hbWVzIHVzZWQgZm9yIGNoZWNraW5nXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0ZWQgbGF5b3V0XG5cdCAqL1xuXHRfY29ycmVjdExheW91dEZvclRhcmdldHMoc1Byb3Bvc2VkTGF5b3V0OiBMYXlvdXRUeXBlVHlwZSwgYVRhcmdldHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogTGF5b3V0VHlwZVR5cGUge1xuXHRcdGNvbnN0IGFsbEFsbG93ZWRMYXlvdXRzID0ge1xuXHRcdFx0XCIyXCI6IFtcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiLCBcIlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkXCIsIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiXSxcblx0XHRcdFwiM1wiOiBbXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIixcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiLFxuXHRcdFx0XHRcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuXCIsXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlblwiLFxuXHRcdFx0XHRcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIixcblx0XHRcdFx0XCJFbmRDb2x1bW5GdWxsU2NyZWVuXCJcblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0aWYgKGFUYXJnZXRzICYmICFBcnJheS5pc0FycmF5KGFUYXJnZXRzKSkge1xuXHRcdFx0Ly8gVG8gc3VwcG9ydCBzaW5nbGUgdGFyZ2V0IGFzIGEgc3RyaW5nIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0YVRhcmdldHMgPSBbYVRhcmdldHNdO1xuXHRcdH1cblxuXHRcdGlmICghYVRhcmdldHMpIHtcblx0XHRcdC8vIERlZmVuc2l2ZSwganVzdCBpbiBjYXNlLi4uXG5cdFx0XHRyZXR1cm4gc1Byb3Bvc2VkTGF5b3V0O1xuXHRcdH0gZWxzZSBpZiAoYVRhcmdldHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gTW9yZSB0aGFuIDEgdGFyZ2V0OiBqdXN0IHNpbXBseSBjaGVjayBmcm9tIHRoZSBhbGxvd2VkIHZhbHVlc1xuXHRcdFx0Y29uc3QgYUxheW91dHMgPSBhbGxBbGxvd2VkTGF5b3V0c1thVGFyZ2V0cy5sZW5ndGgudG9TdHJpbmcoKSBhcyBcIjJcIiB8IFwiM1wiXSBhcyBMYXlvdXRUeXBlVHlwZVtdO1xuXHRcdFx0aWYgKCFhTGF5b3V0cy5pbmNsdWRlcyhzUHJvcG9zZWRMYXlvdXQpKSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wb3NlZCBsYXlvdXQgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2YgY29sdW1uc1xuXHRcdFx0XHQvLyAtLT4gQXNrIHRoZSBoZWxwZXIgZm9yIHRoZSBkZWZhdWx0IGxheW91dCBmb3IgdGhlIG51bWJlciBvZiBjb2x1bW5zXG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRMYXlvdXQgPSB0aGlzLl9nZXREZWZhdWx0TGF5b3V0KGFUYXJnZXRzLmxlbmd0aCk7XG5cdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IGRlZmF1bHRMYXlvdXQgJiYgYUxheW91dHMuaW5jbHVkZXMoZGVmYXVsdExheW91dCkgPyBkZWZhdWx0TGF5b3V0IDogYUxheW91dHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE9ubHkgb25lIHRhcmdldFxuXHRcdFx0Y29uc3Qgc1RhcmdldEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0dGhpcy5nZXRUYXJnZXRBZ2dyZWdhdGlvbigpW2dldFJvdXRlVGFyZ2V0TmFtZShhVGFyZ2V0c1swXSldLmFnZ3JlZ2F0aW9uIHx8IHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdENvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHRcdHN3aXRjaCAoc1RhcmdldEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gTGF5b3V0VHlwZS5PbmVDb2x1bW47XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVuZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQcm9wb3NlZExheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGRlZmF1bHQgTGF5b3V0IGZvciBudW1iZXIgb2YgY29sdW1ucy5cblx0ICogQHBhcmFtIG51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZVxuXHQgKiBAcmV0dXJucyBBbiBGQ0wgTGF5b3V0IGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGlmIGl0IGlzIGRlZmluZWQuXG5cdCAqL1xuXHRfZ2V0RGVmYXVsdExheW91dChudW1iZXJPZlRhcmdldHNGcm9tUm91dGU6IG51bWJlcik6IExheW91dFR5cGVUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRzd2l0Y2ggKG51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZSkge1xuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbnN0YW5jZWQgdmlld3MgaW4gdGhlIEZDTCBjb21wb25lbnQuXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgaW5zdGFuY2VkIHZpZXdzLlxuXHQgKi9cblx0Z2V0SW5zdGFuY2VkVmlld3MoKTogVmlld1tdIHtcblx0XHRjb25zdCBmY2xDb250cm9sID0gdGhpcy5nZXRGY2xDb250cm9sKCk7XG5cdFx0Y29uc3QgY29tcG9uZW50Q29udGFpbmVyczogQ29udHJvbFtdID0gW1xuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRCZWdpbkNvbHVtblBhZ2VzKCksXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldE1pZENvbHVtblBhZ2VzKCksXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldEVuZENvbHVtblBhZ2VzKClcblx0XHRdO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXdzRnJvbVBhZ2VzKGNvbXBvbmVudENvbnRhaW5lcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGN1cnJlbnQgdmlzaWJsZSBwYWdlcy5cblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSB2aXNpYmxlIHZpZXdzLlxuXHQgKi9cblx0Z2V0VmlzaWJsZVZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgdmlzaWJsZSB2aWV3cyBpbiB0aGUgRkNMIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIGZvckxheW91dCAgT3B0aW9uYWwgcGFyYW1ldGVyIGlzIHZlcnkgc3BlY2lmaWMgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGxhdGVzdCBuYXZpZ2F0ZWQgcm93XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGFsbCB2aXNpYmxlIHZpZXdzXG5cdCAqL1xuXHRfZ2V0QWxsVmlzaWJsZVZpZXdzKGZvckxheW91dD86IHN0cmluZyk6IFZpZXdbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVZpZXdzOiBWaWV3W10gPSBbXTtcblx0XHRjb25zdCBsYXlvdXQgPSBmb3JMYXlvdXQgPyBmb3JMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRjb25zdCBhZGRWaWV3ID0gKHBhZ2U6IENvbnRyb2wgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHZpc2libGVWaWV3cy5wdXNoKHZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHN3aXRjaCAobGF5b3V0KSB7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuRW5kQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5NaWRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLk9uZUNvbHVtbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy5lcnJvcihgVW5oYW5kbGVkIHN3aXRjaCBjYXNlIGZvciAke3RoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiB2aXNpYmxlVmlld3M7XG5cdH1cblxuXHRfZ2V0QWxsVmlld3MoZm9yTGF5b3V0Pzogc3RyaW5nKTogVmlld1tdIHtcblx0XHRjb25zdCBhbGxWaWV3czogVmlld1tdID0gW107XG5cdFx0Y29uc3QgbGF5b3V0ID0gZm9yTGF5b3V0ID8gZm9yTGF5b3V0IDogdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCk7XG5cblx0XHRjb25zdCBhZGRWaWV3ID0gKHBhZ2U6IENvbnRyb2wgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdGFsbFZpZXdzLnB1c2godmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0c3dpdGNoIChsYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWlkIGNvbHVtbiBmdWxsc2NyZWVuIGNvbWVzIGZyb20gYSAyIG9yIGEgMyBjb2x1bW4gbGF5b3V0XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4gPVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmFjdGlvbkJ1dHRvbnNJbmZvPy5taWRDb2x1bW4/LmV4aXRGdWxsU2NyZWVuID8/IFwiXCI7XG5cdFx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdFx0aWYgKGxheW91dFdoZW5FeGl0RnVsbFNjcmVlbi5zdGFydHNXaXRoKFwiVGhyZWVDb2x1bW5cIikpIHtcblx0XHRcdFx0XHRcdC8vIFdlIGNvbWUgZnJvbSBhIDMgY29sdW1uIGxheW91dFxuXHRcdFx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy5lcnJvcihgVW5oYW5kbGVkIHN3aXRjaCBjYXNlIGZvciAke3RoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gYWxsVmlld3M7XG5cdH1cblxuXHRhc3luYyBvbkNvbnRhaW5lclJlYWR5KCk6IFByb21pc2U8dm9pZFtdPiB7XG5cdFx0Ly8gUmVzdG9yZSB2aWV3cyBpZiBuZWNjZXNzYXJ5LlxuXHRcdGNvbnN0IGFWaWV3cyA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpO1xuXHRcdGNvbnN0IGFSZXN0b3JlUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IGFWaWV3cy5yZWR1Y2UoZnVuY3Rpb24gKGFQcm9taXNlczogUHJvbWlzZTx2b2lkPltdLCBvVGFyZ2V0VmlldzogVmlldykge1xuXHRcdFx0aWYgKG9UYXJnZXRWaWV3LmlzQSAmJiBvVGFyZ2V0Vmlldy5pc0EoXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChLZWVwQWxpdmVIZWxwZXIucmVzdG9yZVZpZXcob1RhcmdldFZpZXcgYXMgRkVWaWV3KSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhUHJvbWlzZXM7XG5cdFx0fSwgW10pO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdG9yZVByb21pc2VzKTtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdENvbnRleHQoKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UmlnaHRtb3N0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID8/IHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdFZpZXcoKTogRkVWaWV3IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0QWxsVmlld3MoKS5wb3AoKSBhcyBGRVZpZXc7XG5cdH1cblxuXHRpc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5nZXRGY2xDb250cm9sKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgYUFsbFZpc2libGVWaWV3cyA9IHRoaXMuX2dldEFsbFZpZXdzKCk7XG5cdFx0Zm9yIChjb25zdCB2aWV3IG9mIGFBbGxWaXNpYmxlVmlld3MpIHtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdGlmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG9Db250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdmlldyBoYXMgYmVlbiBkZXN0cm95ZWQgLS0+IGFwcCBpcyBjdXJyZW50bHkgYmVpbmcgZGVzdHJveWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXN5bmMgX3NldFNoZWxsTWVudVRpdGxlKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgc1RpdGxlOiBzdHJpbmcsIHNBcHBUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5pc0Z1bGxTY3JlZW4gIT09IHRydWUpIHtcblx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNBcHBUaXRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZXRpZXZlIHRoZSBGQ0wgc3RhdGUgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgc3RhdGVcblx0ICovXG5cdGFzeW5jIGdldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEoKTogUHJvbWlzZTxGQ0xTdGF0ZT4ge1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3QgZW1wdHlGQ0xTdGF0ZSA9IHtcblx0XHRcdGRlZmF1bHRMYXlvdXRzOiB7fSxcblx0XHRcdGNvbHVtbnNEaXN0cmlidXRpb246IHtcblx0XHRcdFx0ZGVza3RvcDoge30sXG5cdFx0XHRcdHRhYmxldDoge31cblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiAoKGF3YWl0IHNoZWxsU2VydmljZXMuZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKFwiRkNMLVBlcnNvbmFsaXphdGlvblwiKSkgPz8gZW1wdHlGQ0xTdGF0ZSkgYXMgRkNMU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHNldCB0aGUgRkNMIHN0YXRlIGluIHRoZSBwZXJzb25hbGl6YXRpb24gc2VydmljZS5cblx0ICogQHBhcmFtIGZjbFN0YXRlIFRoZSBGQ0wgc3RhdGVcblx0ICovXG5cdHNldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEoZmNsU3RhdGU6IEZDTFN0YXRlKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRzaGVsbFNlcnZpY2VzLnNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShcIkZDTC1QZXJzb25hbGl6YXRpb25cIiwgZmNsU3RhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJlcXVlc3RzIHRoZSBGQ0wgc3RhdGUgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UgYW5kIHNldHMgdGhlIG1vZGVsIGFjY29yZGluZ2x5LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBzZXRDb2x1bW5EaXN0cmlidXRpb25Nb2RlbCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb2x1bW5zRGlzdHJpYnV0aW9uID0gKGF3YWl0IHRoaXMuZ2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSgpKS5jb2x1bW5zRGlzdHJpYnV0aW9uO1xuXHRcdGlmIChjb2x1bW5zRGlzdHJpYnV0aW9uKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShcIi9GQ0xDb2x1bW5zRGlzdHJpYnV0aW9uXCIsIGNvbHVtbnNEaXN0cmlidXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjb2x1bW5zIGRpc3RyaWJ1dGlvbiBpbiB0aGUgRkNMIHNldHRpbmdzIGRpYWxvZy5cblx0ICogSXQgdXBkYXRlcyB0aGUgRkNMIHN0YXRlIGluIHRoZSBwZXJzb25hbGl6YXRpb24gc2VydmljZS5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQ29sdW1uc0Rpc3RyaWJ1dGlvbkNoYW5nZShcblx0XHRldmVudDogRXZlbnQ8eyBtZWRpYTogXCJ0YWJsZXRcIiB8IFwiZGVza3RvcFwiOyBsYXlvdXQ6IExheW91dFR5cGVUeXBlOyBjb2x1bW5zU2l6ZXM6IHN0cmluZyB9PlxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB7IG1lZGlhLCBsYXlvdXQsIGNvbHVtbnNTaXplcyB9ID0gZXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRtb2RlbC5zZXRQcm9wZXJ0eShgL0ZDTENvbHVtbnNEaXN0cmlidXRpb24vJHttZWRpYX0vJHtsYXlvdXR9YCwgY29sdW1uc1NpemVzKTtcblx0XHR0aGlzLmlzV3JpdGluZ0ZDTFN0YXRlID0gdGhpcy5nZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKCk7XG5cdFx0Y29uc3QgZmNsU3RhdGUgPSBhd2FpdCB0aGlzLmlzV3JpdGluZ0ZDTFN0YXRlO1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IHRoaXMuZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dChsYXlvdXQpO1xuXHRcdGlmIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGZjbFN0YXRlLmRlZmF1bHRMYXlvdXRzW25iQ29sdW1uc0Rpc3BsYXllZF0gPSBsYXlvdXQ7XG5cdFx0XHRmY2xTdGF0ZS5jb2x1bW5zRGlzdHJpYnV0aW9uW21lZGlhXVtsYXlvdXRdID0gY29sdW1uc1NpemVzO1xuXHRcdFx0dGhpcy5zZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKGZjbFN0YXRlKTtcblx0XHR9XG5cdFx0dGhpcy5pc1dyaXRpbmdGQ0xTdGF0ZSA9IHVuZGVmaW5lZDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZGlzcGxheWVkIGluIHRoZSBGQ0wgYmFzZWQgb24gdGhlIGxheW91dC5cblx0ICogQHBhcmFtIGxheW91dCAgVGhlIGxheW91dFxuXHQgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgZGlzcGxheWVkXG5cdCAqL1xuXHRwcml2YXRlIGdldE51bWJlck9mQ29sdW1uc0Zyb21MYXlvdXQobGF5b3V0OiBMYXlvdXRUeXBlVHlwZSk6IDEgfCAyIHwgMyB8IG51bGwge1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IC9eKE9uZXxUd298VGhyZWUpQ29sdW1uLy5leGVjKGxheW91dCk/LlsxXSBhcyBcIk9uZVwiIHwgXCJUd29cIiB8IFwiVGhyZWVcIjtcblx0XHRzd2l0Y2ggKG5iQ29sdW1uc0Rpc3BsYXllZCkge1xuXHRcdFx0Y2FzZSBcIk9uZVwiOlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdGNhc2UgXCJUd29cIjpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHRjYXNlIFwiVGhyZWVcIjpcblx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGF5b3V0IHN0b3JlZCBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UgYmFzZWQgb24gdGhlIHByb3Bvc2VkIGxheW91dC5cblx0ICogQHBhcmFtIHByb3Bvc2VkTGF5b3V0XG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgbGF5b3V0IHN0b3JlZCBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0U3RvcmVkTGF5b3V0KHByb3Bvc2VkTGF5b3V0PzogTGF5b3V0VHlwZVR5cGUpOiBQcm9taXNlPExheW91dFR5cGVUeXBlIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbGF5b3V0ID0gcHJvcG9zZWRMYXlvdXQgPz8gKHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpIGFzIExheW91dFR5cGVUeXBlKTtcblx0XHRjb25zdCBuYkNvbHVtbnNEaXNwbGF5ZWQgPSB0aGlzLmdldE51bWJlck9mQ29sdW1uc0Zyb21MYXlvdXQobGF5b3V0KTtcblx0XHRpZiAobmJDb2x1bW5zRGlzcGxheWVkKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0TGF5b3V0cyA9IChhd2FpdCB0aGlzLmdldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEoKSkuZGVmYXVsdExheW91dHM7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExheW91dHM/LltuYkNvbHVtbnNEaXNwbGF5ZWRdID8/IGxheW91dDtcblx0XHR9XG5cdFx0cmV0dXJuIGxheW91dDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBGY2xDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBZ0NBLE1BQU1BLFVBQVUsR0FBR0MsUUFBUSxDQUFDRCxVQUFVO0VBMEJ0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNRSxhQUFhLElBQUFDLElBQUEsR0FEbEJDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBRXpDQyxjQUFjLENBQ2RDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDO0lBQ2xCQyxxQkFBcUIsRUFBRSxTQUFBQSxDQUFBLEVBQVk7TUFDbEMsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUNEQywyQkFBMkIsRUFBRSxTQUFBQSxDQUEyQkMsU0FBMEIsRUFBUTtNQUN4RixJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQW1CQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxVQUFVQyxVQUFnQixFQUFFO1FBQzNHLE1BQU1DLFVBQVUsR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUNILFVBQVUsQ0FBQztRQUM5Q0wsU0FBUyxDQUFDUyxJQUFJLENBQUNILFVBQVUsQ0FBQztNQUMzQixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0RJLGtCQUFrQixFQUFFLFNBQUFBLENBQTJCQyxjQUErQixFQUFRO01BQ3BGLElBQUksQ0FBQ1YsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBbUJDLG1CQUFtQixDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLFVBQVVDLFVBQWdCLEVBQUU7UUFDM0csTUFBTUMsVUFBVSxHQUFHQyxP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
|
|
951
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXlvdXRUeXBlIiwiZkxpYnJhcnkiLCJGY2xDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlZpZXdTdGF0ZSIsIm92ZXJyaWRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0QWxsVmlzaWJsZVZpZXdzIiwiZm9yRWFjaCIsIm9DaGlsZFZpZXciLCJwQ2hpbGRWaWV3IiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwiYWRhcHRTdGF0ZUNvbnRyb2xzIiwiYVN0YXRlQ29udHJvbHMiLCJvblJlc3RvcmUiLCJmY2xDb250cm9sbGVyIiwiYXBwQ29udGVudENvbnRhaW5lciIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJpbnRlcm5hbE1vZGVsIiwiZ2V0TW9kZWwiLCJwYWdlcyIsImdldFByb3BlcnR5IiwiY29tcG9uZW50SWQiLCJzZXRQcm9wZXJ0eSIsIm9uQ29udGFpbmVyUmVhZHkiLCJvblN1c3BlbmQiLCJmY2xDb250cm9sIiwiZ2V0RmNsQ29udHJvbCIsImJlZ2luQ29sdW1uUGFnZXMiLCJnZXRCZWdpbkNvbHVtblBhZ2VzIiwibWlkQ29sdW1uUGFnZXMiLCJnZXRNaWRDb2x1bW5QYWdlcyIsImVuZENvbHVtblBhZ2VzIiwiZ2V0RW5kQ29sdW1uUGFnZXMiLCJjb25jYXQiLCJnZXRWaWV3c0Zyb21QYWdlcyIsInZpZXciLCJjb250cm9sbGVyIiwidmlld1N0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CYXNlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIiwiX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybiIsIm1lc3NhZ2VQYWdlcyIsInVuZGVmaW5lZCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiX2ludGVybmFsSW5pdCIsInNldENvbHVtbkRpc3RyaWJ1dGlvbk1vZGVsIiwibWFuYWdlRGF0YVJlY2VpdmVkIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJwYXRoIiwidGFyZ2V0ZWRWaWV3IiwiZmluZCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UGF0aCIsImlzS2VlcEFsaXZlIiwiX3JvdXRpbmciLCJvbkRhdGFSZWNlaXZlZCIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJhdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQiLCJfdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiIsIm9uQmVmb3JlUm91dGVNYXRjaGVkIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwib25Sb3V0ZU1hdGNoZWQiLCJhdHRhY2hTdGF0ZUNoYW5nZSIsIl9zYXZlTGF5b3V0IiwiX29Sb3V0ZXJQcm94eSIsInNDdXJyZW50Um91dGVOYW1lIiwic0N1cnJlbnRBcmd1bWVudHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib0RhdGFNb2RlbCIsImF0dGFjaEV2ZW50IiwiYmluZCIsImdldFJvdXRlclByb3h5IiwiX29GQ0xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0Iiwicm91dGluZyIsImNvbmZpZyIsImZsZXhpYmxlQ29sdW1uTGF5b3V0Iiwib0ZDTE1hbmlmZXN0Q29uZmlnIiwiZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUiLCJkZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlIiwibGltaXRGQ0xUb1R3b0NvbHVtbnMiLCJjb250cm9sQWdncmVnYXRpb24iLCJkZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uIiwiX2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbiIsIl9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24iLCJvblN0YXRlQ2hhbmdlZCIsImF0dGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUiLCJnZXRGY2xDb25maWciLCJvRXZlbnQiLCJzUHJldmlvdXNMYXlvdXQiLCJnZXRQYXJhbWV0ZXJzIiwibGF5b3V0IiwiYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkIiwicmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCIsImF0dGFjaEV2ZW50T25jZSIsInZpZXdzIiwicmlnaHRNb3N0Vmlld0N1cnJlbnQiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsInZpZXdMZXZlbEJlZm9yZSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwidmlld0xldmVsQWZ0ZXIiLCJvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24iLCJnZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uIiwib25FeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwiZGV0YWNoU3RhdGVDaGFuZ2UiLCJkZXRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlIiwiQmFzZUNvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZXJyb3JNZXNzYWdlIiwicGFyYW1ldGVycyIsImZjbExldmVsIiwicmVqZWN0IiwibGVnYWN5UGFyYW1ldGVycyIsIkZDTExldmVsIiwibWVzc2FnZVBhZ2UiLCJQYWdlIiwic2hvd0hlYWRlciIsImFkZEJlZ2luQ29sdW1uUGFnZSIsImFkZE1pZENvbHVtblBhZ2UiLCJhZGRFbmRDb2x1bW5QYWdlIiwiZnJvbVBhZ2UiLCJoZWFkZXIiLCJGbGV4Qm94IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJCdXR0b24iLCJ0eXBlIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsImhhbmRsZVNoZWxsQmFjayIsInRvIiwiZ2V0SWQiLCJ3aW5kb3ciLCJoaXN0b3J5IiwiYmFjayIsImFkZFN0eWxlQ2xhc3MiLCJpbGx1c3RyYXRlZE1lc3NhZ2UiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiaWxsdXN0cmF0aW9uVHlwZSIsImVycm9yVHlwZSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50IiwiYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSIsImdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UiLCJnZXRDdXJyZW50TWlkQ29sdW1uUGFnZSIsImdldEN1cnJlbnRFbmRDb2x1bW5QYWdlIiwiQ29tbW9uVXRpbHMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJmcm9tVmlldyIsIl9ldmVudCIsImlzQSIsInBhZ2VSZWFkeSIsImZvcmNlUGFnZVJlYWR5IiwiZSIsIkxvZyIsImluZm8iLCJvTWFuaWZlc3QiLCJvVGFyZ2V0cyIsInRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwic1RhcmdldE5hbWUiLCJvVGFyZ2V0IiwiYWdncmVnYXRpb24iLCJwYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJhUm91dGVzIiwicm91dGVzIiwicm91dGUiLCJ0YXJnZXQiLCJnZXRDdXJyZW50QXJndW1lbnQiLCJnZXRDdXJyZW50Um91dGVOYW1lIiwiZ2V0VGFyZ2V0QWdncmVnYXRpb24iLCJzUm91dGVOYW1lIiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiYVZpZXdzIiwib0FkZGl0aW9uYWxWaWV3IiwiaW5jbHVkZXMiLCJpbmRleCIsIm9WaWV3Iiwib1ByZXZpb3VzVmlldyIsImJpbmRpbmdDb250ZXh0IiwicHJldmlvdXNWaWV3Q29udHJvbGxlciIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsImJJc05hdmlnYXRpb25BcnJvdyIsIl9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMiLCJuYXZUbyIsImdldFJpZ2h0bW9zdFZpZXciLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJvRmNsIiwiZ2V0U291cmNlIiwib1BhZ2VzIiwib1BhZ2UiLCJvQnJlYWRDcnVtYnMiLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3Q29sdW1uIiwic0xheW91dCIsImJTaG93U2hhcmVJY29uIiwiX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkiLCJoaWRkZW5EcmFmdCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiYkVkaXRCdXR0b25WaXNpYmxlIiwiX3VwZGF0ZVNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxpdHkiLCJiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGUiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIm9VSVN0YXRlIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJvRmNsQ29sTmFtZSIsImdldExheW91dCIsInNldE1vZGVsIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiYWN0aW9uQnV0dG9uc0luZm8iLCJtaWRDb2x1bW4iLCJlbmRDb2x1bW4iLCJmdWxsU2NyZWVuIiwiZXhpdEZ1bGxTY3JlZW4iLCJjbG9zZUNvbHVtbiIsImJlZ2luQ29sdW1uIiwib0FjdGlvbkJ1dHRvbkluZm9zIiwiYXNzaWduIiwic3dpdGNoVmlzaWJsZSIsInN3aXRjaEljb24iLCJpc0Z1bGxTY3JlZW4iLCJjbG9zZVZpc2libGUiLCJvUXVlcnlQYXJhbXMiLCJvTmV4dFVJU3RhdGUiLCJnZXROZXh0VUlTdGF0ZSIsImFUYXJnZXRzIiwiX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzIiwic2V0TGF5b3V0IiwiaXNXcml0aW5nRkNMU3RhdGUiLCJnZXRTdG9yZWRMYXlvdXQiLCJGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIiwiZ2V0SW5zdGFuY2VGb3IiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic0hhc2giLCJzUHJvcG9zZWRMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIm9Sb3V0ZSIsImdldFJvdXRlQnlIYXNoIiwiZ2V0UGF0dGVybiIsImFsbEFsbG93ZWRMYXlvdXRzIiwiaXNBcnJheSIsImFMYXlvdXRzIiwidG9TdHJpbmciLCJkZWZhdWx0TGF5b3V0IiwiX2dldERlZmF1bHRMYXlvdXQiLCJzVGFyZ2V0QWdncmVnYXRpb24iLCJnZXRSb3V0ZVRhcmdldE5hbWUiLCJPbmVDb2x1bW4iLCJNaWRDb2x1bW5GdWxsU2NyZWVuIiwiRW5kQ29sdW1uRnVsbFNjcmVlbiIsIm51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZSIsImdldEluc3RhbmNlZFZpZXdzIiwiY29tcG9uZW50Q29udGFpbmVycyIsImdldFZpc2libGVWaWV3cyIsImZvckxheW91dCIsInZpc2libGVWaWV3cyIsImFkZFZpZXciLCJwYWdlIiwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQiLCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZCIsIlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkIiwiVHdvQ29sdW1uc01pZEV4cGFuZGVkIiwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW4iLCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuIiwiZXJyb3IiLCJfZ2V0QWxsVmlld3MiLCJhbGxWaWV3cyIsImxheW91dFdoZW5FeGl0RnVsbFNjcmVlbiIsInN0YXJ0c1dpdGgiLCJhUmVzdG9yZVByb21pc2VzIiwicmVkdWNlIiwiYVByb21pc2VzIiwib1RhcmdldFZpZXciLCJLZWVwQWxpdmVIZWxwZXIiLCJyZXN0b3JlVmlldyIsImFsbCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJwb3AiLCJpc0NvbnRleHRVc2VkSW5QYWdlcyIsIm9Db250ZXh0IiwiYUFsbFZpc2libGVWaWV3cyIsIl9zZXRTaGVsbE1lbnVUaXRsZSIsInNUaXRsZSIsInNBcHBUaXRsZSIsImJyb3dlclRpdGxlIiwic2V0VGl0bGUiLCJnZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhIiwic2hlbGxTZXJ2aWNlcyIsImVtcHR5RkNMU3RhdGUiLCJkZWZhdWx0TGF5b3V0cyIsImNvbHVtbnNEaXN0cmlidXRpb24iLCJkZXNrdG9wIiwidGFibGV0IiwiZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwic2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSIsImZjbFN0YXRlIiwic2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwibW9kZWwiLCJvbkNvbHVtbnNEaXN0cmlidXRpb25DaGFuZ2UiLCJtZWRpYSIsImNvbHVtbnNTaXplcyIsIm5iQ29sdW1uc0Rpc3BsYXllZCIsImdldE51bWJlck9mQ29sdW1uc0Zyb21MYXlvdXQiLCJleGVjIiwicHJvcG9zZWRMYXlvdXQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZjbC5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSB7IEZsZXhpYmxlQ29sdW1uTGF5b3V0JEFmdGVyRW5kQ29sdW1uTmF2aWdhdGVFdmVudCwgRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvZi9GbGV4aWJsZUNvbHVtbkxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBDb2x1bW5zTmF2aWdhdGlvbkFjdGlvbnMsIE5hdmlnYXRpb25BY3Rpb25zVGFyZ2V0cyB9IGZyb20gXCJzYXAvZi9GbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyXCI7XG5pbXBvcnQgRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlclwiO1xuaW1wb3J0IGZMaWJyYXJ5IGZyb20gXCJzYXAvZi9saWJyYXJ5XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSb3V0ZVRhcmdldE5hbWUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NYW5pZmVzdEhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgUGFnZSBmcm9tIFwic2FwL20vUGFnZVwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5cbmltcG9ydCB0eXBlIHsgTWFuYWdlZE9iamVjdCRNb2RlbENvbnRleHRDaGFuZ2VFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFJvdXRlIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlciRCZWZvcmVSb3V0ZU1hdGNoZWRFdmVudCwgUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVBZGRpdGlvbmFsSW5mbyB9IGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwiLi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4vUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuXG5jb25zdCBMYXlvdXRUeXBlID0gZkxpYnJhcnkuTGF5b3V0VHlwZTtcbnR5cGUgTGF5b3V0VHlwZVR5cGUgPSBrZXlvZiB0eXBlb2YgTGF5b3V0VHlwZTtcblxudHlwZSBEZWZhdWx0TGF5b3V0cyA9IHtcblx0MT86IExheW91dFR5cGVUeXBlO1xuXHQyPzogTGF5b3V0VHlwZVR5cGU7XG5cdDM/OiBMYXlvdXRUeXBlVHlwZTtcbn07XG5cbnR5cGUgRkNMQ29sdW1uRGlzdHJpYnV0aW9uU3RhdGUgPSB7XG5cdHRhYmxldDogeyBba2V5IGluIExheW91dFR5cGVUeXBlXT86IHN0cmluZyB9O1xuXHRkZXNrdG9wOiB7IFtrZXkgaW4gTGF5b3V0VHlwZVR5cGVdPzogc3RyaW5nIH07XG59O1xuXG50eXBlIEZDTENvbmZpZyA9IHtcblx0bWF4Q29sdW1uc0NvdW50OiBudW1iZXI7XG5cdGRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlPzogTGF5b3V0VHlwZVR5cGU7XG5cdGRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGU/OiBMYXlvdXRUeXBlVHlwZTtcblx0ZGVmYXVsdENvbnRyb2xBZ2dyZWdhdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZDTFN0YXRlID0ge1xuXHRjb2x1bW5zRGlzdHJpYnV0aW9uOiBGQ0xDb2x1bW5EaXN0cmlidXRpb25TdGF0ZTtcblx0ZGVmYXVsdExheW91dHM6IERlZmF1bHRMYXlvdXRzO1xufTtcblxuLyoqXG4gKiBCYXNlIGNvbnRyb2xsZXIgY2xhc3MgZm9yIHlvdXIgb3duIHJvb3QgdmlldyB3aXRoIGFuIHNhcC5mLkZsZXhpYmxlQ29sdW1uTGF5b3V0IGNvbnRyb2wuXG4gKlxuICogQnkgdXNpbmcgb3IgZXh0ZW5kaW5nIHRoaXMgY29udHJvbGxlciwgeW91IGNhbiB1c2UgeW91ciBvd24gcm9vdCB2aWV3IHdpdGggdGhlIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhbmRcbiAqIHlvdSBjYW4gbWFrZSB1c2Ugb2YgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2VzIGFuZCBTQVAgRmlvcmkgZWxlbWVudHMgYnVpbGRpbmcgYmxvY2tzLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuMTEwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIpXG5jbGFzcyBGY2xDb250cm9sbGVyIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0Vmlld1N0YXRlLm92ZXJyaWRlKHtcblx0XHRcdGFwcGx5SW5pdGlhbFN0YXRlT25seTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IFByb21pc2U8Vmlldz5bXSk6IHZvaWQge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLl9nZXRBbGxWaXNpYmxlVmlld3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hpbGRWaWV3OiBWaWV3KSB7XG5cdFx0XHRcdFx0Y29uc3QgcENoaWxkVmlldyA9IFByb21pc2UucmVzb2x2ZShvQ2hpbGRWaWV3KTtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChwQ2hpbGRWaWV3KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0YWRhcHRTdGF0ZUNvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhU3RhdGVDb250cm9sczogUHJvbWlzZTxWaWV3PltdKTogdm9pZCB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcikuX2dldEFsbFZpc2libGVWaWV3cygpLmZvckVhY2goZnVuY3Rpb24gKG9DaGlsZFZpZXc6IFZpZXcpIHtcblx0XHRcdFx0XHRjb25zdCBwQ2hpbGRWaWV3ID0gUHJvbWlzZS5yZXNvbHZlKG9DaGlsZFZpZXcpO1xuXHRcdFx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gocENoaWxkVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdG9uUmVzdG9yZTogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSkge1xuXHRcdFx0XHRjb25zdCBmY2xDb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IGFwcENvbnRlbnRDb250YWluZXIgPSBmY2xDb250cm9sbGVyLmdldEFwcENvbnRlbnRDb250YWluZXIoKTtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGFwcENvbnRlbnRDb250YWluZXIuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdGNvbnN0IHBhZ2VzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdlc1wiKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbXBvbmVudElkIGluIHBhZ2VzKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgL3BhZ2VzLyR7Y29tcG9uZW50SWR9L3Jlc3RvcmVTdGF0dXNgLCBcInBlbmRpbmdcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmNsQ29udHJvbGxlci5vbkNvbnRhaW5lclJlYWR5KCk7XG5cdFx0XHR9LFxuXHRcdFx0b25TdXNwZW5kOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlKSB7XG5cdFx0XHRcdGNvbnN0IGZjbENvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRcdFx0Y29uc3QgZmNsQ29udHJvbCA9IGZjbENvbnRyb2xsZXIuZ2V0RmNsQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBiZWdpbkNvbHVtblBhZ2VzID0gZmNsQ29udHJvbC5nZXRCZWdpbkNvbHVtblBhZ2VzKCk7XG5cdFx0XHRcdGNvbnN0IG1pZENvbHVtblBhZ2VzID0gZmNsQ29udHJvbC5nZXRNaWRDb2x1bW5QYWdlcygpO1xuXHRcdFx0XHRjb25zdCBlbmRDb2x1bW5QYWdlcyA9IGZjbENvbnRyb2wuZ2V0RW5kQ29sdW1uUGFnZXMoKTtcblx0XHRcdFx0Y29uc3QgcGFnZXMgPSAoW10gYXMgQ29udHJvbFtdKS5jb25jYXQoYmVnaW5Db2x1bW5QYWdlcywgbWlkQ29sdW1uUGFnZXMsIGVuZENvbHVtblBhZ2VzKTtcblxuXHRcdFx0XHRmY2xDb250cm9sbGVyLmdldFZpZXdzRnJvbVBhZ2VzKHBhZ2VzKS5mb3JFYWNoKCh2aWV3KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChjb250cm9sbGVyPy52aWV3U3RhdGU/Lm9uU3VzcGVuZCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlci52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRwcm90ZWN0ZWQgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgc0N1cnJlbnRSb3V0ZU5hbWU/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBzQ3VycmVudEFyZ3VtZW50cz86IHsgbm9QcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW47IGJJc1N0aWNreU1vZGU/OiBib29sZWFuOyBbXCI/cXVlcnlcIl0/OiB7IGxheW91dD86IHN0cmluZyB9IH07XG5cblx0cHJpdmF0ZSBzUHJldmlvdXNMYXlvdXQ/OiBrZXlvZiB0eXBlb2YgTGF5b3V0VHlwZTtcblxuXHRwcm90ZWN0ZWQgX29GQ0xDb25maWchOiBGQ0xDb25maWc7XG5cblx0cHJpdmF0ZSBvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24/OiBWaWV3O1xuXG5cdHByaXZhdGUgX29UYXJnZXRzQWdncmVnYXRpb246IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0YWdncmVnYXRpb246IHN0cmluZztcblx0XHRcdHBhdHRlcm4/OiBzdHJpbmcgfCBudWxsO1xuXHRcdH1cblx0PiA9IHt9O1xuXG5cdHByaXZhdGUgX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWQ+ID0ge307XG5cblx0cHJpdmF0ZSBtZXNzYWdlUGFnZXM6IChQYWdlIHwgdW5kZWZpbmVkKVtdID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuXG5cdHByaXZhdGUgaXNXcml0aW5nRkNMU3RhdGU/OiBQcm9taXNlPEZDTFN0YXRlPjtcblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0dGhpcy5faW50ZXJuYWxJbml0KCk7XG5cdFx0dGhpcy5zZXRDb2x1bW5EaXN0cmlidXRpb25Nb2RlbCgpO1xuXHR9XG5cblx0bWFuYWdlRGF0YVJlY2VpdmVkKGV2ZW50OiBFdmVudDx7IGVycm9yOiB7IHN0YXR1czogbnVtYmVyIH07IHBhdGg6IHN0cmluZyB9Pik6IHZvaWQge1xuXHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJlcnJvclwiKSkge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmdldFBhcmFtZXRlcihcInBhdGhcIik7XG5cdFx0XHRjb25zdCB0YXJnZXRlZFZpZXcgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKS5maW5kKCh2aWV3KSA9PiB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gcGF0aCk7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIG1hbmFnZSBlcnJvciB3aGVuIHRoZSByZXF1ZXN0IGlzIHJlbGF0ZWQgdG8gYSBmb3JtICBpbnRvIGFuIE9iamVjdFBhZ2Vcblx0XHRcdGlmIChwYXRoICYmICh0YXJnZXRlZFZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk/LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdFx0KHRhcmdldGVkVmlldyEuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fcm91dGluZy5vbkRhdGFSZWNlaXZlZChldmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVycygpOiB2b2lkIHtcblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl91cGRhdGVWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uLCB0aGlzKTtcblx0XHRzdXBlci5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0dGhpcy5faW50ZXJuYWxJbml0KCk7XG5cblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLm9uQmVmb3JlUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLm9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLl9zYXZlTGF5b3V0LCB0aGlzKTtcblx0fVxuXG5cdF9pbnRlcm5hbEluaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZXJQcm94eSkge1xuXHRcdFx0cmV0dXJuOyAvLyBBbHJlYWR5IGluaXRpYWxpemVkXG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IFwiXCI7XG5cdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50cyA9IHt9O1xuXG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cblx0XHRjb25zdCBvRGF0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdG9EYXRhTW9kZWw/LmF0dGFjaEV2ZW50KFwiZGF0YVJlY2VpdmVkXCIsIHRoaXMubWFuYWdlRGF0YVJlY2VpdmVkLmJpbmQodGhpcykpO1xuXG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXG5cdFx0Ly8gR2V0IEZDTCBjb25maWd1cmF0aW9uIGluIHRoZSBtYW5pZmVzdFxuXHRcdHRoaXMuX29GQ0xDb25maWcgPSB7IG1heENvbHVtbnNDb3VudDogMyB9O1xuXHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpW1wic2FwLnVpNVwiXS5yb3V0aW5nO1xuXG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LmZsZXhpYmxlQ29sdW1uTGF5b3V0KSB7XG5cdFx0XHRjb25zdCBvRkNMTWFuaWZlc3RDb25maWcgPSBvUm91dGluZ0NvbmZpZy5jb25maWcuZmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cblx0XHRcdC8vIERlZmF1bHQgbGF5b3V0IGZvciAyIGNvbHVtbnNcblx0XHRcdGlmIChvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUpIHtcblx0XHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZSA9IG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVmYXVsdCBsYXlvdXQgZm9yIDMgY29sdW1uc1xuXHRcdFx0aWYgKG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlKSB7XG5cdFx0XHRcdHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZSA9IG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMaW1pdCBGQ0wgdG8gMiBjb2x1bW5zID9cblx0XHRcdGlmIChvRkNMTWFuaWZlc3RDb25maWcubGltaXRGQ0xUb1R3b0NvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgPSAyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAob1JvdXRpbmdDb25maWc/LmNvbmZpZz8uY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHR0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRDb250cm9sQWdncmVnYXRpb24gPSBvUm91dGluZ0NvbmZpZy5jb25maWcuY29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdH1cblxuXHRcdHRoaXMuX2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbihvQXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLl9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24ob0FwcENvbXBvbmVudCk7XG5cblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5hdHRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHR9XG5cblx0Z2V0RmNsQ29udHJvbCgpOiBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXBwQ29udGVudENvbnRhaW5lcigpIGFzIEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG5cblx0Z2V0RmNsQ29uZmlnKCk6IEZDTENvbmZpZyB7XG5cdFx0cmV0dXJuIHRoaXMuX29GQ0xDb25maWc7XG5cdH1cblxuXHRfc2F2ZUxheW91dChvRXZlbnQ6IEZsZXhpYmxlQ29sdW1uTGF5b3V0JFN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLnNQcmV2aW91c0xheW91dCA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkubGF5b3V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgYWRkaXRpb25hbCB2aWV3IChvbiB0b3Agb2YgdGhlIHZpc2libGUgdmlld3MpLCB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGhlIGxhdGVzdCB0YWJsZSBuYXZpZ2F0ZWQgcm93cyBvZlxuXHQgKiB0aGUgbW9zdCByaWdodCB2aXNpYmxlIHZpZXcgYWZ0ZXIgYSBuYXYgYmFjayBvciBjb2x1bW4gZnVsbHNjcmVlbi5cblx0ICpcblx0ICovXG5cblx0X3VwZGF0ZVZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKHRoaXMuc1ByZXZpb3VzTGF5b3V0KTtcblx0XHRjb25zdCByaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkID0gYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkLmxlbmd0aFxuXHRcdFx0PyBhbGxWaXNpYmxlVmlld3NCZWZvcmVSb3V0ZU1hdGNoZWRbYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkLmxlbmd0aCAtIDFdXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRoaXMuZ2V0Um91dGVyKCkuYXR0YWNoRXZlbnRPbmNlKFwicm91dGVNYXRjaGVkXCIsIChldmVudDogRXZlbnQ8eyB2aWV3czogQ29udHJvbFtdIH0+KSA9PiB7XG5cdFx0XHRjb25zdCB2aWV3cyA9IGV2ZW50LmdldFBhcmFtZXRlcihcInZpZXdzXCIpO1xuXHRcdFx0Y29uc3QgcmlnaHRNb3N0Vmlld0N1cnJlbnQgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHZpZXdzW3ZpZXdzLmxlbmd0aCAtIDFdKTtcblxuXHRcdFx0aWYgKHJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQgJiYgcmlnaHRNb3N0Vmlld0N1cnJlbnQpIHtcblx0XHRcdFx0Y29uc3Qgdmlld0xldmVsQmVmb3JlID0gKHJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQuZ2V0Vmlld0RhdGEoKSBhcyB7IHZpZXdMZXZlbD86IG51bWJlciB9KT8udmlld0xldmVsO1xuXHRcdFx0XHRjb25zdCB2aWV3TGV2ZWxBZnRlciA9IChyaWdodE1vc3RWaWV3Q3VycmVudC5nZXRWaWV3RGF0YSgpIGFzIHsgdmlld0xldmVsPzogbnVtYmVyIH0pPy52aWV3TGV2ZWw7XG5cblx0XHRcdFx0Ly8gTmF2aWdhdGlvbiBmb3J3YXJkIGZyb20gTDIgdG8gdmlldyBsZXZlbCBMMyAoRnVsbFNjcmVlbkxheW91dCk6XG5cdFx0XHRcdGlmICh2aWV3TGV2ZWxBZnRlciA9PT0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdFx0XHR0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbiA9IHJpZ2h0TW9zdFZpZXdDdXJyZW50O1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE5hdmlnYXRpb25zIGJhY2t3YXJkIGZyb20gTDMgZG93biB0byBMMiwgTDEsIEwwIChUaHJlZUNvbHVtbiBsYXlvdXQpOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dmlld0xldmVsQmVmb3JlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHR2aWV3TGV2ZWxBZnRlciAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0dmlld0xldmVsQmVmb3JlIDwgdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgJiZcblx0XHRcdFx0XHR2aWV3TGV2ZWxCZWZvcmUgPiB2aWV3TGV2ZWxBZnRlciAmJlxuXHRcdFx0XHRcdHJpZ2h0TW9zdFZpZXdDdXJyZW50ICE9PSByaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRoaXMub0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uID0gcmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0Vmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbigpOiBWaWV3IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb247XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5vblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5kZXRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5vbkJlZm9yZVJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuZGV0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblxuXHRcdEJhc2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkV4aXQuYmluZCh0aGlzKSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBGQ0wgY29tcG9uZW50IGlzIGVuYWJsZWQuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBzaW5jZSB3ZSBhcmUgaW4gRkNMIHNjZW5hcmlvXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0aXNGY2xFbmFibGVkKCk6IHRoaXMgaXMgRmNsQ29udHJvbGxlciB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgY3JlYXRlcyBhIG5ldyBQYWdlIHRvIGRpc3BsYXkgdGhlIElsbHVzdHJhdGVkTWVzc2FnZSBjb250YWluaW5nIHRoZSBjdXJyZW50IGVycm9yLlxuXHQgKiBAcGFyYW0gZXJyb3JNZXNzYWdlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBmY2xMZXZlbFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBjcmVhdGVzIGEgUGFnZSB0byBkaXNwbGF5IHRoZSBlcnJvclxuXHQgKi9cblx0YXN5bmMgZGlzcGxheUVycm9yUGFnZShlcnJvck1lc3NhZ2U6IHN0cmluZywgcGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCBmY2xMZXZlbCA9IDApOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZmNsQ29udHJvbCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpO1xuXG5cdFx0XHRcdC8vIE1hbmFnZSB0aGUgb2xkIEFQSSB3aGVyZSB0aGUgRkNMIGxldmVsIHdhcyBwYXNzZWQgaW4gdGhlIHBhcmFtZXRlcnNcblx0XHRcdFx0Y29uc3QgbGVnYWN5UGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgYXMgeyBGQ0xMZXZlbD86IG51bWJlciB9O1xuXHRcdFx0XHRpZiAobGVnYWN5UGFyYW1ldGVycy5GQ0xMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGZjbExldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0ZmNsTGV2ZWwgPSBsZWdhY3lQYXJhbWV0ZXJzLkZDTExldmVsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuX29GQ0xDb25maWcgJiYgZmNsTGV2ZWwgPj0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdFx0XHRmY2xMZXZlbCA9IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IC0gMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZmNsTGV2ZWwgPCAwIHx8IGZjbExldmVsID4gMikge1xuXHRcdFx0XHRcdGZjbExldmVsID0gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBtZXNzYWdlUGFnZSA9IHRoaXMubWVzc2FnZVBhZ2VzW2ZjbExldmVsXTtcblxuXHRcdFx0XHRpZiAoIW1lc3NhZ2VQYWdlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZVBhZ2UgPSBuZXcgUGFnZSh7XG5cdFx0XHRcdFx0XHRzaG93SGVhZGVyOiBmYWxzZVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlUGFnZXNbZmNsTGV2ZWxdID0gbWVzc2FnZVBhZ2U7XG5cblx0XHRcdFx0XHRzd2l0Y2ggKGZjbExldmVsKSB7XG5cdFx0XHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0XHRcdGZjbENvbnRyb2wuYWRkQmVnaW5Db2x1bW5QYWdlKG1lc3NhZ2VQYWdlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRcdFx0ZmNsQ29udHJvbC5hZGRNaWRDb2x1bW5QYWdlKG1lc3NhZ2VQYWdlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGZjbENvbnRyb2wuYWRkRW5kQ29sdW1uUGFnZShtZXNzYWdlUGFnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGZyb21QYWdlOiBDb250cm9sO1xuXHRcdFx0XHRjb25zdCBoZWFkZXIgPSBuZXcgRmxleEJveCh7XG5cdFx0XHRcdFx0YWxpZ25JdGVtczogXCJTdGFydFwiLFxuXHRcdFx0XHRcdGp1c3RpZnlDb250ZW50OiBcIkVuZFwiLFxuXHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJUcmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRpY29uOiBcInNhcC1pY29uOi8vZGVjbGluZVwiLFxuXHRcdFx0XHRcdFx0XHR0b29sdGlwOiBcIntzYXAuZmUuaTE4bj5DX0NPTU1PTl9TQVBGRV9DTE9TRX1cIixcblx0XHRcdFx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVycy5oYW5kbGVTaGVsbEJhY2sgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZjbENvbnRyb2wudG8oZnJvbVBhZ2UuZ2V0SWQoKSwge30sIHt9KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuYWRkU3R5bGVDbGFzcyhcInNhcFVpTGFyZ2VNYXJnaW5FbmRcIilcblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0XHR0aXRsZTogZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uID8/IFwiXCIsXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogcGFyYW1ldGVycy5lcnJvclR5cGUgPyBgc2FwSWxsdXMtJHtwYXJhbWV0ZXJzLmVycm9yVHlwZX1gIDogXCJzYXBJbGx1cy1VbmFibGVUb0xvYWRcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWVzc2FnZVBhZ2UucmVtb3ZlQWxsQ29udGVudCgpO1xuXHRcdFx0XHRtZXNzYWdlUGFnZS5hZGRDb250ZW50KGhlYWRlcik7XG5cdFx0XHRcdG1lc3NhZ2VQYWdlLmFkZENvbnRlbnQoaWxsdXN0cmF0ZWRNZXNzYWdlKTtcblxuXHRcdFx0XHRsZXQgYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRzd2l0Y2ggKGZjbExldmVsKSB7XG5cdFx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdFx0ZnJvbVBhZ2UgPSBmY2xDb250cm9sLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKTtcblx0XHRcdFx0XHRcdGFmdGVyTmF2aWdhdGVFdmVudE5hbWUgPSBcImFmdGVyQmVnaW5Db2x1bW5OYXZpZ2F0ZVwiO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0XHRmcm9tUGFnZSA9IGZjbENvbnRyb2wuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKTtcblx0XHRcdFx0XHRcdGFmdGVyTmF2aWdhdGVFdmVudE5hbWUgPSBcImFmdGVyTWlkQ29sdW1uTmF2aWdhdGVcIjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGZyb21QYWdlID0gZmNsQ29udHJvbC5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpO1xuXHRcdFx0XHRcdFx0YWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSA9IFwiYWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChmcm9tUGFnZSk7XG5cdFx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0ZmNsQ29udHJvbC50byhmcm9tUGFnZS5nZXRJZCgpLCB7fSwge30pO1xuXHRcdFx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZyb21WaWV3ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcihmcm9tUGFnZSk7XG5cdFx0XHRcdGZjbENvbnRyb2wuYXR0YWNoRXZlbnRPbmNlKGFmdGVyTmF2aWdhdGVFdmVudE5hbWUsIChfZXZlbnQ6IEV2ZW50PHsgZnJvbTogQ29udHJvbCB9PikgPT4ge1xuXHRcdFx0XHRcdGlmIChmcm9tVmlldyAmJiBmcm9tVmlldy5pc0E8Vmlldz4oXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdFx0XHRcdFx0KGZyb21WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucGFnZVJlYWR5Py5mb3JjZVBhZ2VSZWFkeSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRmY2xDb250cm9sLnRvKG1lc3NhZ2VQYWdlLmdldElkKCksIHt9LCB7fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChmYWxzZSk7XG5cdFx0XHRcdExvZy5pbmZvKGAke2V9YCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgb2JqZWN0IF9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIHRoYXQgZGVmaW5lcyBmb3IgZWFjaCByb3V0ZSB0aGUgcmVsZXZhbnQgYWdncmVnYXRpb24gYW5kIHBhdHRlcm4uXG5cdCAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFJlZmVyZW5jZSB0byB0aGUgQXBwQ29tcG9uZW50XG5cdCAqL1xuXHRfaW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9NYW5pZmVzdCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKSxcblx0XHRcdG9UYXJnZXRzID0gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nID8gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nLnRhcmdldHMgOiBudWxsO1xuXG5cdFx0dGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbiA9IHt9O1xuXG5cdFx0aWYgKG9UYXJnZXRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyhvVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0ID0gb1RhcmdldHNbc1RhcmdldE5hbWVdO1xuXHRcdFx0XHRpZiAob1RhcmdldC5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uW3NUYXJnZXROYW1lXSA9IHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uOiBvVGFyZ2V0LmNvbnRyb2xBZ2dyZWdhdGlvbixcblx0XHRcdFx0XHRcdHBhdHRlcm46IG9UYXJnZXQuY29udGV4dFBhdHRlcm5cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb25bc1RhcmdldE5hbWVdID0ge1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb246IFwicGFnZVwiLFxuXHRcdFx0XHRcdFx0cGF0dGVybjogbnVsbFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgbWFwcGluZyBiZXR3ZWVuIGEgcm91dGUgKGlkZW50aWZlZCBhcyBpdHMgcGF0dGVybikgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHNcblx0ICogQHBhcmFtIG9BcHBDb21wb25lbnQgcmVmIHRvIHRoZSBBcHBDb21wb25lbnRcblx0ICovXG5cblx0X2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvTWFuaWZlc3QgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCksXG5cdFx0XHRhUm91dGVzID0gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nID8gb01hbmlmZXN0W1wic2FwLnVpNVwiXS5yb3V0aW5nLnJvdXRlcyA6IG51bGw7XG5cblx0XHR0aGlzLl9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm4gPSB7fTtcblxuXHRcdGlmIChhUm91dGVzKSB7XG5cdFx0XHRhUm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyb3V0ZS5wYXR0ZXJuKSB7XG5cdFx0XHRcdFx0dGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuW3JvdXRlLnBhdHRlcm5dID0gcm91dGUudGFyZ2V0IGFzIHN0cmluZ1tdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJyZW50QXJndW1lbnQoKTogdW5rbm93biB7XG5cdFx0cmV0dXJuIHRoaXMuc0N1cnJlbnRBcmd1bWVudHM7XG5cdH1cblxuXHRnZXRDdXJyZW50Um91dGVOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0dGVyIGZvciBvVGFyZ2V0c0FnZ3JlZ2F0aW9uIGFycmF5LlxuXHQgKiBAcmV0dXJucyBUaGUgX29UYXJnZXRzQWdncmVnYXRpb24gYXJyYXlcblx0ICovXG5cdGdldFRhcmdldEFnZ3JlZ2F0aW9uKCk6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0YWdncmVnYXRpb246IHN0cmluZztcblx0XHRcdHBhdHRlcm4/OiBzdHJpbmcgfCBudWxsO1xuXHRcdH1cblx0PiB7XG5cdFx0cmV0dXJuIHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb247XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHRoZSByb3V0ZXIgUm91dGVNYXRjaGVkIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRvblJvdXRlTWF0Y2hlZChvRXZlbnQ6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IHNSb3V0ZU5hbWUgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmFtZVwiKTtcblxuXHRcdC8vIFNhdmUgdGhlIGN1cnJlbnQvcHJldmlvdXMgcm91dGVzIGFuZCBhcmd1bWVudHNcblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gc1JvdXRlTmFtZTtcblx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImFyZ3VtZW50c1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJpbmcgdGhlIHRhYmxlIHNjcm9sbCB0byB0aGUgbmF2aWdhdGVkIHJvdyBhZnRlciBlYWNoIGxheW91dCBjaGFuZ2UuXG5cdCAqXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHRjb25zdCBhVmlld3MgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKTtcblx0XHQvL1RoZSBzY3JvbGxzIGFyZSB0cmlnZ2VyZWQgb25seSBpZiB0aGUgbGF5b3V0IGlzIHdpdGggc2V2ZXJhbCBjb2x1bW5zIG9yIHdoZW4gc3dpdGNoaW5nIHRoZSBtb3N0UmlnaHQgY29sdW1uIGluIGZ1bGwgc2NyZWVuXG5cdFx0aWYgKFxuXHRcdFx0YVZpZXdzLmxlbmd0aCA+IDEgfHxcblx0XHRcdChhVmlld3MubGVuZ3RoICYmIChhVmlld3NbMF0uZ2V0Vmlld0RhdGEoKSBhcyB7IHZpZXdMZXZlbDogbnVtYmVyIH0pLnZpZXdMZXZlbCA8IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb0FkZGl0aW9uYWxWaWV3ID0gdGhpcy5nZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCk7XG5cdFx0XHRpZiAob0FkZGl0aW9uYWxWaWV3ICYmICFhVmlld3MuaW5jbHVkZXMob0FkZGl0aW9uYWxWaWV3KSkge1xuXHRcdFx0XHRhVmlld3MucHVzaChvQWRkaXRpb25hbFZpZXcpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZXQgaW5kZXggPSBhVmlld3MubGVuZ3RoIC0gMTsgaW5kZXggPiAwOyBpbmRleC0tKSB7XG5cdFx0XHRcdGNvbnN0IG9WaWV3ID0gYVZpZXdzW2luZGV4XSxcblx0XHRcdFx0XHRvUHJldmlvdXNWaWV3ID0gYVZpZXdzW2luZGV4IC0gMV07XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNWaWV3Q29udHJvbGxlciA9IG9QcmV2aW91c1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIHsgX3Njcm9sbFRhYmxlc1RvUm93PzogRnVuY3Rpb24gfTtcblx0XHRcdFx0aWYgKGJpbmRpbmdDb250ZXh0ICYmIHByZXZpb3VzVmlld0NvbnRyb2xsZXIuX3Njcm9sbFRhYmxlc1RvUm93KSB7XG5cdFx0XHRcdFx0cHJldmlvdXNWaWV3Q29udHJvbGxlci5fc2Nyb2xsVGFibGVzVG9Sb3coYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIEZDTCBTdGF0ZUNoYW5nZWQgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdG9uU3RhdGVDaGFuZ2VkKG9FdmVudDogRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0JEFmdGVyRW5kQ29sdW1uTmF2aWdhdGVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGJJc05hdmlnYXRpb25BcnJvdyA9IChvRXZlbnQgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwiaXNOYXZpZ2F0aW9uQXJyb3dcIik7XG5cdFx0aWYgKHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLnNDdXJyZW50QXJndW1lbnRzW1wiP3F1ZXJ5XCJdKSB7XG5cdFx0XHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHNbXCI/cXVlcnlcIl0gPSB7fTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHNbXCI/cXVlcnlcIl0ubGF5b3V0ID0gKG9FdmVudCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJsYXlvdXRcIik7XG5cdFx0fVxuXHRcdHRoaXMuX2ZvcmNlTW9kZWxDb250ZXh0Q2hhbmdlT25CcmVhZENydW1icyhvRXZlbnQpO1xuXG5cdFx0Ly8gUmVwbGFjZSB0aGUgVVJMIHdpdGggdGhlIG5ldyBsYXlvdXQgaWYgYSBuYXZpZ2F0aW9uIGFycm93IHdhcyB1c2VkXG5cdFx0aWYgKGJJc05hdmlnYXRpb25BcnJvdyAmJiB0aGlzLnNDdXJyZW50Um91dGVOYW1lKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVyUHJveHkubmF2VG8odGhpcy5zQ3VycmVudFJvdXRlTmFtZSwgdGhpcy5zQ3VycmVudEFyZ3VtZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFJpZ2h0bW9zdFZpZXcoKTtcblx0XHRpZiAob1ZpZXcpIHtcblx0XHRcdHRoaXMuY29tcHV0ZVRpdGxlSGllcmFyY2h5KG9WaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2UgZXZlbnQgb24gYWxsIGJyZWFkY3J1bWJzICggb24gZWFjaCBPYmplY3RQYWdlcykuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMob0V2ZW50OiBFdmVudDxNYW5hZ2VkT2JqZWN0JE1vZGVsQ29udGV4dENoYW5nZUV2ZW50UGFyYW1ldGVycywgRmxleGlibGVDb2x1bW5MYXlvdXQ+KTogdm9pZCB7XG5cdFx0Ly9mb3JjZSBtb2RlbGNvbnRleHRjaGFuZ2Ugb24gT2JqZWN0UGFnZXMgdG8gcmVmcmVzaCB0aGUgYnJlYWRjcnVtYnMgbGluayBocmVmc1xuXHRcdGNvbnN0IG9GY2wgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0bGV0IG9QYWdlczogQ29udHJvbFtdID0gW107XG5cdFx0b1BhZ2VzID0gb1BhZ2VzLmNvbmNhdChvRmNsLmdldEJlZ2luQ29sdW1uUGFnZXMoKSkuY29uY2F0KG9GY2wuZ2V0TWlkQ29sdW1uUGFnZXMoKSkuY29uY2F0KG9GY2wuZ2V0RW5kQ29sdW1uUGFnZXMoKSk7XG5cdFx0b1BhZ2VzLmZvckVhY2goKG9QYWdlKSA9PiB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIob1BhZ2UpO1xuXHRcdFx0Y29uc3Qgb0JyZWFkQ3J1bWJzID0gb1ZpZXc/LmJ5SWQgJiYgb1ZpZXcuYnlJZChcImJyZWFkY3J1bWJzXCIpO1xuXHRcdFx0aWYgKG9CcmVhZENydW1icykge1xuXHRcdFx0XHRvQnJlYWRDcnVtYnMuZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCB0byB1cGRhdGUgdGhlIFNoYXJlIGJ1dHRvbiBWaXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gdmlld0NvbHVtbiBOYW1lIG9mIHRoZSBjdXJyZW50IGNvbHVtbiAoXCJiZWdpbkNvbHVtblwiLCBcIm1pZENvbHVtblwiLCBcImVuZENvbHVtblwiKVxuXHQgKiBAcGFyYW0gc0xheW91dCBUaGUgY3VycmVudCBsYXlvdXQgdXNlZCBieSB0aGUgRkNMXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZSBidXR0b24gdmlzaWJpbGl0eVxuXHQgKi9cblx0X3VwZGF0ZVNoYXJlQnV0dG9uVmlzaWJpbGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGxldCBiU2hvd1NoYXJlSWNvbjtcblx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdGNhc2UgXCJPbmVDb2x1bW5cIjpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSB2aWV3Q29sdW1uID09PSBcImJlZ2luQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdGNhc2UgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiOlxuXHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IHZpZXdDb2x1bW4gPT09IFwibWlkQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gdmlld0NvbHVtbiA9PT0gXCJlbmRDb2x1bW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gYlNob3dTaGFyZUljb247XG5cdH1cblxuXHRfdXBkYXRlRWRpdEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQ7XG5cdFx0bGV0IGJFZGl0QnV0dG9uVmlzaWJsZSA9IHRydWU7XG5cdFx0c3dpdGNoICh2aWV3Q29sdW1uKSB7XG5cdFx0XHRjYXNlIFwibWlkQ29sdW1uXCI6XG5cdFx0XHRcdHN3aXRjaCAoc0xheW91dCkge1xuXHRcdFx0XHRcdGNhc2UgXCJUd29Db2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlblwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0aWYgKCFoaWRkZW5EcmFmdCkge1xuXHRcdFx0XHRcdFx0XHRiRWRpdEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0YkVkaXRCdXR0b25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJlbmRDb2x1bW5cIjpcblx0XHRcdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRpZiAoIWhpZGRlbkRyYWZ0KSB7XG5cdFx0XHRcdFx0XHRcdGJFZGl0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBiRWRpdEJ1dHRvblZpc2libGU7XG5cdH1cblxuXHRfdXBkYXRlU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uOiBzdHJpbmcsIHNMYXlvdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGhpZGRlbkRyYWZ0ID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQ7XG5cdFx0bGV0IGJTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsZSA9IHRydWU7XG5cdFx0c3dpdGNoICh2aWV3Q29sdW1uKSB7XG5cdFx0XHRjYXNlIFwibWlkQ29sdW1uXCI6XG5cdFx0XHRcdHN3aXRjaCAoc0xheW91dCkge1xuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0aWYgKGhpZGRlbkRyYWZ0KSB7XG5cdFx0XHRcdFx0XHRcdGJTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGU7XG5cdH1cblxuXHR1cGRhdGVVSVN0YXRlRm9yVmlldyhvVmlldzogRkVWaWV3LCBGQ0xMZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1VJU3RhdGUgPSB0aGlzLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCksXG5cdFx0XHRvRmNsQ29sTmFtZSA9IFtcImJlZ2luQ29sdW1uXCIsIFwibWlkQ29sdW1uXCIsIFwiZW5kQ29sdW1uXCJdLFxuXHRcdFx0c0xheW91dCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpO1xuXHRcdGxldCB2aWV3Q29sdW1uO1xuXG5cdFx0aWYgKCFvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKSkge1xuXHRcdFx0b1ZpZXcuc2V0TW9kZWwodGhpcy5fY3JlYXRlSGVscGVyTW9kZWwoKSwgXCJmY2xoZWxwZXJcIik7XG5cdFx0fVxuXHRcdGlmICghb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8pIHtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uKSB7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4gPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4pIHtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbiA9IHt9O1xuXHRcdH1cblx0XHRpZiAoRkNMTGV2ZWwgPj0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpIHtcblx0XHRcdC8vIFRoZSB2aWV3IGlzIG9uIGEgbGV2ZWwgPiBtYXggbnVtYmVyIG9mIGNvbHVtbnMuIEl0J3MgYWx3YXlzIGZ1bGxzY3JlZW4gd2l0aG91dCBjbG9zZS9leGl0IGJ1dHRvbnNcblx0XHRcdHZpZXdDb2x1bW4gPSBvRmNsQ29sTmFtZVt0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCAtIDFdO1xuXG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uZnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uZXhpdEZ1bGxTY3JlZW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmNsb3NlQ29sdW1uID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5leGl0RnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uZnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uY2xvc2VDb2x1bW4gPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29sdW1uID0gb0ZjbENvbE5hbWVbRkNMTGV2ZWxdO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdEZDTExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IHx8XG5cdFx0XHRzTGF5b3V0ID09PSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIiB8fFxuXHRcdFx0c0xheW91dCA9PT0gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgfHxcblx0XHRcdHNMYXlvdXQgPT09IFwiT25lQ29sdW1uXCJcblx0XHQpIHtcblx0XHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2JyZWFkQ3J1bWJJc1Zpc2libGVcIiwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2JyZWFkQ3J1bWJJc1Zpc2libGVcIiwgZmFsc2UpO1xuXHRcdH1cblx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgRkNMSGVscGVyIGRvZXNuJ3QgcHJvdmlkZSBhY3Rpb25CdXR0b24gdmFsdWVzIGZvciB0aGUgZmlyc3QgY29sdW1uXG5cdFx0Ly8gc28gd2UgaGF2ZSB0byBhZGQgdGhpcyBpbmZvIG1hbnVhbGx5XG5cdFx0KG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvIGFzIHsgYmVnaW5Db2x1bW4/OiBvYmplY3QgfSkuYmVnaW5Db2x1bW4gPSB7XG5cdFx0XHRmdWxsU2NyZWVuOiBudWxsLFxuXHRcdFx0ZXhpdEZ1bGxTY3JlZW46IG51bGwsXG5cdFx0XHRjbG9zZUNvbHVtbjogbnVsbFxuXHRcdH07XG5cblx0XHRjb25zdCBvQWN0aW9uQnV0dG9uSW5mb3M6IE5hdmlnYXRpb25BY3Rpb25zVGFyZ2V0cyAmIHtcblx0XHRcdHN3aXRjaFZpc2libGU/OiBib29sZWFuO1xuXHRcdFx0c3dpdGNoSWNvbj86IHN0cmluZztcblx0XHRcdGlzRnVsbFNjcmVlbj86IGJvb2xlYW47XG5cdFx0XHRjbG9zZVZpc2libGU/OiBib29sZWFuO1xuXHRcdH0gPSBPYmplY3QuYXNzaWduKHt9LCBvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mb1t2aWV3Q29sdW1uIGFzIGtleW9mIENvbHVtbnNOYXZpZ2F0aW9uQWN0aW9uc10pO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5zd2l0Y2hWaXNpYmxlID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gIT09IG51bGwgfHwgb0FjdGlvbkJ1dHRvbkluZm9zLmV4aXRGdWxsU2NyZWVuICE9PSBudWxsO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5zd2l0Y2hJY29uID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gIT09IG51bGwgPyBcInNhcC1pY29uOi8vZnVsbC1zY3JlZW5cIiA6IFwic2FwLWljb246Ly9leGl0LWZ1bGwtc2NyZWVuXCI7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLmlzRnVsbFNjcmVlbiA9IG9BY3Rpb25CdXR0b25JbmZvcy5mdWxsU2NyZWVuID09PSBudWxsO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5jbG9zZVZpc2libGUgPSBvQWN0aW9uQnV0dG9uSW5mb3MuY2xvc2VDb2x1bW4gIT09IG51bGw7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9hY3Rpb25CdXR0b25zSW5mb1wiLCBvQWN0aW9uQnV0dG9uSW5mb3MpO1xuXG5cdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvc2hvd0VkaXRCdXR0b25cIiwgdGhpcy5fdXBkYXRlRWRpdEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uLCBzTGF5b3V0KSk7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9zaG93U2F2ZUFuZENhbmNlbEJ1dHRvblwiLCB0aGlzLl91cGRhdGVTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL3Nob3dTaGFyZUljb25cIiwgdGhpcy5fdXBkYXRlU2hhcmVCdXR0b25WaXNpYmlsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHJvdXRlciBCZWZvcmVSb3V0ZU1hdGNoZWQgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdGFzeW5jIG9uQmVmb3JlUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGVyJEJlZm9yZVJvdXRlTWF0Y2hlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9FdmVudCkge1xuXHRcdFx0Y29uc3Qgb1F1ZXJ5UGFyYW1zID0gKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkuYXJndW1lbnRzISBhcyBSZWNvcmQ8c3RyaW5nLCB7IGxheW91dDogTGF5b3V0VHlwZVR5cGUgfT4pW1wiP3F1ZXJ5XCJdO1xuXHRcdFx0bGV0IHNMYXlvdXQgPSBvUXVlcnlQYXJhbXMgPyBvUXVlcnlQYXJhbXMubGF5b3V0IDogdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBubyBsYXlvdXQgcGFyYW1ldGVyLCBxdWVyeSBmb3IgdGhlIGRlZmF1bHQgbGV2ZWwgMCBsYXlvdXQgKG5vcm1hbGx5IE9uZUNvbHVtbilcblx0XHRcdGlmICghc0xheW91dCkge1xuXHRcdFx0XHRjb25zdCBvTmV4dFVJU3RhdGUgPSB0aGlzLmdldEhlbHBlcigpLmdldE5leHRVSVN0YXRlKDApO1xuXHRcdFx0XHRzTGF5b3V0ID0gb05leHRVSVN0YXRlLmxheW91dCBhcyBMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxheW91dCBpZiBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlciBvZiB0YXJnZXRzXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgdGhlIGNhc2UgZm9yIG5vcm1hbCBuYXZpZ2F0aW9uLCBqdXN0IG5lZWRlZCBpbiBjYXNlXG5cdFx0XHQvLyB0aGUgVVJMIGhhcyBiZWVuIG1hbnVhbGx5IG1vZGlmaWVkXG5cdFx0XHRjb25zdCBhVGFyZ2V0cyA9IChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZmlnXCIpIGFzIHsgdGFyZ2V0Pzogc3RyaW5nW10gfSk/LnRhcmdldDtcblx0XHRcdHNMYXlvdXQgPSB0aGlzLl9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzTGF5b3V0ISwgYVRhcmdldHMpO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgYSBmaXJzdCB0aW1lIHRoZSBsYXlvdXQgZm9yIHRoZSB1cGRhdGVVSVN0YXRlRm9yVmlldyB0byBiZSBkb25lIHdpdGggdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGNvbHVtbnMgOiBTTk9XIERJTkMwNDQ5Mjc3XG5cdFx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5zZXRMYXlvdXQoc0xheW91dCk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLmlzV3JpdGluZ0ZDTFN0YXRlO1xuXHRcdFx0c0xheW91dCA9IGF3YWl0IHRoaXMuZ2V0U3RvcmVkTGF5b3V0KHNMYXlvdXQpO1xuXG5cdFx0XHQvLyBVcGRhdGUgdGhlIGxheW91dCBvZiB0aGUgRmxleGlibGVDb2x1bW5MYXlvdXQuXG5cdFx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5zZXRMYXlvdXQoc0xheW91dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmb3IgdGhlIEZDTCBDb21wb25lbnQuXG5cdCAqIEByZXR1cm5zIEluc3RhbmNlIG9mIGEgc2VtYW50aWMgaGVscGVyXG5cdCAqL1xuXHRnZXRIZWxwZXIoKTogRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciB7XG5cdFx0cmV0dXJuIEZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXIuZ2V0SW5zdGFuY2VGb3IodGhpcy5nZXRGY2xDb250cm9sKCksIHRoaXMuX29GQ0xDb25maWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIEZDTCBsYXlvdXQgZm9yIGEgZ2l2ZW4gRkNMIGxldmVsIGFuZCBhIHRhcmdldCBoYXNoLlxuXHQgKiBAcGFyYW0gaU5leHRGQ0xMZXZlbCBGQ0wgbGV2ZWwgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHNQcm9wb3NlZExheW91dCBUaGUgcHJvcG9zZWQgbGF5b3V0XG5cdCAqIEBwYXJhbSBrZWVwQ3VycmVudExheW91dCBUcnVlIGlmIHdlIHdhbnQgdG8ga2VlcCB0aGUgY3VycmVudCBsYXlvdXQgaWYgcG9zc2libGVcblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgbGF5b3V0XG5cdCAqL1xuXHRjYWxjdWxhdGVMYXlvdXQoaU5leHRGQ0xMZXZlbDogbnVtYmVyLCBzSGFzaDogc3RyaW5nLCBzUHJvcG9zZWRMYXlvdXQ6IExheW91dFR5cGVUeXBlIHwgdW5kZWZpbmVkLCBrZWVwQ3VycmVudExheW91dCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHQvLyBGaXJzdCwgYXNrIHRoZSBGQ0wgaGVscGVyIHRvIGNhbGN1bGF0ZSB0aGUgbGF5b3V0IGlmIG5vdGhpbmcgaXMgcHJvcG9zZWRcblx0XHRpZiAoIXNQcm9wb3NlZExheW91dCkge1xuXHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gKFxuXHRcdFx0XHRrZWVwQ3VycmVudExheW91dCA/IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpIDogdGhpcy5nZXRIZWxwZXIoKS5nZXROZXh0VUlTdGF0ZShpTmV4dEZDTExldmVsKS5sYXlvdXRcblx0XHRcdCkgYXMgTGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGFuZ2UgdGhpcyB2YWx1ZSBpZiBuZWNlc3NhcnksIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgdGFyZ2V0c1xuXHRcdGNvbnN0IG9Sb3V0ZSA9ICh0aGlzLmdldFJvdXRlcigpIGFzIHsgZ2V0Um91dGVCeUhhc2g/OiAoaGFzaDogc3RyaW5nKSA9PiBSb3V0ZSB9KS5nZXRSb3V0ZUJ5SGFzaD8uKFxuXHRcdFx0YCR7c0hhc2h9P2xheW91dD0ke3NQcm9wb3NlZExheW91dH1gXG5cdFx0KTtcblx0XHRjb25zdCBhVGFyZ2V0cyA9IHRoaXMuX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybltvUm91dGUhLmdldFBhdHRlcm4oKV07XG5cblx0XHRyZXR1cm4gdGhpcy5fY29ycmVjdExheW91dEZvclRhcmdldHMoc1Byb3Bvc2VkTGF5b3V0ISwgYVRhcmdldHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gRkNMIGxheW91dCBpcyBjb21wYXRpYmxlIHdpdGggYW4gYXJyYXkgb2YgdGFyZ2V0cy5cblx0ICogQHBhcmFtIHNQcm9wb3NlZExheW91dCBQcm9wb3NlZCB2YWx1ZSBmb3IgdGhlIEZDTCBsYXlvdXRcblx0ICogQHBhcmFtIGFUYXJnZXRzIEFycmF5IG9mIHRhcmdldCBuYW1lcyB1c2VkIGZvciBjaGVja2luZ1xuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdGVkIGxheW91dFxuXHQgKi9cblx0X2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzKHNQcm9wb3NlZExheW91dDogTGF5b3V0VHlwZVR5cGUsIGFUYXJnZXRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IExheW91dFR5cGVUeXBlIHtcblx0XHRjb25zdCBhbGxBbGxvd2VkTGF5b3V0cyA9IHtcblx0XHRcdFwiMlwiOiBbXCJUd29Db2x1bW5zTWlkRXhwYW5kZWRcIiwgXCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZFwiLCBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIl0sXG5cdFx0XHRcIjNcIjogW1xuXHRcdFx0XHRcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCIsXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIixcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlblwiLFxuXHRcdFx0XHRcIlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW5cIixcblx0XHRcdFx0XCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIsXG5cdFx0XHRcdFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiXG5cdFx0XHRdXG5cdFx0fTtcblxuXHRcdGlmIChhVGFyZ2V0cyAmJiAhQXJyYXkuaXNBcnJheShhVGFyZ2V0cykpIHtcblx0XHRcdC8vIFRvIHN1cHBvcnQgc2luZ2xlIHRhcmdldCBhcyBhIHN0cmluZyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdGFUYXJnZXRzID0gW2FUYXJnZXRzXTtcblx0XHR9XG5cblx0XHRpZiAoIWFUYXJnZXRzKSB7XG5cdFx0XHQvLyBEZWZlbnNpdmUsIGp1c3QgaW4gY2FzZS4uLlxuXHRcdFx0cmV0dXJuIHNQcm9wb3NlZExheW91dDtcblx0XHR9IGVsc2UgaWYgKGFUYXJnZXRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdC8vIE1vcmUgdGhhbiAxIHRhcmdldDoganVzdCBzaW1wbHkgY2hlY2sgZnJvbSB0aGUgYWxsb3dlZCB2YWx1ZXNcblx0XHRcdGNvbnN0IGFMYXlvdXRzID0gYWxsQWxsb3dlZExheW91dHNbYVRhcmdldHMubGVuZ3RoLnRvU3RyaW5nKCkgYXMgXCIyXCIgfCBcIjNcIl0gYXMgTGF5b3V0VHlwZVR5cGVbXTtcblx0XHRcdGlmICghYUxheW91dHMuaW5jbHVkZXMoc1Byb3Bvc2VkTGF5b3V0KSkge1xuXHRcdFx0XHQvLyBUaGUgcHJvcG9zZWQgbGF5b3V0IGlzbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgbnVtYmVyIG9mIGNvbHVtbnNcblx0XHRcdFx0Ly8gLS0+IEFzayB0aGUgaGVscGVyIGZvciB0aGUgZGVmYXVsdCBsYXlvdXQgZm9yIHRoZSBudW1iZXIgb2YgY29sdW1uc1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0TGF5b3V0ID0gdGhpcy5fZ2V0RGVmYXVsdExheW91dChhVGFyZ2V0cy5sZW5ndGgpO1xuXHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBkZWZhdWx0TGF5b3V0ICYmIGFMYXlvdXRzLmluY2x1ZGVzKGRlZmF1bHRMYXlvdXQpID8gZGVmYXVsdExheW91dCA6IGFMYXlvdXRzWzBdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IG9uZSB0YXJnZXRcblx0XHRcdGNvbnN0IHNUYXJnZXRBZ2dyZWdhdGlvbiA9XG5cdFx0XHRcdHRoaXMuZ2V0VGFyZ2V0QWdncmVnYXRpb24oKVtnZXRSb3V0ZVRhcmdldE5hbWUoYVRhcmdldHNbMF0pXS5hZ2dyZWdhdGlvbiB8fCB0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRDb250cm9sQWdncmVnYXRpb247XG5cdFx0XHRzd2l0Y2ggKHNUYXJnZXRBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRjYXNlIFwiYmVnaW5Db2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IExheW91dFR5cGUuT25lQ29sdW1uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBMYXlvdXRUeXBlLk1pZENvbHVtbkZ1bGxTY3JlZW47XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJlbmRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IExheW91dFR5cGUuRW5kQ29sdW1uRnVsbFNjcmVlbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzUHJvcG9zZWRMYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBkZWZhdWx0IExheW91dCBmb3IgbnVtYmVyIG9mIGNvbHVtbnMuXG5cdCAqIEBwYXJhbSBudW1iZXJPZlRhcmdldHNGcm9tUm91dGVcblx0ICogQHJldHVybnMgQW4gRkNMIExheW91dCBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBpZiBpdCBpcyBkZWZpbmVkLlxuXHQgKi9cblx0X2dldERlZmF1bHRMYXlvdXQobnVtYmVyT2ZUYXJnZXRzRnJvbVJvdXRlOiBudW1iZXIpOiBMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0c3dpdGNoIChudW1iZXJPZlRhcmdldHNGcm9tUm91dGUpIHtcblx0XHRcdGNhc2UgMzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGU7XG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5zdGFuY2VkIHZpZXdzIGluIHRoZSBGQ0wgY29tcG9uZW50LlxuXHQgKiBAcmV0dXJucyBSZXR1cm4gdGhlIGluc3RhbmNlZCB2aWV3cy5cblx0ICovXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0Y29uc3QgZmNsQ29udHJvbCA9IHRoaXMuZ2V0RmNsQ29udHJvbCgpO1xuXHRcdGNvbnN0IGNvbXBvbmVudENvbnRhaW5lcnM6IENvbnRyb2xbXSA9IFtcblx0XHRcdC4uLmZjbENvbnRyb2wuZ2V0QmVnaW5Db2x1bW5QYWdlcygpLFxuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRNaWRDb2x1bW5QYWdlcygpLFxuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRFbmRDb2x1bW5QYWdlcygpXG5cdFx0XTtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3c0Zyb21QYWdlcyhjb21wb25lbnRDb250YWluZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjdXJyZW50IHZpc2libGUgcGFnZXMuXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgdmlzaWJsZSB2aWV3cy5cblx0ICovXG5cdGdldFZpc2libGVWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHZpc2libGUgdmlld3MgaW4gdGhlIEZDTCBjb21wb25lbnQuXG5cdCAqIEBwYXJhbSBmb3JMYXlvdXQgIE9wdGlvbmFsIHBhcmFtZXRlciBpcyB2ZXJ5IHNwZWNpZmljIGFzIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBsYXRlc3QgbmF2aWdhdGVkIHJvd1xuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBhbGwgdmlzaWJsZSB2aWV3c1xuXHQgKi9cblx0X2dldEFsbFZpc2libGVWaWV3cyhmb3JMYXlvdXQ/OiBzdHJpbmcpOiBWaWV3W10ge1xuXHRcdGNvbnN0IHZpc2libGVWaWV3czogVmlld1tdID0gW107XG5cdFx0Y29uc3QgbGF5b3V0ID0gZm9yTGF5b3V0ID8gZm9yTGF5b3V0IDogdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCk7XG5cdFx0Y29uc3QgYWRkVmlldyA9IChwYWdlOiBDb250cm9sIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAocGFnZSkge1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcihwYWdlKTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHR2aXNpYmxlVmlld3MucHVzaCh2aWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKGxheW91dCkge1xuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLkVuZENvbHVtbkZ1bGxTY3JlZW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNFbmRFeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZDpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlR3b0NvbHVtbnNNaWRFeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cuZXJyb3IoYFVuaGFuZGxlZCBzd2l0Y2ggY2FzZSBmb3IgJHt0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKX1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlzaWJsZVZpZXdzO1xuXHR9XG5cblx0X2dldEFsbFZpZXdzKGZvckxheW91dD86IHN0cmluZyk6IFZpZXdbXSB7XG5cdFx0Y29uc3QgYWxsVmlld3M6IFZpZXdbXSA9IFtdO1xuXHRcdGNvbnN0IGxheW91dCA9IGZvckxheW91dCA/IGZvckxheW91dCA6IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpO1xuXG5cdFx0Y29uc3QgYWRkVmlldyA9IChwYWdlOiBDb250cm9sIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAocGFnZSkge1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcihwYWdlKTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRhbGxWaWV3cy5wdXNoKHZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHN3aXRjaCAobGF5b3V0KSB7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuT25lQ29sdW1uOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRjYXNlIExheW91dFR5cGUuRW5kQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlR3b0NvbHVtbnNNaWRFeHBhbmRlZDpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLk1pZENvbHVtbkZ1bGxTY3JlZW46XG5cdFx0XHRcdC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIG1pZCBjb2x1bW4gZnVsbHNjcmVlbiBjb21lcyBmcm9tIGEgMiBvciBhIDMgY29sdW1uIGxheW91dFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgbGF5b3V0V2hlbkV4aXRGdWxsU2NyZWVuID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5hY3Rpb25CdXR0b25zSW5mbz8ubWlkQ29sdW1uPy5leGl0RnVsbFNjcmVlbiA/PyBcIlwiO1xuXHRcdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRcdGlmIChsYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4uc3RhcnRzV2l0aChcIlRocmVlQ29sdW1uXCIpKSB7XG5cdFx0XHRcdFx0XHQvLyBXZSBjb21lIGZyb20gYSAzIGNvbHVtbiBsYXlvdXRcblx0XHRcdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cuZXJyb3IoYFVuaGFuZGxlZCBzd2l0Y2ggY2FzZSBmb3IgJHt0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFsbFZpZXdzO1xuXHR9XG5cblx0YXN5bmMgb25Db250YWluZXJSZWFkeSgpOiBQcm9taXNlPHZvaWRbXT4ge1xuXHRcdC8vIFJlc3RvcmUgdmlld3MgaWYgbmVjY2Vzc2FyeS5cblx0XHRjb25zdCBhVmlld3MgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3MoKTtcblx0XHRjb25zdCBhUmVzdG9yZVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBhVmlld3MucmVkdWNlKGZ1bmN0aW9uIChhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSwgb1RhcmdldFZpZXc6IFZpZXcpIHtcblx0XHRcdGlmIChvVGFyZ2V0Vmlldy5pc0EgJiYgb1RhcmdldFZpZXcuaXNBKFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRcdFx0YVByb21pc2VzLnB1c2goS2VlcEFsaXZlSGVscGVyLnJlc3RvcmVWaWV3KG9UYXJnZXRWaWV3IGFzIEZFVmlldykpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYVByb21pc2VzO1xuXHRcdH0sIFtdKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlc3RvcmVQcm9taXNlcyk7XG5cdH1cblxuXHRnZXRSaWdodG1vc3RDb250ZXh0KCk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmdldFJpZ2h0bW9zdFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKSA/PyB1bmRlZmluZWQ7XG5cdH1cblxuXHRnZXRSaWdodG1vc3RWaWV3KCk6IEZFVmlldyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFZpZXdzKCkucG9wKCkgYXMgRkVWaWV3O1xuXHR9XG5cblx0aXNDb250ZXh0VXNlZEluUGFnZXMob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMuZ2V0RmNsQ29udHJvbCgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IGFBbGxWaXNpYmxlVmlld3MgPSB0aGlzLl9nZXRBbGxWaWV3cygpO1xuXHRcdGZvciAoY29uc3QgdmlldyBvZiBhQWxsVmlzaWJsZVZpZXdzKSB7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRpZiAodmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSBvQ29udGV4dCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBBIHZpZXcgaGFzIGJlZW4gZGVzdHJveWVkIC0tPiBhcHAgaXMgY3VycmVudGx5IGJlaW5nIGRlc3Ryb3llZFxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGFzeW5jIF9zZXRTaGVsbE1lbnVUaXRsZShcblx0XHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0c1RpdGxlOiBzdHJpbmcsXG5cdFx0c0FwcFRpdGxlOiBzdHJpbmcsXG5cdFx0YnJvd2VyVGl0bGU/OiBUaXRsZUFkZGl0aW9uYWxJbmZvXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuICE9PSB0cnVlKSB7XG5cdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRUaXRsZShzQXBwVGl0bGUsIGJyb3dlclRpdGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc1RpdGxlLCBicm93ZXJUaXRsZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZXRpZXZlIHRoZSBGQ0wgc3RhdGUgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgc3RhdGVcblx0ICovXG5cdGFzeW5jIGdldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEoKTogUHJvbWlzZTxGQ0xTdGF0ZT4ge1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3QgZW1wdHlGQ0xTdGF0ZSA9IHtcblx0XHRcdGRlZmF1bHRMYXlvdXRzOiB7fSxcblx0XHRcdGNvbHVtbnNEaXN0cmlidXRpb246IHtcblx0XHRcdFx0ZGVza3RvcDoge30sXG5cdFx0XHRcdHRhYmxldDoge31cblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiAoKGF3YWl0IHNoZWxsU2VydmljZXMuZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKFwiRkNMLVBlcnNvbmFsaXphdGlvblwiKSkgPz8gZW1wdHlGQ0xTdGF0ZSkgYXMgRkNMU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHNldCB0aGUgRkNMIHN0YXRlIGluIHRoZSBwZXJzb25hbGl6YXRpb24gc2VydmljZS5cblx0ICogQHBhcmFtIGZjbFN0YXRlIFRoZSBGQ0wgc3RhdGVcblx0ICovXG5cdHNldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEoZmNsU3RhdGU6IEZDTFN0YXRlKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRzaGVsbFNlcnZpY2VzLnNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShcIkZDTC1QZXJzb25hbGl6YXRpb25cIiwgZmNsU3RhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJlcXVlc3RzIHRoZSBGQ0wgc3RhdGUgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UgYW5kIHNldHMgdGhlIG1vZGVsIGFjY29yZGluZ2x5LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBzZXRDb2x1bW5EaXN0cmlidXRpb25Nb2RlbCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb2x1bW5zRGlzdHJpYnV0aW9uID0gKGF3YWl0IHRoaXMuZ2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSgpKS5jb2x1bW5zRGlzdHJpYnV0aW9uO1xuXHRcdGlmIChjb2x1bW5zRGlzdHJpYnV0aW9uKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShcIi9GQ0xDb2x1bW5zRGlzdHJpYnV0aW9uXCIsIGNvbHVtbnNEaXN0cmlidXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjb2x1bW5zIGRpc3RyaWJ1dGlvbiBpbiB0aGUgRkNMIHNldHRpbmdzIGRpYWxvZy5cblx0ICogSXQgdXBkYXRlcyB0aGUgRkNMIHN0YXRlIGluIHRoZSBwZXJzb25hbGl6YXRpb24gc2VydmljZS5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQ29sdW1uc0Rpc3RyaWJ1dGlvbkNoYW5nZShcblx0XHRldmVudDogRXZlbnQ8eyBtZWRpYTogXCJ0YWJsZXRcIiB8IFwiZGVza3RvcFwiOyBsYXlvdXQ6IExheW91dFR5cGVUeXBlOyBjb2x1bW5zU2l6ZXM6IHN0cmluZyB9PlxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB7IG1lZGlhLCBsYXlvdXQsIGNvbHVtbnNTaXplcyB9ID0gZXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRtb2RlbC5zZXRQcm9wZXJ0eShgL0ZDTENvbHVtbnNEaXN0cmlidXRpb24vJHttZWRpYX0vJHtsYXlvdXR9YCwgY29sdW1uc1NpemVzKTtcblx0XHR0aGlzLmlzV3JpdGluZ0ZDTFN0YXRlID0gdGhpcy5nZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKCk7XG5cdFx0Y29uc3QgZmNsU3RhdGUgPSBhd2FpdCB0aGlzLmlzV3JpdGluZ0ZDTFN0YXRlO1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IHRoaXMuZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dChsYXlvdXQpO1xuXHRcdGlmIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGZjbFN0YXRlLmRlZmF1bHRMYXlvdXRzW25iQ29sdW1uc0Rpc3BsYXllZF0gPSBsYXlvdXQ7XG5cdFx0XHRmY2xTdGF0ZS5jb2x1bW5zRGlzdHJpYnV0aW9uW21lZGlhXVtsYXlvdXRdID0gY29sdW1uc1NpemVzO1xuXHRcdFx0dGhpcy5zZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKGZjbFN0YXRlKTtcblx0XHR9XG5cdFx0dGhpcy5pc1dyaXRpbmdGQ0xTdGF0ZSA9IHVuZGVmaW5lZDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZGlzcGxheWVkIGluIHRoZSBGQ0wgYmFzZWQgb24gdGhlIGxheW91dC5cblx0ICogQHBhcmFtIGxheW91dCAgVGhlIGxheW91dFxuXHQgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgZGlzcGxheWVkXG5cdCAqL1xuXHRwcml2YXRlIGdldE51bWJlck9mQ29sdW1uc0Zyb21MYXlvdXQobGF5b3V0OiBMYXlvdXRUeXBlVHlwZSk6IDEgfCAyIHwgMyB8IG51bGwge1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IC9eKE9uZXxUd298VGhyZWUpQ29sdW1uLy5leGVjKGxheW91dCk/LlsxXSBhcyBcIk9uZVwiIHwgXCJUd29cIiB8IFwiVGhyZWVcIjtcblx0XHRzd2l0Y2ggKG5iQ29sdW1uc0Rpc3BsYXllZCkge1xuXHRcdFx0Y2FzZSBcIk9uZVwiOlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdGNhc2UgXCJUd29cIjpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHRjYXNlIFwiVGhyZWVcIjpcblx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGF5b3V0IHN0b3JlZCBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UgYmFzZWQgb24gdGhlIHByb3Bvc2VkIGxheW91dC5cblx0ICogQHBhcmFtIHByb3Bvc2VkTGF5b3V0XG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgbGF5b3V0IHN0b3JlZCBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2Vcblx0ICovXG5cdGFzeW5jIGdldFN0b3JlZExheW91dChwcm9wb3NlZExheW91dD86IExheW91dFR5cGVUeXBlKTogUHJvbWlzZTxMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGxheW91dCA9IHByb3Bvc2VkTGF5b3V0ID8/ICh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKSBhcyBMYXlvdXRUeXBlVHlwZSk7XG5cdFx0Y29uc3QgbmJDb2x1bW5zRGlzcGxheWVkID0gdGhpcy5nZXROdW1iZXJPZkNvbHVtbnNGcm9tTGF5b3V0KGxheW91dCk7XG5cdFx0aWYgKG5iQ29sdW1uc0Rpc3BsYXllZCkge1xuXHRcdFx0Y29uc3QgZGVmYXVsdExheW91dHMgPSAoYXdhaXQgdGhpcy5nZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKCkpLmRlZmF1bHRMYXlvdXRzO1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMYXlvdXRzPy5bbmJDb2x1bW5zRGlzcGxheWVkXSA/PyBsYXlvdXQ7XG5cdFx0fVxuXHRcdHJldHVybiBsYXlvdXQ7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmNsQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztFQWlDQSxNQUFNQSxVQUFVLEdBQUdDLFFBQVEsQ0FBQ0QsVUFBVTtFQTBCdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUkEsSUFVTUUsYUFBYSxJQUFBQyxJQUFBLEdBRGxCQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsRUFBQUMsS0FBQSxHQUV6Q0MsY0FBYyxDQUNkQyxTQUFTLENBQUNDLFFBQVEsQ0FBQztJQUNsQkMscUJBQXFCLEVBQUUsU0FBQUEsQ0FBQSxFQUFZO01BQ2xDLE9BQU8sS0FBSztJQUNiLENBQUM7SUFDREMsMkJBQTJCLEVBQUUsU0FBQUEsQ0FBMkJDLFNBQTBCLEVBQVE7TUFDeEYsSUFBSSxD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
|